mcconnell    2002/12/27 08:37:10

  Modified:    merlin/src/java/org/apache/avalon/merlin Main.java
  Log:
  Removed resolution of configuration (now handled by the kernel).   Main 
simply handles the resolution of the base directory.
  
  Revision  Changes    Path
  1.5       +56 -53    
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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Main.java 19 Dec 2002 10:50:16 -0000      1.4
  +++ Main.java 27 Dec 2002 16:37:10 -0000      1.5
  @@ -32,12 +32,28 @@
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.merlin.block.Block;
   import org.apache.avalon.merlin.block.DefaultBlock;
  +import org.apache.avalon.merlin.kernel.Kernel;
   import org.apache.avalon.merlin.kernel.DefaultKernel;
   import org.apache.avalon.merlin.kernel.KernelException;
   import org.apache.avalon.assembly.util.ExceptionHelper;
   
  +/**
  + * Merlin commandline bootstrap handler.
  + * @see DefaultKernel
  + */
   public class Main
   {
  +   /**
  +    * Command line entry point to the Merlin system.
  +    * The main method handles the establishment of a root [EMAIL PROTECTED] 
Kernel}
  +    * and the supply to the kernel of working directory derived from the 
  +    * command line argument.
  +    *
  +    * @param args a set command line arguments - currently the first value
  +    *   contains the filename of working directory from which the kernel 
  +    *   and block configuration are resolved.
  +    * @see DefaultKernel
  +    */
       public static void main( String[] args )
       {
           Main main = new Main( args );
  @@ -45,8 +61,25 @@
   
       private DefaultKernel m_kernel;
   
  -    public Main( String[] args )
  +    private Main( String[] args )
       {
  +        File base;
  +        try
  +        {
  +            base = getBaseDirectory( args );
  +        }
  +        catch( Throwable e )
  +        {
  +            System.err.println( "\n  " + e.getMessage() + "\n" );
  +            return;
  +        }
  +        if( !base.exists() )
  +        {
  +            final String error = 
  +              "Supplied base directory does not exist: " + base;
  +            throw new RuntimeException( error );
  +        }
  +
           m_kernel = new DefaultKernel();
   
           try
  @@ -92,33 +125,12 @@
                return;
           }
   
  -        File base = getWorkingDirectory();
           DefaultContext context = new DefaultContext();
           context.put( "urn:assembly:home", base );
           context.makeReadOnly();
   
  -        File file = getConfigurationFile( base, args );
  -        if( !file.exists() )
  -        {
  -            final String error = 
  -              "Missing kernel configuration: " + file;
  -            throw new RuntimeException( error );
  -        }
  -
  -        Configuration config;
           try
           {
  -            config = getConfiguration( file );
  -        }
  -        catch( Throwable e )
  -        {
  -            final String error = "Problem loading kernel configuration form 
file: " + file;
  -            throw new RuntimeException( error );
  -        }
  -
  -        try
  -        {
  -            m_kernel.configure( config );
               m_kernel.contextualize( context );
               m_kernel.initialize();
               m_kernel.start();
  @@ -137,11 +149,12 @@
       }
   
       /**
  -     * Get the target configuration file.
  +     * Get the base directory.
        * @param args the command line arguments
        */
  -    public File getConfigurationFile( File base, String[] args )
  +    private File getBaseDirectory( String[] args ) throws IOException
       {
  +        File base = new File( System.getProperty( "user.dir" ) );
           String filename;
           if( args.length > 0 )
           {
  @@ -149,40 +162,30 @@
           }
           else
           {
  -            filename = "kernel.xml";
  +            filename = ".";
  +        }
  +        File result = new File( base, filename );
  +        if( result.isFile() )
  +        {
  +            result = result.getParentFile();
           }
  -        return new File( base, filename );
  -    }
  -
  -    /**
  -     * Get the target configuration file.
  -     * @param args the command line arguments
  -     */
  -    public File getWorkingDirectory( )
  -    {
  -        return new File( System.getProperty( "user.dir" ) );
  -    }
  -
   
  -    private Configuration getConfiguration( final File file ) throws 
ConfigurationException
  -    {
  -        try
  +        if( !result.exists() )
           {
  -            DefaultConfigurationBuilder builder = new 
DefaultConfigurationBuilder();
  -            InputStream is = new FileInputStream( file );
  -            if( is == null )
  +            final String error = 
  +              "Supplied path does not refer to a directory: ";
  +            String message;
  +            try
               {
  -                throw new ConfigurationException(
  -                    "Could not load the configuration resource \"" + file + 
"\"" );
  +                message = error + result.getCanonicalFile();
               }
  -            return builder.build( is );
  -        }
  -        catch( Throwable e )
  -        {
  -            final String error = "Unable to create configuration from file: 
" + file;
  -            throw new ConfigurationException( error, e );
  +            catch( Throwable e )
  +            {
  +                message = error + filename;
  +            }
  +            throw new IOException( message );
           }
  -    }
  -
   
  +        return result.getCanonicalFile();
  +    }
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to