You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ev...@apache.org on 2005/09/13 16:53:16 UTC

svn commit: r280572 - in /maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater: DefaultUpdaterManager.java Updater.java UpdaterForContinuumOneAlphaThree.java

Author: evenisse
Date: Tue Sep 13 07:53:11 2005
New Revision: 280572

URL: http://svn.apache.org/viewcvs?rev=280572&view=rev
Log:
my last changes in updater. Not usable for the moment. I'll finish it in beta-1

Modified:
    maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/DefaultUpdaterManager.java
    maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/Updater.java
    maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/UpdaterForContinuumOneAlphaThree.java

Modified: maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/DefaultUpdaterManager.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/DefaultUpdaterManager.java?rev=280572&r1=280571&r2=280572&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/DefaultUpdaterManager.java (original)
+++ maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/DefaultUpdaterManager.java Tue Sep 13 07:53:11 2005
@@ -24,16 +24,21 @@
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.archiver.UnArchiver;
+import org.codehaus.plexus.component.repository.io.PlexusTools;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.context.Context;
 import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.jdo.JdoFactory;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.IOException;
 import java.io.File;
+import java.io.FileReader;
 import java.net.URL;
 import java.util.Iterator;
 import java.util.Map;
@@ -181,15 +186,62 @@
 
         try
         {
-            backup( continuumHome, userVersion );
+            backup( continuumHome, version.getName() );
 
             updateContinuumFiles( continuumHome, model );
 
             getLogger().info( "==> Update database" );
 
-            updater.updateDatabase();
+            File oldApplicationXml = updater.getOldApplicationXml( getBackupDirectory( continuumHome,
+                                                                                       version.getName() ) );
+
+            FileUtils.copyFile( oldApplicationXml, getApplicationXmlBackup( oldApplicationXml ) );
+
+            String applicationXmlContent = FileUtils.fileRead( oldApplicationXml );
+
+            StringUtils.replace( applicationXmlContent, "<role>org.codehaus.plexus.jdo.JdoFactory</role>",
+                "<role>org.codehaus.plexus.jdo.JdoFactory</role>\n<role-hint>"+ version.getName() + "</role-hint>");
+
+            FileUtils.fileWrite( oldApplicationXml.getAbsolutePath(), applicationXmlContent );
+
+            //Load old application.xml
+            addConfiguration( oldApplicationXml );
+
+            File newApplicationXml = updater.getNewApplicationXml( continuumHome );
+
+            FileUtils.copyFile( newApplicationXml, getApplicationXmlBackup( newApplicationXml ) );
+
+            applicationXmlContent = FileUtils.fileRead( newApplicationXml );
+
+            StringUtils.replace( applicationXmlContent, "<role>org.codehaus.plexus.jdo.JdoFactory</role>",
+                "<role>org.codehaus.plexus.jdo.JdoFactory</role>\n<role-hint>"+ version.getName() + "-new</role-hint>");
+
+            FileUtils.fileWrite( newApplicationXml.getAbsolutePath(), applicationXmlContent );
+
+            //Load new application.xml
+            addConfiguration( newApplicationXml );
+
+            try
+            {
+                //load jdo factories
+                JdoFactory oldFactory = (JdoFactory) container.lookup( JdoFactory.ROLE, version.getName() );
+
+                JdoFactory newFactory = (JdoFactory) container.lookup( JdoFactory.ROLE, version.getName() + "-new" );
+
+                updater.updateDatabase( oldFactory, newFactory );
+            }
+            finally
+            {
+                FileUtils.copyFile( getApplicationXmlBackup( oldApplicationXml ), oldApplicationXml );
+
+                getApplicationXmlBackup( oldApplicationXml ).delete();
+
+                FileUtils.copyFile( getApplicationXmlBackup( newApplicationXml ), newApplicationXml );
+
+                getApplicationXmlBackup( newApplicationXml ).delete();
+            }
         }
-        catch( UpdaterException e )
+        catch( Exception e )
         {
             e.printStackTrace();
 
@@ -199,12 +251,12 @@
         }
     }
 
