Skip to content

Commit

Permalink
fixed error when removing ProjectGroup and/or Projects because of the…
Browse files Browse the repository at this point in the history
… ContinuumReleaseResult relationship

git-svn-id: https://svn.apache.org/repos/asf/continuum/trunk@695323 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Maria Catherine R. Tan committed Sep 15, 2008
1 parent d8f7b78 commit 5239b1e
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 23 deletions.
Expand Up @@ -37,13 +37,14 @@ void removeContinuumReleaseResult( ContinuumReleaseResult releaseResult )
throws ContinuumStoreException;

List<ContinuumReleaseResult> getContinuumReleaseResultsByProjectGroup( int projectGroupId );

List<ContinuumReleaseResult> getAllContinuumReleaseResults();

ContinuumReleaseResult getContinuumReleaseResult( int releaseResultId )
throws ContinuumObjectNotFoundException, ContinuumStoreException;

ContinuumReleaseResult getContinuumReleaseResult( int projectId, String releaseGoal, long startTime, long endTime )
throws ContinuumStoreException;


List<ContinuumReleaseResult> getContinuumReleaseResultsByProject( int projectId );
}
Expand Up @@ -345,27 +345,6 @@ public void removeProjectGroup( int projectGroupId )
{
removeProject( ( (Project) o ).getId() );
}

List<ContinuumReleaseResult> releaseResults = releaseResultDao.getContinuumReleaseResultsByProjectGroup( projectGroupId );

try
{
for ( ContinuumReleaseResult releaseResult : releaseResults )
{
releaseResultDao.removeContinuumReleaseResult( releaseResult );
}

File releaseOutputDirectory = configurationService.getReleaseOutputDirectory( projectGroupId );
FileUtils.deleteDirectory( releaseOutputDirectory );
}
catch ( ContinuumStoreException e )
{
throw new ContinuumException( "Error while deleting continuum release result of project group", e );
}
catch ( IOException e )
{
throw logAndCreateException( "Error while deleting project group release output directory.", e );
}
}

getLogger().info( "Remove project group " + projectGroup.getName() + "(" + projectGroup.getId() + ")" );
Expand Down Expand Up @@ -822,6 +801,27 @@ public void removeProject( int projectId )
{
Project project = getProjectWithBuilds( projectId );

List<ContinuumReleaseResult> releaseResults = releaseResultDao.getContinuumReleaseResultsByProject( projectId );

try
{
for ( ContinuumReleaseResult releaseResult : releaseResults )
{
releaseResultDao.removeContinuumReleaseResult( releaseResult );
}

File releaseOutputDirectory = configurationService.getReleaseOutputDirectory( project.getProjectGroup().getId() );
FileUtils.deleteDirectory( releaseOutputDirectory );
}
catch ( ContinuumStoreException e )
{
throw new ContinuumException( "Error while deleting continuum release result of project group", e );
}
catch ( IOException e )
{
throw logAndCreateException( "Error while deleting project group release output directory.", e );
}

getLogger().info( "Remove project " + project.getName() + "(" + projectId + ")" );

if ( isInCheckoutQueue( projectId ) )
Expand Down
Expand Up @@ -133,6 +133,34 @@ public List<ContinuumReleaseResult> getContinuumReleaseResultsByProjectGroup( in
}
}

public List<ContinuumReleaseResult> getContinuumReleaseResultsByProject( int projectId )
{
PersistenceManager pm = getPersistenceManager();

Transaction tx = pm.currentTransaction();

try
{
tx.begin();

Extent extent = pm.getExtent( ContinuumReleaseResult.class, true );

Query query = pm.newQuery( extent, "project.id == " + projectId );

List result = (List) query.execute();

result = (List) pm.detachCopyAll( result );

tx.commit();

return result;
}
finally
{
rollback( tx );
}
}

