You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by oc...@apache.org on 2009/01/17 08:27:10 UTC

svn commit: r735240 - in /continuum/trunk: continuum-data-management/data-management-jdo/ continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/ continuum-data-management/data-management-jdo/src/test/java/org...

Author: oching
Date: Fri Jan 16 23:27:10 2009
New Revision: 735240

URL: http://svn.apache.org/viewvc?rev=735240&view=rev
Log:
[CONTINUUM-2040]
o populate ProjectScmRoot table during import
o updated tests

Modified:
    continuum/trunk/continuum-data-management/data-management-jdo/pom.xml
    continuum/trunk/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java
    continuum/trunk/continuum-data-management/data-management-jdo/src/test/java/org/apache/maven/continuum/management/DataManagementToolTest.java
    continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java
    continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java

Modified: continuum/trunk/continuum-data-management/data-management-jdo/pom.xml
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-data-management/data-management-jdo/pom.xml?rev=735240&r1=735239&r2=735240&view=diff
==============================================================================
--- continuum/trunk/continuum-data-management/data-management-jdo/pom.xml (original)
+++ continuum/trunk/continuum-data-management/data-management-jdo/pom.xml Fri Jan 16 23:27:10 2009
@@ -50,6 +50,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.continuum</groupId>
+      <artifactId>continuum-commons</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.continuum</groupId>
       <artifactId>continuum-store</artifactId>
       <scope>runtime</scope>
     </dependency>

Modified: continuum/trunk/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java?rev=735240&r1=735239&r2=735240&view=diff
==============================================================================
--- continuum/trunk/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java (original)
+++ continuum/trunk/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java Fri Jan 16 23:27:10 2009
@@ -1,5 +1,24 @@
 package org.apache.maven.continuum.management;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import org.apache.continuum.dao.DaoUtils;
 import org.apache.continuum.dao.DirectoryPurgeConfigurationDao;
 import org.apache.continuum.dao.InstallationDao;
@@ -10,7 +29,9 @@
 import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
 import org.apache.continuum.dao.ScheduleDao;
 import org.apache.continuum.dao.SystemConfigurationDao;
+import org.apache.continuum.model.project.ProjectScmRoot;
 import org.apache.continuum.model.repository.LocalRepository;
+import org.apache.continuum.utils.ProjectSorter;
 import org.apache.maven.continuum.model.project.BuildDefinition;
 import org.apache.maven.continuum.model.project.ContinuumDatabase;
 import org.apache.maven.continuum.model.project.Project;
@@ -24,6 +45,9 @@
 import org.codehaus.plexus.jdo.ConfigurableJdoFactory;
 import org.codehaus.plexus.jdo.PlexusJdoUtils;
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.dag.CycleDetectedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.jdo.JDOHelper;
 import javax.jdo.PersistenceManagerFactory;
@@ -43,6 +67,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 /**
  * JDO implementation the database management tool API.
@@ -52,6 +77,8 @@
 public class JdoDataManagementTool
     implements DataManagementTool
 {
+    private Logger log = LoggerFactory.getLogger( JdoDataManagementTool.class );
+    
     /**
      * @plexus.requirement
      */
@@ -266,12 +293,70 @@
                 projectGroup.setLocalRepository( localRepositories.get( 
                                                  Integer.valueOf( projectGroup.getLocalRepository().getId() ) ) );
             }
-
+            
             projectGroup = (ProjectGroup) PlexusJdoUtils.addObject( pmf.getPersistenceManager(), projectGroup );
             projectGroups.put( Integer.valueOf( projectGroup.getId() ), projectGroup );
         }
