You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/07/31 19:21:49 UTC
svn commit: rev 31048 - in avalon/trunk/runtime/composition: api/src/java/org/apache/avalon/composition/data impl/src/java/org/apache/avalon/composition/data/builder impl/src/java/org/apache/avalon/composition/model/impl
Author: niclas
Date: Sat Jul 31 10:21:49 2004
New Revision: 31048
Modified:
avalon/trunk/runtime/composition/api/src/java/org/apache/avalon/composition/data/TargetDirective.java
avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLTargetsCreator.java
avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java
avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java
Log:
Added Parameters override support in composition.
Modified: avalon/trunk/runtime/composition/api/src/java/org/apache/avalon/composition/data/TargetDirective.java
==============================================================================
--- avalon/trunk/runtime/composition/api/src/java/org/apache/avalon/composition/data/TargetDirective.java (original)
+++ avalon/trunk/runtime/composition/api/src/java/org/apache/avalon/composition/data/TargetDirective.java Sat Jul 31 10:21:49 2004
@@ -20,6 +20,7 @@
import java.io.Serializable;
import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.logging.data.CategoriesDirective;
@@ -48,6 +49,11 @@
private final Configuration m_config;
/**
+ * The parameters.
+ */
+ private final Parameters m_params;
+
+ /**
* The configuration.
*/
private final CategoriesDirective m_categories;
@@ -67,19 +73,43 @@
* @param path target path
* @param configuration the configuration
* @param categories the logging category directives
+ * @param profile a security profile
+ */
+ public TargetDirective(
+ final String path,
+ final Configuration configuration,
+ final CategoriesDirective categories,
+ final String profile )
+ {
+ this( path, configuration, null, categories, profile );
+ }
+
+ /**
+ * Create a new Target instance.
+ *
+ * @param path target path
+ * @param configuration the configuration
+ * @param parameters the parameters
+ * @param categories the logging category directives
+ * @param profile a security profile
+ *
+ * @since 2.1.0
*/
public TargetDirective(
final String path,
final Configuration configuration,
+ final Parameters parameters,
final CategoriesDirective categories,
final String profile )
{
m_path = path;
m_config = configuration;
+ m_params = parameters;
m_categories = categories;
m_profile = profile;
}
+
//========================================================================
// implementation
//========================================================================
@@ -105,6 +135,16 @@
}
/**
+ * Return the target parameters.
+ *
+ * @return the target parameters
+ */
+ public Parameters getParameters()
+ {
+ return m_params;
+ }
+
+ /**
* Return the name of the assigned security profile.
*
* @return the assigned profile name (possibly null)
@@ -132,6 +172,7 @@
{
return "[target: " + getPath() + ", "
+ (getConfiguration() != null ) + ", "
+ + (getParameters() != null ) + ", "
+ (getCategoriesDirective() != null ) + ", "
+ (getSecurityProfileName() != null )
+ " ]";
Modified: avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLTargetsCreator.java
==============================================================================
--- avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLTargetsCreator.java (original)
+++ avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/data/builder/XMLTargetsCreator.java Sat Jul 31 10:21:49 2004
@@ -23,6 +23,8 @@
import org.apache.avalon.composition.data.Targets;
import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.parameters.Parameters;
/**
* Handles internalization of an XML based description of a {@link Targets}
@@ -34,7 +36,7 @@
public class XMLTargetsCreator extends XMLComponentProfileCreator
{
/**
- * Create a set of target directives from the confiugration.
+ * Create a set of target directives from the configuration.
* @param config the targets configuration
*/
public Targets createTargets( Configuration config )
@@ -46,6 +48,26 @@
{
targets[i] = createTargetDirective( children[i] );
}
+
+ //
+ // check that no non-target elements are declared
+ //
+
+ Configuration[] nodes = config.getChildren();
+ for( int i=0; i<nodes.length; i++ )
+ {
+ final Configuration node = nodes[i];
+ final String name = node.getName();
+ if( ! name.equals( "target" ) )
+ {
+ final String error =
+ "Unrecognized configuration element '"
+ + name + "' is declared within a targets directive. "
+ + "A 'targets' directive may only contain 'target' elements.";
+ throw new ConfigurationException( error );
+ }
+ }
+
return new Targets( targets );
}
@@ -91,9 +113,24 @@
final Configuration conf = config.getChild( "configuration", false );
//
+ // get the overriding parameters
+ //
+
+ final Configuration paramsConfig = config.getChild( "parameters", false );
+ final Parameters params = getTargetParameters( paramsConfig );
+
+ //
// and create the target directive
//
- return new TargetDirective( name, conf, categories, profile );
+ return new TargetDirective( name, conf, params, categories, profile );
}
+
+ private Parameters getTargetParameters( Configuration config ) throws ConfigurationException
+ {
+ if( null == config )
+ return null;
+ return Parameters.fromConfiguration( config );
+ }
+
}
Modified: avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java
==============================================================================
--- avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java (original)
+++ avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultComponentModel.java Sat Jul 31 10:21:49 2004
@@ -151,15 +151,32 @@
if( isParameterizable() )
{
+ Parameters staticDefaults = m_context.getType().getParameters();
final Parameters parameters =
m_context.getComponentProfile().getParameters();
if( parameters != null )
{
- m_parameters = parameters;
+ if( null == staticDefaults )
+ {
+ m_parameters = parameters;
+ }
+ else
+ {
+ m_parameters = new Parameters();
+ m_parameters.merge( staticDefaults );
+ m_parameters.merge( parameters );
+ }
}
else
{
- m_parameters = Parameters.EMPTY_PARAMETERS;
+ if( null == staticDefaults )
+ {
+ m_parameters = Parameters.EMPTY_PARAMETERS;
+ }
+ else
+ {
+ m_parameters = staticDefaults;
+ }
}
}
@@ -585,14 +602,14 @@
* parameters value.
*
* @param parameters the supplied parameters
- * @param policy if TRUE the supplied parameters replaces the current
- * parameters value otherwise the existing and supplied values
- * are aggregrated
+ * @param policy if TRUE the supplied parameters are merged with existing
+ * parameters otherwise the supplied parameters replace any existing
+ * parameters
* @exception IllegalStateException if the component type backing the
* model does not implement the parameteriazable interface
* @exception NullPointerException if the supplied parameters are null
*/
- public void setParameters( Parameters parameters, boolean policy )
+ public void setParameters( Parameters parameters, boolean merge )
throws IllegalStateException
{
if( !isParameterizable() )
@@ -610,7 +627,7 @@
throw new NullPointerException( "parameters" );
}
- if( policy )
+ if( merge )
{
Properties props = Parameters.toProperties( m_parameters );
Properties suppliment = Parameters.toProperties( parameters );
@@ -638,14 +655,18 @@
/**
* Return the parameters to be applied to the component.
- * If the the component type does not implementation the
- * Parameterizable interface, the implementation returns null.
*
* @return the assigned parameters
*/
public Parameters getParameters()
{
- return m_parameters;
+ Parameters params = new Parameters();
+ if( null != m_parameters )
+ {
+ params.merge( m_parameters );
+ }
+ params.makeReadOnly();
+ return params;
}
/**
@@ -682,7 +703,7 @@
* configuration may suppliment or replace the existing configuration.
*
* @param config the supplied configuration
- * @param policy if TRUE the supplied configuration replaces the current
+ * @param policy if FALSE the supplied configuration replaces the current
* configuration otherwise the resoved configuration shall be layed above
* the configuration supplied with the profile which in turn is layer above
* the type default configuration (if any)
Modified: avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java
==============================================================================
--- avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java (original)
+++ avalon/trunk/runtime/composition/impl/src/java/org/apache/avalon/composition/model/impl/DefaultContainmentModel.java Sat Jul 31 10:21:49 2004
@@ -69,6 +69,7 @@
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.meta.info.DependencyDescriptor;
import org.apache.avalon.meta.info.ServiceDescriptor;
@@ -811,10 +812,16 @@
if( model instanceof ComponentModel )
{
ComponentModel deployment = (ComponentModel) model;
- if( target.getConfiguration() != null )
+ Configuration config = target.getConfiguration();
+ if( config != null )
{
- deployment.setConfiguration(
- target.getConfiguration() );
+ deployment.setConfiguration( config );
+ }
+
+ Parameters params = target.getParameters();
+ if( params != null )
+ {
+ deployment.setParameters( params );
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org