From db04f5708745ea85763b4eb1bd4152350830dbc5 Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Wed, 21 Aug 2019 11:29:17 +0200
Subject: [PATCH] OO-4186: Use the service as a facade for the handlers

---
 .../assessment/CourseAssessmentService.java   | 53 +++++++++++++++++--
 .../assessment/handler/AssessmentHandler.java | 33 ++----------
 .../manager/CourseAssessmentServiceImpl.java  | 45 +++++++++++++---
 .../tool/AssessmentCourseTreeController.java  |  6 +--
 ...ssessmentIdentityCourseNodeController.java |  5 +-
 ...smentIdentityListCourseTreeController.java |  6 +--
 6 files changed, 97 insertions(+), 51 deletions(-)

diff --git a/src/main/java/org/olat/course/assessment/CourseAssessmentService.java b/src/main/java/org/olat/course/assessment/CourseAssessmentService.java
index b3839211d08..71f01cd15a9 100644
--- a/src/main/java/org/olat/course/assessment/CourseAssessmentService.java
+++ b/src/main/java/org/olat/course/assessment/CourseAssessmentService.java
@@ -22,14 +22,23 @@ package org.olat.course.assessment;
 import java.io.File;
 import java.util.List;
 
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.stack.BreadcrumbPanel;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.handler.AssessmentConfig;
-import org.olat.course.assessment.handler.AssessmentHandler;
+import org.olat.course.assessment.ui.tool.AssessmentCourseNodeController;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.group.BusinessGroup;
 import org.olat.modules.assessment.Role;
 import org.olat.modules.assessment.model.AssessmentRunStatus;
