diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index 876cf509afd9f868917cc8b3f564d3ac8d57b682..e845b3861988d20668723ee233cb609273929ec5 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -184,6 +184,7 @@ public class EditorMainController extends MainLayoutBasicController implements G private ToolController toolC; private MoveCopySubtreeController moveCopyController; private InsertNodeController insertNodeController; + private FolderRunController folderController; private DialogBoxController deleteDialogController; private LayoutMain3ColsController columnLayoutCtr; @@ -503,12 +504,6 @@ public class EditorMainController extends MainLayoutBasicController implements G */ public void event(UserRequest ureq, Controller source, Event event) { if (event.getCommand().equals(BGContextEvent.RESOURCE_ADDED)) { - System.out.println("emc:have to inform tabs"); - Iterator it = tabbedNodeConfig.getComponents().keySet().iterator(); - while (it.hasNext()) { - Component c = tabbedNodeConfig.getComponents().get(it.next()); - System.out.println(c.getComponentName()); - } return; } @@ -519,11 +514,14 @@ public class EditorMainController extends MainLayoutBasicController implements G if (event.getCommand().startsWith(TB_ACTION)) { String cnAlias = event.getCommand().substring(TB_ACTION.length()); if (cnAlias == null) throw new AssertException("Received event from ButtonController which is not registered with the toolbox."); + removeAsListenerAndDispose(insertNodeController); + removeAsListenerAndDispose(cmc); Codepoint.codepoint(EditorMainController.class, "startInsertNode"); insertNodeController = new InsertNodeController(ureq, getWindowControl(), course, cnAlias); listenTo(insertNodeController); cmc = new CloseableModalController(getWindowControl(), translate("close"), insertNodeController.getInitialComponent(), true, translate(NLS_INSERTNODE_TITLE)); + listenTo(cmc); cmc.activate(); } else if (event.getCommand().equals(CMD_DELNODE)) { TreeNode tn = menuTree.getSelectedNode(); @@ -549,11 +547,14 @@ public class EditorMainController extends MainLayoutBasicController implements G showError(NLS_MOVECOPYNODE_ERROR_ROOTNODE); return; } + removeAsListenerAndDispose(moveCopyController); + removeAsListenerAndDispose(cmc); CourseEditorTreeNode cetn = cetm.getCourseEditorNodeById(tn.getIdent()); moveCopyController = new MoveCopySubtreeController(ureq, getWindowControl(), course, cetn, event.getCommand().equals(CMD_COPYNODE)); - this.listenTo(moveCopyController); + listenTo(moveCopyController); cmc = new CloseableModalController(getWindowControl(), translate("close"), moveCopyController.getInitialComponent(), true, translate(NLS_INSERTNODE_TITLE)); + listenTo(cmc); cmc.activate(); } @@ -643,12 +644,12 @@ public class EditorMainController extends MainLayoutBasicController implements G // Folder for course with custom link model to jump to course nodes VFSContainer namedCourseFolder = new NamedContainerImpl(translate(NLS_COURSEFOLDER_NAME), course.getCourseFolderContainer()); CustomLinkTreeModel customLinkTreeModel = new CourseInternalLinkTreeModel(course.getEditorTreeModel()); - FolderRunController bcrun = new FolderRunController(namedCourseFolder, true, true, true, ureq, getWindowControl(), null, customLinkTreeModel); - bcrun.addLoggingResourceable(LoggingResourceable.wrap(course)); - Component folderComponent = bcrun.getInitialComponent(); - CloseableModalController clc = new CloseableModalController(getWindowControl(), translate(NLS_COURSEFOLDER_CLOSE), - folderComponent); - clc.activate(); + folderController = new FolderRunController(namedCourseFolder, true, true, true, ureq, getWindowControl(), null, customLinkTreeModel); + folderController.addLoggingResourceable(LoggingResourceable.wrap(course)); + listenTo(folderController); + cmc = new CloseableModalController(getWindowControl(), translate(NLS_COURSEFOLDER_CLOSE), folderController.getInitialComponent()); + listenTo(cmc); + cmc.activate(); } else if (event.getCommand().equals(CMD_MULTI_SP)) { removeAsListenerAndDispose(multiSPChooserCtr); @@ -697,7 +698,21 @@ public class EditorMainController extends MainLayoutBasicController implements G if (event == Event.DONE_EVENT) { // no need to deactivate preview controller, already done internally removeAsListenerAndDispose(previewController); + previewController = null; } + + } else if (source == cmc || source == folderController) { + //aggressive clean-up + removeAsListenerAndDispose(multiSPChooserCtr); + removeAsListenerAndDispose(moveCopyController); + removeAsListenerAndDispose(insertNodeController); + removeAsListenerAndDispose(folderController); + removeAsListenerAndDispose(cmc); + moveCopyController = null; + insertNodeController = null; + multiSPChooserCtr = null; + folderController = null; + cmc = null; } else if (source == moveCopyController) { cmc.deactivate(); if (event == Event.DONE_EVENT) { @@ -720,6 +735,11 @@ public class EditorMainController extends MainLayoutBasicController implements G // user canceled } + //aggressive clean-up + removeAsListenerAndDispose(moveCopyController); + removeAsListenerAndDispose(cmc); + moveCopyController = null; + cmc = null; } else if (source == insertNodeController) { cmc.deactivate(); if (event == Event.DONE_EVENT) { @@ -744,7 +764,9 @@ public class EditorMainController extends MainLayoutBasicController implements G } // in all cases: removeAsListenerAndDispose(insertNodeController); - + removeAsListenerAndDispose(cmc); + insertNodeController = null; + cmc = null; } else if (source == deleteDialogController){ removeAsListenerAndDispose(deleteDialogController); deleteDialogController = null; @@ -783,6 +805,7 @@ public class EditorMainController extends MainLayoutBasicController implements G cmc.deactivate(); removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(multiSPChooserCtr); + cmc = null; if(event == Event.CHANGED_EVENT) { menuTree.setDirty(true);