From 88bb7e5a5ff6915d81be048b2750d676572ff801 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Wed, 22 Jan 2020 14:16:38 +0100 Subject: [PATCH] OO-4481: Open configuration of a single course element --- .../course/editor/EditorMainController.java | 39 ++++++++-------- .../org/olat/course/editor/SelectEvent.java | 46 +++++++++++++++++++ .../editor/overview/OverviewController.java | 9 ++++ .../overview/OverviewListController.java | 19 +++++++- 4 files changed, 91 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/olat/course/editor/SelectEvent.java diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index 57eab981ec2..97d97e46243 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -199,13 +199,6 @@ public class EditorMainController extends MainLayoutBasicController implements G @Autowired private AssessmentModeManager assessmentModeMgr; - /** - * Constructor for the course editor controller - * - * @param ureq The user request - * @param wControl The window controller - * @param course The course - */ public EditorMainController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbar, ICourse course, CourseNode selectedNode) { super(ureq,wControl); this.ores = OresHelper.clone(course); @@ -364,10 +357,6 @@ public class EditorMainController extends MainLayoutBasicController implements G return immediateClose; } - /** - * @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) { try { @@ -684,8 +673,6 @@ public class EditorMainController extends MainLayoutBasicController implements G } else if (event == Event.CANCELLED_EVENT) { // user canceled } - - //aggressive clean-up cleanUp(); } else if (source == deleteDialogController){ removeAsListenerAndDispose(deleteDialogController); @@ -721,6 +708,12 @@ public class EditorMainController extends MainLayoutBasicController implements G removeAsListenerAndDispose(alternateCtr); cmc = null; alternateCtr = null; + } else if (source == overviewCtrl) { + if (event instanceof SelectEvent) { + SelectEvent se = (SelectEvent)event; + doOpenNode(ureq, se.getCourseNode()); + cleanUp(); + } } } catch (RuntimeException e) { log.warn(RELEASE_LOCK_AT_CATCH_EXCEPTION+" [in event(UserRequest,Controller,Event)]", e); @@ -728,14 +721,12 @@ public class EditorMainController extends MainLayoutBasicController implements G throw e; } } - - /** - * Aggressive clean-up of popup controllers - */ + private void cleanUp() { removeAsListenerAndDispose(moveCopyController); removeAsListenerAndDispose(multiSPChooserCtr); removeAsListenerAndDispose(chooseNodeTypeCtr); + removeAsListenerAndDispose(overviewCtrl); removeAsListenerAndDispose(alternateCtr); removeAsListenerAndDispose(calloutCtrl); removeAsListenerAndDispose(statusCtr); @@ -743,6 +734,7 @@ public class EditorMainController extends MainLayoutBasicController implements G moveCopyController = null; chooseNodeTypeCtr = null; multiSPChooserCtr = null; + overviewCtrl = null; alternateCtr = null; calloutCtrl = null; statusCtr = null; @@ -768,6 +760,16 @@ public class EditorMainController extends MainLayoutBasicController implements G } } + private void doOpenNode(UserRequest ureq, CourseNode courseNode) { + TreeNode selectedNode = menuTree.getTreeModel().getNodeById(courseNode.getIdent()); + if (selectedNode != null) { + stackPanel.popUpToController(this); + + menuTree.setSelectedNodeId(selectedNode.getIdent()); + updateViewForSelectedNodeId(ureq, selectedNode.getIdent()); + } + } + private void doMove(UserRequest ureq, ICourse course, boolean copy) { if(guardModalController(moveCopyController)) return; @@ -1234,9 +1236,6 @@ public class EditorMainController extends MainLayoutBasicController implements G } } - /** - * @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event) - */ @Override public void event(Event event) { try { diff --git a/src/main/java/org/olat/course/editor/SelectEvent.java b/src/main/java/org/olat/course/editor/SelectEvent.java new file mode 100644 index 00000000000..80fc890dc8c --- /dev/null +++ b/src/main/java/org/olat/course/editor/SelectEvent.java @@ -0,0 +1,46 @@ +/** + * <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.editor; + +import org.olat.core.gui.control.Event; +import org.olat.course.nodes.CourseNode; + +/** + * + * Initial date: 22 Jan 2020<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public class SelectEvent extends Event { + + private static final long serialVersionUID = 5560638620656756047L; + + private final CourseNode courseNode; + + public SelectEvent(CourseNode courseNode) { + super("select-edit-node"); + this.courseNode = courseNode; + } + + public CourseNode getCourseNode() { + return courseNode; + } + +} diff --git a/src/main/java/org/olat/course/editor/overview/OverviewController.java b/src/main/java/org/olat/course/editor/overview/OverviewController.java index f80f9d2bd9a..73c5a4d9e49 100644 --- a/src/main/java/org/olat/course/editor/overview/OverviewController.java +++ b/src/main/java/org/olat/course/editor/overview/OverviewController.java @@ -23,6 +23,7 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.panel.SimpleStackedPanel; import org.olat.core.gui.components.panel.StackedPanel; +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; @@ -47,6 +48,14 @@ public class OverviewController extends BasicController { initialPanel.setContent(overviewListCtrl.getInitialComponent()); } + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if (source == overviewListCtrl) { + fireEvent(ureq, event); + } + super.event(ureq, source, event); + } + @Override protected void event(UserRequest ureq, Component source, Event event) { // diff --git a/src/main/java/org/olat/course/editor/overview/OverviewListController.java b/src/main/java/org/olat/course/editor/overview/OverviewListController.java index f667a545e18..ed29b752a7b 100644 --- a/src/main/java/org/olat/course/editor/overview/OverviewListController.java +++ b/src/main/java/org/olat/course/editor/overview/OverviewListController.java @@ -37,6 +37,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFle import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer; import org.olat.core.gui.components.form.flexible.impl.elements.table.TreeNodeFlexiCellRenderer; import org.olat.core.gui.components.link.Link; @@ -51,6 +52,7 @@ import org.olat.course.ICourse; import org.olat.course.assessment.IndentedNodeRenderer; import org.olat.course.editor.EditorMainController; import org.olat.course.editor.NodeEditController; +import org.olat.course.editor.SelectEvent; import org.olat.course.editor.overview.OverviewDataModel.OverviewCols; import org.olat.course.learningpath.FullyAssessedTrigger; import org.olat.course.learningpath.LearningPathConfigs; @@ -72,6 +74,8 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class OverviewListController extends FormBasicController { + private static final String CMD_OPEN = "open"; + private FlexiTableElement tableEl; private OverviewDataModel dataModel; private FormLink bulkLink; @@ -107,7 +111,9 @@ public class OverviewListController extends FormBasicController { IndentedNodeRenderer intendedNodeRenderer = new IndentedNodeRenderer(); intendedNodeRenderer.setIndentationEnabled(false); FlexiCellRenderer nodeRenderer = new TreeNodeFlexiCellRenderer(intendedNodeRenderer); - columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.node, nodeRenderer)); + DefaultFlexiColumnModel nodeModel = new DefaultFlexiColumnModel(OverviewCols.node, CMD_OPEN, nodeRenderer); + nodeModel.setAlwaysVisible(true); + columnsModel.addFlexiColumnModel(nodeModel); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.shortTitle)); columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(OverviewCols.longTitle)); DefaultFlexiColumnModel learningObjectivesModel = new DefaultFlexiColumnModel(OverviewCols.learningObjectives); @@ -264,7 +270,16 @@ public class OverviewListController extends FormBasicController { @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { - if (source == bulkLink) { + if (tableEl == source) { + if (event instanceof SelectionEvent) { + SelectionEvent se = (SelectionEvent)event; + String cmd = se.getCommand(); + OverviewRow row = dataModel.getObject(se.getIndex()); + if (CMD_OPEN.equals(cmd)) { + fireEvent(ureq, new SelectEvent(row.getCourseNode())); + } + } + } else if (source == bulkLink) { doBulk(ureq); } super.formInnerEvent(ureq, source, event); -- GitLab