mcconnell    2004/01/03 10:14:59

  Modified:    merlin/composition/api/src/java/org/apache/avalon/composition/model
                        Tag: Ver_3_4 ContextModel.java DependencyModel.java
                        StageModel.java
               
merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl
                        Tag: Ver_3_4 DefaultContextModel.java
                        DefaultDependencyModel.java
                        DefaultDeploymentModel.java DefaultStageModel.java
                        Resources.properties
  Log:
  Incorporate assembly logic into DeploymentModel.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.1.1.1.2.1 +2 -2      
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ContextModel.java
  
  Index: ContextModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/ContextModel.java,v
  retrieving revision 1.1.1.1
  retrieving revision 1.1.1.1.2.1
  diff -u -r1.1.1.1 -r1.1.1.1.2.1
  --- ContextModel.java 24 Sep 2003 09:31:16 -0000      1.1.1.1
  +++ ContextModel.java 3 Jan 2004 18:14:58 -0000       1.1.1.1.2.1
  @@ -59,7 +59,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public interface ContextModel
  +public interface ContextModel extends Dependent
   {
       /**
        * The default context strategy interface class.
  
  
  
  1.1.1.1.2.1 +2 -3      
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/DependencyModel.java
  
  Index: DependencyModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/DependencyModel.java,v
  retrieving revision 1.1.1.1
  retrieving revision 1.1.1.1.2.1
  diff -u -r1.1.1.1 -r1.1.1.1.2.1
  --- DependencyModel.java      24 Sep 2003 09:31:16 -0000      1.1.1.1
  +++ DependencyModel.java      3 Jan 2004 18:14:58 -0000       1.1.1.1.2.1
  @@ -60,7 +60,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public interface DependencyModel
  +public interface DependencyModel extends Dependent
   {
      /**
       * Return the dependency descriptor for the model.
  @@ -89,5 +89,4 @@
       * @return the accepted candidates in ranked order
       */
       ServiceDescriptor[] filter( ServiceDescriptor[] candidates );
  -
   }
  
  
  
  1.1.1.1.2.1 +2 -3      
avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/StageModel.java
  
  Index: StageModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/api/src/java/org/apache/avalon/composition/model/StageModel.java,v
  retrieving revision 1.1.1.1
  retrieving revision 1.1.1.1.2.1
  diff -u -r1.1.1.1 -r1.1.1.1.2.1
  --- StageModel.java   24 Sep 2003 09:31:22 -0000      1.1.1.1
  +++ StageModel.java   3 Jan 2004 18:14:58 -0000       1.1.1.1.2.1
  @@ -61,7 +61,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public interface StageModel
  +public interface StageModel extends Dependent
   {
      /**
       * Return the stage descriptor for the model.
  @@ -91,5 +91,4 @@
       * @return the accepted candidates in ranked order
       */
       ExtensionDescriptor[] filter( ExtensionDescriptor[] candidates );
  -
   }
  
  
  
  No                   revision
  No                   revision
  1.3.2.1   +5 -5      
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContextModel.java
  
  Index: DefaultContextModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContextModel.java,v
  retrieving revision 1.3
  retrieving revision 1.3.2.1
  diff -u -r1.3 -r1.3.2.1
  --- DefaultContextModel.java  1 Jan 2004 23:34:45 -0000       1.3
  +++ DefaultContextModel.java  3 Jan 2004 18:14:58 -0000       1.3.2.1
  @@ -55,6 +55,7 @@
   import java.lang.reflect.Constructor;
   
   import org.apache.avalon.composition.model.ContextModel;
  +import org.apache.avalon.composition.model.Model;
   import org.apache.avalon.composition.model.ModelException;
   import org.apache.avalon.composition.model.DeploymentContext;
   import org.apache.avalon.excalibur.i18n.ResourceManager;
  @@ -77,7 +78,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public class DefaultContextModel extends AbstractLogEnabled implements ContextModel
  +public class DefaultContextModel extends DefaultDependent implements ContextModel
   {
       //==============================================================
       // static
  @@ -129,8 +130,7 @@
         ContextDirective directive, DeploymentContext context )
         throws ModelException
       {
  -        if( null == logger ) 
  -          throw new NullPointerException( "logger" );
  +        super( logger );
   
           if( null == descriptor ) 
             throw new NullPointerException( "descriptor" );
  @@ -265,7 +265,7 @@
       }
   
      /**
  -    * Return the context objct established for the component.
  +    * Return the context object established for the component.
       * 
       * @return the context object
       */
  
  
  
  1.4.2.1   +13 -12    
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDependencyModel.java
  
  Index: DefaultDependencyModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDependencyModel.java,v
  retrieving revision 1.4
  retrieving revision 1.4.2.1
  diff -u -r1.4 -r1.4.2.1
  --- DefaultDependencyModel.java       22 Dec 2003 21:46:02 -0000      1.4
  +++ DefaultDependencyModel.java       3 Jan 2004 18:14:58 -0000       1.4.2.1
  @@ -52,6 +52,7 @@
   
   import java.util.ArrayList;
   
  +import org.apache.avalon.composition.model.Model;
   import org.apache.avalon.composition.model.DependencyModel;
   import org.apache.avalon.composition.model.ModelException;
   import org.apache.avalon.composition.data.DependencyDirective;
  @@ -69,18 +70,18 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public class DefaultDependencyModel extends AbstractLogEnabled implements 
