avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcconn...@apache.org
Subject cvs commit: avalon/merlin/platform/tutorials/context/plus/src/java/tutorial DemoContext.java DemoContextProvider.java HelloComponent.java
Date Fri, 02 Apr 2004 08:08:48 GMT
mcconnell    2004/04/02 00:08:48

  Added:       merlin/platform/tutorials/context/plus .cvsignore README.TXT
                        project.xml
               merlin/platform/tutorials/context/plus/conf block.xml
               merlin/platform/tutorials/context/plus/src/java/tutorial
                        DemoContext.java DemoContextProvider.java
                        HelloComponent.java
  Log:
  Add tutorial demonstrating custom context injection.
  
  Revision  Changes    Path
  1.1                  avalon/merlin/platform/tutorials/context/plus/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  maven.log
  velocity.log
  build
  target
  
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/README.TXT
  
  Index: README.TXT
  ===================================================================
  
  Constructor Injection of a Custom Context.
  ------------------------------------------
  
  This tutorial covers usage of context entries using
  a constructor supplied custom context.
  
  $ maven
  $ merlin -execute target\classes
  
  [INFO   ] (tutorial.hello): working directory set to: [your-directory]\home\tutorial
  \hello
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
  
    <extend>${basedir}/../../project.xml</extend>
  
    <id>merlin-tutorial-context-plus</id>
    <name>Merlin Context Standard Tutorial</name>
    <package>tutorial</package>
  
    <currentVersion>1.0</currentVersion>
    <inceptionYear>2003</inceptionYear>
    <shortDescription>Merlin Context Custom Injection Tutorial.</shortDescription>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>4.1.5</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-impl</artifactId>
        <version>4.1.5</version>
      </dependency>
    </dependencies>
    
    <build>
  
      <sourceDirectory>${basedir}/src/java</sourceDirectory>
  
      <resources>
        <resource>
          <directory>${basedir}/conf</directory>
          <targetPath>BLOCK-INF</targetPath>
          <includes>
            <include>block.xml</include>
          </includes>
        </resource>
      </resources>
  
      <jars></jars>
  
    </build>
  
  </project>
  
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/conf/block.xml
  
  Index: block.xml
  ===================================================================
  
  <container name="tutorial">
  
     <classloader>
       <classpath>
         <repository>
           <resource id="avalon-framework:avalon-framework-impl" version="4.1.5"/>
         </repository>
       </classpath>
     </classloader>
  
     <component name="hello" class="tutorial.HelloComponent" activation="startup">
       <context class="tutorial.DemoContextProvider"/>
     </component>
  
  </container>
  
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/src/java/tutorial/DemoContext.java
  
  Index: DemoContext.java
  ===================================================================
  /* 
   * Copyright 2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at 
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   * 
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package tutorial;
  
  import java.io.File;
  
  /**
   * An example of an custom context interface.
   */
  public interface DemoContext
  {
  
     /**
      * Return the working directory.
      * @return the directory
      */
      File getWorkingDirectory();
  }
  
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/src/java/tutorial/DemoContextProvider.java
  
  Index: DemoContextProvider.java
  ===================================================================
  /* 
   * Copyright 2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at 
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   * 
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package tutorial;
  
  import java.util.Map;
  import java.io.File;
  
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.DefaultContext;
  import org.apache.avalon.framework.context.ContextException;
  
  
  /**
   * A demonstration class that that we will instantiate via 
   * context directives within the component declaration.
   */
  public class DemoContextProvider extends DefaultContext implements DemoContext
  {
  
     /**
      * A custom context type implementation must provide
      * the following constructor.
      * @param entries a map of context entries
      */
      public DemoContextProvider( Context context )
      {
          super( context );
      }
   
     /**
      * Return the working directory.
      * @return the directory
      */
      public File getWorkingDirectory()
      {
          try
          {
              return (File) super.get( "urn:avalon:home" );
          }
          catch( ContextException ce )
          {
              // should not happen 
              throw new RuntimeException( ce.toString() );
          }
      }
  }
  
  
  
  1.1                  avalon/merlin/platform/tutorials/context/plus/src/java/tutorial/HelloComponent.java
  
  Index: HelloComponent.java
  ===================================================================
  /* 
   * Copyright 2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at 
   * 
   *   http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   * 
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package tutorial;
  
  import java.io.File;
  
  import org.apache.avalon.framework.logger.Logger;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  
  /**
   * Component demonstrating access to standard context entries.
   * @avalon.component name="demo" lifestyle="singleton"
   */
  public class HelloComponent 
  {
      //------------------------------------------------------
      // immutable state
      //------------------------------------------------------
  
      private final Logger m_logger;
      private final File m_home;
  
     /**
      * Creation of a new HelloComponent instance using a 
      * container supplied logging channel and custom context.
      * The context supplied by the container holds the 
      * standard context entries requested under the avalon.entry
      * tags.  The advantages of this approach is the isolation
      * of context entry casting and key into a seperate context 
      * helper class.
      *
      * @avalon.context type="tutorial.DemoContext"
      * @avalon.entry key="urn:avalon:home" type="java.io.File"
      */
      public HelloComponent( Logger logger, DemoContext context )
      {
          m_logger = logger;
  
          m_home = context.getWorkingDirectory();
  
          m_logger.info( "working directory set to: " + m_home );
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org


Mime
View raw message