diff --git a/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java b/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java index ae68059814243b09a184c19d0289b26fdaa25756..8389485e6b748216eb35e55c8ab14f11a01d22da 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java +++ b/src/main/java/org/olat/core/commons/modules/bc/FolderRunController.java @@ -565,6 +565,13 @@ public class FolderRunController extends BasicController implements Activateable } } } + + public String getCurrentContainerPath() { + if(folderComponent != null) { + return folderComponent.getCurrentContainerPath(); + } + return null; + } public void activatePath(UserRequest ureq, String path) { if(folderCommandController != null) { diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFParticipantController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFParticipantController.java index 1927cc95b84aaa131e8bffa02b124a7b0344289f..f30c68108d556b1da6f600b55334e4b1d41c1a72 100644 --- a/src/main/java/org/olat/course/nodes/pf/ui/PFParticipantController.java +++ b/src/main/java/org/olat/course/nodes/pf/ui/PFParticipantController.java @@ -26,6 +26,7 @@ import org.olat.core.commons.services.notifications.ui.ContextualSubscriptionCon import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; @@ -50,16 +51,27 @@ public class PFParticipantController extends BasicController { private FolderRunController folderRunController; private ContextualSubscriptionController contextualSubscriptionCtr; + private final PFView pfView; + private final boolean isCoach; + private final boolean readOnly; + private final PFCourseNode pfNode; + private final CourseEnvironment courseEnv; + private final Identity assessedIdentity; + @Autowired private PFManager pfManager; - @SuppressWarnings("incomplete-switch") public PFParticipantController(UserRequest ureq, WindowControl wControl, PFCourseNode pfNode, - UserCourseEnvironment userCourseEnv, Identity identity, boolean isCoach, boolean readOnly) { + UserCourseEnvironment userCourseEnv, Identity assessedIdentity, boolean isCoach, boolean readOnly) { + super(ureq, wControl); mainVC = createVelocityContainer("participant"); - CourseEnvironment courseEnv = userCourseEnv.getCourseEnvironment(); + this.pfNode = pfNode; + this.isCoach = isCoach; + this.assessedIdentity = assessedIdentity; + courseEnv = userCourseEnv.getCourseEnvironment(); + this.readOnly = readOnly || userCourseEnv.isCourseReadOnly(); if (pfNode.hasLimitCountConfigured()){ mainVC.contextPut("limit", pfNode.getLimitCount()); @@ -77,39 +89,59 @@ public class PFParticipantController extends BasicController { mainVC.put("contextualSubscription", contextualSubscriptionCtr.getInitialComponent()); } //CourseFreeze - readOnly = readOnly ? true : userCourseEnv.isCourseReadOnly(); + + pfView = pfManager.providePFView(pfNode); + String path = null; + switch(pfView) { + case displayDrop: + path = translate("drop.box"); + break; + case displayReturn: + path = translate("return.box"); + break; + default: + path = translate("drop.box"); + break; + } + initFolderController(ureq, path); - PFView pfView = pfManager.providePFView(pfNode); - VFSContainer frc = pfManager.provideParticipantFolder(pfNode, pfView, getTranslator(),courseEnv, - identity, isCoach, readOnly); - folderRunController = new FolderRunController(frc, false, false, false, false, ureq, wControl, null, null, null); + putInitialPanel(mainVC); + } + + private void initFolderController(UserRequest ureq, String path) { + removeAsListenerAndDispose(folderRunController); + + VFSContainer frc = pfManager.provideParticipantFolder(pfNode, pfView, getTranslator(), courseEnv, + assessedIdentity, isCoach, readOnly); + folderRunController = new FolderRunController(frc, false, false, false, false, ureq, getWindowControl(), null, null, null); + folderRunController.disableSubscriptionController(); listenTo(folderRunController); mainVC.put("folder", folderRunController.getInitialComponent()); - - switch (pfView) { - case displayDrop: - folderRunController.activatePath(ureq, translate("drop.box")); - break; - case displayReturn: - folderRunController.activatePath(ureq, translate("return.box")); - break; - } - - putInitialPanel(mainVC); - + folderRunController.activatePath(ureq, path); } @Override protected void doDispose() { - + // } @Override protected void event(UserRequest ureq, Component source, Event event) { - + // } + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(folderRunController == source) { + recalculatSecurityCallback(ureq); + } + } + + private void recalculatSecurityCallback(UserRequest ureq) { + String path = folderRunController.getCurrentContainerPath(); + initFolderController(ureq, path); + } /** * Remove the subscription panel but let the subscription context active @@ -118,7 +150,5 @@ public class PFParticipantController extends BasicController { if (contextualSubscriptionCtr != null) { mainVC.remove(contextualSubscriptionCtr.getInitialComponent()); } - } - - + } } diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFPreviewController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFPreviewController.java index b29d627307f1355b6a0483f960440869fdc2f32d..93145a792c15ae9d6a323843c53f116ac9716308 100644 --- a/src/main/java/org/olat/course/nodes/pf/ui/PFPreviewController.java +++ b/src/main/java/org/olat/course/nodes/pf/ui/PFPreviewController.java @@ -26,18 +26,13 @@ import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.course.nodes.PFCourseNode; -import org.olat.course.nodes.pf.manager.PFManager; import org.olat.course.run.userview.UserCourseEnvironment; -import org.springframework.beans.factory.annotation.Autowired; /** * * @author Fabian Kiefer, fabian.kiefer@frentix.com, http://www.frentix.com * */ public class PFPreviewController extends BasicController { - - @Autowired - private PFManager pfManager; public PFPreviewController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl); @@ -67,12 +62,12 @@ public class PFPreviewController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { - + // } @Override protected void doDispose() { - + // } } diff --git a/src/main/java/org/olat/restapi/system/VFSStatsWebService.java b/src/main/java/org/olat/restapi/system/VFSStatsWebService.java index 02721e961623752e0a36258d625dc5bf08bc75e7..1f0acad61abe1881d2b1966036cb1f783b81583d 100644 --- a/src/main/java/org/olat/restapi/system/VFSStatsWebService.java +++ b/src/main/java/org/olat/restapi/system/VFSStatsWebService.java @@ -19,8 +19,6 @@ */ package org.olat.restapi.system; -import java.util.List; - import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @@ -28,6 +26,7 @@ import javax.ws.rs.core.Response; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.services.vfs.manager.VFSRevisionDAO; import org.olat.restapi.system.vo.VFSStatsVO; import org.springframework.beans.factory.annotation.Autowired; @@ -42,6 +41,8 @@ public class VFSStatsWebService { @Autowired private DB dbInstance; + @Autowired + private VFSRevisionDAO vfsRevisionDAO; public VFSStatsWebService() { CoreSpringFactory.autowireObject(this); @@ -50,19 +51,10 @@ public class VFSStatsWebService { @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getRevisionSizeXML() { - StringBuilder sb = new StringBuilder(256); - sb.append("select SUM(size) from vfsrevision"); - - List<Long> revisionsSize = dbInstance.getCurrentEntityManager() - .createQuery(sb.toString(), Long.class) - .getResultList(); - - Long size = revisionsSize == null || revisionsSize.isEmpty() ? Long.valueOf(0) : revisionsSize.get(0); - + long size = vfsRevisionDAO.calculateRevisionsSize(); dbInstance.commitAndCloseSession(); VFSStatsVO vo = new VFSStatsVO(size); - return Response.ok(vo).build(); } } \ No newline at end of file