You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/05/22 11:44:50 UTC

svn commit: rev 20212 - in avalon/trunk/tools/magic: engine/src/java/org/apache/merlin/magic engine/src/test/org/apache/merlin/magic jar/src/dist prepare prepare/src prepare/src/dist prepare/src/xdocs

Author: niclas
Date: Sat May 22 02:44:49 2004
New Revision: 20212

Added:
   avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginProperties.java
   avalon/trunk/tools/magic/prepare/
   avalon/trunk/tools/magic/prepare/build.properties
   avalon/trunk/tools/magic/prepare/src/
   avalon/trunk/tools/magic/prepare/src/dist/
   avalon/trunk/tools/magic/prepare/src/dist/build.bsh
   avalon/trunk/tools/magic/prepare/src/dist/build.properties
   avalon/trunk/tools/magic/prepare/src/xdocs/
Modified:
   avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginContext.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginServiceManager.java
   avalon/trunk/tools/magic/engine/src/test/org/apache/merlin/magic/PluginContextTestCase.java
   avalon/trunk/tools/magic/jar/src/dist/build.bsh
   avalon/trunk/tools/magic/jar/src/dist/build.properties
Log:
Starting to work on the 'prepare' plugin.

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java	Sat May 22 02:44:49 2004
@@ -1,8 +1,10 @@
 package org.apache.merlin.magic;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
 import java.lang.reflect.Method;
-import java.util.Properties;
 
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.logger.LogEnabled;
@@ -21,6 +23,7 @@
     
     public Builder( String[] methods, File projectDir )
     {
+        m_Logger = new ConsoleLogger();
         
         m_CallMethods = new String[ methods.length ];
         for( int i=0 ; i < methods.length ; i++ )
@@ -31,8 +34,6 @@
         m_TempDir = new File( m_SystemDir, "temp" );
         m_TempDir.mkdirs();
         
-        m_Logger = new ConsoleLogger();
-        
         m_Logger.info( " System Directory: " + m_SystemDir );
         m_Logger.info( "Project Directory: " + m_ProjectDir );
     }
@@ -40,13 +41,26 @@
     public void execute()
         throws Exception
     {
-        Properties globalProps = loadGlobalProperties();
+        PluginProperties props = new PluginProperties();
+        
+        // This is included twice, so a reference to other parts
+        // can be obtained in the local project properties file.
+        loadProjectLocalProperties( props );
+        
+        loadGlobalProperties( props );
+        loadMagicSystemProperties( props );
+        loadMagicPluginProperties( props );
+        loadProjectSystemProperties( props );
+        loadProjectLocalProperties( props );
+        loadUserProjectProperties( props );
+        loadUserSystemProperties( props );
+        loadUserHomeProperties( props );
         
         FacadeFactory factory = new FacadeFactory();
         if( factory instanceof LogEnabled )
             ((LogEnabled) factory).enableLogging( m_Logger );
             
-        PluginServiceManager sm = new PluginServiceManager( factory, globalProps );
+        PluginServiceManager sm = new PluginServiceManager( factory, props );
         sm.enableLogging( m_Logger );
         
         for( int i=0 ; i < m_CallMethods.length ; i++ )
@@ -87,22 +101,104 @@
         }
     }
     
-    private Properties loadGlobalProperties()
+    protected Logger getLogger()
+    {
+        return m_Logger;
+    }
+    
+    private void loadGlobalProperties( PluginProperties props )
     {
-        Properties props = new Properties();
-        
-        //TODO; Load the various properties;
-        //      $GLOBAL/project.properties
-        //      $GLOBAL/user.properties
-        //  more?  Project and Plugin properties are loaded elsewhere.
         props.put( "magic.home.dir", m_SystemDir.toString() );
         props.put( "magic.plugins.dir", m_PluginsDir.getAbsolutePath() );
         props.put( "magic.repository.dir", new File( m_SystemDir, "repository" ).toString() );
         props.put( "magic.project.dir", m_ProjectDir.getAbsolutePath() );
         props.put( "magic.temp.dir", m_TempDir.getAbsolutePath() );
-        return props;
     }
     
