diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockToGroupDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockToGroupDAO.java index d5e5fd68f7c1c199fb224048273fc54e7d86107c..3d885d2e64845588c0a49e20bb163a7604b9899f 100644 --- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockToGroupDAO.java +++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockToGroupDAO.java @@ -50,6 +50,15 @@ public class LectureBlockToGroupDAO { return blockToGroup; } + public int deleteLectureBlockToGroup(Group group) { + StringBuilder sb = new StringBuilder(128); + sb.append("delete from lectureblocktogroup blockToGroup where blockToGroup.group.key=:groupKey"); + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("groupKey", group.getKey()) + .executeUpdate(); + } + public void remove(LectureBlockToGroup lectureBlockToGroup) { LectureBlockToGroupImpl ref = dbInstance.getCurrentEntityManager() .getReference(LectureBlockToGroupImpl.class, lectureBlockToGroup.getKey()); @@ -57,7 +66,7 @@ public class LectureBlockToGroupDAO { } public List<Group> getGroups(LectureBlockRef lectureBlock) { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(256); sb.append("select blockToGroup.group from lectureblocktogroup blockToGroup") .append(" where blockToGroup.lectureBlock.key=:blockKey"); return dbInstance.getCurrentEntityManager() @@ -67,7 +76,7 @@ public class LectureBlockToGroupDAO { } public List<LectureBlockToGroup> getLectureBlockToGroups(LectureBlockRef lectureBlock) { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(256); sb.append("select blockToGroup from lectureblocktogroup blockToGroup") .append(" inner join fetch blockToGroup.group bGroup") .append(" where blockToGroup.lectureBlock.key=:blockKey"); diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java index 070bb392dc55ebcef66ac40b61417b48e5b9922f..7865fc661cdeb6fb92a2e8ba4401d8bbd47df027 100644 --- a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java +++ b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java @@ -58,6 +58,8 @@ import org.olat.core.util.mail.MailContextImpl; import org.olat.core.util.mail.MailManager; import org.olat.core.util.mail.MailTemplate; import org.olat.core.util.mail.MailerResult; +import org.olat.group.BusinessGroup; +import org.olat.group.DeletableGroupData; import org.olat.modules.lecture.LectureBlock; import org.olat.modules.lecture.LectureBlockAuditLog; import org.olat.modules.lecture.LectureBlockRef; @@ -99,7 +101,7 @@ import org.springframework.stereotype.Service; * */ @Service -public class LectureServiceImpl implements LectureService, UserDataDeletable { +public class LectureServiceImpl implements LectureService, UserDataDeletable, DeletableGroupData { private static final OLog log = Tracing.createLoggerFor(LectureServiceImpl.class); private static final CalendarManagedFlag[] CAL_MANAGED_FLAGS = new CalendarManagedFlag[] { CalendarManagedFlag.all }; @@ -334,6 +336,12 @@ public class LectureServiceImpl implements LectureService, UserDataDeletable { lectureBlockReminderDao.deleteReminders(identity); } + @Override + public boolean deleteGroupDataFor(BusinessGroup group) { + lectureBlockToGroupDao.deleteLectureBlockToGroup(group.getBaseGroup()); + return true; + } + @Override public LectureBlock getLectureBlock(LectureBlockRef block) { return lectureBlockDao.loadByKey(block.getKey()); diff --git a/src/test/java/org/olat/modules/lecture/manager/LectureServiceTest.java b/src/test/java/org/olat/modules/lecture/manager/LectureServiceTest.java index fc2fd7ab1cf98fd5e271d201041992d2a0011d9e..fb4d7dfb9e21bfd24e35e319260d007d82b24b69 100644 --- a/src/test/java/org/olat/modules/lecture/manager/LectureServiceTest.java +++ b/src/test/java/org/olat/modules/lecture/manager/LectureServiceTest.java @@ -24,17 +24,22 @@ import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.olat.basesecurity.Group; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; +import org.olat.group.BusinessGroup; +import org.olat.group.BusinessGroupService; import org.olat.modules.lecture.LectureBlock; import org.olat.modules.lecture.LectureBlockStatus; +import org.olat.modules.lecture.LectureBlockToGroup; import org.olat.modules.lecture.LectureRollCallStatus; import org.olat.modules.lecture.LectureService; import org.olat.modules.lecture.RepositoryEntryLectureConfiguration; +import org.olat.modules.lecture.model.LectureBlockImpl; import org.olat.modules.lecture.model.LectureBlockStatistics; import org.olat.modules.vitero.model.GroupRole; import org.olat.repository.RepositoryEntry; @@ -59,6 +64,8 @@ public class LectureServiceTest extends OlatTestCase { @Autowired private RepositoryService repositoryService; @Autowired + private BusinessGroupService businessGroupService; + @Autowired private RepositoryEntryRelationDAO repositoryEntryRelationDAO; @Autowired private LectureParticipantSummaryDAO lectureParticipantSummaryDao; @@ -214,12 +221,54 @@ public class LectureServiceTest extends OlatTestCase { Assert.assertEquals(entry, config.getEntry()); } + @Test + public void deleteBusinessGroupWithLectures() { + //prepare a course with a business group + Identity coachGroup = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-grp"); + RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); + //add business group + BusinessGroup group = businessGroupService.createBusinessGroup(coachGroup, "For lectures", "tg", null, null, false, false, entry); + businessGroupService.addResourceTo(group, entry); + dbInstance.commit(); + + // create a lecture block + LectureBlock lectureBlock = lectureService.createLectureBlock(entry); + lectureBlock.setStartDate(new Date()); + lectureBlock.setEndDate(new Date()); + lectureBlock.setTitle("Hello lecturers"); + lectureBlock.setPlannedLecturesNumber(4); + List<Group> groups = new ArrayList<>(); + groups.add(group.getBaseGroup()); + Group defGroup = repositoryService.getDefaultGroup(entry); + groups.add(defGroup); + LectureBlock block = lectureService.save(lectureBlock, groups); + dbInstance.commitAndCloseSession(); + Assert.assertNotNull(block); + + //delete the group + businessGroupService.deleteBusinessGroup(group); + dbInstance.commitAndCloseSession(); + + //retrieve lecture block + List<LectureBlock> blocks = lectureService.getLectureBlocks(entry); + Assert.assertNotNull(blocks); + Assert.assertEquals(1, blocks.size()); + LectureBlock reloadedBlock = blocks.get(0); + Assert.assertNotNull(reloadedBlock); + //check that the group associate with the repository entry is there + Set<LectureBlockToGroup> lectureBlockToGroups = ((LectureBlockImpl)reloadedBlock).getGroups(); + Assert.assertNotNull(lectureBlockToGroups); + Assert.assertEquals(1, lectureBlockToGroups.size()); + LectureBlockToGroup lectureBlockToGroup = lectureBlockToGroups.iterator().next(); + Assert.assertEquals(defGroup, lectureBlockToGroup.getGroup()); + } + private LectureBlock createMinimalLectureBlock(RepositoryEntry entry) { LectureBlock lectureBlock = lectureService.createLectureBlock(entry); lectureBlock.setStartDate(new Date()); lectureBlock.setEndDate(new Date()); lectureBlock.setTitle("Hello lecturers"); - lectureBlock.setPlannedLecturesNumber(4);; + lectureBlock.setPlannedLecturesNumber(4); return lectureService.save(lectureBlock, null); }