svn commit: rev 21148 - in avalon/trunk/tools/project/src/main/org/apache/avalon/tools: home tasks

[email protected]
Newsgroups gmane.comp.jakarta.avalon.cvs
Message-ID <[email protected]>
Author: mcconnell
Date: Sat Jun 12 09:28:55 2004
New Revision: 21148

Modified:
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/HomeTask.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java
   avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
Log:
cleaning up property handling and adding support for disabling of unit test execution at system level

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Context.java	Sat Jun 12 09:28:55 2004
@@ -20,6 +20,10 @@
 import java.io.File;
 import java.util.Hashtable;
 import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Task;
@@ -322,4 +326,17 @@
         }
         return new File( root, path );
     }
+
+    public static String getSignature()
+    {
+        return getSignature( new Date() );
+    }
+
+    public static String getSignature( Date date )
+    {
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+        sdf.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
+        return sdf.format( date );
+    }
+
 }

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/home/Home.java	Sat Jun 12 09:28:55 2004
@@ -69,8 +69,8 @@
     public static final String KEY = "project.home";
     public static final String HOME_KEY = "project.home";
 
-    private static final String USER_PROPERTIES = "user.properties";
-    private static final String BUILD_PROPERTIES = "build.properties";
+    public static final String AVALON_HOME_KEY = "avalon.home";
+    public static final String AVALON_REPOSITORY_KEY = "avalon.repository";
 
     //-------------------------------------------------------------
     // mutable state
@@ -78,12 +78,10 @@
 
     private boolean m_init = false;
 
-    private String m_id;
-
     private Home m_home;
     private Repository m_repository;
     private File m_system;
-    private File m_file;
+    private File m_index;
 
     private final Hashtable m_resources = new Hashtable();
     private BuildListener m_listener;
@@ -92,38 +90,33 @@
     // constructor
     //-------------------------------------------------------------
 
-    public Home( Project project, String id )
+    public Home( Project project, File index )
     {
         setProject( project );
-        m_id = id;
-        setupHome();
-    }
+        m_index = index;
+        log( "Building system definition." );
+        try
+        {
+            m_system = m_index.getParentFile();
 
-    //-------------------------------------------------------------
-    // Task
-    //-------------------------------------------------------------
+            Element root = ElementHelper.getRootElement( m_index );
+            final Element repo = ElementHelper.getChild( root, "repository" );
+            final Element resources = ElementHelper.getChild( root, "resources" );
+            final Element projects = ElementHelper.getChild( root, "projects" );
 
-    private String getHomeID()
-    {
-        if( null == m_id )
-        {
-            return KEY;
-        }
-        else
-        {
-            return m_id;
-        }
-    }
+            //
+            // construct the repository, build the definition of the available 
+            // resources and projects used within the system and associate a build
+            // listener
+            //
 
-    private Home getHome()
-    {
-        if( m_home != null )
-        {
-            return m_home;
+            m_repository = createRepository( repo );
+            buildResourceList( resources );
+            buildProjectList( projects );
         }
-        else
+        catch( Throwable e )
         {
-            return this;
+            throw new BuildException( e );
         }
     }
 
@@ -281,40 +274,9 @@
         return repository;
     }
 
-    private void setupHome()
-    {
-        Project project = getProject();
-        log( "Building system definition." );
-        try
-        {
-            File index = getIndexFile();
-            m_system = index.getParentFile();
-            setupProperties( project, m_system );
-            Element root = ElementHelper.getRootElement( index );
-            final Element repo = ElementHelper.getChild( root, "repository" );
-            final Element resources = ElementHelper.getChild( root, "resources" );
-            final Element projects = ElementHelper.getChild( root, "projects" );
-
-            //
-            // construct the repository, build the definition of the available 
-            // resources and projects used within the system and associate a build
-            // listener
-            //
-
-            m_repository = createRepository( repo );
-            buildResourceList( resources );
-            buildProjectList( projects );
-
-        }
-        catch( Throwable e )
-        {
-            throw new BuildException( e );
-        }
-    }
-
     private File getIndexFile()
     {
-        if( null != m_file ) return m_file;
+        if( null != m_index ) return m_index;
 
         String path = project.getProperty( KEY );
         if( null != path )
@@ -347,31 +309,6 @@
         }
     }
 
