From 695e9e05e9310b25c6d53016924c8a7687866ab5 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Tue, 30 Jun 2020 09:20:26 +0200
Subject: [PATCH] OO-4765: remove in db mode to group / area and curriculum
 element

---
 .../assessment/AssessmentModeManager.java     |  8 +++++-
 .../manager/AssessmentModeManagerImpl.java    | 16 ++++++++++++
 .../ui/mode/AssessmentModeEditController.java | 25 +++++++++++--------
 3 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
index 5d839fe46ea..e6f3736c2a5 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentModeManager.java
@@ -64,6 +64,8 @@ public interface AssessmentModeManager {
 	 */
 	public AssessmentModeToGroup createAssessmentModeToGroup(AssessmentMode mode, BusinessGroup group);
 	
+	public void deleteAssessmentModeToGroup(AssessmentModeToGroup mode);
+	
 	/**
 	 * Create and persist a relation between the specified assessment mode
 	 * and an area.
@@ -74,6 +76,8 @@ public interface AssessmentModeManager {
 	 */
 	public AssessmentModeToArea createAssessmentModeToArea(AssessmentMode mode, BGArea area);
 	
+	public void deleteAssessmentModeToArea(AssessmentModeToArea modeToArea);
+	
 	/**
 	 * Create and persist a relation between the specified assessment mode
 	 * and a curriculum element.
@@ -84,7 +88,9 @@ public interface AssessmentModeManager {
 	 */
 	public AssessmentModeToCurriculumElement createAssessmentModeToCurriculumElement(AssessmentMode mode, CurriculumElement curriculumElement);
 	
-
+	public void deleteAssessmentModeToCurriculumElement(AssessmentModeToCurriculumElement modeToCurriculumElement);
+	
+	
 	public AssessmentMode persist(AssessmentMode assessmentMode);
 	
 	/**
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 6338aaa3ecf..a9b1534b440 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
@@ -452,6 +452,12 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 		return modeToGroup;
 	}
 
+	@Override
+	public void deleteAssessmentModeToGroup(AssessmentModeToGroup modeToGroup) {
+		dbInstance.getCurrentEntityManager().remove(modeToGroup);
+	}
+
+
 	@Override
 	public AssessmentModeToArea createAssessmentModeToArea(AssessmentMode mode, BGArea area) {
 		AssessmentModeToAreaImpl modeToArea = new AssessmentModeToAreaImpl();
@@ -461,6 +467,11 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 		return modeToArea;
 	}
 
+	@Override
+	public void deleteAssessmentModeToArea(AssessmentModeToArea modeToArea) {
+		dbInstance.getCurrentEntityManager().remove(modeToArea);
+	}
+
 	@Override
 	public AssessmentModeToCurriculumElement createAssessmentModeToCurriculumElement(AssessmentMode mode, CurriculumElement curriculumElement) {
 		AssessmentModeToCurriculumElementImpl modeToElement = new AssessmentModeToCurriculumElementImpl();
@@ -469,6 +480,11 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 		dbInstance.getCurrentEntityManager().persist(modeToElement);
 		return modeToElement;
 	}
+	
+	@Override
+	public void deleteAssessmentModeToCurriculumElement(AssessmentModeToCurriculumElement modeToCurriculumElement) {
+		dbInstance.getCurrentEntityManager().remove(modeToCurriculumElement);
+	}
 
 	@Override
 	public boolean isNodeInUse(RepositoryEntryRef entry, CourseNode node) {
diff --git a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
index 754ddc393b5..1005314260f 100644
--- a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
+++ b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
@@ -22,7 +22,6 @@ package org.olat.course.assessment.ui.mode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -693,10 +692,12 @@ public class AssessmentModeEditController extends FormBasicController {
 			}
 		} else {
 			Set<Long> currentKeys = new HashSet<>();
-			for(Iterator<AssessmentModeToGroup> modeToGroupIt=assessmentMode.getGroups().iterator(); modeToGroupIt.hasNext(); ) {
-				Long currentKey = modeToGroupIt.next().getBusinessGroup().getKey();
+			List<AssessmentModeToGroup> currentGroups = new ArrayList<>(assessmentMode.getGroups());
+			for(AssessmentModeToGroup modeToGroup:currentGroups) {
+				Long currentKey = modeToGroup.getBusinessGroup().getKey();
 				if(!groupKeys.contains(currentKey)) {
-					modeToGroupIt.remove();
+					assessmentMode.getGroups().remove(modeToGroup);
+					assessmentModeMgr.deleteAssessmentModeToGroup(modeToGroup);
 				} else {
 					currentKeys.add(currentKey);
 				}
@@ -718,10 +719,12 @@ public class AssessmentModeEditController extends FormBasicController {
 			}
 		} else {
 			Set<Long> currentKeys = new HashSet<>();
-			for(Iterator<AssessmentModeToArea> modeToAreaIt=assessmentMode.getAreas().iterator(); modeToAreaIt.hasNext(); ) {
-				Long currentKey = modeToAreaIt.next().getArea().getKey();
+			List<AssessmentModeToArea> currentAreas = new ArrayList<>(assessmentMode.getAreas());
+			for(AssessmentModeToArea modeToArea:currentAreas) {
+				Long currentKey = modeToArea.getArea().getKey();
 				if(!areaKeys.contains(currentKey)) {
-					modeToAreaIt.remove();
+					assessmentMode.getAreas().remove(modeToArea);
+					assessmentModeMgr.deleteAssessmentModeToArea(modeToArea);
 				} else {
 					currentKeys.add(currentKey);
 				}
@@ -743,10 +746,12 @@ public class AssessmentModeEditController extends FormBasicController {
 			}
 		} else {
 			Set<Long> currentKeys = new HashSet<>();
-			for(Iterator<AssessmentModeToCurriculumElement> modeToElementIt=assessmentMode.getCurriculumElements().iterator(); modeToElementIt.hasNext(); ) {
-				Long currentKey = modeToElementIt.next().getCurriculumElement().getKey();
+			List<AssessmentModeToCurriculumElement> currentElements = new ArrayList<>(assessmentMode.getCurriculumElements());
+			for(AssessmentModeToCurriculumElement modeToElement:currentElements) {
+				Long currentKey = modeToElement.getCurriculumElement().getKey();
 				if(!curriculumElementKeys.contains(currentKey)) {
-					modeToElementIt.remove();
+					assessmentMode.getCurriculumElements().remove(modeToElement);
+					assessmentModeMgr.deleteAssessmentModeToCurriculumElement(modeToElement);
 				} else {
 					currentKeys.add(currentKey);
 				}
-- 
GitLab