diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java index f5d967e4756c53d182775e42b4f55f1654152295..586465ef88693e8f1dc5abd2dca73becc400f024 100644 --- a/src/main/java/org/olat/course/CourseFactory.java +++ b/src/main/java/org/olat/course/CourseFactory.java @@ -111,6 +111,7 @@ import org.olat.course.nodes.BCCourseNode; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.STCourseNode; import org.olat.course.nodes.TACourseNode; +import org.olat.course.nodes.gta.GTAManager; import org.olat.course.properties.CoursePropertyManager; import org.olat.course.properties.PersistingCoursePropertyManager; import org.olat.course.run.RunMainController; @@ -323,7 +324,7 @@ public class CourseFactory extends BasicManager { * * @param res */ - public static void deleteCourse(OLATResource res) { + public static void deleteCourse(RepositoryEntry entry, OLATResource res) { final long start = System.currentTimeMillis(); log.info("deleteCourse: starting to delete course. res="+res); @@ -346,6 +347,7 @@ public class CourseFactory extends BasicManager { TreeVisitor tv = new TreeVisitor(visitor, course.getRunStructure().getRootNode(), true); tv.visitAll(); } + // delete assessment notifications OLATResourceable assessmentOres = OresHelper.createOLATResourceableInstance(CourseModule.ORES_COURSE_ASSESSMENT, res.getResourceableId()); @@ -373,6 +375,8 @@ public class CourseFactory extends BasicManager { calManager.deleteCourseCalendar(res); // delete IM messages CoreSpringFactory.getImpl(InstantMessagingService.class).deleteMessages(res); + //delete tasks + CoreSpringFactory.getImpl(GTAManager.class).deleteAllTaskLists(entry); // cleanup cache removeFromCache(res.getResourceableId()); diff --git a/src/main/java/org/olat/course/CourseModule.java b/src/main/java/org/olat/course/CourseModule.java index 1bcb4acee2c6dae66fdd41c746f4cc45cadb6625..1cb412da1604d9b5e49777da249f6f6c0745c11b 100644 --- a/src/main/java/org/olat/course/CourseModule.java +++ b/src/main/java/org/olat/course/CourseModule.java @@ -270,7 +270,7 @@ public class CourseModule extends AbstractOLATModule { try { propertyManager.deleteProperty(prop); repositoryService.deleteRepositoryEntryAndBaseGroups(re); - CourseFactory.deleteCourse(re.getOlatResource()); + CourseFactory.deleteCourse(re, re.getOlatResource()); OLATResource ores = olatResourceManager.findResourceable(re.getOlatResource()); olatResourceManager.deleteOLATResource(ores); } catch (Exception e) { diff --git a/src/main/java/org/olat/course/nodes/gta/GTAManager.java b/src/main/java/org/olat/course/nodes/gta/GTAManager.java index c6eae46524ef1f69ca984a2f35fa96177235bfc6..41dd51f6d8cf0951b465de0996c965c2a213388a 100644 --- a/src/main/java/org/olat/course/nodes/gta/GTAManager.java +++ b/src/main/java/org/olat/course/nodes/gta/GTAManager.java @@ -164,8 +164,21 @@ public interface GTAManager { public int updateTaskName(TaskList taskList, String currentTaskName, String newTaskName); + /** + * Delete the task list and the tasks of the specified course element of the course. + * @param entry The repository entry of the course + * @param cNode The course element + * @return + */ public int deleteTaskList(RepositoryEntryRef entry, GTACourseNode cNode); + /** + * Delete all the task list and tasks of a course specified by its repository entry. + * @param entry + * @return + */ + public int deleteAllTaskLists(RepositoryEntryRef entry); + public Membership getMembership(IdentityRef identity, RepositoryEntryRef entry, GTACourseNode cNode); diff --git a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java index c7756d8529aa5a4e1320d0bfad42a038127623d8..342cc27f43eda50406bf9c502fe690f8493d1487 100644 --- a/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java +++ b/src/main/java/org/olat/course/nodes/gta/manager/GTAManagerImpl.java @@ -30,6 +30,7 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import javax.persistence.Query; import javax.persistence.LockModeType; import org.olat.basesecurity.GroupRoles; @@ -483,6 +484,30 @@ public class GTAManagerImpl implements GTAManager { return numOfDeletedObjects; } + @Override + public int deleteAllTaskLists(RepositoryEntryRef entry) { + String q = "select tasks from gtatasklist tasks where tasks.entry.key=:entryKey"; + List<TaskList> taskLists = dbInstance.getCurrentEntityManager().createQuery(q, TaskList.class) + .setParameter("entryKey", entry.getKey()) + .getResultList(); + + String deleteTasks = "delete from gtatask as task where task.taskList.key=:taskListKey"; + Query deleteTaskQuery = dbInstance.getCurrentEntityManager().createQuery(deleteTasks); + + int numOfDeletedObjects = 0; + for(TaskList taskList:taskLists) { + int numOfTasks = deleteTaskQuery.setParameter("taskListKey", taskList.getKey()).executeUpdate(); + numOfDeletedObjects += numOfTasks; + } + + String deleteTaskLists = "delete from gtatasklist as tasks where tasks.entry.key=:entryKey"; + numOfDeletedObjects += dbInstance.getCurrentEntityManager() + .createQuery(deleteTaskLists) + .setParameter("entryKey", entry.getKey()) + .executeUpdate(); + return numOfDeletedObjects; + } + @Override public List<Task> getTasks(TaskList taskList, GTACourseNode cNode) { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/olat/login/auth/OLATAuthManager.java b/src/main/java/org/olat/login/auth/OLATAuthManager.java index 5c9bc1a9aa6350e06fb54641d32bcc7b5472acd3..0161c09c15e0a8e959a108a40310f1a59dad7297 100644 --- a/src/main/java/org/olat/login/auth/OLATAuthManager.java +++ b/src/main/java/org/olat/login/auth/OLATAuthManager.java @@ -106,8 +106,14 @@ public class OLATAuthManager extends BasicManager implements AuthenticationSPI { // check for email instead of username if ident is null if(loginModule.isAllowLoginUsingEmail()) { if (MailHelper.isValidEmailAddress(login)){ - ident = userManager.findIdentityByEmail(login); + List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(login)); // check for email changed with verification workflow + if(identities.size() == 1) { + ident = identities.get(0); + } else if(identities.size() > 1) { + logError("more than one identity found with email::" + login, null); + } + if (ident == null) { ident = findIdentInChangingEmailWorkflow(login); } diff --git a/src/main/java/org/olat/registration/PwChangeController.java b/src/main/java/org/olat/registration/PwChangeController.java index 41a9b972c1506e4536d772621b9fdf13158cfcb4..744f4cb05d210a7eb2bde0390ac6e3c550cfb666 100644 --- a/src/main/java/org/olat/registration/PwChangeController.java +++ b/src/main/java/org/olat/registration/PwChangeController.java @@ -26,7 +26,9 @@ package org.olat.registration; import java.text.DateFormat; +import java.util.Collections; import java.util.Date; +import java.util.List; import java.util.Locale; import org.olat.basesecurity.Authentication; @@ -83,6 +85,8 @@ public class PwChangeController extends BasicController { @Autowired private RegistrationManager rm; + @Autowired + private UserManager userManager; /** * Controller to change a user's password. @@ -167,6 +171,7 @@ public class PwChangeController extends BasicController { * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) */ + @Override public void event(UserRequest ureq, Controller source, Event event) { if (source == pwf) { // pwchange Form was clicked @@ -179,9 +184,14 @@ public class PwChangeController extends BasicController { pwchangeHomelink.setCustomEnabledLinkCSS("btn btn-primary"); //pwf.setVisible(false); pwarea.setVisible(false); - Identity identToChange = UserManager.getInstance().findIdentityByEmail(tempKey.getEmailAddress()); - if(identToChange == null || !pwf.saveFormData(identToChange)) { + List<Identity> identToChanges = userManager.findIdentitiesByEmail(Collections.singletonList(tempKey.getEmailAddress())); + if(identToChanges == null || identToChanges.size() == 0 || identToChanges.size() > 1) { getWindowControl().setError(translate("pwchange.failed")); + } else { + Identity identToChange = identToChanges.get(0); + if(!pwf.saveFormData(identToChange)) { + getWindowControl().setError(translate("pwchange.failed")); + } } rm.deleteTemporaryKeyWithId(tempKey.getRegistrationKey()); } else if (event == Event.CANCELLED_EVENT) { @@ -213,7 +223,10 @@ public class PwChangeController extends BasicController { // Try fallback with email, maybe user used his email address instead // only do this, if its really an email, may lead to multiple results else. if (MailHelper.isValidEmailAddress(emailOrUsername)) { - identity = UserManager.getInstance().findIdentityByEmail(emailOrUsername); + List<Identity> identities = userManager.findIdentitiesByEmail(Collections.singletonList(emailOrUsername)); + if(identities.size() == 1) { + identity = identities.get(0); + } } } if (identity != null) { diff --git a/src/main/java/org/olat/repository/handlers/BlogHandler.java b/src/main/java/org/olat/repository/handlers/BlogHandler.java index b68e7742a7b8abcc24e30f73555f9dbe92a55c17..70b19e49ad7c383bf90ac0cf5f7b4999953c9c30 100644 --- a/src/main/java/org/olat/repository/handlers/BlogHandler.java +++ b/src/main/java/org/olat/repository/handlers/BlogHandler.java @@ -131,7 +131,7 @@ public class BlogHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); // For now, notifications are not implemented since a blog feed is meant // to be subscriped to anyway. diff --git a/src/main/java/org/olat/repository/handlers/CourseHandler.java b/src/main/java/org/olat/repository/handlers/CourseHandler.java index 812d5e832d5b513e63b928c24dffc008880ae330..4560823d42422c4669148412f7c971b5ade629a8 100644 --- a/src/main/java/org/olat/repository/handlers/CourseHandler.java +++ b/src/main/java/org/olat/repository/handlers/CourseHandler.java @@ -561,13 +561,13 @@ public class CourseHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { // notify all current users of this resource (course) that it will be deleted now. CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); //archiving is done within readyToDelete OLATResourceManager rm = OLATResourceManager.getInstance(); OLATResource resource = rm.findResourceable(res); - CourseFactory.deleteCourse(resource); + CourseFactory.deleteCourse(entry, resource); return true; } diff --git a/src/main/java/org/olat/repository/handlers/FileHandler.java b/src/main/java/org/olat/repository/handlers/FileHandler.java index 9b448249d7c3e2596e397efb65369e78b694a4f1..b33db570ade3d68157d1af0409f67bb4bc7ed863 100644 --- a/src/main/java/org/olat/repository/handlers/FileHandler.java +++ b/src/main/java/org/olat/repository/handlers/FileHandler.java @@ -60,7 +60,7 @@ public abstract class FileHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { // notify all current users of this resource (content packaging file resource) that it will be deleted now. CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); FileResourceManager.getInstance().deleteFileResource(res); diff --git a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java index 60018eab6c9ce2bd0b571c0c62dcaa30581d08eb..a0b69f8fa48d11ff6e43dbc44a1edc8f98e430db 100644 --- a/src/main/java/org/olat/repository/handlers/GlossaryHandler.java +++ b/src/main/java/org/olat/repository/handlers/GlossaryHandler.java @@ -221,7 +221,7 @@ public class GlossaryHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { // FIXME fg // do not need to notify all current users of this resource, since the only // way to access this resource diff --git a/src/main/java/org/olat/repository/handlers/PodcastHandler.java b/src/main/java/org/olat/repository/handlers/PodcastHandler.java index 38de9b2689583f0f6877b052f70ae8ef73ed96be..32dc081eeef4bb0267c94004db71f7d74db12b5e 100644 --- a/src/main/java/org/olat/repository/handlers/PodcastHandler.java +++ b/src/main/java/org/olat/repository/handlers/PodcastHandler.java @@ -131,7 +131,7 @@ public class PodcastHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); // For now, notifications are not implemented since a podcast feed is meant // to be subscriped to anyway. diff --git a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java index 3f0e4fee411650887ba3067441c213037daa76b5..feec8099319bb84c6c5a400ace73bb8d912605ee 100644 --- a/src/main/java/org/olat/repository/handlers/PortfolioHandler.java +++ b/src/main/java/org/olat/repository/handlers/PortfolioHandler.java @@ -189,7 +189,7 @@ public class PortfolioHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { CoreSpringFactory.getImpl(EPFrontendManager.class).deletePortfolioMapTemplate(res); return true; } diff --git a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java index 18dd35bb594220a66f2a54f1e610aa0c0deb5d55..952005bef92bf7e78f07afdc1d58ec8687917e02 100644 --- a/src/main/java/org/olat/repository/handlers/RepositoryHandler.java +++ b/src/main/java/org/olat/repository/handlers/RepositoryHandler.java @@ -176,7 +176,7 @@ public interface RepositoryHandler { * @param wControl * @return true if delete successfull, false if not. */ - public boolean cleanupOnDelete(OLATResourceable res); + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res); /** * Called if the repository entry referencing the given Resourceable will be deleted diff --git a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java index f98f6f4b776eda7cd5e4b58c1a11d485534859c5..61433267fb00a0d84ca8c8db4180369c76936621 100644 --- a/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java +++ b/src/main/java/org/olat/repository/handlers/SharedFolderHandler.java @@ -209,7 +209,7 @@ public class SharedFolderHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { // do not need to notify all current users of this resource, since the only // way to access this resource CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index 929e748ddddbfcac66e1819bfad9143a31cb6818..6e6292a81c3868bc28f67fcadc4919c6f7ae1a61 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -267,7 +267,7 @@ public class WikiHandler implements RepositoryHandler { } @Override - public boolean cleanupOnDelete(OLATResourceable res) { + public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { CoordinatorManager.getInstance().getCoordinator().getEventBus().fireEventToListenersOf(new OLATResourceableJustBeforeDeletedEvent(res), res); //delete also notifications NotificationsManager.getInstance().deletePublishersOf(res); diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index a183b4ad66078c6fb9d50f9e2a37c907f24ecbfe..c7e34902061a9c45e2e733c9f4bf9154d4fadfed 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -327,7 +327,7 @@ public class RepositoryServiceImpl implements RepositoryService { // inform handler to do any cleanup work... handler must delete the // referenced resourceable a swell. - handler.cleanupOnDelete(resource); + handler.cleanupOnDelete(entry, resource); dbInstance.commit(); diff --git a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java index db1cfc1066d12f3c12f3e606467abb886d4b5c42..91eb3470a0007e6da262471151204cbc6eeb1190 100644 --- a/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java +++ b/src/test/java/org/olat/course/nodes/gta/manager/GTAManagerTest.java @@ -25,6 +25,7 @@ import java.util.List; import org.junit.Assert; import org.junit.Test; +import org.olat.basesecurity.GroupRoles; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.course.nodes.GTACourseNode; @@ -39,6 +40,7 @@ import org.olat.group.manager.BusinessGroupDAO; import org.olat.group.manager.BusinessGroupRelationDAO; import org.olat.modules.vitero.model.GroupRole; import org.olat.repository.RepositoryEntry; +import org.olat.repository.manager.RepositoryEntryRelationDAO; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; @@ -59,6 +61,8 @@ public class GTAManagerTest extends OlatTestCase { private BusinessGroupDAO businessGroupDao; @Autowired private BusinessGroupRelationDAO businessGroupRelationDao; + @Autowired + private RepositoryEntryRelationDAO repositoryEntryRelationDao; @Test public void createIfNotExists() { @@ -467,6 +471,123 @@ public class GTAManagerTest extends OlatTestCase { Assert.assertEquals(1, notDeletedAssignedTasks2.size()); } + @Test + public void deleteAllTaskLists() { + Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-9"); + Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-10"); + dbInstance.commit(); + RepositoryEntry re = JunitTestHelper.createAndPersistRepositoryEntry("", false); + repositoryEntryRelationDao.addRole(coach, re, GroupRoles.coach.name()); + repositoryEntryRelationDao.addRole(participant, re, GroupRoles.participant.name()); + + GTACourseNode node = new GTACourseNode(); + node.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name()); + TaskList tasks = gtaManager.createIfNotExists(re, node); + File taskFile = new File("bg.txt"); + Assert.assertNotNull(tasks); + dbInstance.commit(); + + //select + AssignmentResponse response = gtaManager.selectTask(participant, tasks, node, taskFile); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(response); + + //check that there is tasks + List<Task> assignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(assignedTasks); + Assert.assertEquals(1, assignedTasks.size()); + + //delete + int numOfDeletedObjects = gtaManager.deleteAllTaskLists(re); + Assert.assertEquals(2, numOfDeletedObjects); + dbInstance.commitAndCloseSession(); + + //check that there isn't any tasks + List<Task> deletedAssignedTasks = gtaManager.getTasks(participant, re, node); + Assert.assertNotNull(deletedAssignedTasks); + Assert.assertEquals(0, deletedAssignedTasks.size()); + } + + /** + * Create 2 pseudo courses in a course, and delete the task of the first course + * and check that the task of second are always there. + * + */ + @Test + public void deleteAllTaskLists_parano() { + Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-20"); + Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-21"); + Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("gta-user-22"); + + RepositoryEntry re1 = JunitTestHelper.createAndPersistRepositoryEntry("", false); + repositoryEntryRelationDao.addRole(coach, re1, GroupRoles.coach.name()); + repositoryEntryRelationDao.addRole(participant1, re1, GroupRoles.participant.name()); + repositoryEntryRelationDao.addRole(participant2, re1, GroupRoles.participant.name()); + + //course 1 + GTACourseNode node1 = new GTACourseNode(); + node1.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name()); + TaskList tasks1 = gtaManager.createIfNotExists(re1, node1); + File taskFile = new File("bg.txt"); + Assert.assertNotNull(tasks1); + dbInstance.commit(); + + RepositoryEntry re2 = JunitTestHelper.createAndPersistRepositoryEntry("", false); + repositoryEntryRelationDao.addRole(coach, re2, GroupRoles.coach.name()); + repositoryEntryRelationDao.addRole(participant1, re2, GroupRoles.participant.name()); + + //participant 2 course 2 + GTACourseNode node2 = new GTACourseNode(); + node2.getModuleConfiguration().setStringValue(GTACourseNode.GTASK_TYPE, GTAType.individual.name()); + TaskList tasks2 = gtaManager.createIfNotExists(re2, node2); + Assert.assertNotNull(tasks2); + dbInstance.commit(); + + //participant 1 and 2 select course 1 + AssignmentResponse response1_1 = gtaManager.selectTask(participant1, tasks1, node1, taskFile); + AssignmentResponse response1_2 = gtaManager.selectTask(participant2, tasks1, node1, taskFile); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(response1_1); + Assert.assertNotNull(response1_2); + + //participant 2 select node 2 + AssignmentResponse response2_2 = gtaManager.selectTask(participant2, tasks2, node2, taskFile); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(response2_2); + + //check that there is tasks + List<Task> assignedTasks1_1 = gtaManager.getTasks(participant1, re1, node1); + Assert.assertNotNull(assignedTasks1_1); + Assert.assertEquals(1, assignedTasks1_1.size()); + + List<Task> assignedTasks1_2 = gtaManager.getTasks(participant2, re1, node1); + Assert.assertNotNull(assignedTasks1_2); + Assert.assertEquals(1, assignedTasks1_2.size()); + + List<Task> assignedTasks2_2 = gtaManager.getTasks(participant2, re2, node2); + Assert.assertNotNull(assignedTasks2_2); + Assert.assertEquals(1, assignedTasks2_2.size()); + + //delete + int numOfDeletedObjects = gtaManager.deleteAllTaskLists(re1); + Assert.assertEquals(3, numOfDeletedObjects); + dbInstance.commitAndCloseSession(); + + //check that there isn't any tasks in node 1 + List<Task> deletedAssignedTasks1_1 = gtaManager.getTasks(participant1, re1, node1); + Assert.assertNotNull(deletedAssignedTasks1_1); + Assert.assertEquals(0, deletedAssignedTasks1_1.size()); + + List<Task> deletedAssignedTasks1_2 = gtaManager.getTasks(participant2, re1, node1); + Assert.assertNotNull(deletedAssignedTasks1_2); + Assert.assertEquals(0, deletedAssignedTasks1_2.size()); + + //but always in node 2 + List<Task> notDeletedAssignedTasks2_2 = gtaManager.getTasks(participant2, re2, node2); + Assert.assertNotNull(notDeletedAssignedTasks2_2); + Assert.assertEquals(1, notDeletedAssignedTasks2_2.size()); + } + @Test public void roundRobin() { String[] slots = new String[]{ "A", "B", "C" };