donaldp 2002/06/22 23:49:15
Modified:
containerkit/src/java/org/apache/excalibur/containerkit/dependency
DependencyMap.java
containerkit/src/java/org/apache/excalibur/containerkit/kernel
AbstractServiceKernel.java
Log:
Refactory DependencyMap so that it has notiong of parent DependencyMaps and
also so that it allows components to be added to it dynamically.
Revision Changes Path
1.2 +55 -15
jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java
Index: DependencyMap.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/dependency/DependencyMap.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DependencyMap.java 23 Jun 2002 05:59:17 -0000 1.1
+++ DependencyMap.java 23 Jun 2002 06:49:15 -0000 1.2
@@ -21,11 +21,40 @@
*/
public class DependencyMap
{
- private final ComponentMetaData[] m_components;
+ /**
+ * Parent DependencyMap. Components in parent
+ * DependencyMap are potential Providers for services
+ * if no component in current assembly satisfies dependency.
+ */
+ private final DependencyMap m_parent;
+
+ /**
+ * The set of components in assembly.
+ * Used when searching for providers/consumers.
+ */
+ private final ArrayList m_components = new ArrayList();
+
+ public DependencyMap()
+ {
+ this( null );
+ }
+
+ public DependencyMap( final DependencyMap parent )
+ {
+ m_parent = parent;
+ }
- public DependencyMap( final ComponentMetaData[] components )
+ public void add( final ComponentMetaData component )
{
- m_components = components;
+ m_components.add( component );
+ }
+
+ public void addAll( final ComponentMetaData[] components )
+ {
+ for( int i = 0; i < components.length; i++ )
+ {
+ m_components.add( components[ i ] );
+ }
}
/**
@@ -109,9 +138,12 @@
{
final ArrayList result = new ArrayList();
- for( int i = 0; i < m_components.length; i++ )
+ final int size = m_components.size();
+ for( int i = 0; i < size; i++ )
{
- visitcomponent( m_components[ i ],
+ final ComponentMetaData component =
+ (ComponentMetaData)m_components.get( i );
+ visitcomponent( component,
forward,
new ArrayList(),
result );
@@ -188,14 +220,12 @@
{
final String name = component.getName();
- for( int i = 0; i < m_components.length; i++ )
+ final int size = m_components.size();
+ for( int i = 0; i < size; i++ )
{
- final ComponentMetaData other = m_components[ i ];
+ final ComponentMetaData other =
+ (ComponentMetaData)m_components.get( i );
final DependencyMetaData[] roles = other.getDependencies();
- if( null == roles )
- {
- continue;
- }
for( int j = 0; j < roles.length; j++ )
{
@@ -206,6 +236,8 @@
}
}
}
+
+ //TODO: Search children consumers here
}
/**
@@ -216,12 +248,20 @@
*/
private ComponentMetaData getComponent( final String name )
{
- for( int i = 0; i < m_components.length; i++ )
+ final int size = m_components.size();
+ for( int i = 0; i < size; i++ )
{
- if( m_components[ i ].getName().equals( name ) )
+ final ComponentMetaData component =
+ (ComponentMetaData)m_components.get( i );
+ if( component.getName().equals( name ) )
{
- return m_components[ i ];
+ return component;
}
+ }
+
+ if( null != m_parent )
+ {
+ return m_parent.getComponent( name );
}
//Should never happen if Verifier passed checks
1.6 +2 -28
jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java
Index: AbstractServiceKernel.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AbstractServiceKernel.java 23 Jun 2002 05:59:18 -0000 1.5
+++ AbstractServiceKernel.java 23 Jun 2002 06:49:15 -0000 1.6
@@ -8,9 +8,7 @@
package org.apache.excalibur.containerkit.kernel;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
@@ -57,14 +55,13 @@
* The [EMAIL PROTECTED] DependencyMap} via which dependency graph is
* produced.
*/
- private DependencyMap m_dependencyMap;
+ private final DependencyMap m_dependencyMap = new DependencyMap();
public void initialize()
throws Exception
{
m_resourceProvider = prepareResourceProvider();
m_lifecycleHelper = prepareLifecycleHelper();
- m_dependencyMap = new DependencyMap( getCompnentMetaDatas() );
}
protected abstract ResourceProvider prepareResourceProvider();
@@ -109,28 +106,6 @@
}
/**
- * Return the array of meta data for set fo components.
- *
- * @return the array of meta data for set fo components.
- */
- private ComponentMetaData[] getCompnentMetaDatas()
- {
- final Collection entrys = m_entrys.values();
- final int size = entrys.size();
- final ComponentMetaData[] components = new ComponentMetaData[ size ];
-
- int i = 0;
- final Iterator iterator = entrys.iterator();
- while( iterator.hasNext() )
- {
- final ComponentEntry entry = (ComponentEntry)iterator.next();
- components[ i++ ] = entry.getMetaData();
- }
-
- return components;
- }
-
- /**
* Process a whole assembly through a lifecycle phase
* (ie startup or shutdown). The components should be processed
* in order specified by the dependency graph.
@@ -224,7 +199,6 @@
private void processComponentsNotice( final ComponentMetaData[] order,
final boolean startup )
{
-
if( getLogger().isInfoEnabled() )
{
final Integer count = new Integer( order.length );
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>