ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/runtime AntContextResources.java AntEngine.java DefaultAntEngine.java
Date Tue, 20 Feb 2001 06:04:25 GMT
donaldp     01/02/19 22:04:25

  Modified:    proposal/myrmidon/src/java/org/apache/ant Main.java
  Added:       proposal/myrmidon/src/java/org/apache/ant/runtime
                        AntContextResources.java AntEngine.java
                        DefaultAntEngine.java
  Removed:     proposal/myrmidon/src/java/org/apache/ant
                        AntContextResources.java AntEngine.java
                        DefaultAntEngine.java
  Log:
  Rearranged packages
  
  Revision  Changes    Path
  1.8       +7 -3      jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/Main.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Main.java	2001/01/30 00:15:30	1.7
  +++ Main.java	2001/02/20 06:04:25	1.8
  @@ -28,6 +28,8 @@
   import org.apache.ant.project.ProjectBuilder;
   import org.apache.ant.project.ProjectEngine;
   import org.apache.ant.project.ProjectListener;
  +import org.apache.ant.runtime.AntEngine;
  +import org.apache.ant.runtime.DefaultAntEngine;
   import org.apache.ant.tasklet.JavaVersion;
   import org.apache.ant.tasklet.TaskletContext;
   import org.apache.ant.tasklet.engine.TaskletEngine;
  @@ -108,6 +110,7 @@
       public static void main( final String[] args )
       {
           final Main main = new Main();
  +        main.setLogger( LogKit.getLoggerFor( "default" ) );
   
           try { main.execute( args ); }
           catch( final AntException ae )
  @@ -436,9 +439,10 @@
           {
               //except for a few *special* files add all the 
               //.zip/.jars to classloader
  -            if( !files[ i ].getName().equals( "ant.jar" ) &&
  -                !files[ i ].getName().equals( "myrmidon.jar" ) &&
  -                !files[ i ].getName().equals( "avalonapi.jar" ) )
  +            final String name = files[ i ].getName();
  +            if( !name.equals( "ant.jar" ) &&
  +                !name.equals( "myrmidon.jar" ) &&
  +                !name.equals( "avalonapi.jar" ) )
               {                
                   try { classLoader.addURL( files[ i ].toURL() ); }
                   catch( final MalformedURLException mue ) {}
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/runtime/AntContextResources.java
  
  Index: AntContextResources.java
  ===================================================================
  /*
   * 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 file.
   */
  package org.apache.ant.runtime;
  
  /**
   * Interface that holds constants used to access variables from context.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public interface AntContextResources
  {
      // the directory of ant
      String HOME_DIR     = "ant.install.dir"; 
      
      // the bin directory of ant
      String BIN_DIR      = "ant.install.bin"; 
  
      // the lib directory of ant
      String LIB_DIR      = "ant.install.lib"; 
      
      // the tasklib directory of ant
      String TASKLIB_DIR  = "ant.install.task-lib"; 
  
      // the directory to look for per user ant information
      String USER_DIR     = "ant.user.dir"; 
      
      // the directory to look for per project ant information
      String PROJECT_DIR  = "ant.project.dir";
  }
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/runtime/AntEngine.java
  
  Index: AntEngine.java
  ===================================================================
  /*
   * 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 file.
   */
  package org.apache.ant.runtime;
  
  import java.util.Properties;
  import org.apache.ant.project.ProjectBuilder;
  import org.apache.ant.project.ProjectEngine;
  import org.apache.avalon.Component;
  import org.apache.avalon.Disposable;
  import org.apache.avalon.Initializable;
  
  /**
   * Interface to the Ant runtime.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public interface AntEngine
      extends Component, Initializable, Disposable
  {
      /**
       * Setup basic properties of engine. 
       * Called before init() and can be used to specify alternate components in system.
       *
       * @param properties the properties
       */
      void setProperties( Properties properties );
  
      /**
       * Retrieve builder for runtime.
       * Valid after init() call
       *
       * @return the ProjectBuilder
       */
      ProjectBuilder getProjectBuilder();
      
      /**
       * Retrieve project engine for runtime.
       * Valid after init() call
       *
       * @return the ProjectBuilder
       */
      ProjectEngine getProjectEngine();
  }
  
  
  
  1.1                  jakarta-ant/proposal/myrmidon/src/java/org/apache/ant/runtime/DefaultAntEngine.java
  
  Index: DefaultAntEngine.java
  ===================================================================
  /*
   * 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 file.
   */
  package org.apache.ant.runtime;
  
  import java.io.File;
  import java.util.Properties;
  import org.apache.ant.configuration.Configurer;
  import org.apache.ant.convert.engine.ConverterEngine;
  import org.apache.ant.project.ProjectBuilder;
  import org.apache.ant.project.ProjectEngine;
  import org.apache.ant.tasklet.JavaVersion;
  import org.apache.ant.tasklet.engine.DataTypeEngine;
  import org.apache.ant.tasklet.engine.TaskletEngine;
  import org.apache.ant.tasklet.engine.TskDeployer;
  import org.apache.avalon.AbstractLoggable;
  import org.apache.avalon.Component;
  import org.apache.avalon.Composer;
  import org.apache.avalon.DefaultComponentManager;
  import org.apache.avalon.Initializable;
  import org.apache.avalon.camelot.CamelotUtil;
  import org.apache.avalon.camelot.DefaultFactory;
  import org.apache.avalon.camelot.Deployer;
  import org.apache.avalon.camelot.Factory;
  import org.apache.avalon.util.ObjectUtil;
  import org.apache.avalon.util.io.FileUtil;
  
  /**
   * Default implementation of Ant runtime.
   *
   * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
   */
  public class DefaultAntEngine
      extends AbstractLoggable
      implements AntEngine, Initializable
  {
      protected ConverterEngine          m_converterEngine;
      protected DataTypeEngine           m_dataTypeEngine;
      protected TaskletEngine            m_taskletEngine;
      protected ProjectEngine            m_projectEngine;
  
      protected ProjectBuilder           m_builder;
      protected TskDeployer              m_deployer;
      protected Configurer               m_configurer;
  
      protected Factory                  m_factory;
  
      protected DefaultComponentManager  m_componentManager;
      protected Properties               m_properties;
      protected Properties               m_defaults;
  
      protected File                     m_homeDir;
      protected File                     m_binDir;
      protected File                     m_libDir;
      protected File                     m_taskLibDir;
         
      /**
       * Setup basic properties of engine. 
       * Called before init() and can be used to specify alternate components in system.
       *
       * @param properties the properties
       */
      public void setProperties( final Properties properties )
      {
          m_properties = properties;
      }
  
      /**
       * Retrieve builder for runtime.
       * Valid after init() call
       *
       * @return the ProjectBuilder
       */
      public ProjectBuilder getProjectBuilder()
      {
          return m_builder;
      }
  
      /**
       * Retrieve project engine for runtime.
       * Valid after init() call
       *
       * @return the ProjectBuilder
       */
      public ProjectEngine getProjectEngine()
      {
          return m_projectEngine;
      }
  
      /**
       * Initialize the system.
       *
       * @exception Exception if an error occurs
       */
      public void init()
          throws Exception
      {
          //setup default properties
          m_defaults = createDefaultProperties();
  
          //create all the components
          m_factory = new DefaultFactory();
          createComponents();
  
          //setup the component manager
          m_componentManager = createComponentManager();
  
          setupComponents();
  
          setupFiles();
  
          CamelotUtil.deployFromDirectory( m_deployer, m_taskLibDir, ".tsk" );
      }
  
      /**
       * Dispose engine.
       *
       * @exception Exception if an error occurs
       */
      public void dispose()
          throws Exception
      {
          m_converterEngine = null;
          m_dataTypeEngine = null;
          m_taskletEngine = null;
          m_projectEngine = null;
          m_builder = null;
          m_deployer = null;
          m_configurer = null;
          m_factory = null;
          m_componentManager = null;
          m_properties = null;
          m_defaults = null;
          m_homeDir = null;
          m_binDir = null;
          m_libDir = null;
          m_taskLibDir = null;
      }
      
      /**
       * Create default properties which includes default names of all components.
       * Overide this in sub-classes to change values.
       *
       * @return the Properties
       */
      protected Properties createDefaultProperties()
      {
          final Properties defaults = new Properties();
  
          //create all the default properties for files/directories
          defaults.setProperty( "ant.path.bin", "bin" );
          defaults.setProperty( "ant.path.lib", "lib" );
          defaults.setProperty( "ant.path.task-lib", "lib" );
  
          //create all the default properties for components
          defaults.setProperty( "ant.comp.converter",
                                "org.apache.ant.convert.engine.DefaultConverterEngine" );
          defaults.setProperty( "ant.comp.datatype",
                                "org.apache.ant.tasklet.engine.DefaultDataTypeEngine" );
          defaults.setProperty( "ant.comp.tasklet",
                                "org.apache.ant.tasklet.engine.DefaultTaskletEngine" );
          defaults.setProperty( "ant.comp.project",
                                "org.apache.ant.project.DefaultProjectEngine" );
          defaults.setProperty( "ant.comp.builder",
                                "org.apache.ant.project.DefaultProjectBuilder" );
          defaults.setProperty( "ant.comp.deployer",
                                "org.apache.ant.tasklet.engine.DefaultTskDeployer" );
          defaults.setProperty( "ant.comp.configurer",
                                "org.apache.ant.configuration.DefaultConfigurer" );
  
          return defaults;
      }
  
      /**
       * Create a ComponentManager containing all components in engine.
       *
       * @return the ComponentManager
       */
      protected DefaultComponentManager createComponentManager()
      {
          final DefaultComponentManager componentManager = new DefaultComponentManager();
  
          componentManager.put( "org.apache.ant.tasklet.engine.TaskletEngine", m_taskletEngine
);
          componentManager.put( "org.apache.ant.project.ProjectEngine", m_projectEngine );
          componentManager.put( "org.apache.ant.convert.engine.ConverterEngine", 
                                m_converterEngine );
          componentManager.put( "org.apache.ant.convert.Converter", m_converterEngine );
          componentManager.put( "org.apache.ant.tasklet.engine.DataTypeEngine", m_dataTypeEngine
);
          componentManager.put( "org.apache.ant.project.ProjectBuilder", m_builder );
          componentManager.put( "org.apache.ant.tasklet.engine.TskDeployer", m_deployer );
          componentManager.put( "org.apache.avalon.camelot.Factory", m_factory );
          componentManager.put( "org.apache.ant.configuration.Configurer", m_configurer );
  
          return componentManager;
      }
  
      /**
       * Create all required components.
       *
       * @exception Exception if an error occurs
       */
      protected void createComponents()
          throws Exception
      {
          String component = null;
  
          component = getProperty( "ant.comp.converter" );
          m_converterEngine = (ConverterEngine)createComponent( component, ConverterEngine.class
);
  
          component = getProperty( "ant.comp.datatype" );
          m_dataTypeEngine = (DataTypeEngine)createComponent( component, DataTypeEngine.class
);
          
          component = getProperty( "ant.comp.tasklet" );
          m_taskletEngine = (TaskletEngine)createComponent( component, TaskletEngine.class
);
          
          component = getProperty( "ant.comp.project" );
          m_projectEngine = (ProjectEngine)createComponent( component, ProjectEngine.class
);
  
          component = getProperty( "ant.comp.builder" );
          m_builder =(ProjectBuilder)createComponent( component, ProjectBuilder.class );
  
          component = getProperty( "ant.comp.deployer" );
          m_deployer = (TskDeployer)createComponent( component, TskDeployer.class );
  
          component = getProperty( "ant.comp.configurer" );
          m_configurer = (Configurer)createComponent( component, Configurer.class );
      }
  
      /**
       * Setup all the components. (ir run all required lifecycle methods).
       *
       * @exception Exception if an error occurs
       */
      protected void setupComponents()
          throws Exception
      {
          setupComponent( m_factory );
          setupComponent( m_converterEngine );
          setupComponent( m_dataTypeEngine );
          setupComponent( m_taskletEngine );
          setupComponent( m_projectEngine );
          setupComponent( m_builder );
          setupComponent( m_deployer );
          setupComponent( m_configurer );
      }
  
      /**
       * Setup an individual component.
       *
       * @param component the component
       * @exception Exception if an error occurs
       */
      protected void setupComponent( final Component component )
          throws Exception
      {
          setupLogger( component );
  
          if( component instanceof Composer )
          {
              ((Composer)component).compose( m_componentManager );
          }
  
          if( component instanceof Initializable )
          {
              ((Initializable)component).init();
          }
      }
  
      /**
       * Setup all the files attributes.
       */
      protected void setupFiles()
      {
          String filepath = null;
  
          filepath = getProperty( "ant.home" );
          m_homeDir = (new File( filepath )).getAbsoluteFile();
          checkDirectory( m_homeDir, "ant-home" );
  
          filepath = getProperty( "ant.path.bin" );
          m_binDir = resolveDirectory( filepath, "bin-dir" );
          
          filepath = getProperty( "ant.path.lib" );
          m_libDir = resolveDirectory( filepath, "lib-dir" );
  
          filepath = getProperty( "ant.path.task-lib" );
          m_taskLibDir = resolveDirectory( filepath, "task-lib-dir" );
      }
  
      /**
       * Retrieve value of named property. 
       * First access passed in properties and then the default properties.
       *
       * @param name the name of property
       * @return the value of property or null
       */
      protected String getProperty( final String name )
      {
          String value = m_properties.getProperty( name );
  
          if( null == value )
          {
              value = m_defaults.getProperty( name );
          }
  
          return value;
      }
  
      /**
       * Resolve a directory relative to another base directory.
       *
       * @param dir the base directory
       * @param name the relative directory
       * @return the created File
       * @exception AntException if an error occurs
       */
      protected File resolveDirectory( final String dir, final String name )
          throws AntException
      {
          final File file = FileUtil.resolveFile( m_homeDir, dir );
          checkDirectory( file, name );
          return file;
      }
  
      /**
       * Verify file is a directory else throw an exception.
       *
       * @param file the File
       * @param name the name of file type (used in error messages)
       */
      protected void checkDirectory( final File file, final String name )
          throws AntException
      { 
          if( !file.exists() )
          {
              throw new AntException( name + " (" + file + ") does not exist" );
          }
          else if( !file.isDirectory() )
          {
              throw new AntException( name + " (" + file + ") is not a directory" );
          }
      }
  
      /**
       * Helper method to retrieve current JVM version.
       * Basically stolen from original Ant sources.
       *
       * @return the current JVM version
       */
      protected JavaVersion getJavaVersion()
      {
          JavaVersion version = JavaVersion.JAVA1_0;
          
          try
          {
              Class.forName( "java.lang.Void" );
              version = JavaVersion.JAVA1_1;
              Class.forName( "java.lang.ThreadLocal" );
              version = JavaVersion.JAVA1_2;
              Class.forName( "java.lang.StrictMath" );
              version = JavaVersion.JAVA1_3;
          } 
          catch( final ClassNotFoundException cnfe ) {}
          
          return version;
      }
  
      /**
       * Create a component that implements an interface.
       *
       * @param component the name of the component
       * @param clazz the name of interface/type
       * @return the created object
       * @exception AntException if an error occurs
       */
      protected Object createComponent( final String component, final Class clazz )
          throws AntException
      {
          try
          {
              final Object object = ObjectUtil.createObject( component );
  
              if( !clazz.isInstance( object ) )
              {
                  throw new AntException( "Object " + component + " is not an instance of
" + 
                                          clazz );
              }
  
              return object;
          }
          catch( final IllegalAccessException iae )
          { 
              throw new AntException( "Non-public constructor for " + clazz + " " + component,

                                      iae );
          }
          catch( final InstantiationException ie )
          {
              throw new AntException( "Error instantiating class for " + clazz + " " + component,

                                      ie );
          }
          catch( final ClassNotFoundException cnfe )
          {
              throw new AntException( "Could not find the class for " + clazz + 
                                      " (" + component + ")", cnfe );
          }
      }
  }
  
  
  

Mime
View raw message