+import org.olat.modules.assessment.ui.AssessmentToolContainer;
+import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
+import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -40,8 +49,6 @@ import org.olat.modules.assessment.model.AssessmentRunStatus;
  */
 public interface CourseAssessmentService {
 	
-	public AssessmentHandler getAssessmentHandler(CourseNode courseNode);
-	
 	public AssessmentConfig getAssessmentConfig(CourseNode node);
 
 	public void updateUserScoreEvaluation(CourseNode courseNode, ScoreEvaluation scoreEvaluation,
@@ -172,5 +179,45 @@ public interface CourseAssessmentService {
 	 * @return the users log of this node
 	 */
 	public String getUserLog(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment);
+	
+	/**
+	 * Returns a controller to edit the node specific details. Check
+	 * AssessmentConfig.hasEditableDetails() before invoking this method.
+	 * 
+	 * @param ureq
+	 * @param wControl
+	 * @param courseNode
+	 * @param userCourseEnvironment
+	 * @return a controller or null
+	 */
+	public Controller getDetailsEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel,
+			CourseNode courseNode, UserCourseEnvironment coachCourseEnv, UserCourseEnvironment assessedUserCourseEnvironment);
+	
+	/**
+	 * 
+	 * @return whether this node has a custom controller for the identity list.
+	 */
+	public boolean hasCustomIdentityList(CourseNode courseNode);
+	
+	/**
+	 * Returns the controller with the list of assessed identities for a specific
+	 * course node. Check AssessmentHandler.hasCustomIdentityList() before invoking
+	 * this method.
+	 * 
+	 * @param ureq
+	 * @param wControl
+	 * @param stackPanel
+	 * @param courseNode
+	 * @param courseEntry
+	 * @param group
+	 * @param coachCourseEnv
+	 * @param toolContainer
+	 * @param assessmentCallback
+	 * @return
+	 */
+	public AssessmentCourseNodeController getIdentityListController(UserRequest ureq, WindowControl wControl,
+			TooledStackedPanel stackPanel, CourseNode courseNode, RepositoryEntry courseEntry, BusinessGroup group,
+			UserCourseEnvironment coachCourseEnv, AssessmentToolContainer toolContainer,
+			AssessmentToolSecurityCallback assessmentCallback);
 
 }
diff --git a/src/main/java/org/olat/course/assessment/handler/AssessmentHandler.java b/src/main/java/org/olat/course/assessment/handler/AssessmentHandler.java
index defddaf7799..22342455067 100644
--- a/src/main/java/org/olat/course/assessment/handler/AssessmentHandler.java
+++ b/src/main/java/org/olat/course/assessment/handler/AssessmentHandler.java
@@ -33,8 +33,11 @@ import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
 import org.olat.repository.RepositoryEntry;
 
 /**
+ * The course nodes can implement some details individually. Have a look at the
+ * CourseAssessmentService for the descriptions of the methods.
  * 
  * Initial date: 20 Aug 2019<br>
+ * 
  * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
  *
  */
@@ -44,41 +47,11 @@ public interface AssessmentHandler {
 	
 	public AssessmentConfig getAssessmentConfig(CourseNode courseNode);
 	
-	/**
-	 * Returns a controller to edit the node specific details. Check
-	 * AssessmentConfig.hasEditableDetails() before invoking this method.
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param courseNode
-	 * @param userCourseEnvironment
-	 * @return a controller or null
-	 */
 	public Controller getDetailsEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel,
 			CourseNode courseNode, UserCourseEnvironment coachCourseEnv, UserCourseEnvironment assessedUserCourseEnvironment);
 	
-	/**
-	 * 
-	 * @return whether this node has a custom controller for the identity list.
-	 */
 	public boolean hasCustomIdentityList();
 	
-	/**
-	 * Returns the controller with the list of assessed identities for a specific
-	 * course node. Check AssessmentHandler.hasCustomIdentityList() before invoking
-	 * this method.
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param stackPanel
-	 * @param courseNode
-	 * @param courseEntry
-	 * @param group
-	 * @param coachCourseEnv
-	 * @param toolContainer
-	 * @param assessmentCallback
-	 * @return
-	 */
 	public AssessmentCourseNodeController getIdentityListController(UserRequest ureq, WindowControl wControl,
 			TooledStackedPanel stackPanel, CourseNode courseNode, RepositoryEntry courseEntry, BusinessGroup group,
 			UserCourseEnvironment coachCourseEnv, AssessmentToolContainer toolContainer,
diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
index d6dd7e2a2af..35ea3d50c9e 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentServiceImpl.java
@@ -26,18 +26,28 @@ import java.util.Map;
 
 import javax.annotation.PostConstruct;
 
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.stack.BreadcrumbPanel;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.AssessmentManager;
 import org.olat.course.assessment.CourseAssessmentService;
 import org.olat.course.assessment.handler.AssessmentConfig;
 import org.olat.course.assessment.handler.AssessmentHandler;
 import org.olat.course.assessment.handler.NonAssessmentHandler;
+import org.olat.course.assessment.ui.tool.AssessmentCourseNodeController;
 import org.olat.course.auditing.UserNodeAuditManager;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.group.BusinessGroup;
 import org.olat.modules.assessment.Role;
 import org.olat.modules.assessment.model.AssessmentRunStatus;
+import org.olat.modules.assessment.ui.AssessmentToolContainer;
+import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
+import org.olat.repository.RepositoryEntry;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -68,13 +78,7 @@ public class CourseAssessmentServiceImpl implements CourseAssessmentService {
 		}
 	}
 
-	@Override
-	public AssessmentConfig getAssessmentConfig(CourseNode node) {
-		return getAssessmentHandler(node).getAssessmentConfig(node);
-	}
-	
-	@Override
-	public AssessmentHandler getAssessmentHandler(CourseNode courseNode) {
+	private  AssessmentHandler getAssessmentHandler(CourseNode courseNode) {
 		AssessmentHandler handler = assessmentHandlers.get(courseNode.getType());
 		if (handler == null) {
 			handler = nonAssessmentHandler;
@@ -82,6 +86,11 @@ public class CourseAssessmentServiceImpl implements CourseAssessmentService {
 		return handler;
 	}
 
+	@Override
+	public AssessmentConfig getAssessmentConfig(CourseNode node) {
+		return getAssessmentHandler(node).getAssessmentConfig(node);
+	}
+	
 	@Override
 	public void updateUserScoreEvaluation(CourseNode courseNode, ScoreEvaluation scoreEvaluation,
 			UserCourseEnvironment userCourseEnvironment, Identity coachingIdentity, boolean incrementAttempts, Role by) {
@@ -207,4 +216,26 @@ public class CourseAssessmentServiceImpl implements CourseAssessmentService {
 		return am.getUserNodeLog(courseNode, assessedIdentity);
 	}
 
+	@Override
+	public Controller getDetailsEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel,
+			CourseNode courseNode, UserCourseEnvironment coachCourseEnv,
+			UserCourseEnvironment assessedUserCourseEnvironment) {
+		return getAssessmentHandler(courseNode).getDetailsEditController(ureq, wControl, stackPanel, courseNode,
+				coachCourseEnv, assessedUserCourseEnvironment);
+	}
+
+	@Override
+	public boolean hasCustomIdentityList(CourseNode courseNode) {
+		return getAssessmentHandler(courseNode).hasCustomIdentityList();
+	}
+
+	@Override
+	public AssessmentCourseNodeController getIdentityListController(UserRequest ureq, WindowControl wControl,
+			TooledStackedPanel stackPanel, CourseNode courseNode, RepositoryEntry courseEntry, BusinessGroup group,
+			UserCourseEnvironment coachCourseEnv, AssessmentToolContainer toolContainer,
+			AssessmentToolSecurityCallback assessmentCallback) {
+		return getAssessmentHandler(courseNode).getIdentityListController(ureq, wControl, stackPanel, courseNode,
+				courseEntry, group, coachCourseEnv, toolContainer, assessmentCallback);
+	}
+
 }
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
index ace5afc334b..fa589b51d0f 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
@@ -46,7 +46,6 @@ import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.CourseAssessmentService;
 import org.olat.course.assessment.handler.AssessmentConfig;
-import org.olat.course.assessment.handler.AssessmentHandler;
 import org.olat.course.assessment.ui.tool.event.CourseNodeEvent;
 import org.olat.course.nodes.AssessableCourseNode;
 import org.olat.course.nodes.CourseNode;
@@ -297,9 +296,8 @@ public class AssessmentCourseTreeController extends BasicController implements A
 		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(oresUsers, null, getWindowControl());
 		OLATResourceable oresNode = OresHelper.createOLATResourceableInstance("Node", Long.valueOf(courseNode.getIdent()));
 		WindowControl bbwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(oresNode, null, bwControl);
-		AssessmentHandler assessmentHandler = courseAssessmentService.getAssessmentHandler(courseNode);
-		if (assessmentHandler.hasCustomIdentityList()) {
-			identityListCtrl = assessmentHandler.getIdentityListController(ureq, getWindowControl(), stackPanel,
+		if (courseAssessmentService.hasCustomIdentityList(courseNode)) {
+			identityListCtrl = courseAssessmentService.getIdentityListController(ureq, getWindowControl(), stackPanel,
 					courseNode, courseEntry, null, coachCourseEnv, toolContainer, assessmentCallback);
 		} else {
 			identityListCtrl = new IdentityListCourseNodeController(ureq, bbwControl, stackPanel, courseEntry, null,
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseNodeController.java
index 09335e2c722..d2c23bccbcb 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityCourseNodeController.java
@@ -128,9 +128,8 @@ public class AssessmentIdentityCourseNodeController extends BasicController impl
 			// Add the users details controller
 			AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(courseNode);
 			if (assessmentConfig.hasEditableDetails() && courseNodeDetails) {
-				detailsEditController = courseAssessmentService.getAssessmentHandler(aCourseNode)
-						.getDetailsEditController(ureq, wControl, stackPanel, courseNode, coachCourseEnv,
-								assessedUserCourseEnvironment);
+				detailsEditController = courseAssessmentService.getDetailsEditController(ureq, wControl, stackPanel,
+						courseNode, coachCourseEnv, assessedUserCourseEnvironment);
 				listenTo(detailsEditController);
 				identityAssessmentVC.put("details", detailsEditController.getInitialComponent());
 			}
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
index 09165a7570b..1f06ae04f63 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentIdentityListCourseTreeController.java
@@ -46,7 +46,6 @@ import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.CourseAssessmentService;
 import org.olat.course.assessment.handler.AssessmentConfig;
-import org.olat.course.assessment.handler.AssessmentHandler;
 import org.olat.course.assessment.ui.tool.event.CourseNodeEvent;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.nodes.GTACourseNode;
@@ -165,7 +164,6 @@ public class AssessmentIdentityListCourseTreeController extends BasicController
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Node", new Long(courseNode.getIdent()));
 		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
 
-		AssessmentHandler assessmentHandler = courseAssessmentService.getAssessmentHandler(courseNode);
 		AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(courseNode);
 		if(assessmentConfig.isAssessedBusinessGroups() && courseNode instanceof GTACourseNode) {
 			CourseEnvironment courseEnv = CourseFactory.loadCourse(courseEntry).getCourseEnvironment();
@@ -179,8 +177,8 @@ public class AssessmentIdentityListCourseTreeController extends BasicController
 			}
 			currentCtrl = ((GTACourseNode)courseNode).getCoachedGroupListController(ureq, bwControl, stackPanel,
 					coachCourseEnv, assessmentCallback.isAdmin(), coachedGroups);
-		} else if (assessmentHandler.hasCustomIdentityList()) {
-			currentCtrl = assessmentHandler.getIdentityListController(ureq, bwControl, stackPanel, courseNode,
+		} else if (courseAssessmentService.hasCustomIdentityList(courseNode)) {
+			currentCtrl = courseAssessmentService.getIdentityListController(ureq, bwControl, stackPanel, courseNode,
 					courseEntry, businessGroup, coachCourseEnv, toolContainer, assessmentCallback);
 		} else {
 			currentCtrl = new IdentityListCourseNodeController(ureq, bwControl, stackPanel, courseEntry, businessGroup,
-- 
GitLab