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

Gavin King gavin.king at jboss.com
Fri Feb 16 23:08:02 EST 2007


  User: gavin   
  Date: 07/02/16 23:08:02

  Modified:    src/main/org/jboss/seam/init  Initialization.java
  Log:
  if the overriding component does not have its dependencies met, install the lower precedence version
  
  Revision  Changes    Path
  1.151     +62 -34    jboss-seam/src/main/org/jboss/seam/init/Initialization.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Initialization.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/init/Initialization.java,v
  retrieving revision 1.150
  retrieving revision 1.151
  diff -u -b -r1.150 -r1.151
  --- Initialization.java	14 Feb 2007 07:32:38 -0000	1.150
  +++ Initialization.java	17 Feb 2007 04:08:02 -0000	1.151
  @@ -16,7 +16,9 @@
   import java.util.Map;
   import java.util.Properties;
   import java.util.Set;
  +import java.util.SortedSet;
   import java.util.StringTokenizer;
  +import java.util.TreeSet;
   
   import javax.servlet.Filter;
   import javax.servlet.ServletContext;
  @@ -55,7 +57,7 @@
   /**
    * @author Gavin King
    * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  - * @version $Revision: 1.150 $
  + * @version $Revision: 1.151 $
    */
   public class Initialization
   {
  @@ -64,7 +66,7 @@
   
      private ServletContext servletContext;
      private Map<String, Conversions.PropertyValue> properties = new HashMap<String, Conversions.PropertyValue>();
  -   private Map<String, ComponentDescriptor> componentDescriptors = new HashMap<String, ComponentDescriptor>();
  +   private Map<String, SortedSet<ComponentDescriptor>> componentDescriptors = new HashMap<String, SortedSet<ComponentDescriptor>>();
      private List<FactoryDescriptor> factoryDescriptors = new ArrayList<FactoryDescriptor>();
      private Set<Class> installedComponents = new HashSet<Class>();
      private Set<String> importedPackages = new HashSet<String>();
  @@ -359,18 +361,17 @@
      private void addComponentDescriptor(ComponentDescriptor descriptor)
      {
         String name = descriptor.getName();
  -      ComponentDescriptor existing = componentDescriptors.get( name );
  -      boolean newHasPrecedence = existing!=null && existing.getPrecedence()<descriptor.getPrecedence();
  -      boolean oldHasPrecedence = existing!=null && existing.getPrecedence()>descriptor.getPrecedence();
  -      if ( newHasPrecedence || oldHasPrecedence )
  +      SortedSet<ComponentDescriptor> set = componentDescriptors.get(name);
  +      if (set==null)
         {
  -         log.info("two components with same name, higher precedence wins: " + name);
  +         set = new TreeSet<ComponentDescriptor>();
  +         componentDescriptors.put(name, set);
         }
  -      if ( existing==null || newHasPrecedence )
  +      if ( !set.isEmpty() )
         {
  -         componentDescriptors.put(name, descriptor);
  +         log.info("two components with same name, higher precedence wins: " + name);
         }
  -      else if ( existing.getPrecedence()==descriptor.getPrecedence() )
  +      if ( !set.add(descriptor) )
         {
            throw new IllegalStateException("Two components with the same name and precedence: " + name);
         }
  @@ -638,13 +639,16 @@
   
      protected ComponentDescriptor findDescriptor(Class<?> componentClass)
      {
  -      for (ComponentDescriptor component : componentDescriptors.values())
  +      for (SortedSet<ComponentDescriptor> components : componentDescriptors.values())
  +      {
  +         for (ComponentDescriptor component: components)
         {
            if ( component.getComponentClass().equals(componentClass) )
            {
               return component;
            }
         }
  +      }
         return null;
      }
   
  @@ -684,20 +688,24 @@
         do
         {
            installedSomething = false;
  -         for (ComponentDescriptor componentDescriptor : componentDescriptors.values())
  +         for ( SortedSet<ComponentDescriptor> descriptors: componentDescriptors.values() )
  +         {
  +            //iterate over them from highest precedence to lowest
  +            for (ComponentDescriptor componentDescriptor: descriptors)
            {
               String compName = componentDescriptor.getName() + COMPONENT_SUFFIX;
               if ( !context.isSet(compName) && dependenciesMet(context, componentDescriptor) )
               {
                  addComponent(componentDescriptor, context);
  +                  
  +                  installedSomething = true;
  +
                  if ( componentDescriptor.isAutoCreate() )
                  {
                     init.addAutocreateVariable( componentDescriptor.getName() );
                  }
  -               installedSomething = true;
  -            }
               
  -            if ( componentDescriptor.isInstalledFilter() )
  +                  if ( componentDescriptor.isFilter() )
               {
                  init.addInstalledFilter( componentDescriptor.getName() );
               }
  @@ -706,6 +714,10 @@
               {
                  init.addResourceProvider( componentDescriptor.getName() );
               }
  +                  
  +                  break;
  +               }
  +            }
            }
   
         }
  @@ -940,7 +952,7 @@
         }
      }
   
  -   private static class ComponentDescriptor
  +   private static class ComponentDescriptor implements Comparable<ComponentDescriptor>
      {
         private String name;
         private Class<?> componentClass;
  @@ -1075,10 +1087,26 @@
            return install.precedence();
         }
         
  -      public boolean isInstalledFilter()
  +      public int compareTo(ComponentDescriptor other)
  +      {
  +         return other.getPrecedence() - getPrecedence();
  +      }
  +      
  +      @Override
  +      public boolean equals(Object other)
  +      {
  +         return getPrecedence() == ( (ComponentDescriptor) other ).getPrecedence(); 
  +      }
  +      
  +      @Override
  +      public int hashCode()
  +      {
  +         return getPrecedence();
  +      }
  +      
  +      public boolean isFilter()
         {
  -         // They must extend BaseFilter so that they can be disabled
  -         return Filter.class.isAssignableFrom(componentClass) && isInstalled();
  +         return Filter.class.isAssignableFrom(componentClass);
         }
         
         public boolean isResourceProvider()
  
  
  



More information about the jboss-cvs-commits mailing list