[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