avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcconn...@apache.org
Subject cvs commit: avalon-sandbox/meta/src/java/org/apache/avalon/meta/model/verifier ProfileVerifier.java
Date Thu, 19 Dec 2002 10:52:47 GMT
mcconnell    2002/12/19 02:52:47

  Modified:    meta/src/java/org/apache/avalon/meta/info
                        ContextDescriptor.java ExtensionDescriptor.java
                        ReferenceDescriptor.java Service.java Type.java
               meta/src/java/org/apache/avalon/meta/info/builder
                        XMLServiceCreator.java XMLTypeCreator.java
               meta/src/java/org/apache/avalon/meta/model/verifier
                        ProfileVerifier.java
  Log:
  Enhancement to ContextDirective and Service. ContextDirective updated to
  support reference to a service defintion of the context interface together with
  utilities to merge component supplied context entries with service supplied
  context entries.
  
  Revision  Changes    Path
  1.3       +55 -17    avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ContextDescriptor.java
  
  Index: ContextDescriptor.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ContextDescriptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ContextDescriptor.java	17 Dec 2002 09:56:20 -0000	1.2
  +++ ContextDescriptor.java	19 Dec 2002 10:52:47 -0000	1.3
  @@ -51,6 +51,8 @@
   package org.apache.avalon.meta.info;
   
   import java.util.Properties;
  +import java.util.Arrays;
  +import java.util.List;
   
   /**
    * A descriptor describing the Context that the Component
  @@ -71,18 +73,18 @@
    */
   public class ContextDescriptor extends Descriptor
   {
  -    private final ReferenceDescriptor m_type;
  +    private final ReferenceDescriptor m_reference;
       private final EntryDescriptor[] m_entries;
   
       /**
        * Create a descriptor without attributes.
  -     * @param type the classname of the context class
  +     * @param reference the classname of the context class
        * @param entries the set of entries required within the context
        */
  -    public ContextDescriptor( final ReferenceDescriptor type,
  +    public ContextDescriptor( final ReferenceDescriptor reference,
                                 final EntryDescriptor[] entries )
       {
  -        this( type, entries, null );
  +        this( reference, entries, null );
       }
   
       /**
  @@ -93,35 +95,34 @@
        * @exception NullPointerException if type or entries argument is null
        * @exception IllegalArgumentException if the classname format is invalid
        */
  -    public ContextDescriptor( final ReferenceDescriptor type,
  +    public ContextDescriptor( final ReferenceDescriptor reference,
                                 final EntryDescriptor[] entries,
                                 final Properties attributes )
           throws NullPointerException, IllegalArgumentException
       {
           super( attributes );
   
  -        if( null == type )
  -        {
  -            throw new NullPointerException( "type" );
  -        }
  -
           if( null == entries )
           {
               throw new NullPointerException( "entries" );
           }
  +        if( null == reference )
  +        {
  +            throw new NullPointerException( "reference" );
  +        }
   
  -        m_type = type;
  +        m_reference = reference;
           m_entries = entries;
       }
   
       /**
  -     * Return the type of Context class.
  +     * Return the reference decription for the context.
        *
  -     * @return the type of Context class.
  +     * @return the referencee descriptor.
        */
  -    public ReferenceDescriptor getType()
  +    public ReferenceDescriptor getReference()
       {
  -        return m_type;
  +        return m_reference;
       }
   
       /**
  @@ -129,7 +130,7 @@
        *
        * @return the entries contained in the context.
        */
  -    public EntryDescriptor[] getEntrys()
  +    public EntryDescriptor[] getEntries()
       {
           return m_entries;
       }
  @@ -150,5 +151,42 @@
               }
           }
           return null;
  +    }
  +
  +   /**
  +    * Returns a set of entry descriptors resulting from a merge of the descriptors
  +    * container in this descriptor with the supplied descriptors.
  +    * 
  +    * @param entries the entries to merge
  +    * @return the mergerged set of entries
  +    * @exception Exception of a entry conflict occurs
  +    */
  +    public EntryDescriptor[] merge( EntryDescriptor[] entries ) 
  +      throws IllegalArgumentException
  +    {
  +        for( int i=0; i<entries.length; i++ )
  +        {
  +            EntryDescriptor entry = entries[i];
  +            final String key = entry.getKey();
  +            EntryDescriptor local = getEntry( entry.getKey() );
  +            if( local != null )
  +            {
  +                if( !entry.getType().equals( local.getType() ) )
  +                {
  +                    final String error =
  +                      "Conflicting entry type for key: " + key;
  +                    throw new IllegalArgumentException( error );
  +                }
  +            }
  +        }
  +
  +        return join( entries, getEntries() );
  +    }
  +
  +    private EntryDescriptor[] join( EntryDescriptor[] primary, EntryDescriptor[] secondary
)
  +    {
  +        List list = Arrays.asList( primary );
  +        list.addAll( Arrays.asList( secondary ) );
  +        return (EntryDescriptor[]) list.toArray( new EntryDescriptor[0] ); 
       }
   }
  
  
  
  1.3       +3 -3      avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ExtensionDescriptor.java
  
  Index: ExtensionDescriptor.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ExtensionDescriptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ExtensionDescriptor.java	17 Dec 2002 09:56:20 -0000	1.2
  +++ ExtensionDescriptor.java	19 Dec 2002 10:52:47 -0000	1.3
  @@ -71,7 +71,7 @@
       private final ContextDescriptor m_context;
   
       /**
  -     * Constructor an extension descriptor without attributes.
  +     * Creation of an extension descriptor without attributes.
        * @param reference a version interface reference
        * @param context the context criteria associated with the extension
        * @exception NullPointerException if the name, reference or context parameters are
null
  @@ -84,7 +84,7 @@
       }
   
       /**
  -     * Constructor a phase descriptor with attributes.
  +     * Creation of a phase descriptor with attributes.
        * @param reference a version interface reference
        * @param context the context criteria associated with the extension
        * @param attributes a set of attributes to associate with the extension
  
  
  
  1.2       +32 -5     avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ReferenceDescriptor.java
  
  Index: ReferenceDescriptor.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/ReferenceDescriptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ReferenceDescriptor.java	24 Nov 2002 12:58:26 -0000	1.1
  +++ ReferenceDescriptor.java	19 Dec 2002 10:52:47 -0000	1.2
  @@ -140,19 +140,18 @@
        */
       public boolean matches( final ReferenceDescriptor other )
       {
  -        return
  -            other.getClassname().equals( getClassname() ) 
  +        return other.getClassname().equals( getClassname() ) 
               && other.getVersion().complies( getVersion() );
       }
   
       /**
  -     * Convert to a string of format name/version
  +     * Convert to a string of format name:version
        *
        * @return string describing service
        */
       public String toString()
       {
  -        return getClassname() + "/" + getVersion();
  +        return getClassname() + ":" + getVersion();
       }
   
       /**
  @@ -189,4 +188,32 @@
   
           return match;
       }
  +
  +   /**
  +    * Creation of a new reference descriptor form a supplied string. 
  +    * The implementation looks for the classname/version delimiter
  +    * of ":". If no version information is found, the default 1.0.0 
  +    * version is assigned.
  +    *
  +    * @param path the structured path in for form <classname>:<version>
  +    * @return the new reference descriptor
  +    */
  +    public static ReferenceDescriptor newInstance( String path )
  +    {
  +        final String type;
  +        final Version version;
  +        int index = path.indexOf(":");
  +        if( index > -1 )
  +        {
  +            type = path.substring( 0, index );
  +            version = Version.getVersion( path.substring( index + 1 ) );
  +        }
  +        else
  +        {
  +            type = path;
  +            version = Version.getVersion( "1.0.0" );
  +        }
  +        return new ReferenceDescriptor( type, version );
  +    }
  +
   }
  
  
  
  1.3       +68 -31    avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/Service.java
  
  Index: Service.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/Service.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Service.java	15 Dec 2002 17:48:03 -0000	1.2
  +++ Service.java	19 Dec 2002 10:52:47 -0000	1.3
  @@ -73,61 +73,85 @@
       //=========================================================================
   
       /**
  -     * The service classname key.
  +     * The service reference.
        */
  -    private final String m_classname;
  +    private final ReferenceDescriptor m_reference;
   
       /**
  -     * The service version.
  +     * The optional context entry criteria.
        */
  -    private final Version m_version;
  +    private final EntryDescriptor[] m_entries;
   
       //=========================================================================
       // constructor
       //=========================================================================
   
       /**
  -     * Creation of a new Service instance.
  +     * Creation of a new Service instance using a classname and
  +     * supplied properties argument.
  +     *
  +     * @param reference the versioned classname
  +     */
  +    public Service( final ReferenceDescriptor reference )
  +    {
  +        this( reference, null, null );
  +    }
  +
  +    /**
  +     * Creation of a new Service instance using a classname and
  +     * supplied properties argument.
        *
  -     * @param classname the classname of the service
  +     * @param reference the versioned classname
  +     * @param attributes the set of attributes to assign to the descriptor
        */
  -    public Service( final String classname )
  +    public Service(
  +        final ReferenceDescriptor reference,
  +        final EntryDescriptor[] entries )
       {
  -        this( classname, null );
  +        this( reference, entries, null );
       }
   
       /**
        * Creation of a new Service instance using a classname and
        * supplied properties argument.
        *
  -     * @param classname the classname of the service
  -     * @param version the service version
  +     * @param reference the versioned classname
  +     * @param attributes the set of attributes to assign to the descriptor
        */
  -    public Service( final String classname, final Version version )
  +    public Service(
  +        final ReferenceDescriptor reference,
  +        final Properties attributes )
       {
  -        this( classname, version, null );
  +        this( reference, null, attributes );
       }
   
       /**
        * Creation of a new Service instance using a classname and
        * supplied properties argument.
        *
  -     * @param classname the classname of the service
  -     * @param version the service version
  +     * @param reference the versioned classname
  +     * @param entries the set of optional context entries
        * @param attributes the set of attributes to assign to the descriptor
        */
       public Service(
  -        final String classname,
  -        final Version version,
  +        final ReferenceDescriptor reference,
  +        final EntryDescriptor[] entries,
           final Properties attributes )
       {
           super( attributes );
  -        if( classname == null )
  +        if( reference == null )
  +        {
  +            throw new NullPointerException( "reference" );
  +        }
  +        m_reference = reference;
  +        if( entries == null )
  +        {
  +            m_entries = new EntryDescriptor[0];
  +        }
  +        else
           {
  -            throw new NullPointerException( "classname" );
  +            m_entries = entries;
           }
  -        m_version = version;
  -        m_classname = classname;
       }
   
       //=========================================================================
  @@ -140,7 +164,7 @@
        */
       public String getClassname()
       {
  -        return m_classname;
  +        return m_reference.getClassname();
       }
   
       /**
  @@ -149,11 +173,26 @@
        */
       public Version getVersion()
       {
  -        if( m_version == null )
  -        {
  -            return DEFAULT_VERSION;
  -        }
  -        return m_version;
  +        return m_reference.getVersion();
  +    }
  +
  +    /**
  +     * Return the service reference.
  +     * @return the reference
  +     */
  +    public ReferenceDescriptor getReference()
  +    {
  +        return m_reference;
  +    }
  +
  +    /**
  +     * Return the entries declared by the service.
  +     *
  +     * @return the entry descriptors
  +     */
  +    public EntryDescriptor[] getEntries()
  +    {
  +        return m_entries;
       }
   
       /**
  @@ -165,9 +204,7 @@
        */
       public boolean matches( final ReferenceDescriptor reference )
       {
  -        return
  -            reference.getClassname().equals( getClassname() )
  -            && reference.getVersion().complies( getVersion() );
  +        return reference.equals( getReference() );
       }
   
       /**
  @@ -209,7 +246,7 @@
        */
       public String toString()
       {
  -        return getClassname() + ":" + getVersion();
  +        return getReference().toString();
       }
   
   }
  
  
  
  1.6       +1 -12     avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/Type.java
  
  Index: Type.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/Type.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Type.java	11 Dec 2002 05:16:38 -0000	1.5
  +++ Type.java	19 Dec 2002 10:52:47 -0000	1.6
  @@ -334,17 +334,6 @@
       }
   
       /**
  -     * Return the lifecycle stages extensions required by this extension.
  -     *
  -     * @return an array of stage descriptors.
  -     * @deprecated use getStages()
  -     */
  -    public StageDescriptor[] getPhases()
  -    {
  -        return m_stages;
  -    }
  -
  -    /**
        * Return the lifecycle stages extensions required by this component type.
        *
        * @return an array of stage descriptors.
  
  
  
  1.2       +48 -2     avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java
  
  Index: XMLServiceCreator.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/builder/XMLServiceCreator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XMLServiceCreator.java	24 Nov 2002 12:58:27 -0000	1.1
  +++ XMLServiceCreator.java	19 Dec 2002 10:52:47 -0000	1.2
  @@ -52,6 +52,7 @@
   
   import java.io.InputStream;
   import java.util.Properties;
  +import java.util.ArrayList;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
   import org.apache.avalon.framework.Version;
  @@ -59,6 +60,8 @@
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.meta.ConfigurationBuilder;
   import org.apache.avalon.meta.info.Service;
  +import org.apache.avalon.meta.info.EntryDescriptor;
  +import org.apache.avalon.meta.info.ReferenceDescriptor;
   import org.xml.sax.InputSource;
   
   /**
  @@ -119,10 +122,12 @@
   
           final Properties attributes =
               buildAttributes( info.getChild( "attributes" ) );
  +        final EntryDescriptor[] entries =
  +            buildEntries( info.getChild( "entries" ).getChildren("entry") );
           final String versionString = info.getChild( "version" ).getValue( "1.0" );
           final Version version = buildVersion( versionString );
   
  -        return new Service( classname, version, attributes );
  +        return new Service( new ReferenceDescriptor( classname, version ), entries, attributes
);
       }
   
       /**
  @@ -150,6 +155,47 @@
           }
           return attributes;
       }
  +
  +    /**
  +     * A utility method to build an array of {@link EntryDescriptor}
  +     * objects from specified configuration.
  +     *
  +     * @param entrySet the set of entrys to build
  +     * @return the created {@link EntryDescriptor}s
  +     * @throws ConfigurationException if an error occurs
  +     */
  +    protected EntryDescriptor[] buildEntries( final Configuration[] entrySet )
  +        throws ConfigurationException
  +    {
  +        final ArrayList entrys = new ArrayList();
  +
  +        for( int i = 0; i < entrySet.length; i++ )
  +        {
  +            final EntryDescriptor service = buildEntry( entrySet[ i ] );
  +            entrys.add( service );
  +        }
  +
  +        return (EntryDescriptor[])entrys.toArray( new EntryDescriptor[ entrys.size() ]
);
  +    }
  +
  +    /**
  +     * Create a {@link EntryDescriptor} from configuration.
  +     *
  +     * @param config the configuration
  +     * @return the created {@link EntryDescriptor}
  +     * @throws ConfigurationException if an error occurs
  +     */
  +    protected EntryDescriptor buildEntry( final Configuration config )
  +        throws ConfigurationException
  +    {
  +        final String key = config.getAttribute( "key" );
  +        final String type = config.getAttribute( "type", "java.lang.String" );
  +        final boolean optional =
  +            config.getAttributeAsBoolean( "optional", false );
  +
  +        return new EntryDescriptor( key, type, optional );
  +    }
  +
   
       /**
        * A utility method to parse a Version object from specified string.
  
  
  
  1.4       +6 -45     avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java
  
  Index: XMLTypeCreator.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/info/builder/XMLTypeCreator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLTypeCreator.java	17 Dec 2002 09:56:20 -0000	1.3
  +++ XMLTypeCreator.java	19 Dec 2002 10:52:47 -0000	1.4
  @@ -360,56 +360,17 @@
           throws ConfigurationException
       {
           final EntryDescriptor[] entrys =
  -            buildEntries( context.getChildren( "entry" ) );
  +          buildEntries( context.getChildren( "entry" ) );
   
           final Properties attributes =
  -            buildAttributes( context.getChild( "attributes" ) );
  +          buildAttributes( context.getChild( "attributes" ) );
   
  -        final ReferenceDescriptor type = 
  +        ReferenceDescriptor reference = 
             createReference( context.getAttribute( "type", Context.class.getName() ) );
   
  -        return new ContextDescriptor( type, entrys, attributes );
  +        return new ContextDescriptor( reference, entrys, attributes );
       }
   
  -    /**
  -     * A utility method to build an array of {@link EntryDescriptor}
  -     * objects from specified configuration.
  -     *
  -     * @param entrySet the set of entrys to build
  -     * @return the created {@link EntryDescriptor}s
  -     * @throws ConfigurationException if an error occurs
  -     */
  -    protected EntryDescriptor[] buildEntries( final Configuration[] entrySet )
  -        throws ConfigurationException
  -    {
  -        final ArrayList entrys = new ArrayList();
  -
  -        for( int i = 0; i < entrySet.length; i++ )
  -        {
  -            final EntryDescriptor service = buildEntry( entrySet[ i ] );
  -            entrys.add( service );
  -        }
  -
  -        return (EntryDescriptor[])entrys.toArray( new EntryDescriptor[ entrys.size() ]
);
  -    }
  -
  -    /**
  -     * Create a {@link EntryDescriptor} from configuration.
  -     *
  -     * @param config the configuration
  -     * @return the created {@link EntryDescriptor}
  -     * @throws ConfigurationException if an error occurs
  -     */
  -    protected EntryDescriptor buildEntry( final Configuration config )
  -        throws ConfigurationException
  -    {
  -        final String key = config.getAttribute( "key" );
  -        final String type = config.getAttribute( "type", "java.lang.String" );
  -        final boolean optional =
  -            config.getAttributeAsBoolean( "optional", false );
  -
  -        return new EntryDescriptor( key, type, optional );
  -    }
   
       /**
        * A utility method to build an array of {@link ServiceDescriptor}
  @@ -537,7 +498,7 @@
           else
           {
               type = path;
  -            version = buildVersion( "1.0" );
  +            version = buildVersion( "1.0.0" );
           }
           return new ReferenceDescriptor( type, version );
       }
  
  
  
  1.3       +2 -2      avalon-sandbox/meta/src/java/org/apache/avalon/meta/model/verifier/ProfileVerifier.java
  
  Index: ProfileVerifier.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/meta/src/java/org/apache/avalon/meta/model/verifier/ProfileVerifier.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProfileVerifier.java	7 Dec 2002 09:48:58 -0000	1.2
  +++ ProfileVerifier.java	19 Dec 2002 10:52:47 -0000	1.3
  @@ -180,7 +180,7 @@
   
           final Type info = profile.getType();
           final ContextDescriptor context = info.getContext();
  -        final int count = context.getEntrys().length;
  +        final int count = context.getEntries().length;
   
           if( !Contextualizable.class.isAssignableFrom( clazz ) )
           {
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message