[jboss-cvs] jboss-seam/ui/src/main/java/org/jboss/seam/ui/converter/entityConverter ...

Peter Muir peter at bleepbleep.org.uk
Tue Nov 6 07:00:01 EST 2007


  User: pmuir   
  Date: 07/11/06 07:00:01

  Added:       ui/src/main/java/org/jboss/seam/ui/converter/entityConverter    
                        EntityLoader.java AbstractEntityLoader.java
                        EntityIdentifierStore.java
                        HibernateEntityLoader.java
  Log:
  JBSEAM-1242
  
  Revision  Changes    Path
  1.1      date: 2007/11/06 12:00:01;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/converter/entityConverter/EntityLoader.java
  
  Index: EntityLoader.java
  ===================================================================
  package org.jboss.seam.ui.converter.entityConverter;
  
  import static org.jboss.seam.ScopeType.STATELESS;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import javax.persistence.EntityManager;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.framework.EntityIdentifier;
  import org.jboss.seam.framework.Identifier;
  
  /**
   * Stores entity identifiers under a key, which can be used on a page
   *
   * @author Pete Muir
   */
  
  @Name("org.jboss.seam.ui.entityLoader")
  @Install(precedence=BUILT_IN)
  @Scope(STATELESS)
  public class EntityLoader extends AbstractEntityLoader<EntityManager>
  {
       
     @Override
     public EntityManager getPersistenceContext()
     {
        if (!super.getPersistenceContext().isOpen())
        {
           super.setPersistenceContext(null);
        }
        return super.getPersistenceContext();
     }
  
     @Override
     protected Identifier createIdentifier(Object entity)
     {
        return new EntityIdentifier(entity, getPersistenceContext());
     }
  
     @Override
     protected String getPersistenceContextName()
     {
        return "entityManager";
     }
     
     public static EntityLoader instance()
     {
        return (EntityLoader) Component.getInstance(EntityLoader.class, STATELESS);
     }
  }
  
  
  
  1.1      date: 2007/11/06 12:00:01;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/converter/entityConverter/AbstractEntityLoader.java
  
  Index: AbstractEntityLoader.java
  ===================================================================
  package org.jboss.seam.ui.converter.entityConverter;
  
  import org.jboss.seam.annotations.Transactional;
  import org.jboss.seam.framework.Identifier;
  import org.jboss.seam.framework.PersistenceController;
  
  /**
   * Helper class to load entities for the entity converter
   * @author Pete Muir
   *
   */
  public abstract class AbstractEntityLoader<T> extends PersistenceController<T>
  {
     
     /**
      * Load and return the entity stored
      * @param key
      * @return The entity or null if no entity is available at that key
      */
     @Transactional
     public Object get(Integer key)
     {
        Identifier identifier = EntityIdentifierStore.instance().get(key);
        if (identifier != null)
        {
           return identifier.find(getPersistenceContext());
        }
        else
        {
           return null;
        }
     }
  
     /**
      * Store an entity id/clazz
      * @param entity The entity to store
      * @return The key under which the clazz/id are stored
      */
     @Transactional
     public Integer put(Object entity)
     {      
        return EntityIdentifierStore.instance().put(createIdentifier(entity));
     }
     
     protected abstract Identifier createIdentifier(Object entity);
  
  }
  
  
  1.1      date: 2007/11/06 12:00:01;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/converter/entityConverter/EntityIdentifierStore.java
  
  Index: EntityIdentifierStore.java
  ===================================================================
  package org.jboss.seam.ui.converter.entityConverter;
  
  import static org.jboss.seam.ScopeType.PAGE;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.jboss.seam.Component;
  import org.jboss.seam.annotations.Create;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Contexts;
  import org.jboss.seam.core.AbstractMutable;
  import org.jboss.seam.framework.Identifier;
  
  /**
   * Page scoped store for entity identifiers used by the EntityConverter.
   * 
   * By default a list is used and the key returned is the list index. The key
   * used can be customised by overriding this component and implementing the
   * get and put methods
   * 
   * @author Pete Muir
   *
   */
  @Name("org.jboss.seam.ui.entityIdentifierStore")
  @Install(precedence=BUILT_IN)
  @Scope(PAGE)
  public class EntityIdentifierStore extends AbstractMutable
  {
     
     private List<Identifier> store;
     
     @Create
     public void create()
     {
        store = new ArrayList<Identifier>();
     }
     
     public Identifier get(Integer key)
     {
        try
        {
           return store.get(key);
        }
        catch (IndexOutOfBoundsException e)
        {
           return null;
        }   
     }
     
     public Integer put(Identifier identifier)
     {      
        if (!store.contains(identifier))
        {
           store.add(identifier);
           setDirty();
        }
        return store.indexOf(identifier);
     }
  
     public static EntityIdentifierStore instance()
     {
        if (!Contexts.isPageContextActive())
        {
           throw new IllegalArgumentException("Page scope not active");
        }
        return (EntityIdentifierStore) Component.getInstance(EntityIdentifierStore.class, PAGE);
     }
  }
  
  
  
  1.1      date: 2007/11/06 12:00:01;  author: pmuir;  state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/converter/entityConverter/HibernateEntityLoader.java
  
  Index: HibernateEntityLoader.java
  ===================================================================
  package org.jboss.seam.ui.converter.entityConverter;
  
  import static org.jboss.seam.ScopeType.STATELESS;
  import static org.jboss.seam.annotations.Install.BUILT_IN;
  
  import org.hibernate.Session;
  import org.jboss.seam.Component;
  import org.jboss.seam.annotations.Install;
  import org.jboss.seam.annotations.Name;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.framework.HibernateEntityIdentifier;
  import org.jboss.seam.framework.Identifier;
  
  /**
   * Stores entity identifiers under a key, which can be used on a page
   *
   * @author Pete Muir
   */
  
  @Name("org.jboss.seam.ui.hibernateEntityLoader")
  @Install(precedence=BUILT_IN)
  @Scope(STATELESS)
  public class HibernateEntityLoader extends AbstractEntityLoader<Session>
  {
       
     @Override
     public Session getPersistenceContext()
     {
        if (!super.getPersistenceContext().isOpen())
        {
           super.setPersistenceContext(null);
        }
        return super.getPersistenceContext();
     }
  
     @Override
     protected Identifier createIdentifier(Object entity)
     {
        return new HibernateEntityIdentifier(entity, getPersistenceContext());
     }
  
     @Override
     protected String getPersistenceContextName()
     {
        return "session";
     }
     
     public static HibernateEntityLoader instance()
     {
        return (HibernateEntityLoader) Component.getInstance(HibernateEntityLoader.class, STATELESS);
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list