-    private void setupProperties( Project project, File dir )
-    {
-        setupUserProperties( project, dir );
-        setupBuildProperties( project, dir );
-    }
-
-    private void setupUserProperties( Project project, File basedir )
-    {
-        File user = Context.getFile( basedir, USER_PROPERTIES );
-        readProperties( project, user );
-    }
-
-    private void setupBuildProperties( Project project, File basedir )
-    {
-        File build = Context.getFile( basedir, BUILD_PROPERTIES );
-        readProperties( project, build );
-    }
-
-    private void readProperties( Project project, File file ) throws BuildException 
-    {
-        Property props = (Property) project.createTask( "property" );
-        props.setFile( file );
-        props.init();
-        props.execute();
-    }
 
    /*
     public void build( Definition definition )

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/ArtifactTask.java	Sat Jun 12 09:28:55 2004
@@ -203,10 +203,8 @@
               + file;
             throw new BuildException( error );
         }
-        SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
-        sdf.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
         Date created = new Date( file.lastModified() );
-        return sdf.format( created );
+        return Context.getSignature( created );
     }
 
     private void writeClasspath( final Writer writer, final Definition def )

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/HomeTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/HomeTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/HomeTask.java	Sat Jun 12 09:28:55 2004
@@ -24,6 +24,7 @@
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.taskdefs.Copy;
+import org.apache.tools.ant.taskdefs.Property;
 import org.apache.tools.ant.taskdefs.Jar;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
@@ -41,71 +42,88 @@
 public class HomeTask extends ContextualTask
 {
     private static final String CACHE_DIR_KEY = "project.home.cache.dir";
+    private static final String USER_PROPERTIES = "user.properties";
+    private static final String BUILD_PROPERTIES = "build.properties";
 
     private static Home HOME;
 
-    private String m_id;
-
-   /**
-    * Set the home ref id to the system home.  If not supplied the 
-    * default system home 'project.home' id will apply.
-    *
-    * @param id a home id
-    */
-    public void setRefid( String id )
-    {
-        m_id = id;
-    }
-
     public void init() 
     {
         if( !isInitialized() )
         {
             super.init();
+            Project project = getProject();
+            File index = getIndexFile();
+            setupProperties( project, index.getParentFile() );
             if( null == HOME )
             {
-                HOME = new Home( getProject(), Home.KEY );
+                HOME = new Home( project, index );
             }
-            getProject().addReference( Home.KEY, HOME );
+            project.addReference( Home.KEY, HOME );
+            
             getProject().setNewProperty( 
               CACHE_DIR_KEY, 
               HOME.getRepository().getCacheDirectory().toString() );
         }
     }
 
-    private String getHomeID()
+    private void setupProperties( Project project, File dir )
     {
-        if( null == m_id )
-        {
-            return Home.KEY;
-        }
-        else
-        {
-            return m_id;
-        }
+        setupUserProperties( project, dir );
+        setupBuildProperties( project, dir );
     }
 
-    private Home getHomeFromReference( String id )
+    private void setupUserProperties( Project project, File dir )
     {
-        Object object = getProject().getReference( id );
-        if( null == object )
-        {
-            return null;
-        }
-        if( object instanceof Home )
+        File user = Context.getFile( dir, USER_PROPERTIES );
+        readProperties( project, user );
+    }
+
+    private void setupBuildProperties( Project project, File dir )
+    {
+        File build = Context.getFile( dir, BUILD_PROPERTIES );
+        readProperties( project, build );
+    }
+
+    private void readProperties( Project project, File file ) throws BuildException 
+    {
+        Property props = (Property) project.createTask( "property" );
+        props.init();
+        props.setFile( file );
+        props.execute();
+    }
+
+    private File getIndexFile()
+    {
+        String path = getProject().getProperty( Home.KEY );
+        if( null != path )
         {
-            return (Home) object;
+            File index = Context.getFile( project.getBaseDir(), path );
+            if( index.exists() )
+            {
+                if( index.isDirectory() )
+                {
+                    return new File( index, "index.xml" );
+                }
+                else
+                {
+                    return index;
+                }
+            }
+            else
+            {
+                final String error = 
+                  "Property value 'project.home' references a non-existant file: "
+                  + index;
+                throw new BuildException( error );
+            }
         }
         else
         {
             final String error = 
-              "System home ref id '" + id 
-              + "' declared or implied in task [" 
-              + getTaskName() 
-              + "] in the project ["
-              + getProject().getName() 
-              + "] references a object that is not a system home.";
+              "Cannot continue due to unresolved 'project.home' property.";
             throw new BuildException( error );
         }
     }