+        
+        // create project scm root data (CONTINUUM-2040)
+        Map<Integer, ProjectScmRoot> projectScmRoots = new HashMap<Integer, ProjectScmRoot>();
+        Set<Integer> keys = projectGroups.keySet();
+        int id = 1;
+        for( Integer key : keys )
+        {
+            ProjectGroup projectGroup = projectGroups.get( key );            
+            String url = " ";
+            try
+            {                   
+                List<Project> projects =
+                    ProjectSorter.getSortedProjects( getProjectsByGroupIdWithDependencies( pmf, projectGroup.getId() ),
+                                                     log );
+                for ( Iterator j = projects.iterator(); j.hasNext(); )
+                {
+                    Project project = (Project) j.next();
+                    if ( !project.getScmUrl().trim().startsWith( url ) )
+                    {
+                        url = project.getScmUrl();
+                        ProjectScmRoot projectScmRoot = new ProjectScmRoot();
+                        projectScmRoot.setId( id );                        
+                        projectScmRoot.setProjectGroup( projectGroup );
+                        projectScmRoot.setScmRootAddress( url );
+                        projectScmRoot.setState( project.getState() );
+                        
+                        projectScmRoot = (ProjectScmRoot) PlexusJdoUtils.addObject( pmf.getPersistenceManager(), projectScmRoot );                        
+                        projectScmRoots.put( Integer.valueOf( projectScmRoot.getId() ), projectScmRoot );
+                        id++;                                                
+                    }
+                }
+            }
+            catch ( CycleDetectedException e )
+            {
+                //skip
+                log.info( "Skipping group '" + projectGroup.getGroupId() +
+                    "' when creating ProjectScmRoot data. Cycle detected: " + e.getMessage() );
+                continue;
+            }
+        }
     }
+    
+    private List<Project> getProjectsByGroupIdWithDependencies( PersistenceManagerFactory pmf, int projectGroupId )
+    {
+        List<Project> allProjects =
+            PlexusJdoUtils.getAllObjectsDetached( pmf.getPersistenceManager(), Project.class, "name ascending",
+                                                  "project-dependencies" );
+        List<Project> groupProjects = new ArrayList<Project>();
 
+        for ( Project project : allProjects )
+        {
+            if ( project.getProjectGroup().getId() == projectGroupId )
+            {
+                groupProjects.add( project );
+            }
+        }
+        
+        return groupProjects;
+    }
+    
     private static void processBuildDefinitions( List buildDefinitions, Map<Integer, Schedule> schedules,
                                                  Map<Integer, Profile> profiles,
                                                  Map<Integer, LocalRepository> localRepositories )

Modified: continuum/trunk/continuum-data-management/data-management-jdo/src/test/java/org/apache/maven/continuum/management/DataManagementToolTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-data-management/data-management-jdo/src/test/java/org/apache/maven/continuum/management/DataManagementToolTest.java?rev=735240&r1=735239&r2=735240&view=diff
==============================================================================
--- continuum/trunk/continuum-data-management/data-management-jdo/src/test/java/org/apache/maven/continuum/management/DataManagementToolTest.java (original)
+++ continuum/trunk/continuum-data-management/data-management-jdo/src/test/java/org/apache/maven/continuum/management/DataManagementToolTest.java Fri Jan 16 23:27:10 2009
@@ -57,7 +57,7 @@
 
         targetDirectory = createBackupDirectory();
     }
