mcconnell 2002/07/02 17:52:23 Modified: assembly/src/java/org/apache/excalibur/merlin/registry Profile.java Log: replaced interface and impl with direct implementation Revision Changes Path 1.2 +138 -41 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java Index: Profile.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/registry/Profile.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Profile.java 1 Jul 2002 04:27:15 -0000 1.1 +++ Profile.java 3 Jul 2002 00:52:23 -0000 1.2 @@ -29,11 +29,14 @@ import org.apache.avalon.excalibur.i18n.Resources; import org.apache.excalibur.configuration.ConfigurationUtil; import org.apache.avalon.framework.logger.Logger; +import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.CascadingRuntimeException; import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.DefaultConfiguration; import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.context.Context; @@ -47,63 +50,157 @@ import org.apache.excalibur.containerkit.metainfo.ServiceDescriptor; import org.apache.excalibur.containerkit.metainfo.DependencyDescriptor; import org.apache.excalibur.containerkit.metainfo.ServiceDesignator; + import org.apache.excalibur.containerkit.metadata.ComponentMetaData; import org.apache.excalibur.containerkit.metadata.DependencyMetaData; +import org.apache.excalibur.merlin.registry.Registry; +import org.apache.excalibur.merlin.registry.UnresolvedProviderException; +import org.apache.excalibur.configuration.ContextFactory; +import org.apache.excalibur.configuration.ConfigurationUtil; /** - * Interface that defines a set of constraints applied to a component type. + * The default implementation of a profile under which configuration, context + * and parameterization criteria is associated against a component type defintion. + * * @author <a href="mailto:[EMAIL PROTECTED]">Stephen McConnell</a> * @version $Revision$ $Date$ */ -public interface Profile +public class Profile extends ComponentMetaData { + private static String getAbstractName( Configuration profile ) + { + return profile.getAttribute("name",null); + } + + private static DependencyMetaData[] getDependencyMetaData( + final DefaultRegistry registry, final ComponentType type ) + throws UnresolvedProviderException + { + Vector vector = new Vector(); + DependencyDescriptor[] deps = type.getComponentInfo().getDependencies(); + for( int i=0; i<deps.length; i++ ) + { + final String role = deps[i].getRole(); + final Profile provider = registry.getCandidateProfile( deps[i] ); + DependencyMetaData data = new DependencyMetaData( + role, + provider.getName() + ); + vector.add( data ); + } + return (DependencyMetaData[]) vector.toArray( new DependencyMetaData[0] ); + } + + + private final ComponentType m_type; + + private final Configuration m_profile; + + private final DefaultRegistry m_registry; + + /** + * Creation of a default profile. + * @param type the component type that this profile is qualifying + */ + public Profile( final DefaultRegistry registry, final ComponentType type ) + throws ConfigurationException, UnresolvedProviderException + + { + this( registry, type, new DefaultConfiguration("profile") ); + } + + /** + * Creation of a profile of a component type. The + * configuration is a profile instance containing criteria for for the + * profiles default configuration, parameters and content. + * + * @param type the component type that this profile is qualifying + * @param profile a configuration instance possibly containing a context, + * parameters and configuration element. + * @param name the profile name + */ + public Profile( + final DefaultRegistry registry, final ComponentType type, final Configuration profile ) + throws ConfigurationException, UnresolvedProviderException + { + super( + getAbstractName( profile ), + getDependencyMetaData( registry, type ), + Parameters.fromConfiguration( profile.getChild("paramerters") ), + profile.getChild("configuration"), + type.getComponentInfo() + ); + m_type = type; + m_profile = profile; + m_registry = registry; + m_registry.install( this ); + } /** - * Default role name for this interface. - */ - static final String ROLE = Profile.class.getName(); - - /** - * Returns the name of the component type profile. - * @return the profile name - */ - String getName(); - - /** - * Returns the component type that this profile constrains. + * Returns the component type bound to the profile. * @return the component type */ - ComponentType getComponentType(); + public ComponentType getComponentType() + { + return m_type; + } /** * Returns the context to be supplied to an instance of the profile * @return the profile context object */ - Context getContext( Context parent ); - - /** - * Returns the configuration to be supplied to an instance of the profile - * @return the profile configuration object - */ - Configuration getConfiguration(); - - /** - * Returns the parameters to be supplied to an instance of the profile - * @return the profile parameter object - */ - Parameters getParameters(); - - /** - * Returns all dependency metadata for the profile. - * @return the dependency metadata array - */ - public DependencyMetaData[] getDependencies(); - - /** - * Returns dependency metadata for a name dependency. - * @return the dependency metadata - */ - public DependencyMetaData getDependency( String role ); + public Context getContext( Context parent ) + { + try + { + Configuration criteria = m_profile.getChild("context"); + return ContextFactory.createContextFromConfiguration( parent, criteria ); + } + catch( Throwable e ) + { + throw new ProfileRuntimeException( + "Unexpected error while creating context.", e ); + } + + } + + public String toString() + { + return "DefaultProfile name: '" + getName() + "' type: " + getComponentType(); + } + + /** + * Provide a textual report on the profile. + * @return the formatted profile report + */ + public String report() + { + StringBuffer buffer = new StringBuffer(); + buffer.append( "PROFILE REPORT\n" ); + buffer.append( "\n name: " + getName() ); + buffer.append( "\n type: " + getComponentType() ); + buffer.append( "\n context: " + getContext( null ) ); + buffer.append( "\n configuration: \n" + ConfigurationUtil.list( getConfiguration() )); + buffer.append( "\n parameters: " + getParameters() ); + buffer.append( "\n dependecies" ); + + DependencyMetaData[] dependencies = getDependencies(); + if( dependencies.length == 0 ) + { + buffer.append( " (none)\n\n" ); + return buffer.toString(); + } + + for( int i=0; i<dependencies.length; i++ ) + { + buffer.append( "\n dependency " + i ); + buffer.append( "\n role: " + dependencies[i].getRole() ); + buffer.append( "\n provider: " + dependencies[i].getProviderName() ); + } + + buffer.append( "\n\n" ); + return buffer.toString(); + } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>