mcconnell 2002/12/19 02:50:17
Modified: merlin/src/java/org/apache/avalon/merlin Main.java
merlin/src/java/org/apache/avalon/merlin/container
ContainerLoader.java DefaultContainer.java
DefaultContainer.xinfo
merlin/src/java/org/apache/avalon/merlin/kernel
DefaultKernel.java DefaultKernel.xinfo Kernel.java
merlin/src/test/config block.xml
merlin/src/test/org/apache/avalon/merlin/kernel
KernelTestCase.java
merlin/src/test/org/apache/avalon/playground
StandardComponent.java StandardComponent.xinfo
StandardComponent.xprofile StandardContext.java
StandardService.java
Added: merlin/src/test/org/apache/avalon/playground
Contextualizable.java ContextualizationHandler.java
ContextualizationHandler.xinfo
StandardContext.xservice StandardContextImp.java
Removed: merlin/src/test/org/apache/avalon/playground
StandardComponent.xconfig
StandardContextInterface.java
Log:
Updated to handle assembly changes and incorporation of plug-in context strategy.
Revision Changes Path
1.4 +1 -1
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/Main.java
Index: Main.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/Main.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Main.java 17 Dec 2002 04:41:56 -0000 1.3
+++ Main.java 19 Dec 2002 10:50:16 -0000 1.4
@@ -94,7 +94,7 @@
File base = getWorkingDirectory();
DefaultContext context = new DefaultContext();
- context.put( "urn:urn:avalon:home", base );
+ context.put( "urn:assembly:home", base );
context.makeReadOnly();
File file = getConfigurationFile( base, args );
1.5 +12 -5
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/ContainerLoader.java
Index: ContainerLoader.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/ContainerLoader.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContainerLoader.java 17 Dec 2002 09:59:48 -0000 1.4
+++ ContainerLoader.java 19 Dec 2002 10:50:16 -0000 1.5
@@ -192,7 +192,14 @@
childName = childConfig.getAttribute( "name", "untitled" );
childLogger = logger.getChildLogger( childName );
childEngine = childEngine = createChildEngine( engine, home,
childConfig, childLogger );
- childPartition = partition + "/" + name;
+ if( partition.endsWith( "/" ) )
+ {
+ childPartition = partition + "/" + name;
+ }
+ else
+ {
+ childPartition = partition + name;
+ }
childRegistry = registry.createChild( name );
}
@@ -217,11 +224,11 @@
map.put("urn:merlin:container.registry", registry );
if( partition != null )
{
- map.put("urn:merlin:container.partition", partition );
+ map.put("urn:avalon:partition.name", partition );
}
else
{
- map.put("urn:merlin:container.partition", "" );
+ map.put("urn:avalon:partition.name", "" );
}
ApplianceContext context = new ApplianceContext( descriptor );
context.setDeploymentContext( map );
@@ -340,7 +347,7 @@
engine.enableLogging( logger.getChildLogger( "engine" ) );
engine.configure( config );
DefaultContext context = new DefaultContext();
- context.put( "urn:avalon:home", home );
+ context.put( "urn:assembly:home", home );
context.put( "urn:assembly:engine.extensions", extensions );
context.put( "urn:assembly:engine.classpath", classpath );
context.makeReadOnly();
1.4 +11 -4
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.java
Index: DefaultContainer.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultContainer.java 17 Dec 2002 09:59:48 -0000 1.3
+++ DefaultContainer.java 19 Dec 2002 10:50:16 -0000 1.4
@@ -144,7 +144,7 @@
m_engine = (EngineClassLoader) context.get(
"urn:assembly:engine.classloader" );
m_containers = (List) context.get( "urn:merlin:container.containers" );
m_descriptor = (ContainerDescriptor) context.get(
"urn:merlin:container.descriptor" );
- m_partition = (String) context.get( "urn:merlin:container.partition" );
+ m_partition = (String) context.get( "urn:avalon:partition.name" );
m_registry = (Registry) context.get( "urn:merlin:container.registry" );
}
@@ -165,11 +165,18 @@
if( m_partition != null )
{
- m_path = m_partition + "/" + m_descriptor.getName();
+ if( m_partition.endsWith("/") )
+ {
+ m_path = m_partition + "/" + m_descriptor.getName();
+ }
+ else
+ {
+ m_path = m_partition + m_descriptor.getName();
+ }
}
else
{
- m_path = "/" + m_descriptor.getName();
+ m_path = m_descriptor.getName();
}
if( getLogger().isDebugEnabled() )
1.4 +1 -1
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.xinfo
Index: DefaultContainer.xinfo
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/container/DefaultContainer.xinfo,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultContainer.xinfo 17 Dec 2002 09:59:48 -0000 1.3
+++ DefaultContainer.xinfo 19 Dec 2002 10:50:17 -0000 1.4
@@ -29,7 +29,7 @@
type="org.apache.avalon.merlin.container.ContainerDescriptor"/>
<entry key="urn:merlin:container.registry"
type="org.apache.avalon.merlin.service.Registry"/>
- <entry key="urn:merlin:container.partition"/>
+ <entry key="urn:avalon:partition.name"/>
</context>
</type>
1.13 +6 -6
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.java
Index: DefaultKernel.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- DefaultKernel.java 17 Dec 2002 09:59:48 -0000 1.12
+++ DefaultKernel.java 19 Dec 2002 10:50:17 -0000 1.13
@@ -192,16 +192,16 @@
*
<td><strong>key</strong></td><td><strong>type</strong></td><td><strong>description</strong></td>
* </tr>
* <tr>
- * <td>urn:urn:avalon:home</td>
+ * <td>urn:assembly:home</td>
* <td>{@link java.io.File}</td>
- * <td>The application home directory.</td>
+ * <td>The kernel home directory.</td>
* </tr>
* </table>
* @param context the runtime context
*/
public void contextualize( Context context ) throws ContextException
{
- m_home = (File) context.get( "urn:urn:avalon:home" );
+ m_home = (File) context.get( "urn:assembly:home" );
}
//==============================================================
@@ -507,7 +507,7 @@
m_config.getChild( "logging" ), root );
DefaultContext context = new DefaultContext();
- context.put( "urn:avalon:home", m_home );
+ context.put( "urn:assembly:home", m_home );
context.put( "urn:assembly:logging.descriptor", descriptor );
context.makeReadOnly();
@@ -596,7 +596,7 @@
if( m_system == null )
{
DefaultContext context = new DefaultContext();
- context.put( "urn:avalon:home", m_home );
+ context.put( "urn:assembly:home", m_home );
context.put( "urn:merlin:domain", m_registry.getBase().getHost() );
context.makeReadOnly();
m_system = context;
1.2 +1 -1
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.xinfo
Index: DefaultKernel.xinfo
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/DefaultKernel.xinfo,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultKernel.xinfo 3 Dec 2002 07:08:03 -0000 1.1
+++ DefaultKernel.xinfo 19 Dec 2002 10:50:17 -0000 1.2
@@ -21,7 +21,7 @@
</info>
<context>
- <entry key="urn:avalon:home" type="java.io.File" optional="false"/>
+ <entry key="urn:assembly:home" type="java.io.File" optional="false"/>
</context>
<services>
1.2 +2 -2
avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/Kernel.java
Index: Kernel.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/Kernel.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Kernel.java 3 Dec 2002 07:08:03 -0000 1.1
+++ Kernel.java 19 Dec 2002 10:50:17 -0000 1.2
@@ -68,7 +68,7 @@
/**
* The context key for the working directory.
*/
- public static final String DIR_KEY = "urn:avalon:home";
+ public static final String DIR_KEY = "urn:assembly:home";
/**
* The context key for the path to the configuration.
1.7 +2 -5 avalon-sandbox/merlin/src/test/config/block.xml
Index: block.xml
===================================================================
RCS file: /home/cvs/avalon-sandbox/merlin/src/test/config/block.xml,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- block.xml 17 Dec 2002 09:59:48 -0000 1.6
+++ block.xml 19 Dec 2002 10:50:17 -0000 1.7
@@ -10,11 +10,8 @@
</services>
<container>
- <component name="default"
class="org.apache.avalon.playground.StandardComponent" activation="startup">
- <context class="org.apache.avalon.playground.StandardContext">
- <entry key="location">New York</entry>
- <import name="urn:avalon:home" key="home" />
- </context>
+ <component name="standard"
class="org.apache.avalon.playground.StandardComponent" activation="startup">
+ <context class="org.apache.avalon.playground.StandardContextImp"/>
</component>
<container name="test"/>
</container>
1.4 +4 -2
avalon-sandbox/merlin/src/test/org/apache/avalon/merlin/kernel/KernelTestCase.java
Index: KernelTestCase.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/merlin/kernel/KernelTestCase.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- KernelTestCase.java 12 Dec 2002 00:37:13 -0000 1.3
+++ KernelTestCase.java 19 Dec 2002 10:50:17 -0000 1.4
@@ -60,7 +60,7 @@
File base = getWorkingDirectory();
DefaultContext context = new DefaultContext();
- context.put( "urn:urn:avalon:home", base );
+ context.put( "urn:assembly:home", base );
context.makeReadOnly();
File file = getConfigurationFile( base, args );
@@ -78,7 +78,7 @@
}
catch( Throwable e )
{
- final String error = "Problem loading kernel configuration form file: "
+ file;
+ final String error = "Problem loading kernel configuration from file: "
+ file;
throw new RuntimeException( error );
}
@@ -88,6 +88,8 @@
m_kernel.contextualize( context );
m_kernel.initialize();
m_kernel.start();
+ m_kernel.stop();
+ m_kernel.dispose();
}
catch( Throwable e )
{
1.3 +21 -31
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.java
Index: StandardComponent.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StandardComponent.java 17 Dec 2002 04:40:39 -0000 1.2
+++ StandardComponent.java 19 Dec 2002 10:50:17 -0000 1.3
@@ -61,8 +61,6 @@
import org.apache.avalon.framework.activity.Startable;
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.context.Context;
-import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
/**
@@ -72,12 +70,15 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development
Team</a>
*/
public class StandardComponent extends AbstractLogEnabled
- implements Contextualizable, Configurable, Initializable, Startable,
Disposable, StandardService
+ implements Contextualizable, Initializable, Startable, Disposable,
StandardService
{
- private String m_location;
- private String m_message;
private File m_home;
+ private File m_work;
+ private String m_name;
+ private String m_partition;
+
+ private String m_message;
//=======================================================================
// Contextualizable
@@ -87,26 +88,13 @@
* Supply of the the component context to the component type.
* @param context the context value
*/
- public void contextualize( Context context )
- {
- StandardContextInterface c = (StandardContextInterface)context;
- m_location = c.getLocation();
- m_home = c.getWorkingDirectory();
- }
-
- //=======================================================================
- // Configurable
- //=======================================================================
-
- /**
- * Supply of the the component configuration to the type.
- * @param config the configuration value
- */
- public void configure( Configuration config )
+ public void contextualize( StandardContext context )
{
- getLogger().debug( "configure" );
- m_message = config.getChild( "message" ).getValue( null );
- }
+ m_home = context.getHomeDirectory();
+ m_work = context.getWorkingDirectory();
+ m_name = context.getName();
+ m_partition = context.getPartitionName();
+ }
//=======================================================================
// Initializable
@@ -117,10 +105,11 @@
*/
public void initialize()
{
- getLogger().debug( "initialize" );
- getLogger().debug( "location: " + m_location );
- getLogger().debug( "home: " + m_home );
- getLogger().debug( "message: " + m_message );
+ m_message =
+ "\n home: " + m_home
+ + "\n work: " + m_work
+ + "\n name: " + m_name
+ + "\n partition: " + m_partition;
}
//=======================================================================
@@ -132,7 +121,8 @@
*/
public void start()
{
- doPrimeObjective();
+ getLogger().debug( "starting" );
+ printMessage();
}
/**
@@ -158,9 +148,9 @@
/**
* Service interface implementation.
*/
- public void doPrimeObjective()
+ public void printMessage()
{
- getLogger().info( m_message + " from '" + m_location + "'." );
+ getLogger().info( m_message );
}
}
1.4 +15 -4
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xinfo
Index: StandardComponent.xinfo
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xinfo,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- StandardComponent.xinfo 17 Dec 2002 09:59:48 -0000 1.3
+++ StandardComponent.xinfo 19 Dec 2002 10:50:17 -0000 1.4
@@ -19,9 +19,21 @@
<name>standard</name>
</info>
- <context type="org.apache.avalon.playground.StandardContextInterface">
- <entry key="location"/>
- <entry key="home" type="java.io.File"/>
+ <!--
+ Declaration of the contextualization service, context type and
+ entries. The provider value is a component implementing the
+ Contextualizer interface. The type value is a interface that
+ the component implementation can narrow a supplied context value
+ to.
+ -->
+
+ <context type="org.apache.avalon.playground.StandardContext">
+
+ <attributes>
+ <attribute key="urn:assembly:lifecycle.context.extension"
+ value="org.apache.avalon.playground.Contextualizable"/>
+ </attributes>
+
</context>
<services>
@@ -29,4 +41,3 @@
</services>
</type>
-
1.2 +1 -4
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xprofile
Index: StandardComponent.xprofile
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardComponent.xprofile,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StandardComponent.xprofile 11 Dec 2002 01:32:02 -0000 1.1
+++ StandardComponent.xprofile 19 Dec 2002 10:50:17 -0000 1.2
@@ -20,10 +20,7 @@
-->
<component name="standard">
- <context class="org.apache.avalon.playground.StandardContext">
- <import name="urn:avalon:home" key="home" />
- <entry key="location">Paris</entry>
- </context>
+ <context class="org.apache.avalon.playground.StandardContextImp"/>
</component>
</profiles>
1.2 +20 -37
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardContext.java
Index: StandardContext.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardContext.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StandardContext.java 11 Dec 2002 01:32:02 -0000 1.1
+++ StandardContext.java 19 Dec 2002 10:50:17 -0000 1.2
@@ -56,58 +56,41 @@
package org.apache.avalon.playground;
import java.io.File;
-import java.util.Map;
import org.apache.avalon.framework.context.Context;
-import org.apache.avalon.framework.context.DefaultContext;
/**
- * This is example of a custom context class. It is used in the demonsteation
- * of a context management fraework to show how a context class can be
- * supplied to a component declaring a context interface criteria.
+ * Simple non-standard Context interface to demonstration context
+ * management at the level of different context types.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development
Team</a>
*/
-public class StandardContext extends DefaultContext implements
StandardContextInterface
+public interface StandardContext extends Context
{
+ public static final String NAME_KEY = "urn:avalon:name";
+ public static final String PARTITION_KEY = "urn:avalon:partition.name";
+ public static final String WORKING_KEY = "urn:avalon:work";
+ public static final String HOME_KEY = "urn:avalon:home";
/**
- * Creation of a new custom context instance.
- * @param map the context name/value map
- * @param parent a possibly parent context
+ * Return the name assigned to the component
+ * @return the name
*/
- public StandardContext( Map map, Context parent )
- {
- super( map, parent );
- }
+ String getName();
/**
- * @return the location
+ * Return the partition name assigned to the component
+ * @return the partition name
*/
- public String getLocation()
- {
- try
- {
- return (String)super.get( "location" );
- }
- catch( Throwable e )
- {
- return "Unknown";
- }
- }
+ String getPartitionName();
/**
- * @return the working directory
+ * @return a file representing the home directory
*/
- public File getWorkingDirectory()
- {
- try
- {
- return (File)super.get( "home" );
- }
- catch( Throwable e )
- {
- throw new RuntimeException( "context object does not provide required
home entry." );
- }
- }
+ File getHomeDirectory();
+
+ /**
+ * @return a file representing the working directory
+ */
+ File getWorkingDirectory();
}
1.2 +1 -1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardService.java
Index: StandardService.java
===================================================================
RCS file:
/home/cvs/avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardService.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StandardService.java 11 Dec 2002 01:32:02 -0000 1.1
+++ StandardService.java 19 Dec 2002 10:50:17 -0000 1.2
@@ -66,5 +66,5 @@
/**
* Execute the prime objective of this services.
*/
- void doPrimeObjective();
+ void printMessage();
}
1.1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/Contextualizable.java
Index: Contextualizable.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 [EMAIL PROTECTED]
*
* 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.avalon.playground;
import org.apache.avalon.framework.context.ContextException;
/**
* Definition of an alterbnative contexulization interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
*/
public interface Contextualizable
{
//=======================================================================
// Contextualization (custom variant)
//=======================================================================
/**
* Contextuyalization of the component.
* @param context the containement context
* @exception ContextException if a contextualization error occurs
*/
void contextualize( StandardContext context )
throws ContextException;
}
1.1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/ContextualizationHandler.java
Index: ContextualizationHandler.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 [EMAIL PROTECTED]
*
* 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.avalon.playground;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.assembly.appliance.Appliance;
import org.apache.avalon.assembly.lifecycle.context.Contextualization;
/**
* Definition of an extension handler that handles the Expoitable
* extension stage interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
*/
public class ContextualizationHandler implements Contextualization
{
//=======================================================================
// Extension
//=======================================================================
/**
* Handle the contextualization stage of a component lifecycle.
* @param object the object to contextualize
* @param context the deployment context
* @exception ContextException if a contextualization error occurs
*/
public void contextualize(
Object object, Context context )
throws ContextException
{
if( object instanceof Contextualizable )
{
if( context instanceof StandardContext )
{
( (Contextualizable)object ).contextualize( (StandardContext)
context );
}
else
{
final String error =
"Supplied context does not implement the StandardContext
interface.";
throw new ContextException( error );
}
}
else
{
final String error =
"Target object does not implement the "
+ Contextualizable.class.getName() + " interface.";
throw new ContextException( error );
}
}
}
1.1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/ContextualizationHandler.xinfo
Index: ContextualizationHandler.xinfo
===================================================================
<?xml version="1.0"?>
<!DOCTYPE type
PUBLIC "-//AVALON/Component Type DTD Version 1.0//EN"
"http://jakarta.apache.org/avalon/dtds/meta/type_1_1.dtd" >
<!--
Copyright (C) The Apache Software Foundation. All rights reserved.
This software is published under the terms of the Apache Software License
version 1.1, a copy of which has been included with this distribution in
the LICENSE.txt file.
@author Avalon Development Team
@version 1.0 12/03/2001
-->
<!--
Definition of the extension type phase support.
-->
<type>
<info>
<name>context</name>
</info>
<!--
Declaration of the lifecycle support phases that this manager provides.
-->
<extensions>
<extension type="org.apache.avalon.playground.Contextualizable" />
</extensions>
</type>
1.1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardContext.xservice
Index: StandardContext.xservice
===================================================================
<?xml version="1.0"?>
<!DOCTYPE type
PUBLIC "-//AVALON/Component Type DTD Version 1.0//EN"
"http://jakarta.apache.org/avalon/dtds/meta/type_1_1.dtd" >
<!--
Copyright (C) The Apache Software Foundation. All rights reserved.
This software is published under the terms of the Apache Software License
version 1.1, a copy of which has been included with this distribution in
the LICENSE.txt file.
@author Avalon Development Team
@version 1.0 12/03/2001
-->
<service>
<version>1.0</version>
<entries>
<entry key="urn:avalon:name"/>
<entry key="urn:avalon:partition.name"/>
<entry key="urn:avalon:home" type="java.io.File"/>
<entry key="urn:avalon:work" type="java.io.File"/>
</entries>
</service>
1.1
avalon-sandbox/merlin/src/test/org/apache/avalon/playground/StandardContextImp.java
Index: StandardContextImp.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 [EMAIL PROTECTED]
*
* 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.avalon.playground;
import java.io.File;
import java.util.Map;
import org.apache.avalon.framework.context.Context;
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.DefaultContext;
/**
* This is example of a custom context class. It is used in the demonsteation
* of a context management fraework to show how a context class can be
* supplied to a component declaring a context interface criteria.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Avalon Development Team</a>
*/
public class StandardContextImp extends DefaultContext implements StandardContext
{
//-----------------------------------------------------------------
// constructor
//-----------------------------------------------------------------
/**
* Creation of a new custom context instance.
* @param map the context name/value map
* @param parent a possibly parent context
*/
public StandardContextImp( Map map, Context parent ) throws ContextException
{
super( map, parent );
}
//-----------------------------------------------------------------
// StandardContext
//-----------------------------------------------------------------
/**
* Return the name assigned to the component
* @return the name
*/
public String getName()
{
try
{
return (String)super.get( StandardContext.NAME_KEY );
}
catch( Throwable e )
{
throw new IllegalStateException( StandardContext.NAME_KEY );
}
}
/**
* Return the partition name assigned to the component
* @return the partition name
* @exception IllegalStateException if the partition name is undefined
*/
public String getPartitionName()
{
try
{
return (String)super.get( StandardContext.PARTITION_KEY );
}
catch( Throwable e )
{
throw new IllegalStateException( StandardContext.PARTITION_KEY );
}
}
/**
* Returns the home directory for this component.
* @return the home directory
*/
public File getHomeDirectory()
{
try
{
return (File)super.get( StandardContext.HOME_KEY );
}
catch( Throwable e )
{
throw new IllegalStateException( StandardContext.HOME_KEY );
}
}
/**
* @return the working directory
*/
public File getWorkingDirectory()
{
try
{
return (File)super.get( StandardContext.WORKING_KEY );
}
catch( Throwable e )
{
throw new IllegalStateException( StandardContext.WORKING_KEY );
}
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>