public void removeContinuumReleaseResult( ContinuumReleaseResult releaseResult )
throws ContinuumStoreException
{
Expand Down
Expand Up @@ -19,6 +19,7 @@
* under the License.
*/

import org.apache.continuum.dao.ContinuumReleaseResultDao;
import org.apache.continuum.dao.DaoUtils;
import org.apache.continuum.dao.DirectoryPurgeConfigurationDao;
import org.apache.continuum.dao.InstallationDao;
Expand All @@ -29,6 +30,7 @@
import org.apache.continuum.dao.RepositoryPurgeConfigurationDao;
import org.apache.continuum.dao.ScheduleDao;
import org.apache.continuum.dao.SystemConfigurationDao;
import org.apache.continuum.model.release.ContinuumReleaseResult;
import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
import org.apache.continuum.model.repository.LocalRepository;
import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
Expand Down Expand Up @@ -83,6 +85,8 @@ public abstract class AbstractContinuumStoreTestCase

protected SystemConfigurationDao systemConfigurationDao;

protected ContinuumReleaseResultDao releaseResultDao;

protected ProjectGroup defaultProjectGroup;

protected ProjectGroup testProjectGroup2;
Expand Down Expand Up @@ -160,6 +164,8 @@ protected void setUp()
scheduleDao = (ScheduleDao) lookup( ScheduleDao.class.getName() );

systemConfigurationDao = (SystemConfigurationDao) lookup( SystemConfigurationDao.class.getName() );

releaseResultDao = (ContinuumReleaseResultDao) lookup( ContinuumReleaseResultDao.class.getName() );
}

protected void createBuildDatabase()
Expand Down Expand Up @@ -1362,6 +1368,35 @@ protected static void assertDirectoryPurgeConfigurationEquals( DirectoryPurgeCon
actualConfig.isEnabled() );
}

protected static ContinuumReleaseResult createTestContinuumReleaseResult( ProjectGroup group, Project project,
String releaseGoal, int resultCode,
long startTime, long endTime )
{
ContinuumReleaseResult releaseResult = new ContinuumReleaseResult();
releaseResult.setProjectGroup( group );
releaseResult.setProject( project );
releaseResult.setReleaseGoal( releaseGoal );
releaseResult.setResultCode( resultCode );
releaseResult.setStartTime( startTime );
releaseResult.setEndTime( endTime );

return releaseResult;
}

protected static void assertReleaseResultEquals( ContinuumReleaseResult expectedConfig,
ContinuumReleaseResult actualConfig )
{
assertEquals( "compare continuum release result - id", expectedConfig.getId(), actualConfig.getId() );
assertEquals( "compare continuum release result - releaseGoal", expectedConfig.getReleaseGoal(),
actualConfig.getReleaseGoal() );
assertEquals( "compare continuum release result - resultCode", expectedConfig.getResultCode(),
actualConfig.getResultCode() );
assertEquals( "compare continuum release result - startTime", expectedConfig.getStartTime(),
actualConfig.getStartTime() );
assertEquals( "compare continuum release result - endTime", expectedConfig.getEndTime(),
actualConfig.getEndTime() );
}

/**
* Setup JDO Factory
*
Expand Down
Expand Up @@ -22,6 +22,7 @@
import org.apache.continuum.dao.BuildDefinitionDao;
import org.apache.continuum.dao.BuildDefinitionTemplateDao;
import org.apache.continuum.dao.BuildResultDao;
import org.apache.continuum.model.release.ContinuumReleaseResult;
import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
import org.apache.continuum.model.repository.LocalRepository;
import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
Expand Down Expand Up @@ -1248,6 +1249,31 @@ public void testGetPurgeConfigurationsBySchedule()
assertRepositoryPurgeConfigurationEquals( testRepoPurgeConfiguration3, repoPurgeList.get( 1 ) );
assertDirectoryPurgeConfigurationEquals( testDirectoryPurgeConfig, dirPurgeList.get( 0 ) );
}

public void testRemoveProjectWithReleaseResult()
throws Exception
{
Project project = projectDao.getProject( testProject1.getId() );
ProjectGroup group = project.getProjectGroup();

ContinuumReleaseResult releaseResult = createTestContinuumReleaseResult( group, project, "releaseGoal", 0, 0, 0 );
releaseResult = releaseResultDao.addContinuumReleaseResult( releaseResult );

List<ContinuumReleaseResult> releaseResults = releaseResultDao.getAllContinuumReleaseResults();
assertEquals( "check size of continuum release results", 1, releaseResults.size() );

ContinuumReleaseResult retrievedResult = releaseResults.get( 0 );
assertReleaseResultEquals( releaseResult, retrievedResult );
assertProjectGroupEquals( group, retrievedResult.getProjectGroup() );
assertProjectEquals( project, retrievedResult.getProject() );

releaseResultDao.removeContinuumReleaseResult( releaseResult );
projectDao.removeProject( project );
assertFalse( projectDao.getProjectsInGroup( group.getId() ).contains( project ) );

releaseResults = releaseResultDao.getAllContinuumReleaseResults();
assertEquals( "check size of continuum release results", 0, releaseResults.size() );
}

// ----------------------------------------------------------------------
// HELPER METHODS
Expand Down

0 comments on commit 5239b1e

Please sign in to comment.