You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/11/18 12:02:29 UTC
cvs commit: jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/builder ApplianceBuilder.java ApplianceCreator.java package.html
mcconnell 2002/11/18 03:02:29
Added: assembly/src/java/org/apache/excalibur/assembly/appliance
Appliance.java ApplianceException.java
ApplianceRuntimeException.java
DefaultAppliance.java package.html
assembly/src/java/org/apache/excalibur/assembly/appliance/builder
ApplianceBuilder.java ApplianceCreator.java
package.html
Log:
Initial commit of the appliance abstraction. An appliance is an object that
encapsulates a profile togetherr with lifecycle and lifestyle handling capabilities
and actis as a gateway between and component instance and a container
theat is using and managing appliance instances.
Revision Changes Path
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/Appliance.java
Index: Appliance.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance;
import org.apache.excalibur.meta.info.StageDescriptor;
import org.apache.excalibur.meta.model.Profile;
/**
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:28 $
*/
public interface Appliance
{
/**
* Set the activation policy for the component. If TRUE, activation
* will occur at startup. If false, activation will be deferred to
* the first lookup invocation if any (i.e. lazy activation).
*
* @return the activation policy
*/
void setActivationPolicy( boolean policy );
/**
* Return the activation policy for the component. If TRUE, activation
* will occur at startup. If false, activation will be deferred to
* the first lookup invocation if any (i.e. lazy activation).
*
* @return the activation policy
*/
boolean getActivationPolicy();
/**
* Test is this profile is enabled. A profile is enabled unless explicitly disabled by an
* assembly directive, or implicity disabled as a result of an assembly failure.
*
* @return TRUE if the profile is enabled.
* @see #setEnabled( boolean )
*/
boolean isEnabled();
/**
* Set the enabled status of the profile to the supplied value.
* @param value the enabled status - TRUE or FALSE
*/
void setEnabled( boolean value );
/**
* Return the assigned service providers.
*
* @return the set of service provider appliances.
*/
Appliance[] getServiceProviders();
/**
* Return the dependency associations for component type with specified role.
*
* @param role the dependency role name
* @return the dependency metadata for component with specified role.
*/
Appliance getServiceProvider( final String role );
/**
* Add an association for a service dependency.
* @param role the role against which the supplied resource is to be associated
* @param appliance the appliance that will fulfill the provider dependency
* @return an association binding the role and provider within the scope of the
* profile's set of service depedencies
*/
void addServiceProvider( String role, Appliance appliance );
/**
* Return the assigned extension providers.
*
* @return the set of extension provider appliances.
*/
Appliance[] getExtensionProviders();
/**
* Returns the appliace assigned to handle the components lifecycle stage.
* @param stage the lifecycle stage specification
* @return a reference to the stage extension
*/
Appliance getExtensionProvider( StageDescriptor stage );
/**
* Add a lifecycle stage extension.
* @param stage the identifier of the stage to assign the manager to
* @param appliance the appliance that will handle the stage
*/
void addExtensionProvider( StageDescriptor stage, Appliance appliance );
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/ApplianceException.java
Index: ApplianceException.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance;
import org.apache.avalon.framework.CascadingException;
/**
* Exception to indicate that there was a appliance related error.
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:28 $
*/
public final class ApplianceException
extends CascadingException
{
/**
* Construct a new <code>ApplianceException</code> instance.
*
* @param message The detail message for this exception.
*/
public ApplianceException( final String message )
{
this( message, null );
}
/**
* Construct a new <code>ApplianceException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
public ApplianceException( final String message, final Throwable throwable )
{
super( message, throwable );
}
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/ApplianceRuntimeException.java
Index: ApplianceRuntimeException.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance;
import org.apache.avalon.framework.CascadingRuntimeException;
/**
* Exception to indicate that there was an appliance related runtime error.
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:28 $
*/
public final class ApplianceRuntimeException
extends CascadingRuntimeException
{
/**
* Construct a new <code>ApplianceRuntimeException</code> instance.
*
* @param message The detail message for this exception.
*/
public ApplianceRuntimeException( final String message )
{
this( message, null );
}
/**
* Construct a new <code>ApplianceRuntimeException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
public ApplianceRuntimeException( final String message, final Throwable throwable )
{
super( message, throwable );
}
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/DefaultAppliance.java
Index: DefaultAppliance.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance;
import java.util.Map;
import java.util.Hashtable;
import org.apache.excalibur.meta.info.StageDescriptor;
import org.apache.excalibur.meta.model.Profile;
/**
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:28 $
*/
public class DefaultAppliance implements Appliance
{
//=====================================================================
// state
//=====================================================================
/**
* The underlying profile that this appliance is managing.
*/
private Profile m_profile;
/**
* The enabled status of the profile. Normally a profile is enabled however, a
* failure to assemble will result in the disabling of the profile.
*/
private boolean m_enabled = true;
/**
* The activation policy - TRUE if activation on startup, FALSE to activate on request.
*/
private boolean m_activation = true;
/**
* The dependencies providers keyed by role name.
*/
private final Hashtable m_providers = new Hashtable();
/**
* The stage extension providers keyed by stage descriptor.
*/
private final Hashtable m_managers = new Hashtable();
//=====================================================================
// constructor
//=====================================================================
/**
* Create an new Appliance instance.
*
* @param profile the component profile to be managed by the appliance
* @param enabled the enabled state of the appliance
* @param policy the appliance activation policy - TRUE if the appliance should
* should be auto-activated on startup of the host container
*/
public DefaultAppliance( final Profile profile,
final boolean enabled,
final boolean policy )
{
if( profile == null )
{
throw new NullPointerException("profile");
}
m_profile = profile;
m_enabled = enabled;
m_activation = policy;
}
//=====================================================================
// implementation
//=====================================================================
/**
* Set the activation policy for the component. If TRUE, activation
* will occur at startup. If false, activation will be deferred to
* the first lookup invocation if any (i.e. lazy activation).
*
* @return the activation policy
*/
public void setActivationPolicy( boolean policy )
{
m_activation = policy;
}
/**
* Return the activation policy for the component. If TRUE, activation
* will occur at startup. If false, activation will be deferred to
* the first lookup invocation if any (i.e. lazy activation).
*
* @return the activation policy
*/
public boolean getActivationPolicy()
{
return m_activation;
}
/**
* Test is this profile is enabled. A profile is enabled unless explicitly disabled by an
* assembly directive, or implicity disabled as a result of an assembly failure.
*
* @return TRUE if the profile is enabled.
* @see #setEnabled( boolean )
*/
public boolean isEnabled()
{
return m_enabled;
}
/**
* Set the enabled status of the profile to the supplied value.
* @param value the enabled status - TRUE or FALSE
*/
public void setEnabled( boolean value )
{
m_enabled = value;
}
/**
* Return the assigned service providers.
*
* @return the set of service provider assignments.
*/
public Appliance[] getServiceProviders()
{
return (Appliance[])m_providers.values().toArray( new Appliance[ 0 ] );
}
/**
* Return the provider appliance for the specified role.
*
* @param role the role name
* @return the appliance servicing the role
*/
public Appliance getServiceProvider( final String role )
{
return (Appliance)m_providers.get( role );
}
/**
* Add an appliance servicing for a dependency.
* @param role the role against which the supplied resource is to be associated
* @param appliance the appliance that will fulfill the dependency
*/
public void addServiceProvider( String role, Appliance appliance )
{
m_providers.put( role, appliance );
}
/**
* Add a lifecycle stage extension.
* @param stage the identifier of the stage to assign the manager to
* @param appliance the appliance that will handle the stage
*/
public void addExtensionProvider( StageDescriptor stage, Appliance appliance )
{
m_managers.put( stage, appliance );
}
/**
* Return the assigned extension providers.
*
* @return the set of extension provider appliances.
*/
public Appliance[] getExtensionProviders()
{
return (Appliance[])m_managers.values().toArray( new Appliance[ 0 ] );
}
/**
* Return a reference to the lifecycle stage extension assigned to handle
* the components custom stage.
* @param stage the lifecycle stage specification
* @return the appliance handling the stage extension
*/
public Appliance getExtensionProvider( StageDescriptor stage )
{
return (Appliance)m_managers.get( stage );
}
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/package.html
Index: package.html
===================================================================
<body>
<p>
The <code>appliace</code> package contains classes and interfaces for the {@link org.apache.excalibur.assembly.appliance.Appliance} and related default implementations supporting the management of the lifecycle and lifestyle of a profiled service provider.
</p>
</body>
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/builder/ApplianceBuilder.java
Index: ApplianceBuilder.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance.builder;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.excalibur.meta.info.Type;
import org.apache.excalibur.meta.model.Profile;
import org.apache.excalibur.meta.model.builder.ProfileCreator;
import org.apache.excalibur.meta.model.builder.ProfileBuilder;
import org.apache.excalibur.assembly.appliance.DefaultAppliance;
import org.apache.excalibur.assembly.appliance.Appliance;
import org.apache.excalibur.assembly.type.TypeManager;
/**
* A ApplianceBuilder is responsible for building an {@link Appliance}
* objects from Configuration objects or profile and supporting policy.
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:29 $
*/
public final class ApplianceBuilder implements Contextualizable
{
//==================================================================
// state
//==================================================================
/**
* The profile building to use when creating the profile encapsulated
* within the appliance declaration (supplied during contextualization).
*/
private ProfileBuilder m_profileBuilder;
/**
* The type building to use when creating the profile encapsulated
* within the appliance declaration (supplied during contextualization).
*/
private TypeManager m_typeManager;
/**
* The profile classloader to use (supplied during contextualization).
*/
private ClassLoader m_loader;
//==================================================================
// Contextualizable
//==================================================================
/**
* Supply of the rutime context by the container managing this builder.
* @param context the context
* @exception ContextException if a required contect value was not supplied
*/
public void contextualize( Context context ) throws ContextException
{
m_typeManager = (TypeManager) context.get("merlin:appliance.type-manager");
m_profileBuilder = (ProfileBuilder) context.get("merlin:appliance.profile-builder");
m_loader = (ClassLoader) context.get("merlin:appliance.classloader");
}
//==================================================================
// ApplianceCreator
//==================================================================
/**
* Create an {@link Appliance} instances from a configuration.
* @param config the appliance description
* @return the appliance
* @exception Exception if an error occurs during appliance creation
*/
public Appliance createAppliance( Configuration config )
throws Exception
{
return build( config );
}
/**
* Create an {@link Appliance} instances from the supplied arguments.
* @param profile the component profile
* @param enabled the inital appliance enabled state
* @param activation the inital activation policy
* @return the appliance
* @exception Exception if an error occurs during appliance creation
*/
public Appliance createAppliance( Profile profile, boolean enabled, boolean activation )
{
return new DefaultAppliance( profile, enabled, activation );
}
//==================================================================
// internal utilities
//==================================================================
/**
* Utility method to get the activation mode for the profile.
* If the activation attribute value is equal to "startup"
* TRUE is returned. If the value if "lazy", FALSE is returned.
* Otherwise the value will be resolved as a boolean.
*
* @param config the profile configuration
* @return boolean TRUE if activation on startup
*/
protected boolean getActivationMode( Configuration config )
{
String value = config.getAttribute( "activation", "lazy" );
if( value.equalsIgnoreCase( "startup" ) )
{
return true;
}
if( value.equalsIgnoreCase( "lazy" ) )
{
return false;
}
return config.getAttributeAsBoolean( "activation", false );
}
/**
* Build an Appliance from a configuration.
*
* @param config the appliance configuration fragment
* @return the created Appliance
* @throws Exception if an error occurs during apliance creation
*/
private Appliance build( Configuration config )
throws Exception
{
final boolean enabled =
config.getAttributeAsBoolean( "enabled", true );
final boolean activation =
getActivationMode( config );
final Configuration conf = config.getChild("profile");
String classname = conf.getAttribute("type");
Type type = m_typeManager.register( classname );
final Profile profile = m_profileBuilder.build( type, conf );
return createAppliance( profile, enabled, activation );
}
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/builder/ApplianceCreator.java
Index: ApplianceCreator.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software
* itself, if and wherever such third-party acknowledgments
* normally appear.
*
* 4. The names "Jakarta", "Avalon", and "Apache Software Foundation"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.excalibur.assembly.appliance.builder;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.excalibur.assembly.appliance.Appliance;
import org.apache.excalibur.meta.model.Profile;
/**
* Appliance creation interface from a Configuration sorce.
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
* @version $Revision: 1.1 $ $Date: 2002/11/18 11:02:29 $
*/
public interface ApplianceCreator
{
/**
* Create an {@link Appliance} instances from a configuration.
* @param config the appliance description
* @return the appliance
* @exception Exception if an error occurs during appliance creation
*/
Appliance createAppliance( Configuration config )
throws Exception;
/**
* Create an {@link Appliance} instances from the supplied arguments.
* @param profile the compoent profile
* @param enabled the inital appliance enabled state
* @param activation the inital activation policy
* @return the appliance
* @exception Exception if an error occurs during appliance creation
*/
Appliance createAppliance( Profile profile, boolean enabled, boolean activation );
}
1.1 jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/assembly/appliance/builder/package.html
Index: package.html
===================================================================
<body>
<p>
The <code>builder</code> package contains classes and interfaces supporting the creation of {@link org.apache.excalibur.assembly.appliance.Appliance } instances.
</p>
</body>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>