From f818fa7161c6f5e517fdcc1d69aa26265c40bee0 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Fri, 23 Aug 2019 14:58:10 +0200 Subject: [PATCH] OO-4186: Delete interface PersistentAssessableCourseNode --- .../olat/course/nodes/BasicLTICourseNode.java | 2 +- .../course/nodes/CheckListCourseNode.java | 2 +- .../org/olat/course/nodes/GTACourseNode.java | 4 +- .../olat/course/nodes/IQTESTCourseNode.java | 2 +- .../org/olat/course/nodes/MSCourseNode.java | 2 +- .../nodes/PersistentAssessableCourseNode.java | 33 ----- .../course/nodes/PortfolioCourseNode.java | 2 +- .../course/nodes/ProjectBrokerCourseNode.java | 2 +- .../olat/course/nodes/ScormCourseNode.java | 2 +- .../org/olat/course/nodes/TACourseNode.java | 4 +- .../gta/ui/GroupBulkDownloadResource.java | 4 +- .../olat/course/nodes/iq/IQRunController.java | 113 +++++++----------- .../nodes/ms/MSCourseNodeRunController.java | 8 +- 13 files changed, 63 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/org/olat/course/nodes/PersistentAssessableCourseNode.java diff --git a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java index 0bad4813e6a..555f33e8a3f 100644 --- a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java +++ b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java @@ -59,7 +59,7 @@ import org.olat.resource.OLATResource; * @author guido * @author Charles Severance */ -public class BasicLTICourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class BasicLTICourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final long serialVersionUID = 2210572148308757127L; private static final String translatorPackage = Util.getPackageName(LTIEditController.class); diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java index dc28173ac50..cc1fbd2388b 100644 --- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java @@ -87,7 +87,7 @@ import org.olat.repository.RepositoryEntry; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -public class CheckListCourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class CheckListCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final String PACKAGE_CL = Util.getPackageName(CheckListEditController.class); private static final long serialVersionUID = -7460670977531082040L; diff --git a/src/main/java/org/olat/course/nodes/GTACourseNode.java b/src/main/java/org/olat/course/nodes/GTACourseNode.java index 7965a57ea6f..319bb12471e 100644 --- a/src/main/java/org/olat/course/nodes/GTACourseNode.java +++ b/src/main/java/org/olat/course/nodes/GTACourseNode.java @@ -91,7 +91,7 @@ import org.olat.user.UserManager; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ -public class GTACourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class GTACourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final Logger log = Tracing.createLoggerFor(GTACourseNode.class); private static final String PACKAGE_GTA = Util.getPackageName(GTAEditController.class); @@ -535,7 +535,7 @@ public class GTACourseNode extends AbstractAccessableCourseNode implements Persi String courseTitle = course.getCourseTitle(); String fileName = ExportUtil.createFileNameWithTimeStamp(courseTitle, "xlsx"); - List<AssessableCourseNode> nodes = Collections.<AssessableCourseNode>singletonList(this); + List<AssessableCourseNode> nodes = Collections.singletonList(this); try(OutputStream out = new ShieldOutputStream(exportStream)) { exportStream.putNextEntry(new ZipEntry(dirName + "/" + fileName)); ScoreAccountingHelper.createCourseResultsOverviewXMLTable(users, nodes, course, locale, out); diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java index 573d3e2cf0e..509cdfcd940 100644 --- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java +++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java @@ -122,7 +122,7 @@ import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest; * @author Mike Stock Comment: * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ -public class IQTESTCourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode, QTICourseNode { +public class IQTESTCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode, QTICourseNode { private static final long serialVersionUID = 5806292895738005387L; private static final Logger log = Tracing.createLoggerFor(IQTESTCourseNode.class); private static final String translatorStr = Util.getPackageName(IQEditController.class); diff --git a/src/main/java/org/olat/course/nodes/MSCourseNode.java b/src/main/java/org/olat/course/nodes/MSCourseNode.java index df8c5bc67a9..4b07c728307 100644 --- a/src/main/java/org/olat/course/nodes/MSCourseNode.java +++ b/src/main/java/org/olat/course/nodes/MSCourseNode.java @@ -85,7 +85,7 @@ import org.olat.resource.OLATResource; * @author gnaegi * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ -public class MSCourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class MSCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final long serialVersionUID = -7741172700015384397L; diff --git a/src/main/java/org/olat/course/nodes/PersistentAssessableCourseNode.java b/src/main/java/org/olat/course/nodes/PersistentAssessableCourseNode.java deleted file mode 100644 index 4ea8b9f6e68..00000000000 --- a/src/main/java/org/olat/course/nodes/PersistentAssessableCourseNode.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ -package org.olat.course.nodes; - -/** - * Most of the course node saved their data on the database with the - * assessment service. - * - * Initial date: 26.10.2015<br> - * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com - * - */ -public interface PersistentAssessableCourseNode extends AssessableCourseNode { - - -} diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java index 43e78f57384..9f0de6b4d39 100644 --- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java +++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java @@ -78,7 +78,7 @@ import org.olat.repository.handlers.RepositoryHandlerFactory; * Initial Date: 6 oct. 2010 <br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ -public class PortfolioCourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class PortfolioCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final Logger log = Tracing.createLoggerFor(PortfolioCourseNode.class); private static final int CURRENT_CONFIG_VERSION = 2; diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java index 559b2345fbb..1ce4d540116 100644 --- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java @@ -115,7 +115,7 @@ import com.thoughtworks.xstream.XStream; * @author Christian Guretzki */ -public class ProjectBrokerCourseNode extends GenericCourseNode implements PersistentAssessableCourseNode { +public class ProjectBrokerCourseNode extends GenericCourseNode implements AssessableCourseNode { private static final long serialVersionUID = -8177448874150049173L; private static final Logger log = Tracing.createLoggerFor(ProjectBrokerCourseNode.class); diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java index 6fbd0ec3961..fab1348a4ce 100644 --- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java @@ -76,7 +76,7 @@ import org.olat.repository.handlers.RepositoryHandlerFactory; * @author Felix Jost * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ -public class ScormCourseNode extends AbstractAccessableCourseNode implements PersistentAssessableCourseNode { +public class ScormCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode { private static final Logger log = Tracing.createLoggerFor(ScormCourseNode.class); private static final long serialVersionUID = 2970594874787761801L; diff --git a/src/main/java/org/olat/course/nodes/TACourseNode.java b/src/main/java/org/olat/course/nodes/TACourseNode.java index 72cf5471648..d56b310129b 100644 --- a/src/main/java/org/olat/course/nodes/TACourseNode.java +++ b/src/main/java/org/olat/course/nodes/TACourseNode.java @@ -101,7 +101,7 @@ import org.olat.resource.OLATResource; * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>) */ -public class TACourseNode extends GenericCourseNode implements PersistentAssessableCourseNode { +public class TACourseNode extends GenericCourseNode implements AssessableCourseNode { private static final long serialVersionUID = -7266553843441305310L; @@ -505,7 +505,7 @@ public class TACourseNode extends GenericCourseNode implements PersistentAssessa String courseTitle = course.getCourseTitle(); String fileName = ExportUtil.createFileNameWithTimeStamp(courseTitle, "xlsx"); - List<AssessableCourseNode> nodes = Collections.<AssessableCourseNode>singletonList(this); + List<AssessableCourseNode> nodes = Collections.singletonList(this); // write course results overview table to filesystem try(OutputStream out = new ShieldOutputStream(exportStream)) { exportStream.putNextEntry(new ZipEntry(dirName + "/" + fileName)); diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GroupBulkDownloadResource.java b/src/main/java/org/olat/course/nodes/gta/ui/GroupBulkDownloadResource.java index dd3971e2f07..986cabb473c 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/GroupBulkDownloadResource.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/GroupBulkDownloadResource.java @@ -30,13 +30,13 @@ import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletResponse; +import org.apache.logging.log4j.Logger; import org.olat.basesecurity.GroupRoles; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.media.MediaResource; import org.olat.core.gui.media.ServletUtil; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; -import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; import org.olat.core.util.ExportUtil; import org.olat.core.util.Formatter; @@ -130,7 +130,7 @@ public class GroupBulkDownloadResource implements MediaResource { .getMembers(groups, GroupRoles.participant.name()); String courseTitle = course.getCourseTitle(); String fileName = ExportUtil.createFileNameWithTimeStamp(courseTitle, "xlsx"); - List<AssessableCourseNode> nodes = Collections.<AssessableCourseNode>singletonList(courseNode); + List<AssessableCourseNode> nodes = Collections.singletonList(courseNode); try(OutputStream out = new ShieldOutputStream(zout)) { zout.putNextEntry(new ZipEntry(fileName)); ScoreAccountingHelper.createCourseResultsOverviewXMLTable(assessableIdentities, nodes, course, locale, out); diff --git a/src/main/java/org/olat/course/nodes/iq/IQRunController.java b/src/main/java/org/olat/course/nodes/iq/IQRunController.java index 0356bd7299a..a757c3cfe7c 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQRunController.java @@ -81,7 +81,6 @@ import org.olat.course.nodes.IQSELFCourseNode; import org.olat.course.nodes.IQSURVCourseNode; import org.olat.course.nodes.IQTESTCourseNode; import org.olat.course.nodes.ObjectivesHelper; -import org.olat.course.nodes.PersistentAssessableCourseNode; import org.olat.course.nodes.SelfAssessableCourseNode; import org.olat.course.nodes.ms.DocumentsMapper; import org.olat.course.run.scoring.ScoreEvaluation; @@ -211,10 +210,6 @@ public class IQRunController extends BasicController implements GenericEventList myContent.contextPut("changelogconfig", courseModule.isDisplayChangeLog()); } - /** - * @param ureq - * @return - */ private StringBuilder createChangelogMsg(UserRequest ureq) { //re could be null, but if we are here it should not be null! Roles userRoles = ureq.getUserSession().getRoles(); @@ -350,9 +345,6 @@ public class IQRunController extends BasicController implements GenericEventList myContent.contextPut("infobox", courseModule.isDisplayInfoBox()); myContent.contextPut("changelogconfig", courseModule.isDisplayChangeLog()); } - - - private void init(UserRequest ureq) { startButton = LinkFactory.createButton("start", myContent, this); @@ -424,9 +416,6 @@ public class IQRunController extends BasicController implements GenericEventList } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { if (source == startButton && startButton.isEnabled() && startButton.isVisible()){ @@ -486,7 +475,7 @@ public class IQRunController extends BasicController implements GenericEventList AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); Long assessmentID = am.getAssessmentID(courseNode, ureq.getIdentity()); if(assessmentID==null) { - //fallback solution: if the assessmentID is not available via AssessmentManager than try to get it via IQManager + //fallback solution: if the assessmentID is not available via AssessmentManager than try to get it via IQManager long callingResId = userCourseEnv.getCourseEnvironment().getCourseResourceableId().longValue(); String callingResDetail = courseNode.getIdent(); assessmentID = iqManager.getLastAssessmentID(ureq.getIdentity(), callingResId, callingResDetail); @@ -566,9 +555,6 @@ public class IQRunController extends BasicController implements GenericEventList // } - /** - * @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 urequest, Controller source, Event event) { if (source == displayController) { @@ -637,54 +623,51 @@ public class IQRunController extends BasicController implements GenericEventList // user data Identity identity = userCourseEnv.getIdentityEnvironment().getIdentity(); - if(courseNode instanceof PersistentAssessableCourseNode) { - PersistentAssessableCourseNode acn = (PersistentAssessableCourseNode)courseNode; - AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(courseNode, userCourseEnv); - if(assessmentEntry == null) { - myContent.contextPut("blockAfterSuccess", Boolean.FALSE); - myContent.contextPut("score", null); - myContent.contextPut("hasPassedValue", Boolean.FALSE); - myContent.contextPut("passed", Boolean.FALSE); - myContent.contextPut("comment", null); - myContent.contextPut("docs", null); - myContent.contextPut("attempts", 0); - } else { - //block if test passed (and config set to check it) - Boolean blockAfterSuccess = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_BLOCK_AFTER_SUCCESS); - Boolean blocked = Boolean.FALSE; - if(blockAfterSuccess != null && blockAfterSuccess.booleanValue()) { - Boolean passed = assessmentEntry.getPassed(); - if(passed != null && passed.booleanValue()) { - blocked = Boolean.TRUE; - } - } - myContent.contextPut("blockAfterSuccess", blocked); - boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue(); - myContent.contextPut("resultsVisible", resultsVisible); - myContent.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore())); - myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); - myContent.contextPut("passed", assessmentEntry.getPassed()); - if(resultsVisible) { - AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(courseNode); - if(assessmentConfig.hasComment()) { - StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment()); - myContent.contextPut("comment", StringHelper.xssScan(comment)); - myContent.contextPut("incomment", isPanelOpen(ureq, "comment", true)); - } - - if(assessmentConfig.hasIndividualAsssessmentDocuments()) { - List<File> docs = courseAssessmentService.getIndividualAssessmentDocuments(acn, userCourseEnv); - String mapperUri = registerCacheableMapper(ureq, null, new DocumentsMapper(docs)); - myContent.contextPut("docsMapperUri", mapperUri); - myContent.contextPut("docs", docs); - myContent.contextPut("inassessmentDocuments", isPanelOpen(ureq, "assessmentDocuments", true)); - } - } - myContent.contextPut("attempts", assessmentEntry.getAttempts() == null ? 0 : assessmentEntry.getAttempts()); - } - } - - UserNodeAuditManager am = userCourseEnv.getCourseEnvironment().getAuditManager(); + AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(courseNode, userCourseEnv); + if(assessmentEntry == null) { + myContent.contextPut("blockAfterSuccess", Boolean.FALSE); + myContent.contextPut("score", null); + myContent.contextPut("hasPassedValue", Boolean.FALSE); + myContent.contextPut("passed", Boolean.FALSE); + myContent.contextPut("comment", null); + myContent.contextPut("docs", null); + myContent.contextPut("attempts", 0); + } else { + //block if test passed (and config set to check it) + Boolean blockAfterSuccess = modConfig.getBooleanEntry(IQEditController.CONFIG_KEY_BLOCK_AFTER_SUCCESS); + Boolean blocked = Boolean.FALSE; + if(blockAfterSuccess != null && blockAfterSuccess.booleanValue()) { + Boolean passed = assessmentEntry.getPassed(); + if(passed != null && passed.booleanValue()) { + blocked = Boolean.TRUE; + } + } + myContent.contextPut("blockAfterSuccess", blocked); + boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue(); + myContent.contextPut("resultsVisible", resultsVisible); + myContent.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore())); + myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE)); + myContent.contextPut("passed", assessmentEntry.getPassed()); + if(resultsVisible) { + AssessmentConfig assessmentConfig = courseAssessmentService.getAssessmentConfig(courseNode); + if(assessmentConfig.hasComment()) { + StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment()); + myContent.contextPut("comment", StringHelper.xssScan(comment)); + myContent.contextPut("incomment", isPanelOpen(ureq, "comment", true)); + } + + if(assessmentConfig.hasIndividualAsssessmentDocuments()) { + List<File> docs = courseAssessmentService.getIndividualAssessmentDocuments(courseNode, userCourseEnv); + String mapperUri = registerCacheableMapper(ureq, null, new DocumentsMapper(docs)); + myContent.contextPut("docsMapperUri", mapperUri); + myContent.contextPut("docs", docs); + myContent.contextPut("inassessmentDocuments", isPanelOpen(ureq, "assessmentDocuments", true)); + } + } + myContent.contextPut("attempts", assessmentEntry.getAttempts() == null ? 0 : assessmentEntry.getAttempts()); + } + + UserNodeAuditManager am = userCourseEnv.getCourseEnvironment().getAuditManager(); myContent.contextPut("log", am.getUserNodeLog(courseNode, identity)); exposeResults(ureq); @@ -780,10 +763,6 @@ public class IQRunController extends BasicController implements GenericEventList return panelId + "::" + userCourseEnv.getCourseEnvironment().getCourseResourceableId() + "::" + courseNode.getIdent(); } - /** - * - * @see org.olat.core.gui.control.DefaultController#doDisspose(boolean) - */ @Override protected void doDispose() { // child controllers disposed by basic controller diff --git a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java index d9ea6ec5930..8bdd719accf 100644 --- a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java +++ b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java @@ -50,10 +50,10 @@ import org.olat.course.assessment.CourseAssessmentService; import org.olat.course.assessment.handler.AssessmentConfig; import org.olat.course.auditing.UserNodeAuditManager; import org.olat.course.highscore.ui.HighScoreRunController; +import org.olat.course.nodes.AssessableCourseNode; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.MSCourseNode; import org.olat.course.nodes.ObjectivesHelper; -import org.olat.course.nodes.PersistentAssessableCourseNode; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; import org.olat.modules.assessment.AssessmentEntry; @@ -74,7 +74,7 @@ public class MSCourseNodeRunController extends BasicController implements Activa private boolean hasScore, hasPassed, hasComment; private final UserCourseEnvironment userCourseEnv; private final boolean overrideUserResultsVisiblity; - private final PersistentAssessableCourseNode courseNode; + private final AssessableCourseNode courseNode; @Autowired private CourseModule courseModule; @@ -92,7 +92,7 @@ public class MSCourseNodeRunController extends BasicController implements Activa * @param showLog If true, the change log will be displayed */ public MSCourseNodeRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, - PersistentAssessableCourseNode courseNode, boolean displayNodeInfo, boolean showLog) { + AssessableCourseNode courseNode, boolean displayNodeInfo, boolean showLog) { this(ureq, wControl, userCourseEnv, courseNode, displayNodeInfo, showLog, false); } @@ -108,7 +108,7 @@ public class MSCourseNodeRunController extends BasicController implements Activa * @param overrideUserResultsVisiblity If the controller can override the user visiblity of the score evaluation */ public MSCourseNodeRunController(UserRequest ureq, WindowControl wControl, - UserCourseEnvironment userCourseEnv, PersistentAssessableCourseNode courseNode, + UserCourseEnvironment userCourseEnv, AssessableCourseNode courseNode, boolean displayNodeInfo, boolean showLog, boolean overrideUserResultsVisiblity) { super(ureq, wControl, Util.createPackageTranslator(CourseNode.class, ureq.getLocale())); -- GitLab