[jboss-cvs] jboss-seam/src/main/org/jboss/seam/contexts ...

Gavin King gavin.king at jboss.com
Thu Jun 21 17:45:30 EDT 2007


  User: gavin   
  Date: 07/06/21 17:45:30

  Modified:    src/main/org/jboss/seam/contexts        EntityBean.java
                        EntityBeanList.java EntityBeanMap.java
                        EntityBeanSet.java PassivatedEntity.java
                        Wrapper.java
  Added:       src/main/org/jboss/seam/contexts       
                        AbstractEntityBeanCollection.java
  Log:
  better design
  
  Revision  Changes    Path
  1.12      +12 -6     jboss-seam/src/main/org/jboss/seam/contexts/EntityBean.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: EntityBean.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBean.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- EntityBean.java	21 Jun 2007 20:32:00 -0000	1.11
  +++ EntityBean.java	21 Jun 2007 21:45:30 -0000	1.12
  @@ -26,13 +26,18 @@
      //TODO: use @Unwrap
      public Object getInstance()
      {
  +      if ( passivatedEntity!=null && !passivatedEntity.isVersioned() ) 
  +      {
  +         //non-versioned entities can be lazily unpassivated 
  +         instance = passivatedEntity.toEntityReference(true);
  +      }
         return instance;
      }
      
      public boolean passivate()
      {
  -      /*if (passivatedEntityKey==null) (ie. its new) or the version number changed!
  -      {*/
  +      if ( passivatedEntity==null || passivatedEntity.isVersioned() ) //and the version number changed!
  +      {
            if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
            {
               passivatedEntity = null;
  @@ -43,17 +48,18 @@
               if (passivatedEntity!=null) instance = null;
            }
            return true;
  -      /*}
  +      }
         else
         {
            return false;
  -      }*/
  +      }
      }
      
      public void activate()
      {
  -      //TODO: if not versioned, we can do this lazily!
  -      if (passivatedEntity!=null)
  +      //versioned entities must be unpassivated at the beginning 
  +      //of the request 
  +      if ( passivatedEntity!=null && passivatedEntity.isVersioned() )
         {
            instance = passivatedEntity.toEntityReference(true);
         }
  
  
  
  1.5       +51 -42    jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanList.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: EntityBeanList.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanList.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- EntityBeanList.java	21 Jun 2007 20:32:00 -0000	1.4
  +++ EntityBeanList.java	21 Jun 2007 21:45:30 -0000	1.5
  @@ -12,71 +12,80 @@
    * @author Gavin King
    *
    */
  -class EntityBeanList implements Wrapper
  +class EntityBeanList extends AbstractEntityBeanCollection
   {
      private static final long serialVersionUID = -2884601453783925804L;
      
  -   private List instance;
  +   private List list;
      private List<PassivatedEntity> passivatedEntityList;
      
      public EntityBeanList(List instance)
      {
  -      this.instance = instance;
  +      this.list = instance;
      }
      
  -   public void activate()
  +   @Override
  +   protected Iterable<PassivatedEntity> getPassivatedEntities() 
      {
  -      if (passivatedEntityList!=null)
  -      {
  -         for (int i=0; i<passivatedEntityList.size(); i++)
  -         {
  -            PassivatedEntity passivatedEntity = passivatedEntityList.get(i);
  -            if (passivatedEntity!=null)
  -            {
  -               instance.set( i, passivatedEntity.toEntityReference(true) );
  +      return passivatedEntityList;
               }
  +   
  +   @Override
  +   protected Object getEntityCollection()
  +   {
  +      return list;
            }
  +   
  +   @Override
  +   protected void clearPassivatedEntities()
  +   {
            passivatedEntityList = null;
         }
  -   }
      
  -   public Object getInstance()
  +   @Override
  +   protected boolean isPassivatedEntitiesInitialized()
         {
  -      return instance;
  +      return passivatedEntityList!=null;
      }
      
  -   public boolean passivate()
  +   @Override
  +   protected void activateAll()
      {
  -      if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
  +      for (int i=0; i<passivatedEntityList.size(); i++)
         {
  -         passivatedEntityList = null;
  +         PassivatedEntity passivatedEntity = passivatedEntityList.get(i);
  +         if (passivatedEntity!=null)
  +         {
  +            list.set( i, passivatedEntity.toEntityReference(true) );
  +         }
  +      }
         }
  -      else
  +
  +   @Override
  +   protected void passivateAll()
         {
  -         passivatedEntityList = new ArrayList<PassivatedEntity>( instance.size() );
  +      passivatedEntityList = new ArrayList<PassivatedEntity>( list.size() );
            boolean found = false;
  -         for (int i=0; i<instance.size(); i++ )
  +      for (int i=0; i<list.size(); i++ )
            {
  -            Object value = instance.get(i);
  +         Object value = list.get(i);
               PassivatedEntity passivatedEntity = null;
               if (value!=null)
               {
                  passivatedEntity = PassivatedEntity.passivateEntity(value);
                  if (passivatedEntity!=null)
                  {
  -                  if (!found) instance = new ArrayList(instance);
  +               if (!found) list = new ArrayList(list);
                     found=true;
                     //this would be dangerous, except that we 
                     //are doing it to a copy of the original 
                     //list:
  -                  instance.set(i, null); 
  +               list.set(i, null); 
                  }
               }
               passivatedEntityList.add(passivatedEntity);
            }
            if (!found) passivatedEntityList=null;
         }
  -      return true;
  -   }
      
   }
  
  
  
  1.5       +48 -35    jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanMap.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: EntityBeanMap.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanMap.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- EntityBeanMap.java	21 Jun 2007 20:32:00 -0000	1.4
  +++ EntityBeanMap.java	21 Jun 2007 21:45:30 -0000	1.5
  @@ -13,43 +13,58 @@
    * @author Gavin King
    *
    */
  -class EntityBeanMap implements Wrapper
  +class EntityBeanMap extends AbstractEntityBeanCollection
   {
      private static final long serialVersionUID = -2884601453783925804L;
      
  -   private Map instance;
  +   private Map map;
      private Map<Object, PassivatedEntity> passivatedEntityMap;
      
      public EntityBeanMap(Map instance)
      {
  -      this.instance = instance;
  +      this.map = instance;
      }
      
  -   public void activate()
  +   @Override
  +   protected Iterable<PassivatedEntity> getPassivatedEntities() 
      {
  -      if (passivatedEntityMap!=null)
  -      {
  -         for ( Map.Entry<Object, PassivatedEntity> me: passivatedEntityMap.entrySet() )
  +      return passivatedEntityMap.values();
  +   }
  +   
  +   @Override
  +   protected Object getEntityCollection()
            {
  -            instance.put( me.getKey(), me.getValue().toEntityReference(true) );
  +      return map;
            }
  +   
  +   @Override
  +   protected void clearPassivatedEntities()
  +   {
            passivatedEntityMap = null;
         }
  -   }
      
  -   //TODO: use @Unwrap
  -   public Object getInstance()
  +   @Override
  +   protected boolean isPassivatedEntitiesInitialized()
      {
  -      return instance;
  +      return passivatedEntityMap!=null;
      }
      
  -   public boolean passivate()
  +   @Override
  +   protected void activateAll()
      {
  -      if ( !PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
  +      for ( Map.Entry<Object, PassivatedEntity> me: passivatedEntityMap.entrySet() )
  +      {
  +         map.put( me.getKey(), me.getValue().toEntityReference(true) );
  +      }
  +      clearPassivatedEntities();
  +   }
  +   
  +   @Override
  +   protected void passivateAll()
         {
  -         passivatedEntityMap = new HashMap<Object, PassivatedEntity>( instance.size() );
  +      passivatedEntityMap = new HashMap<Object, PassivatedEntity>( map.size() );
            boolean found = false;
  -         for ( Map.Entry me: (Set<Map.Entry>) instance.entrySet() )
  +      for ( Map.Entry me: (Set<Map.Entry>) map.entrySet() )
            {
               Object value = me.getValue();
               if (value!=null)
  @@ -57,19 +72,17 @@
                  PassivatedEntity passivatedEntity = PassivatedEntity.passivateEntity(value);
                  if (passivatedEntity!=null)
                  {
  -                  if (!found) instance = new HashMap(instance);
  +               if (!found) map = new HashMap(map);
                     found=true;
                     //this would be dangerous, except that we 
                     //are doing it to a copy of the original 
                     //list:
  -                  instance.remove( me.getKey() ); 
  +               map.remove( me.getKey() ); 
                     passivatedEntityMap.put( me.getKey(), passivatedEntity );
                  }
               }
            }
  -         if (!found) passivatedEntityMap=null;
  -      }
  -      return true;
  +      if (!found) clearPassivatedEntities();
      }
      
   }
  
  
  
  1.4       +47 -34    jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanSet.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: EntityBeanSet.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/EntityBeanSet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- EntityBeanSet.java	21 Jun 2007 20:32:00 -0000	1.3
  +++ EntityBeanSet.java	21 Jun 2007 21:45:30 -0000	1.4
  @@ -14,62 +14,75 @@
    * @author Gavin King
    *
    */
  -class EntityBeanSet implements Wrapper
  +class EntityBeanSet extends AbstractEntityBeanCollection
   {
      private static final long serialVersionUID = -2884601453783925804L;
      
  -   private Set instance;
  +   private Set set;
      private List<PassivatedEntity> passivatedEntityList;
      
      public EntityBeanSet(Set instance)
      {
  -      this.instance = instance;
  +      this.set = instance;
      }
      
  -   public void activate()
  +   @Override
  +   protected Iterable<PassivatedEntity> getPassivatedEntities() 
      {
  -      if (passivatedEntityList!=null)
  -      {
  -         for ( PassivatedEntity pe: passivatedEntityList )
  +      return passivatedEntityList;
  +   }
  +   
  +   @Override
  +   protected Object getEntityCollection()
            {
  -            instance.add( pe.toEntityReference(true) );
  +      return set;
            }
  +   
  +   @Override
  +   protected void clearPassivatedEntities()
  +   {
            passivatedEntityList = null;
         }
  -   }
      
  -   //TODO: use @Unwrap
  -   public Object getInstance()
  +   @Override
  +   protected boolean isPassivatedEntitiesInitialized()
      {
  -      return instance;
  +      return passivatedEntityList!=null;
      }
      
  -   public boolean passivate()
  +   @Override
  +   protected void activateAll()
      {
  -      if ( !PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
  +      for ( PassivatedEntity pe: passivatedEntityList )
         {
  -         passivatedEntityList = new ArrayList<PassivatedEntity>( instance.size() );
  +         set.add( pe.toEntityReference(true) );
  +      }
  +      passivatedEntityList = null;
  +   }
  +   
  +   @Override
  +   protected void passivateAll()
  +   {
  +      passivatedEntityList = new ArrayList<PassivatedEntity>( set.size() );
            boolean found = false;
  -         for ( Object value: instance )
  +      for ( Object value: set )
            {
               if (value!=null)
               {
                  PassivatedEntity passivatedEntity = PassivatedEntity.passivateEntity(value);
                  if (passivatedEntity!=null)
                  {
  -                  if (!found) instance = new HashSet(instance);
  +               if (!found) set = new HashSet(set);
                     found=true;
                     //this would be dangerous, except that we 
                     //are doing it to a copy of the original 
                     //list:
  -                  instance.remove(value);
  +               set.remove(value);
                     passivatedEntityList.add(passivatedEntity);
                  }
               }
            }
            if (!found) passivatedEntityList=null;
         }
  -      return true;
  -   }
      
   }
  
  
  
  1.17      +5 -0      jboss-seam/src/main/org/jboss/seam/contexts/PassivatedEntity.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PassivatedEntity.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/PassivatedEntity.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -b -r1.16 -r1.17
  --- PassivatedEntity.java	21 Jun 2007 20:32:00 -0000	1.16
  +++ PassivatedEntity.java	21 Jun 2007 21:45:30 -0000	1.17
  @@ -54,6 +54,11 @@
         return entityClass;
      }
   
  +   public boolean isVersioned()
  +   {
  +      return version!=null;
  +   }
  +
      public Object toEntityReference(boolean checkVersion)
      {
         Object persistenceContext = Component.getInstance( getPersistenceContext() );
  
  
  
  1.4       +3 -1      jboss-seam/src/main/org/jboss/seam/contexts/Wrapper.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Wrapper.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/Wrapper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -b -r1.3 -r1.4
  --- Wrapper.java	21 Jun 2007 20:32:00 -0000	1.3
  +++ Wrapper.java	21 Jun 2007 21:45:30 -0000	1.4
  @@ -1,7 +1,9 @@
   package org.jboss.seam.contexts;
   
  +import java.io.Serializable;
   
  -interface Wrapper
  +
  +interface Wrapper extends Serializable
   {
      public Object getInstance();
      public void activate();
  
  
  
  1.1      date: 2007/06/21 21:45:30;  author: gavin;  state: Exp;jboss-seam/src/main/org/jboss/seam/contexts/AbstractEntityBeanCollection.java
  
  Index: AbstractEntityBeanCollection.java
  ===================================================================
  package org.jboss.seam.contexts;
  
  abstract class AbstractEntityBeanCollection implements Wrapper
  {
     public final void activate()
     {
        if ( isPassivatedEntitiesInitialized() && isAnyVersioned() )
        {
           activateAll();
        }
     }
  
     public final Object getInstance()
     {
        if ( isPassivatedEntitiesInitialized() && !isAnyVersioned() )
        {
           activateAll();
        }
        return getEntityCollection();
     }
     
     public final boolean passivate()
     {
        if ( PassivatedEntity.isTransactionRolledBackOrMarkedRollback() )
        {
           clearPassivatedEntities();
        }
        else
        {
           passivateAll();
        }
        return true;
     }
  
     private boolean isAnyVersioned()
     {
        for ( PassivatedEntity passivatedEntity: getPassivatedEntities() )
        {
           if ( passivatedEntity!=null && passivatedEntity.isVersioned() ) return true;
        }
        return false;
     }
     
     protected abstract void activateAll();
     protected abstract void passivateAll();
     protected abstract Iterable<PassivatedEntity> getPassivatedEntities();
     protected abstract void clearPassivatedEntities();
     protected abstract boolean isPassivatedEntitiesInitialized();
     protected abstract Object getEntityCollection();
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list