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>[EMAIL PROTECTED] 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:avalon-dev@jakarta.apache.org";>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:avalon-dev@jakarta.apache.org";>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:avalon-dev@jakarta.apache.org";>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:avalon-dev@jakarta.apache.org";>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:avalon-dev@jakarta.apache.org";>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]>

Reply via email to