DependencyModel
  +public class DefaultDependencyModel extends DefaultDependent implements 
DependencyModel
   {
  -    //==============================================================
  +    //--------------------------------------------------------------
       // static
  -    //==============================================================
  +    //--------------------------------------------------------------
   
       private static final Resources REZ =
               ResourceManager.getPackageResources( DefaultDependencyModel.class );
   
  -    //==============================================================
  +    //--------------------------------------------------------------
       // immutable state
  -    //==============================================================
  +    //--------------------------------------------------------------
   
       private final DependencyDescriptor m_descriptor;
   
  @@ -92,9 +93,9 @@
   
       private final String m_source;
   
  -    //==============================================================
  +    //--------------------------------------------------------------
       // constructor
  -    //==============================================================
  +    //--------------------------------------------------------------
   
      /**
       * Creation of a new dependency model.
  @@ -110,10 +111,10 @@
         final DependencyDescriptor descriptor, DependencyDirective directive )
         throws ModelException
       {
  -        if( logger == null ) throw new NullPointerException( "logger" );
  +        super( logger );
  +
           if( descriptor == null ) throw new NullPointerException( "descriptor" );
   
  -        enableLogging( logger );
           m_descriptor = descriptor;
           m_directive = directive;
           m_partition = partition;
  @@ -146,9 +147,9 @@
           }
       }
   
  -    //==============================================================
  +    //--------------------------------------------------------------
       // DependencyModel
  -    //==============================================================
  +    //--------------------------------------------------------------
   
      /**
       * Return the dependency descriptor.
  
  
  
  1.9.2.2   +177 -3    
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDeploymentModel.java
  
  Index: DefaultDeploymentModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultDeploymentModel.java,v
  retrieving revision 1.9.2.1
  retrieving revision 1.9.2.2
  diff -u -r1.9.2.1 -r1.9.2.2
  --- DefaultDeploymentModel.java       3 Jan 2004 15:38:50 -0000       1.9.2.1
  +++ DefaultDeploymentModel.java       3 Jan 2004 18:14:58 -0000       1.9.2.2
  @@ -60,6 +60,7 @@
   import org.apache.avalon.composition.model.DeploymentModel;
   import org.apache.avalon.composition.model.DeploymentContext;
   import org.apache.avalon.composition.model.Model;
  +import org.apache.avalon.composition.model.ModelRepository;
   import org.apache.avalon.composition.model.ModelException;
   import org.apache.avalon.composition.model.SystemContext;
   import org.apache.avalon.composition.model.StageModel;
  @@ -279,6 +280,134 @@
                   return;
               }
   
  +            if( getLogger().isDebugEnabled() )
  +            {
  +                getLogger().debug( "assembly phase" );
  +            }
  +
  +            ModelRepository repository = 
  +              m_context.getContainmentContext().getModelRepository();
  +
  +            //
  +            // check if we need a contextualization handler
  +            //
  +
  +            if( getContextModel() != null )
  +            {
  +                Class clazz = getContextModel().getStrategyClass();
  +                if( !clazz.getName().equals( 
ContextModel.DEFAULT_STRATEGY_CLASSNAME ) )
  +                {
  +                    //
  +                    // we need to load a deployment phase context strategy handler
  +                    // using the strategy interface as the extension handler key
  +                    //
  +
  +                    StageDescriptor stage = 
  +                      new StageDescriptor( clazz.getName() );
  +                    Model provider = repository.getModel( stage );
  +                    if( null == provider )
  +                    {
  +                        final String error = 
  +                          REZ.getString( 
  +                            "assembly.context.error",
  +                            getQualifiedName(), 
  +                            clazz.getName() );
  +                        throw new AssemblyException( error );
  +                    }
  +                    else
  +                    {
  +                        getContextModel().setProvider( provider );
  +                    }
  +
  +                    /*
  +                    #
  +                    # TO DO = verify that the stage is a context handler
  +                    #
  +
  +                    Class handler = m_contextProvider.getDeploymentClass();
  +
  +                    if( !ContextualizationHandler.class.isAssignableFrom( handler ) 
)
  +                    {
  +                        final String error = 
  +                          REZ.getString( 
  +                            "assembly.context-strategy.bad-class.error",
  +                            handler.getName() );
  +                        throw new AssemblyException( error );
  +                    }
  +                    */
  +
  +                    if( getLogger().isDebugEnabled() )
  +                    {
  +                        getLogger().debug( 
  +                          "assigning context provider: " + provider );
  +                    }
  +                }
  +            }
  +
  +            //
  +            // get the dependency models for the type and resolve providers
  +            //
  +
  +            DependencyModel[] dependencies = getDependencyModels();
  +            for( int i=0; i<dependencies.length; i++ )
  +            {
  +                DependencyModel dependency = dependencies[i];
  +                final String key = dependency.getDependency().getKey();
  +                final Model model = 
  +                  repository.getModel( dependency.getDependency() );
  +                if( null == model )
  +                {
  +                    final String error = 
  +                      REZ.getString( 
  +                        "assembly.dependency.error",
  +                        getQualifiedName(), key );
  +                    throw new AssemblyException( error );
  +                }
  +                else
  +                {
  +                    dependency.setProvider( model );
  +                    if( getLogger().isDebugEnabled() )
  +                    {
  +                        getLogger().debug( 
  +                          "assigning service provider for key (" 
  +                          + key + "): " 
  +                          + model );
  +                    }
  +                }
  +            }
  +
  +            //
  +            // get the stage models for the type and resolve providers
  +            //
  +
  +            StageModel[] stages = getStageModels();
  +            for( int i=0; i<stages.length; i++ )
  +            {
  +                StageModel stage = stages[i];
  +                final String key = stage.getStage().getKey();
  +                final Model model = 
  +                  repository.getModel( stage.getStage() );
  +                if( null == model )
  +                {
  +                    final String error = 
  +                      REZ.getString( 
  +                        "assembly.stage.error",
  +                        getQualifiedName(), key );
  +                    throw new AssemblyException( error );
  +                }
  +                else
  +                {
  +                    stage.setProvider( model );
  +                    if( getLogger().isDebugEnabled() )
  +                    {
  +                        getLogger().debug( 
  +                          "assigning stage provider (" 
  +                          + key + "): " 
  +                          + model );
  +                    }
  +                }
  +            }
  +
               m_assembly.setEnabled( true );
           }
       }
  @@ -295,6 +424,27 @@
                   return;
               }
   
  +            getLogger().debug( "dissassembly phase" );
  +
  +            StageModel[] stages = getStageModels();
  +            for( int i=0; i<stages.length; i++ )
  +            {
  +                StageModel stage = stages[i];
  +                stage.clearProvider();
  +            }
  +
  +            DependencyModel[] dependencies = getDependencyModels();
  +            for( int i=0; i<dependencies.length; i++ )
  +            {
  +                DependencyModel dependency = dependencies[i];
  +                dependency.clearProvider();
  +            }
  +
  +            if( null != getContextModel() )
  +            {
  +                getContextModel().clearProvider();
  +            }
  +
               m_assembly.setEnabled( false );
           }
       }
  @@ -313,7 +463,31 @@
                throw new IllegalStateException( error );
           }
   
  -        return new Model[0];
  +        final ArrayList list = new ArrayList();
  +        if( null != getContextModel() )
  +        {
  +            Model provider = getContextModel().getProvider();
  +            if( provider != null )
  +            {
  +                list.add( provider );
  +            }
  +        }
  +        
  +        StageModel[] stages = getStageModels();
  +        for( int i=0; i<stages.length; i++ )
  +        {
  +            StageModel stage = stages[i];
  +            list.add( stage.getProvider() );
  +        }
  +
  +        DependencyModel[] dependencies = getDependencyModels();
  +        for( int i=0; i<dependencies.length; i++ )
  +        {
  +            DependencyModel dependency = dependencies[i];
  +            list.add( dependency.getProvider() );
  +        }
  +
  +        return (Model[]) list.toArray( new Model[0] );
       }
   
       //--------------------------------------------------------------
  @@ -330,7 +504,6 @@
           return m_context.getType().getServices();
       }
   
  -
      /**
       * Return TRUE is this model is capable of supporting a supplied 
       * depedendency.
  @@ -690,6 +863,7 @@
       {
           return m_contextModel;
       }
  +
   
      /**
       * Return the dependency models for this component type.
  
  
  
  1.2.2.1   +5 -4      
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultStageModel.java
  
  Index: DefaultStageModel.java
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultStageModel.java,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- DefaultStageModel.java    28 Oct 2003 20:21:00 -0000      1.2
  +++ DefaultStageModel.java    3 Jan 2004 18:14:58 -0000       1.2.2.1
  @@ -52,6 +52,7 @@
   
   import java.util.ArrayList;
   
  +import org.apache.avalon.composition.model.Model;
   import org.apache.avalon.composition.model.StageModel;
   import org.apache.avalon.composition.model.ModelException;
   import org.apache.avalon.composition.data.StageDirective;
  @@ -69,7 +70,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
    * @version $Revision$ $Date$
    */
  -public class DefaultStageModel extends AbstractLogEnabled implements StageModel
  +public class DefaultStageModel extends DefaultDependent implements StageModel
   {
       //==============================================================
       // static
  @@ -105,10 +106,10 @@
         final StageDescriptor descriptor, StageDirective directive )
         throws ModelException
       {
  -        if( logger == null ) throw new NullPointerException( "logger" );
  +        super( logger );
  +
           if( descriptor == null ) throw new NullPointerException( "descriptor" );
   
  -        enableLogging( logger );
           m_descriptor = descriptor;
           m_directive = directive;
   
  
  
  
  1.2.2.1   +12 -1     
avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/Resources.properties
  
  Index: Resources.properties
  ===================================================================
  RCS file: 
/home/cvs/avalon/merlin/composition/impl/src/java/org/apache/avalon/composition/model/impl/Resources.properties,v
  retrieving revision 1.2
  retrieving revision 1.2.2.1
  diff -u -r1.2 -r1.2.2.1
  --- Resources.properties      7 Oct 2003 17:41:36 -0000       1.2
  +++ Resources.properties      3 Jan 2004 18:14:58 -0000       1.2.2.1
  @@ -40,6 +40,16 @@
   deployment.context.internal.error=The context key [{0}] was recognized but could 
not be fulfilled as no context entry manager has be assigned to handle the request.
   deployment.registration.override.error=Illegal attempt to override an existing 
model entry [{0}].
   
  +assembly.context.error=Assembly of appliance [{0}] could not be completed due to an 
unresolvable custom contextualization stage dependency for the interface [{1}].
  +assembly.dependency.error=Assembly of appliance [{0}] could not be completed due to 
an unresolvable service dependency for the key [{1}].
  +assembly.stage.error=Assembly of appliance [{0}] could not be completed due to an 
unresolvable stage dependency for the key [{1}].
  +assembly.transitional.error=Illegal attempt to assemble [{0}] while the appliance 
is in a state of transition.
  +assembly.reassembly.error=Illegal attempt to re-assemble appliance [{0}].
  +assembly.dissassembly.transitional.error=Illegal attempt to dissassemble [{0}] 
while the appliance is in a state of transition.
  +assembly.dissassembly.state.error=Illegal attempt to dissassemble a dissassembled 
appliance [{0}].
  +assembly.context-strategy.bad-class.error=Context strategy handler class [{0}] does 
not implement the org.apache.avalon.activation.lifecycle.ContextualizationHandler 
interface defined in the container classloader.
  +
  +
   # DefaultSystemContext
   # ====================
   system.context.base.not-a-directory.error="Base directory argument is not a 
directory: {0}.
  @@ -115,4 +125,5 @@
   dependency.bad-key.error=The supplied key [{0}] is unknown within the model 
[{1}{2}].
   dependency.incompatible.error=Cannot process a selection for key [{0}] because an 
source directive has been declared.
   dependency.invalid-criteria.error=Unknown criteria: [{0}] declared under the 
selection criteria referencing the feature: [{1}].
  -dependency.path.debug=Assigned source [{0}] for the dependency key [{1}].
  \ No newline at end of file
  +dependency.path.debug=Assigned source [{0}] for the dependency key [{1}].
  +
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to