You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by jv...@apache.org on 2005/07/18 21:58:08 UTC
svn commit: r219561 - in /maven/continuum/trunk/continuum-core/src:
main/java/org/apache/maven/continuum/store/JdoContinuumStore.java
test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java
Author: jvanzyl
Date: Mon Jul 18 12:54:26 2005
New Revision: 219561
URL: http://svn.apache.org/viewcvs?rev=219561&view=rev
Log:
o adding full tests for the M:N relationship between schedules and projects
Modified:
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java
Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java?rev=219561&r1=219560&r2=219561&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java Mon Jul 18 12:54:26 2005
@@ -113,8 +113,6 @@
schedule.getProjects().remove( project );
}
-
- makePersistentAll( pm, project.getSchedules() );
}
pm.deletePersistent( project );
@@ -139,7 +137,8 @@
tx.begin();
// ----------------------------------------------------------------------
- // Work around for bug with M:N relationships
+ // Work around for bug with M:N relationships. We must persist the list
+ // of schedules or they don't get saved.
// ----------------------------------------------------------------------
if ( project.getSchedules() != null && project.getSchedules().size() > 0 )
@@ -340,6 +339,29 @@
// Schedules
// ----------------------------------------------------------------------
+ public String addSchedule( ContinuumSchedule schedule )
+ throws ContinuumStoreException
+ {
+ PersistenceManager pm = pmf.getPersistenceManager();
+
+ Transaction tx = pm.currentTransaction();
+
+ try
+ {
+ tx.begin();
+
+ schedule = (ContinuumSchedule) makePersistent( pm, schedule );
+
+ commit( tx );
+
+ return schedule.getId();
+ }
+ finally
+ {
+ rollback( tx );
+ }
+ }
+
public ContinuumSchedule getSchedule( String projectId )
throws ContinuumStoreException
{
@@ -420,10 +442,49 @@
updateObject( schedule );
}
- public void removeSchedule( ContinuumSchedule schedule )
+ public void removeSchedule( String scheduleId )
throws ContinuumStoreException
{
- attachAndDelete( schedule );
+ PersistenceManager pm = pmf.getPersistenceManager();
+
+ Transaction tx = pm.currentTransaction();
+
+ try
+ {
+ tx.begin();
+
+ Object id = pm.newObjectIdInstance( ContinuumSchedule.class, scheduleId );
+
+ ContinuumSchedule schedule = (ContinuumSchedule) pm.getObjectById( id );
+
+ // ----------------------------------------------------------------------
+ // We need to remove this schedule reference from any project in the
+ // system. So grab the list of projects this schedule belongs to
+ // then iterate through the collection of projects removing the
+ // reference to this schedule. This seems like a bit much but the
+ // only thing that works.
+ // ----------------------------------------------------------------------
+
+ if ( schedule.getProjects() != null && schedule.getProjects().size() > 0 )
+ {
+ Set projects = schedule.getProjects();
+
+ for ( Iterator i = projects.iterator(); i.hasNext(); )
+ {
+ ContinuumProject project = (ContinuumProject) i.next();
+
+ project.getSchedules().remove( schedule );
+ }
+ }
+
+ pm.deletePersistent( schedule );
+
+ commit( tx );
+ }
+ finally
+ {
+ rollback( tx );
+ }
}
// ----------------------------------------------------------------------
Modified: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java?rev=219561&r1=219560&r2=219561&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java (original)
+++ maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTest.java Mon Jul 18 12:54:26 2005
@@ -715,25 +715,34 @@
// Schedules
// ----------------------------------------------------------------------
- public void testSchedulesBeingAddedToProject()
+ public void testScheduleAdditionAndRemovalFromProject()
throws Exception
{
+ // create project
String projectId = addMavenTwoProject( "Project Scheduling", "scm:scheduling" );
ContinuumProject project = store.getProject( projectId );
+ // add schedule
project.addSchedule( createStubSchedule( "schedule1" ) );
+ // update project
store.updateProject( project );
+ // retrieve project
project = store.getProject( projectId );
assertNotNull( project );
+ // get schedules out of the project
Set schedules = project.getSchedules();
+ assertEquals( 1, schedules.size() );
+
+ // get individual schedule
ContinuumSchedule schedule = (ContinuumSchedule) schedules.iterator().next();
+ // test values within schedule
assertEquals( "schedule1", schedule.getName() );
assertEquals( "schedule1", schedule.getDescription() );
@@ -773,6 +782,69 @@
schedule = store.getSchedule( scheduleId );
assertNotNull( schedule );
+ }
+
+ public void testProjectAdditionAndRemovalFromSchedule()
+ throws Exception
+ {
+ // create schedule
+ ContinuumSchedule schedule = createStubSchedule( "schedule2" );
+
+ String scheduleId = store.addSchedule( schedule );
+
+ schedule = store.getSchedule( scheduleId );
+
+ String projectId = addMavenTwoProject( "Project", "scm:scheduling" );
+
+ ContinuumProject project = store.getProject( projectId );
+
+ // add project
+ schedule.addProject( project );
+
+ // update schedule
+ store.updateSchedule( schedule );
+
+ // retrieve schedule
+ schedule = store.getSchedule( scheduleId );
+
+ assertNotNull( schedule );
+
+ // get projects out of the schedule
+ Set projects = schedule.getProjects();
+
+ assertEquals( 1, projects.size() );
+
+ // get individual project
+ project = (ContinuumProject) schedule.getProjects().iterator().next();
+
+ // test values within project
+ assertEquals( "Project", project.getName() );
+
+ // ----------------------------------------------------------------------
+ // Now lookup the project on its own and make sure the schedule is
+ // present within the project.
+ // ----------------------------------------------------------------------
+
+ project = store.getProject( projectId );
+
+ assertNotNull( project );
+
+ schedule = (ContinuumSchedule) project.getSchedules().iterator().next();
+
+ assertEquals( "schedule2", schedule.getName() );
+
+ // ----------------------------------------------------------------------
+ // Now delete the schedule from the store and make sure that the project
+ // still remains in the store.
+ // ----------------------------------------------------------------------
+
+ schedule = store.getSchedule( scheduleId );
+
+ store.removeSchedule( schedule.getId() );
+
+ project = store.getProject( projectId );
+
+ assertNotNull( project );
}
// ----------------------------------------------------------------------