-
+    
 /*
     protected ContinuumStore createStore()
         throws Exception
@@ -76,8 +76,8 @@
 
     public void testBackupBuilds()
         throws IOException, ContinuumStoreException, XMLStreamException, Exception
-    {
-        createBuildDatabase();
+    {           
+        createBuildDatabase( true );
 
         // test sanity check
         assertBuildDatabase();
@@ -100,19 +100,19 @@
     public void testEraseBuilds()
         throws Exception
     {
-        createBuildDatabase();
+        createBuildDatabase( false );
 
         dataManagementTool.eraseDatabase();
 
-        assertEmpty();
+        assertEmpty( false );
     }
 
     public void testRestoreBuilds()
         throws Exception
     {
-        createBuildDatabase( false );
+        createBuildDatabase( false, true );
 
-        assertEmpty();
+        assertEmpty( true );
 
         File backupFile = new File( targetDirectory, BUILDS_XML );
 

Modified: continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java?rev=735240&r1=735239&r2=735240&view=diff
==============================================================================
--- continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java (original)
+++ continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java Fri Jan 16 23:27:10 2009
@@ -176,13 +176,13 @@
         releaseResultDao = (ContinuumReleaseResultDao) lookup( ContinuumReleaseResultDao.class.getName() );
     }
 
-    protected void createBuildDatabase()
+    protected void createBuildDatabase( boolean isTestFromDataManagementTool )
         throws Exception
     {
-        createBuildDatabase( true );
+        createBuildDatabase( true, isTestFromDataManagementTool );
     }
 
-    protected void createBuildDatabase( boolean addToStore )
+    protected void createBuildDatabase( boolean addToStore, boolean isTestFromDataManagementTool )
         throws Exception
     {
         // Setting up test data
@@ -595,10 +595,41 @@
         systemConfiguration.setInitialized( true );
         systemConfiguration.setWorkingDirectory( "workingDirectory" );
 
-        if ( addToStore )
-        {
+        if ( addToStore && !isTestFromDataManagementTool )
+        {   
             systemConfiguration = systemConfigurationDao.addSystemConfiguration( systemConfiguration );
         }
+        else
+        {
+            // hack for DataManagementTool test
+            // data-management-jdo has a dependency to continuum-commons where DefaultConfigurationService
+            //      is located. DefaultConfiguration loads the data and already adds a system configuration, causing
+            //      this to throw an exception
+            boolean isExisting = false;
+            try
+            {
+                systemConfigurationDao.getSystemConfiguration();
+            }
+            catch ( ContinuumStoreException e )
+            {
+                isExisting = true;
+            }
+            
+            if( !isExisting )
+            {
+                systemConfiguration = systemConfigurationDao.getSystemConfiguration();
+                systemConfiguration.setBaseUrl( "baseUrl" );
+                systemConfiguration.setBuildOutputDirectory( "buildOutputDirectory" );
+                systemConfiguration.setDefaultScheduleCronExpression( "* * * * *" );
+                systemConfiguration.setDefaultScheduleDescription( "Description" );
+                systemConfiguration.setDeploymentRepositoryDirectory( "deployment" );
+                systemConfiguration.setGuestAccountEnabled( false );
+                systemConfiguration.setInitialized( true );
+                systemConfiguration.setWorkingDirectory( "workingDirectory" );
+                
+                systemConfigurationDao.updateSystemConfiguration( systemConfiguration );
+            }
+        }
         
         testProjectScmRoot = createTestProjectScmRoot( "scmRootAddress1", 1, 0, "error1", group );
         
@@ -788,8 +819,7 @@
         store.addProjectGroup( group );
         testProjectGroup2.setId( group.getId() );
 */
-
-        assertSystemConfiguration( systemConfiguration, systemConfigurationDao.getSystemConfiguration() );
+        assertSystemConfiguration( systemConfiguration, systemConfigurationDao.getSystemConfiguration() );        
     }
 
     private void assertSystemConfiguration( SystemConfiguration expected, SystemConfiguration actual )
@@ -805,14 +835,17 @@
         assertEquals( expected.getWorkingDirectory(), actual.getWorkingDirectory() );
     }
 
-    protected void assertEmpty()
+    protected void assertEmpty( boolean isTestFromDataManagementTool )
         throws ContinuumStoreException
     {
         assertEquals( 0, installationDao.getAllInstallations().size() );
         assertEquals( 0, profileDao.getAllProfilesByName().size() );
         assertEquals( 0, projectGroupDao.getAllProjectGroups().size() );
         assertEquals( 0, projectDao.getAllProjectsByName().size() );
-        assertNull( systemConfigurationDao.getSystemConfiguration() );
+        if( !isTestFromDataManagementTool )
+        {
+            assertNull( systemConfigurationDao.getSystemConfiguration() );
+        }
     }
 
     protected static BuildDefinition createTestBuildDefinition( BuildDefinition buildDefinition )

Modified: continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java?rev=735240&r1=735239&r2=735240&view=diff
==============================================================================
--- continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java (original)
+++ continuum/trunk/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java Fri Jan 16 23:27:10 2009
@@ -1381,7 +1381,7 @@
 
         buildResultDao = (BuildResultDao) lookup( BuildResultDao.class.getName() );
 
-        createBuildDatabase();
+        createBuildDatabase(false);
     }
 
     private static void checkProjectFetchGroup( Project project, boolean checkoutFetchGroup,