From 0b5ddcb91c7f81292f023a19ad4f1c453d869882 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 20 Apr 2015 14:18:28 +0200
Subject: [PATCH] OO-1518: remove assessment modes before deleting the
 repository entry

---
 .../course/assessment/AssessmentModeManager.java   | 14 ++++++++++++++
 .../manager/AssessmentModeManagerImpl.java         |  7 +++++++
 .../repository/manager/RepositoryServiceImpl.java  |  7 ++++++-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
index 9e9d168200e..b7dcc657f38 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
@@ -48,6 +48,8 @@ public interface AssessmentModeManager {
 	 */
 	public AssessmentMode createAssessmentMode(RepositoryEntry entry);
 	
+
+	
 	public AssessmentModeToGroup createAssessmentModeToGroup(AssessmentMode mode, BusinessGroup group);
 	
 	public void deleteAssessmentModesToGroup(BusinessGroupRef group);
@@ -65,7 +67,19 @@ public interface AssessmentModeManager {
 	 */
 	public AssessmentMode merge(AssessmentMode assessmentMode, boolean forceStatus);
 	
+	/**
+	 * Delete a specific assessment mode.
+	 * 
+	 * @param assessmentMode
+	 */
 	public void delete(AssessmentMode assessmentMode);
+	
+	/**
+	 * Delete all assessment modes of a course.
+	 * 
+	 * @param entry
+	 */
+	public void delete(RepositoryEntryRef entry);
 
 	
 	public AssessmentMode getAssessmentModeById(Long key);
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
index dfc928a429b..5bb36c9be9c 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
@@ -177,6 +177,13 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 		dbInstance.getCurrentEntityManager().remove(refMode);
 	}
 
+	@Override
+	public void delete(RepositoryEntryRef entry) {
+		for(AssessmentMode mode: getAssessmentModeFor(entry)) {
+			delete(mode);
+		}
+	}
+
 	@Override
 	public AssessmentMode getAssessmentModeById(Long key) {
 		List<AssessmentMode> modes = dbInstance.getCurrentEntityManager()
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index a9f9a9b6462..c21f837f97a 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -51,12 +51,13 @@ import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.course.assessment.AssessmentModeManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.certificate.CertificatesManager;
 import org.olat.repository.ErrorList;
 import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntryAuthorView;
 import org.olat.repository.RepositoryEntryAllowToLeaveOptions;
+import org.olat.repository.RepositoryEntryAuthorView;
 import org.olat.repository.RepositoryEntryMyView;
 import org.olat.repository.RepositoryEntryRef;
 import org.olat.repository.RepositoryEntryRelationType;
@@ -114,6 +115,8 @@ public class RepositoryServiceImpl implements RepositoryService {
 	private CertificatesManager certificatesManager;
 	@Autowired
 	private UserCourseInformationsManager userCourseInformationsManager;
+	@Autowired
+	private AssessmentModeManager assessmentModeMgr;
 
 	@Autowired
 	private LifeFullIndexer lifeIndexer;
@@ -299,6 +302,8 @@ public class RepositoryServiceImpl implements RepositoryService {
 		CoreSpringFactory.getImpl(MarkManager.class).deleteMarks(entry);
 		// delete all catalog entries referencing deleted entry
 		catalogManager.resourceableDeleted(entry);
+		// delete assessment modes
+		assessmentModeMgr.delete(entry);
 		
 		//delete all policies
 		securityManager.deletePolicies(resource);
-- 
GitLab