+    private void loadMagicSystemProperties( PluginProperties props )
+    {
+        File file = new File( m_SystemDir, "build.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+    
+    private void loadMagicPluginProperties( PluginProperties props )
+    {
+        File[] plugins = m_SystemDir.listFiles();
+        for( int i=0 ; i < plugins.length ; i++ )
+        {
+            File file = new File( plugins[i], "build.properties" );
+            if( file.exists() )
+                load( props, file );
+        }
+    }
+    
+    private void loadProjectSystemProperties( PluginProperties props )
+    {
+        String projSys = props.getProperty( "project.system.dir" );
+        if( projSys == null )
+            return;
+        File dir = new File( projSys );
+        File file = new File( dir, "build.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+    
+    private void loadProjectLocalProperties( PluginProperties props )
+    {
+        File file = new File( m_ProjectDir, "build.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+    
+    private void loadUserProjectProperties( PluginProperties props )
+    {
+        File file = new File( m_ProjectDir, "user.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+    
+    private void loadUserSystemProperties( PluginProperties props )
+    {
+        File file = new File( m_SystemDir, "user.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+    
+    private void loadUserHomeProperties( PluginProperties props )
+    {
+        File dir = new File( System.getProperty( "user.dir" ) );
+        File file = new File( dir, ".magic.properties" );
+        if( file.exists() )
+            load( props, file );
+    }
+
+    private void load( PluginProperties props, File file )
+    {
+        // TODO: Investigate if java.util.Properties already Buffer,
+        // or we should do it for performance.
+        FileInputStream in = null;
+        try
+        {
+            in = new FileInputStream( file );
+            props.load( in );
+        } catch( IOException e )
+        {
+            getLogger().warn( "Properties file not found: " + file.getAbsolutePath() );
+        } finally
+        {
+            try
+            {
+                if( in != null )
+                    in.close();
+            } catch( IOException e )
+            {
+                // Ignore... Don't think it can happen.
+            }
+        }
+        
+    }
+        
     private File findSystemDir()
     {
         String system = System.getProperty( "magic.system.dir" );

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginContext.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginContext.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginContext.java	Sat May 22 02:44:49 2004
@@ -1,7 +1,6 @@
 package org.apache.merlin.magic;
 
 import java.io.File;
-import java.util.Properties;
 import java.util.Stack;
 import java.util.StringTokenizer;
 
@@ -16,7 +15,7 @@
 {
     private String m_ProjectName;
     private File m_ProjectDir;
-    private Properties m_ProjectProperties;
+    private PluginProperties m_ProjectProperties;
 
     private String m_PluginClassname;    
     private String m_PluginName;
@@ -29,11 +28,11 @@
     
     PluginContext( File scriptDir )
     {
-        this( "fake", new File( "." ), new Properties(), "fake plugin", 
+        this( "virtual", new File( "." ), new PluginProperties(), "virtual plugin", 
               scriptDir, new File( "." ), new File( "." ) );
     }
     
-    PluginContext( String projectname, File projectDir, Properties projectProps,
+    PluginContext( String projectname, File projectDir, PluginProperties projectProps,
                    String pluginname, File pluginDir, File systemDir, File tempDir )
     {
         m_ProjectName = projectname.trim();
@@ -90,7 +89,7 @@
         return m_ProjectDir;
     }
     
-    public Properties getProjectProperties()
+    public PluginProperties getProjectProperties()
     {
         return m_ProjectProperties;
     }
@@ -127,12 +126,8 @@
     
     public String getProperty( String name )
     {
-        name = name.trim();
         String value = m_ProjectProperties.getProperty( name );
-        if( value == null )
-            return null;
-        value = value.trim();
-        return resolve( value );
+        return value;
     }
     
     public Project getAntProject()
@@ -152,70 +147,6 @@
     
     public String resolve( String value )
     {
-        // optimization for common case.
-        int pos1 = value.indexOf( "${" );
-        if( pos1 < 0 )
-            return value;
-        
-        Stack stack = new Stack();
-        StringTokenizer st = new StringTokenizer( value, "${}", true );
-        
-        while( st.hasMoreTokens() )
-        {
-            String token = st.nextToken();
-            if( token.equals( "}" ) )
-            {
-                String name = (String) stack.pop();
-                String open = (String) stack.pop();
-                if( open.equals( "${" ) )
-                {
-                    String propValue = getProperty( name );
-                    if( propValue == null )
-                        push( stack, "${" + name + "}" );
-                    else
-                        push( stack, propValue );
-                }
-                else
-                {
-                    push( stack, "${" + name + "}" );
-                }
-            }
-            else
-            {
-                if( token.equals( "$" ) )
-                    stack.push( "$" );
-                else
-                {
-                    push( stack, token );
-                }
-            }
-        }
-        String result = "";
-        while( stack.size() > 0 )
-        {
-            result = (String) stack.pop() + result;
-        }
-        return result;
-    }
-    
-    private void push( Stack stack , String value )
-    {
-        if( stack.size() > 0 )
-        {
-	        String data = (String) stack.pop();
-	        if( data.equals( "${" ) )
-	        {
-	            stack.push( data );
-	            stack.push( value );
-	        }
-	        else
-	        {
-	            stack.push( data + value );
-	        }
-        }
-        else
-        {
-            stack.push( value );
-        }
+        return m_ProjectProperties.resolve( value );
     }
 }

Added: avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginProperties.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginProperties.java	Sat May 22 02:44:49 2004
@@ -0,0 +1,96 @@
+package org.apache.merlin.magic;
+
+import java.util.Properties;
+import java.util.Stack;
+import java.util.StringTokenizer;
+
+public class PluginProperties extends Properties
+{
+    public PluginProperties()
+    {
+    }
+    
+    public PluginProperties( Properties content )
+    {
+        super( content );
+    }
+    
+    public String getProperty( String name )
+    {
+        name = name.trim();
+        String value = super.getProperty( name );
+        if( value == null )
+            return null;
+        value = value.trim();
+        return resolve( value );
+    }
+    
+    public String resolve( String value )
+    {
+        // optimization for common case.
+        int pos1 = value.indexOf( "${" );
+        if( pos1 < 0 )
+            return value;
+        
+        Stack stack = new Stack();
+        StringTokenizer st = new StringTokenizer( value, "${}", true );
+        
+        while( st.hasMoreTokens() )
+        {
+            String token = st.nextToken();
+            if( token.equals( "}" ) )
+            {
+                String name = (String) stack.pop();
+                String open = (String) stack.pop();
+                if( open.equals( "${" ) )
+                {
+                    String propValue = getProperty( name );
+                    if( propValue == null )
+                        push( stack, "${" + name + "}" );
+                    else
+                        push( stack, propValue );
+                }
+                else
+                {
+                    push( stack, "${" + name + "}" );
+                }
+            }
+            else
+            {
+                if( token.equals( "$" ) )
+                    stack.push( "$" );
+                else
+                {
+                    push( stack, token );
+                }
+            }
+        }
+        String result = "";
+        while( stack.size() > 0 )
+        {
+            result = (String) stack.pop() + result;
+        }
+        return result;
+    }
+    
+    private void push( Stack stack , String value )
+    {
+        if( stack.size() > 0 )
+        {
+            String data = (String) stack.pop();
+            if( data.equals( "${" ) )
+            {
+                stack.push( data );
+                stack.push( value );
+            }
+            else
+            {
+                stack.push( data + value );
+            }
+        }
+        else
+        {
+            stack.push( value );
+        }
+    }
+}

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginServiceManager.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginServiceManager.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/PluginServiceManager.java	Sat May 22 02:44:49 2004
@@ -5,7 +5,6 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.context.Contextualizable;
@@ -28,10 +27,10 @@
     private File m_LocalPlugins;
     private File m_TempDir;
 
-    private Properties m_GlobalProperties;
+    private PluginProperties m_GlobalProperties;
     private FacadeFactory m_FacadeFactory;
 
-    PluginServiceManager( FacadeFactory factory, Properties globalprops )
+    PluginServiceManager( FacadeFactory factory, PluginProperties globalprops )
     {
         DUMMY = new Object();
         m_FacadeFactory = factory;
@@ -154,7 +153,7 @@
         if( pluginDir == null )
             throw new ServiceException( "Plugin '" + service + "' is not present in " + m_LocalPlugins + "." );
             
-        Properties props = new Properties( m_GlobalProperties );
+        PluginProperties props = new PluginProperties( m_GlobalProperties );
         
         appendProperties( props, pluginDir );
         appendProperties( props, m_ProjectDir );
@@ -174,7 +173,7 @@
         }
     }
     
-    private void appendProperties( Properties props, File dir )
+    private void appendProperties( PluginProperties props, File dir )
         throws ServiceException
     {
         File file = new File( dir, "build.properties" );
@@ -186,7 +185,7 @@
             loadPropertiesFile( props, file );
     }
     
-    private void loadPropertiesFile( Properties props, File file )
+    private void loadPropertiesFile( PluginProperties props, File file )
     {
         FileInputStream fis = null;
         try

Modified: avalon/trunk/tools/magic/engine/src/test/org/apache/merlin/magic/PluginContextTestCase.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/test/org/apache/merlin/magic/PluginContextTestCase.java	(original)
+++ avalon/trunk/tools/magic/engine/src/test/org/apache/merlin/magic/PluginContextTestCase.java	Sat May 22 02:44:49 2004
@@ -2,7 +2,6 @@
 
 import java.io.File;
 import java.io.InputStream;
-import java.util.Properties;
 
 import junit.framework.TestCase;
 
@@ -27,7 +26,7 @@
         m_ProjectDir = new File( "target/projectdir");
         m_ProjectDir.mkdir();
         
-        Properties projectProps = new Properties();
+        PluginProperties projectProps = new PluginProperties();
         InputStream in = getClass().getResourceAsStream( "test.properties");
         projectProps.load( in );
         

Modified: avalon/trunk/tools/magic/jar/src/dist/build.bsh
==============================================================================
--- avalon/trunk/tools/magic/jar/src/dist/build.bsh	(original)
+++ avalon/trunk/tools/magic/jar/src/dist/build.bsh	Sat May 22 02:44:49 2004
@@ -53,6 +53,9 @@
 
         String destDirName = m_Context.getProperty( "jar.manifest.build.dir" );
         File toDir = new File( destDirName ); 
+        toDir.mkdirs();
+        
+        getLogger().info( "Copying " + srcManifest + " to " + toDir );
         
         Copy copy = (Copy) m_Project.createTask( "copy" );
         copy.setTodir( toDir );

Modified: avalon/trunk/tools/magic/jar/src/dist/build.properties
==============================================================================
--- avalon/trunk/tools/magic/jar/src/dist/build.properties	(original)
+++ avalon/trunk/tools/magic/jar/src/dist/build.properties	Sat May 22 02:44:49 2004
@@ -1,8 +1,8 @@
 
-jar.build.src.dir = target/classes
+jar.build.src.dir = ${prepare.build.src.dir}/classes
 
 jar.filename = ${jar.build.src.dir}/../${project.name}-${project.version}.jar
 
-jar.manifest
+jar.manifest = ${prepare.src.dir}/etc/manifest.MF
 
-jar.manifest.build.dir
\ No newline at end of file
+jar.manifest.build.dir = ${prepare.build.src.dir}/etc
\ No newline at end of file

Added: avalon/trunk/tools/magic/prepare/build.properties
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic/prepare/build.properties	Sat May 22 02:44:49 2004
@@ -0,0 +1,2 @@
+ 
+project.name = prepare

Added: avalon/trunk/tools/magic/prepare/src/dist/build.bsh
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic/prepare/src/dist/build.bsh	Sat May 22 02:44:49 2004
@@ -0,0 +1,78 @@
+
+import java.io.File;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.merlin.magic.AbstractPlugin;
+import org.apache.merlin.magic.Plugin;
+import org.apache.merlin.magic.PluginContext;
+
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.Contextualizable;
+
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.taskdefs.Copy;
+import org.apache.tools.ant.taskdefs.Javac;
+
+public class JavacPlugin extends AbstractPlugin
+    implements Plugin, Contextualizable
+{
+    private Project m_Project;
+    
+    private boolean m_Initialized = false;
+        
+    public void init()
+    {   
+        if( m_Initialized )
+            return;
+        notifyPreMethod( "init" );
+        copySources();
+        notifyPostMethod( "init" );
+        m_Initialized = true;
+    }
+    
+    private void copySources()
+    {
+        String destdirname = m_Context.getProperty( "prepare.build.src.dir" );
+        File toDir = new File( destdirname ); 
+        String srcdirname = m_Context.getProperty( "prepare.src.dir" );
+        File fromDir = new File( srcdirname ); 
+        toDir.mkdirs();  /* ensure that the directory exists. */
+        
+        copyWithFilter( fromDir, toDir );
+        
+    }
+    
+    private void copyWithFilter( File fromDir, File toDir )
+    {
+        FileSet from = new FileSet();
+        from.setDir( fromDir );
+        from.setIncludes( "**/*" );
+
+        /* Copy with filtering */    
+        Copy copy = (Copy) m_Project.createTask( "copy" );
+        copy.setTodir( toDir );
+        copy.addFileset( from );
+        copy.init();
+        copy.execute();
+    }
+    
+    private void copyWithOutFilter( File fromDir, File toDir )
+    {
+        FileSet from = new FileSet();
+        from.setDir( fromDir );
+        from.setIncludes( "**/*" );
+        
+        /* Copy without filtering */    
+        Copy copy = (Copy) m_Project.createTask( "copy" );
+        copy.setTodir( toDir );
+        copy.addFileset( from );
+        copy.init();
+        copy.execute();
+    }
+}   

Added: avalon/trunk/tools/magic/prepare/src/dist/build.properties
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic/prepare/src/dist/build.properties	Sat May 22 02:44:49 2004
@@ -0,0 +1,6 @@
+
+prepare.src.dir = src/
+
+prepare.dest.dir = target/
+
+prepare.build.src.dir = ${prepare.dest.dir}/src/

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