mcconnell 2002/07/04 02:01:37
Added: assembly .cvsignore README.TXT build.properties build.xml
assembly/demo/src/etc demo.mf
assembly/demo/src/java/org/apache/excalibur/playground
BasicComponent.java BasicComponent.xinfo
BasicService.java ComplexComponent.java
ComplexComponent.xinfo InvalidComponent.java
InvalidComponent.xinfo SimpleComponent.java
SimpleComponent.xinfo SimpleService.java
TerminalComponent.java TerminalComponent.xinfo
assembly/lib avalon-framework.jar
excalibur-configuration-1.0.jar
excalibur-containerkit-1.0.jar
excalibur-extension-1.0a.jar excalibur-i18n-1.0.jar
excalibur-io-1.1.jar logkit.jar
assembly/src .cvsignore
assembly/src/etc kernel.xml project.mf
assembly/src/java/org/apache/excalibur/merlin/kernel
Container.java ContainerClassLoader.java
DefaultContainer.java DefaultContainer.xinfo
DefaultKernel.java DefaultKernel.xinfo Fileset.java
Kernel.java Main.java Map.java Resources.properties
Verifiable.java package.html
assembly/src/java/org/apache/excalibur/merlin/kernel/doc-files
DefaultContainer.gif
assembly/src/java/org/apache/excalibur/merlin/registry
AssemblyException.java
AssemblyRuntimeException.java
ComponentDefinition.java ComponentType.java
DefaultRegistry.java DefaultRegistry.xinfo
Profile.java ProfileException.java
ProfileRuntimeException.java Registry.java
RegistryException.java
RegistryRuntimeException.java Resources.properties
Selector.java ServiceRegistry.java
ServiceTable.java UnresolvedProviderException.java
package.html
assembly/src/java/org/apache/excalibur/merlin/registry/doc-files
registry.gif
Log:
because its a community process
Revision Changes Path
1.4 +0 -0 jakarta-avalon-excalibur/assembly/.cvsignore
1.5 +0 -0 jakarta-avalon-excalibur/assembly/README.TXT
1.4 +0 -0 jakarta-avalon-excalibur/assembly/build.properties
1.7 +12 -1 jakarta-avalon-excalibur/assembly/build.xml
1.3 +5 -5 jakarta-avalon-excalibur/assembly/demo/src/etc/demo.mf
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicComponent.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicComponent.xinfo
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/BasicService.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/ComplexComponent.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/ComplexComponent.xinfo
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/InvalidComponent.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/InvalidComponent.xinfo
1.4 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleComponent.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleComponent.xinfo
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/SimpleService.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/TerminalComponent.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/demo/src/java/org/apache/excalibur/playground/TerminalComponent.xinfo
1.3 +0 -0 jakarta-avalon-excalibur/assembly/lib/avalon-framework.jar
<<Binary file>>
1.3 +0 -0
jakarta-avalon-excalibur/assembly/lib/excalibur-configuration-1.0.jar
<<Binary file>>
1.6 +123 -126
jakarta-avalon-excalibur/assembly/lib/excalibur-containerkit-1.0.jar
<<Binary file>>
1.3 +0 -0
jakarta-avalon-excalibur/assembly/lib/excalibur-extension-1.0a.jar
<<Binary file>>
1.3 +0 -0 jakarta-avalon-excalibur/assembly/lib/excalibur-i18n-1.0.jar
<<Binary file>>
1.3 +0 -0 jakarta-avalon-excalibur/assembly/lib/excalibur-io-1.1.jar
<<Binary file>>
1.3 +0 -0 jakarta-avalon-excalibur/assembly/lib/logkit.jar
<<Binary file>>
1.3 +0 -0 jakarta-avalon-excalibur/assembly/src/.cvsignore
1.3 +6 -0 jakarta-avalon-excalibur/assembly/src/etc/kernel.xml
1.4 +3 -3 jakarta-avalon-excalibur/assembly/src/etc/project.mf
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Container.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/ContainerClassLoader.java
1.4 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultContainer.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultContainer.xinfo
1.4 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/DefaultKernel.xinfo
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Fileset.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Kernel.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Main.java
1.1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Map.java
Index: Map.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.excalibur.merlin.kernel;
import java.util.ArrayList;
import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
import org.apache.excalibur.containerkit.metadata.DependencyMetaData;
import org.apache.excalibur.containerkit.metainfo.DependencyDescriptor;
/**
* Utility class to help aquire a ordered graph of
* consumers and providers for specific components. This is a locally
* variant of the containerkit DependencyMap.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/07/04 09:01:35 $
*/
public class Map
{
/**
* Parent Map. Components in parent
* Map are potential Providers for services
* if no component in current assembly satisfies dependency.
*/
private final Map m_parent;
/**
* The container providing the componenent.
*/
private Container m_container;
/**
* The set of components declared by the container as available.,
* Used when searching for providers/consumers.
*/
private final ArrayList m_components = new ArrayList();
/**
* The child {@link Map} objects.
* Possible consumers of services in this assembly.
*/
private final ArrayList m_children = new ArrayList();
public Map()
{
this( null );
}
public Map( final Map parent )
{
m_parent = parent;
}
/**
* Add child dependency graph.
*
* @param child the child map
*/
public void addChild( final Map child )
{
m_children.add( child );
}
/**
* Remove child dependency graph.
*
* @param child the child map
*/
public void removeChild( final Map child )
{
m_children.remove( child );
}
/**
* Add a component to current dependency graph.
*
* @param component the component
*/
public void add( final ComponentMetaData component )
{
m_components.add( component );
}
/**
* Get the serilized graph of {@link ComponentMetaData} objects
* required when starting up all the components. This makes sure
* that all providers occur before their coresponding
* consumers in graph.
*
* @return the ordered list of components
*/
public ComponentMetaData[] getStartupGraph()
{
return walkGraph( true );
}
/**
* Get the serilized graph of {@link ComponentMetaData} objects
* required when shutting down all the components. This makes
* sure that all consumers occur before their coresponding
* providers in graph.
*
* @return the ordered list of components
*/
public ComponentMetaData[] getShutdownGraph()
{
return walkGraph( false );
}
/**
* Get the serilized graph of {@link ComponentMetaData} objects
* that use services of specified component.
*
* @param component the component
* @return the ordered list of consumers
*/
public ComponentMetaData[] getConsumerGraph( final ComponentMetaData component )
{
return getComponentGraph( component, false );
}
/**
* Get the serilized graph of {@link ComponentMetaData} objects
* that provide specified component with services.
*
* @param component the component
* @return the ordered list of providers
*/
public ComponentMetaData[] getProviderGraph( final ComponentMetaData component )
{
return getComponentGraph( component, true );
}
/**
* Get the graph of a single component.
*
* @param component the component
* @param providers true if traversing providers, false if consumers
* @return the list of components in graph
*/
private ComponentMetaData[] getComponentGraph( final ComponentMetaData
component, final boolean providers )
{
final ArrayList result = new ArrayList();
visitcomponent( component,
providers,
new ArrayList(),
result );
final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size()
];
return (ComponentMetaData[])result.toArray( returnValue );
}
/**
* Method to generate an ordering of nodes to traverse.
* It is expected that the specified components have passed
* verification tests and are well formed.
*
* @param providers true if forward dependencys traced, false if dependencies
reversed
* @return the ordered node names
*/
private ComponentMetaData[] walkGraph( final boolean providers )
{
final ArrayList result = new ArrayList();
final ArrayList done = new ArrayList();
final int size = m_components.size();
for( int i = 0; i < size; i++ )
{
final ComponentMetaData component =
(ComponentMetaData)m_components.get( i );
visitcomponent( component,
providers,
done,
result );
}
final ComponentMetaData[] returnValue = new ComponentMetaData[ result.size()
];
return (ComponentMetaData[])result.toArray( returnValue );
}
/**
* Visit a component when traversing dependencies.
*
* @param component the component
* @param providers true if walking tree looking for providers, else false
* @param done those nodes already traversed
* @param order the order in which nodes have already been
* traversed
*/
private void visitcomponent( final ComponentMetaData component,
final boolean providers,
final ArrayList done,
final ArrayList order )
{
//If already visited this component then bug out early
if( done.contains( component ) )
{
return;
}
done.add( component );
if( providers )
{
visitProviders( component, done, order );
}
else
{
visitConsumers( component, done, order );
}
order.add( component );
}
/**
* Traverse graph of components that provide services to
* the specified component.
*
* @param component the ComponentMetaData
*/
private void visitProviders( final ComponentMetaData component,
final ArrayList done,
final ArrayList order )
{
final DependencyDescriptor[] descriptors =
component.getComponentInfo().getDependencies();
for( int i = 0; i < descriptors.length; i++ )
{
final DependencyMetaData dependency =
component.getDependency( descriptors[ i ].getRole() );
// added != null clause to catch cases where an optional
// dependency exists and the dependecy has not been bound
// to a provider
if( dependency != null )
{
final ComponentMetaData other =
getComponent( dependency.getProviderName() );
visitcomponent( other, true, done, order );
}
}
}
/**
* Traverse all Consumers of component. ie Anyone that uses
* service provided by component.
*
* @param component the ComponentMetaData
*/
private void visitConsumers( final ComponentMetaData component,
final ArrayList done,
final ArrayList order )
{
final String name = component.getName();
final int size = m_components.size();
for( int i = 0; i < size; i++ )
{
final ComponentMetaData other =
(ComponentMetaData)m_components.get( i );
final DependencyMetaData[] roles = other.getDependencies();
for( int j = 0; j < roles.length; j++ )
{
final String depends = roles[ j ].getProviderName();
if( depends.equals( name ) )
{
visitcomponent( other, false, done, order );
}
}
}
final int childCount = m_children.size();
for( int i = 0; i < childCount; i++ )
{
final Map map = (Map)m_children.get( i );
map.visitConsumers( component, done, order );
}
}
/**
* Utility method to get component with specified name from specified array.
*
* @param name the name of component
* @return the component
*/
private ComponentMetaData getComponent( final String name )
{
final int size = m_components.size();
for( int i = 0; i < size; i++ )
{
final ComponentMetaData component =
(ComponentMetaData)m_components.get( i );
if( component.getName().equals( name ) )
{
return component;
}
}
if( null != m_parent )
{
return m_parent.getComponent( name );
}
//Should never happen if Verifier passed checks
throw new IllegalStateException();
}
}
1.3 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Resources.properties
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/Verifiable.java
1.4 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/package.html
1.3 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/doc-files/DefaultContainer.gif
<<Binary file>>
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/AssemblyException.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/AssemblyRuntimeException.java
1.4 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ComponentDefinition.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ComponentType.java
1.9 +4 -6
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.java
1.6 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/DefaultRegistry.xinfo
1.5 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ProfileException.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ProfileRuntimeException.java
1.5 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Registry.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/RegistryException.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/RegistryRuntimeException.java
1.3 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Resources.properties
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Selector.java
1.5 +19 -5
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceRegistry.java
1.4 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/ServiceTable.java
1.3 +1 -1
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/UnresolvedProviderException.java
1.4 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/package.html
1.4 +0 -0
jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/doc-files/registry.gif
<<Binary file>>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>