+
 }

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JUnitTestTask.java	Sat Jun 12 09:28:55 2004
@@ -47,6 +47,8 @@
  */
 public class JUnitTestTask extends SystemTask
 {
+    public static final String TEST_ENABLED_KEY = "project.test.enabled";
+
     public static final String TEST_KEY = "project.test";
     public static final String TEST_VALUE = "test";
 
@@ -100,6 +102,13 @@
     public void execute() throws BuildException 
     {
         Project project = getProject();
+
+        String enabled = project.getProperty( TEST_ENABLED_KEY );
+        if(( null != enabled ) && enabled.equals( "false" ))
+        {
+            return;
+        }
+
         File build = getContext().getBuildDirectory();
 
         String testPath = project.getProperty( TEST_SRC_KEY );

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/JarTask.java	Sat Jun 12 09:28:55 2004
@@ -28,6 +28,8 @@
 import org.apache.tools.ant.taskdefs.Jar;
 import org.apache.tools.ant.taskdefs.Mkdir;
 import org.apache.tools.ant.taskdefs.Checksum;
+import org.apache.tools.ant.taskdefs.Manifest;
+import org.apache.tools.ant.taskdefs.ManifestException;
 import org.apache.tools.ant.taskdefs.Execute;
 import org.apache.tools.ant.types.FileSet;
 import org.apache.tools.ant.types.Path;
@@ -49,6 +51,8 @@
     public static final String JAR_EXT = "jar";
     public static final String ASC_EXT = "asc";
     public static final String GPG_EXE_KEY = "project.gpg.exe";
+    public static final String JAR_MAIN_KEY = "project.jar.main.class";
+    public static final String JAR_CLASSPATH_KEY = "project.jar.classpath";
     
     public void execute() throws BuildException 
     {
@@ -57,12 +61,13 @@
         File deliverables = 
           getContext().getDeliverablesDirectory();
 
+        Definition def = getHome().getDefinition( getKey() );
         File jarFile = getJarFile( deliverables );
         if( classes.exists() )
         {
             try
             {
-                boolean modified = jar( classes, jarFile );
+                boolean modified = jar( def, classes, jarFile );
                 if( modified )
                 {
                     checksum( jarFile );
@@ -100,7 +105,7 @@
         }
     }
 
-    private boolean jar( File classes, File jarFile )
+    private boolean jar( Definition def, File classes, File jarFile )
     {
         File dir = jarFile.getParentFile();
         mkDir( dir );
@@ -110,15 +115,69 @@
         {
             modified = jarFile.lastModified();
         }
+
  
         Jar jar = (Jar) getProject().createTask( "jar" );
         jar.setDestFile( jarFile );
         jar.setBasedir( classes );
         jar.setIndex( true );
+        addManifest( jar, def );
         jar.init();
         jar.execute();
 
         return jarFile.lastModified() > modified;
+    }
+
+    private void addManifest( Jar jar, Definition def )
+    {
+        try
+        {
+            Manifest manifest = new Manifest();
+            Manifest.Section main = manifest.getMainSection();
+
+            addAttribute( main, "Created-By", "Apache Avalon" );
+            addAttribute( main, "Built-By", System.getProperty( "user.name" ) );
+            addAttribute( main, "Extension-Name", def.getInfo().getName() );
+            addAttribute( main, "Specification-Vendor", "The Apache Software Foundation Avalon Project" );
+
+            if( null != def.getInfo().getVersion() )
+            {
+                addAttribute( main, "Specification-Version", def.getInfo().getVersion() );
+            }
+            else
+            {
+                addAttribute( main, "Specification-Version", "1.0" );
+            }
+            addAttribute( main, "Implementation-Vendor", "The Apache Software Foundation Avalon Project" );
+            addAttribute( main, "Implementation-Vendor-Id", "org.apache.avalon" );
+            addAttribute( main, "Implementation-Version", "123" );
+
+            String classpath = getProject().getProperty( JAR_CLASSPATH_KEY );
+            if( null != classpath )
+            {
+                addAttribute( main, "Class-Path", classpath );
+            }
+
+            String mainClass = getProject().getProperty( JAR_MAIN_KEY );
+            if( null != mainClass )
+            {
+                addAttribute( main, "Main-Class", mainClass );
+            }
+            
+            jar.addConfiguredManifest( manifest );
+        }
+        catch( Throwable e )
+        {
+            throw new BuildException( e );
+        }
+    }
+
+    private void addAttribute( 
+      Manifest.Section section, String name, String value )
+      throws ManifestException
+    {
+        Manifest.Attribute attribute = new Manifest.Attribute( name, value );
+        section.addConfiguredAttribute( attribute );
     }
 
     private void checksum( File jar )

Modified: avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java
==============================================================================
--- avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java	(original)
+++ avalon/trunk/tools/project/src/main/org/apache/avalon/tools/tasks/PluginTask.java	Sat Jun 12 09:28:55 2004
@@ -87,8 +87,6 @@
             Resource resource = new Resource( getHome(), info );
             File file = resource.getArtifact( project );
 
-            //File file = getHome().getRepository().getResource( project, resource );
-
             //
             // create a utility data object from the defintion
             //
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.