-    private void backup( File continuumHome, String userVersion )
+    private void backup( File continuumHome, String version )
         throws UpdaterException
     {
-        File backupDir = new File( continuumHome.getParentFile(), "continuum-" + userVersion );
+        File backupDir = getBackupDirectory( continuumHome, version );
 
-        getLogger().info( "==> Backup Continuum " + userVersion + " to " + backupDir.getAbsolutePath() );
+        getLogger().info( "==> Backup Continuum " + version + " to " + backupDir.getAbsolutePath() );
 
         try
         {
@@ -227,7 +279,7 @@
         {
             FileUtils.cleanDirectory( continuumHome );
 
-            FileUtils.copyDirectoryStructure( new File( continuumHome.getParentFile(), "continuum-" + userVersion ),
+            FileUtils.copyDirectoryStructure( getBackupDirectory( continuumHome, userVersion ),
                                               continuumHome );
         }
         catch( IOException e )
@@ -236,6 +288,16 @@
         }
     }
 
+    private File getBackupDirectory( File continuumHome, String version )
+    {
+        return new File( continuumHome.getParentFile(), "continuum-" + version );
+    }
+
+    private File getApplicationXmlBackup( File applicationXml )
+    {
+        return new File( applicationXml.getParentFile(), "application.xml.backup" );
+    }
+
     private void updateContinuumFiles( File continuumHome, UpdaterModel model )
         throws UpdaterException
     {
@@ -308,5 +370,13 @@
         throws ContextException
     {
         container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
+
+    private void addConfiguration( File config )
+        throws Exception
+    {
+        PlexusConfiguration appConfig = PlexusTools.buildConfiguration( config.getPath(), new FileReader( config ) );
+
+        //TODO: Add configuration to the container
     }
 }

Modified: maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/Updater.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/Updater.java?rev=280572&r1=280571&r2=280572&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/Updater.java (original)
+++ maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/Updater.java Tue Sep 13 07:53:11 2005
@@ -17,6 +17,9 @@
  */
 
 import org.apache.maven.continuum.updater.exception.UpdaterException;
+import org.codehaus.plexus.jdo.JdoFactory;
+
+import java.io.File;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -28,6 +31,10 @@
 
     String getReleaseUrl();
 
-    void updateDatabase()
+    File getOldApplicationXml( File continuumHome );
+
+    File getNewApplicationXml( File continuumHome );
+
+    void updateDatabase( JdoFactory oldFactory, JdoFactory newFactory )
         throws UpdaterException;
 }

Modified: maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/UpdaterForContinuumOneAlphaThree.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/UpdaterForContinuumOneAlphaThree.java?rev=280572&r1=280571&r2=280572&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/UpdaterForContinuumOneAlphaThree.java (original)
+++ maven/continuum/trunk/continuum-updater/src/main/java/org/apache/maven/continuum/updater/UpdaterForContinuumOneAlphaThree.java Tue Sep 13 07:53:11 2005
@@ -16,7 +16,32 @@
  * limitations under the License.
  */
 
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectDeveloper;
+import org.apache.maven.continuum.model.project.ProjectNotifier;
+import org.apache.maven.continuum.model.scm.ScmResult;
+import org.apache.maven.continuum.project.v1_0_alpha_3.AntProject;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ContinuumBuild;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ContinuumDeveloper;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ContinuumNotifier;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ContinuumProject;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ContinuumJPoxStore;
+import org.apache.maven.continuum.project.v1_0_alpha_3.MavenOneProject;
+import org.apache.maven.continuum.project.v1_0_alpha_3.MavenTwoProject;
+import org.apache.maven.continuum.project.v1_0_alpha_3.ShellProject;
+import org.apache.maven.continuum.scm.v1_0_alpha_3.CheckOutScmResult;
+import org.apache.maven.continuum.scm.v1_0_alpha_3.UpdateScmResult;
+import org.apache.maven.continuum.store.ContinuumStore;
+import org.apache.maven.continuum.store.ContinuumStoreException;
 import org.apache.maven.continuum.updater.exception.UpdaterException;
+import org.codehaus.plexus.jdo.JdoFactory;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
 /**
  * @plexus.component
@@ -29,14 +54,235 @@
 public class UpdaterForContinuumOneAlphaThree
     implements Updater
 {
+    private ContinuumStore oldStore;
+
+    private ContinuumStore store;
+
     public String getReleaseUrl()
     {
         return "http://www.apache.org/dist/maven/binaries/continuum-1.0-alpha-4-bin.zip";
     }
 
-    public void updateDatabase()
+    public File getOldApplicationXml( File continuumHome )
+    {
+        return new File( continuumHome, "apps/continuum/conf/application.xml" );
+    }
+
+    public File getNewApplicationXml( File continuumHome )
+    {
+        return new File( continuumHome, "apps/continuum/conf/application.xml" );
+    }
+
+    public void updateDatabase( JdoFactory oldFactory, JdoFactory newFactory )
         throws UpdaterException
     {
-        //throw new UpdaterException( "Not implemented." );
+        //throw new UpdaterException( "Update database not implemented." );
+    }
+
+    private Project convertProject( ContinuumProject oldProject )
+        throws ContinuumStoreException
+    {
+        Project project = new Project();
+
+        project.setId( new Integer( oldProject.getId() ).intValue() );
+
+        project.setName( oldProject.getName() );
+
+        project.setScmUrl( oldProject.getScmUrl() );
+
+        project.setVersion( oldProject.getVersion() );
+
+        project.setWorkingDirectory( oldProject.getWorkingDirectory() );
+
+        project.setState( oldProject.getState() );
+
+        project.setExecutorId( oldProject.getExecutorId() );
+
+        project.setLatestBuildId( new Integer( oldProject.getLastBuildId() ).intValue() );
+
+        //oldProject.getPreviousBuildId() => don't exist in new model
+
+        project.setBuildNumber( oldProject.getBuildNumber() );
+
+        for ( Iterator i = oldProject.getBuilds().iterator(); i.hasNext(); )
+        {
+            ContinuumBuild oldBuildResult = (ContinuumBuild) i.next();
+
+            project.addBuildResult( convertBuildResult( oldBuildResult, project ) );
+        }
+
+        project.setCheckoutResult( convertScmResult( oldProject.getCheckOutScmResult() ) );
+
+        //oldProject.getCheckOutErrorMessage() => don't exist in new model
+        //oldProject.getCheckOutErrorException() => don't exist in new model
+        //mailType => don't exist in new model
+
+        project.addBuildDefinition( convertBuildDefinition( oldProject ) );
+
+        project.setUrl( oldProject.getUrl() );
+
+        project.setGroupId( oldProject.getGroupId() );
+
+        //oldProject.getTestOutputDirectory() => don't exist in new model
+
+        for ( Iterator i = oldProject.getDevelopers().iterator(); i.hasNext(); )
+        {
+            ContinuumDeveloper oldDeveloper = (ContinuumDeveloper) i.next();
+
+            project.addDeveloper( convertDeveloper( oldDeveloper ) );
+        }
+
+        for ( Iterator i = oldProject.getNotifiers().iterator(); i.hasNext(); )
+        {
+            ContinuumNotifier oldNotifier = (ContinuumNotifier) i.next();
+
+            project.addNotifier( convertNotifier( oldNotifier ) );
+        }
+
+        project.setProjectGroup( store.getDefaultProjectGroup() );
+        return project;
+    }
+
+    private BuildDefinition convertBuildDefinition( ContinuumProject oldProject )
+    {
+        String executorId = oldProject.getExecutorId();
+
+        BuildDefinition bd = new BuildDefinition();
+
+        bd.setArguments( oldProject.getCommandLineArguments() );
+
+        if ( "maven-1".equals( executorId ) )
+        {
+            bd.setBuildFile( "project.xml" );
+        }
+        else if ( "maven2".equals( executorId ) )
+        {
+            bd.setBuildFile( "pom.xml" );
+        }
+
+        if ( oldProject instanceof MavenOneProject )
+        {
+            MavenOneProject project = (MavenOneProject) oldProject;
+
+            bd.setGoals( project.getGoals() );
+        }
+        if ( oldProject instanceof MavenTwoProject )
+        {
+            MavenTwoProject project = (MavenTwoProject) oldProject;
+
+            bd.setGoals( project.getGoals() );
+        }
+        if ( oldProject instanceof AntProject )
+        {
+            AntProject project = (AntProject) oldProject;
+
+            bd.setBuildFile( project.getExecutable() );
+
+            bd.setGoals( project.getTargets() );
+        }
+        if ( oldProject instanceof ShellProject )
+        {
+            ShellProject project = (ShellProject) oldProject;
+
+            bd.setBuildFile( project.getExecutable() );
+        }
+
+        //bd.setSchedule(); ==> TODO
+
+        return bd;
+    }
+
+    private ProjectDeveloper convertDeveloper( ContinuumDeveloper oldDeveloper )
+    {
+        ProjectDeveloper developer = new ProjectDeveloper();
+
+        developer.setScmId( oldDeveloper.getId() );
+
+        developer.setName( oldDeveloper.getName() );
+
+        developer.setEmail( oldDeveloper.getEmail() );
+
+        return developer;
+    }
+
+    private ProjectNotifier convertNotifier( ContinuumNotifier oldNotifier )
+    {
+        ProjectNotifier notifier = new ProjectNotifier();
+
+        notifier.setType( oldNotifier.getType());
+
+        Map oldConf = oldNotifier.getConfiguration();
+
+        Map conf = new HashMap();
+
+        for ( Iterator i = oldConf.keySet().iterator(); i.hasNext(); )
+        {
+            String key = (String) i.next();
+
+            conf.put( key, oldConf.get( key ) );
+        }
+
+        notifier.setConfiguration( conf );
+
+        return notifier;
+    }
+
+    private BuildResult convertBuildResult( ContinuumBuild oldBuildResult, Project newProject )
+    {
+        BuildResult buildResult = new BuildResult();
+
+        buildResult.setProject( newProject );
+
+        buildResult.setId( new Integer( oldBuildResult.getId() ).intValue() );
+
+        buildResult.setState( oldBuildResult.getState() );
+
+        if ( oldBuildResult.isForced() )
+        {
+            buildResult.setTrigger( 1 );
+        }
+
+        buildResult.setStartTime( oldBuildResult.getStartTime() );
+
+        buildResult.setEndTime( oldBuildResult.getEndTime() );
+
+        buildResult.setError( oldBuildResult.getError() );
+
+        buildResult.setSuccess( oldBuildResult.isSuccess() );
+
+        //standardOutput => don't exist in new model
+        //standardError => don't exist in new model
+
+        buildResult.setExitCode( oldBuildResult.getExitCode() );
+
+        buildResult.setScmResult( convertScmResult( oldBuildResult.getUpdateScmResult() ) );
+
+        return buildResult;
+    }
+
+    private ScmResult convertScmResult( CheckOutScmResult oldScmResult )
+    {
+        ScmResult scmResult = new ScmResult();
+
+        scmResult.setSuccess( oldScmResult.isSuccess() );
+
+        scmResult.setProviderMessage( oldScmResult.getProviderMessage() );
+
+        scmResult.setCommandOutput( oldScmResult.getCommandOutput() );
+
+        return scmResult;
+    }
+
+    private ScmResult convertScmResult( UpdateScmResult oldScmResult )
+    {
+        ScmResult scmResult = new ScmResult();
+
+        scmResult.setSuccess( oldScmResult.isSuccess() );
+
+        scmResult.setProviderMessage( oldScmResult.getProviderMessage() );
+
+        scmResult.setCommandOutput( oldScmResult.getCommandOutput() );
+
+        return scmResult;
     }
 }