From 2e04451f1c7af8279cafabd7d559a107c8c3b45c Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 20 Dec 2013 09:10:40 +0100
Subject: [PATCH] OO-907: fixed the disposed additional controller in edit mode
 for the notes portlet

---
 .../control/generic/portal/PortalImpl.java    | 35 +++++++++----------
 .../generic/portal/PortletContainer.java      | 32 +++++++++--------
 .../HomePortalControllerCreator.java          |  4 +--
 .../olat/note/NotesPortletRunController.java  |  1 +
 4 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/control/generic/portal/PortalImpl.java b/src/main/java/org/olat/core/gui/control/generic/portal/PortalImpl.java
index 5574f8ad01a..2b4afb89487 100644
--- a/src/main/java/org/olat/core/gui/control/generic/portal/PortalImpl.java
+++ b/src/main/java/org/olat/core/gui/control/generic/portal/PortalImpl.java
@@ -74,6 +74,7 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 	private Map<String, PortletContainer> portletContainers; // map of all portlet containers (defined in portal columns + inactive portlets)
 	private List<String> inactivePortlets; // list containing the names of inactive portlets
 	private String name;
+	private boolean editModeEnabled = false;
 
 	/**
 	 * Do use PortalFactory for create new Portals
@@ -251,15 +252,11 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 				}
 				if (isActive) {
 					// initialize portlet container for active portlets only
-					pc.initializeRunComponent(ureq);
-					log.debug("initPortlets: add to inacitve portlets portletName=" + portlet.getName());
+					pc.initializeRunComponent(ureq, editModeEnabled);
 				} else {
 					// add it to inacitve portlets list if not active
 					inactivePortlets.add(portlet.getName());
-					log.debug("initPortlets: add to inacitve portlets portletName=" + portlet.getName());
 				}
-			} else {
-				log.debug("Portlet disabled portletName=" + portlet.getName());
 			}
 		}
 		// update links on visible portlets
@@ -273,15 +270,15 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 		if (source instanceof Link && portalVC.contains(source)) {
 			Link tmp = (Link)source;
 			String portletName = (String)tmp.getUserObject();
-			List<String> firstColumn = this.portalColumns.get(0);
-			PortletContainer pc = this.portletContainers.get(portletName);
+			List<String> firstColumn = portalColumns.get(0);
+			PortletContainer pc = portletContainers.get(portletName);
 			if (pc == null) throw new AssertException("trying to add portlet with name::" + portletName + " to portal, but portlet container did not exist. Could be a user modifying the URL...");
 			// add to users portlet list
 			firstColumn.add(portletName);
 			// remove from inactive portlets list
-			this.inactivePortlets.remove(portletName);
+			inactivePortlets.remove(portletName);
 			// initialize portlet run component
-			pc.initializeRunComponent(ureq);
+			pc.initializeRunComponent(ureq, editModeEnabled);
 			// save user config in db
 			saveUserPortalColumnsConfiguration(ureq, portalColumns);
 			// update possible links in gui
@@ -295,21 +292,22 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 	 * Enable/disable the edit mode of the portal
 	 * @param editModeEnabled true: enabled, false: disabled
 	 */
-	public void setIsEditMode(UserRequest ureq, Boolean editModeEnabled) {
+	public void setIsEditMode(UserRequest ureq, boolean editModeEnabled) {
+		this.editModeEnabled = editModeEnabled;
 		updatePorletContainerEditMode(ureq, editModeEnabled);
-		this.portalVC.contextPut(MODE_EDIT, editModeEnabled);
+		portalVC.contextPut(MODE_EDIT, editModeEnabled);
 	}
 	
 	/**
 	 * Updates all portles using the given mode
 	 * @param editMode true: edit mode activated, false: deactivated
 	 */
-	private void updatePorletContainerEditMode(UserRequest ureq, Boolean editMode) {
-		Iterator<String> portletsIter = PortletFactory.getPortlets().keySet().iterator();
-		while (portletsIter.hasNext()) {
-			String portletName = (String) portletsIter.next();
-			PortletContainer pc = this.portletContainers.get(portletName);
-			if (pc != null ) pc.setIsEditMode(ureq, editMode);
+	private void updatePorletContainerEditMode(UserRequest ureq, boolean editMode) {
+		for (String portletName : PortletFactory.getPortlets().keySet()) {
+			PortletContainer pc = portletContainers.get(portletName);
+			if (pc != null ) {
+				pc.setIsEditMode(ureq, editMode);
+			}
 		}
 	}
 	
@@ -318,7 +316,6 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 	 */
 	@Override
 	public void event(UserRequest ureq, Controller source, Event event) {
-		log.debug("PortalImpl event=" + event);
 		if (source instanceof PortletContainer) {
 			PortletContainer pc = (PortletContainer) source;
 			String cmd = event.getCommand();
@@ -432,7 +429,7 @@ public class PortalImpl extends DefaultController implements Portal, ControllerE
 	 * @return Name of portal
 	 */
 	public String getName(){
-		return this.name;
+		return name;
 	}
 
 }
diff --git a/src/main/java/org/olat/core/gui/control/generic/portal/PortletContainer.java b/src/main/java/org/olat/core/gui/control/generic/portal/PortletContainer.java
index 875fb4dfa5d..92617c670af 100644
--- a/src/main/java/org/olat/core/gui/control/generic/portal/PortletContainer.java
+++ b/src/main/java/org/olat/core/gui/control/generic/portal/PortletContainer.java
@@ -106,16 +106,16 @@ public class PortletContainer extends BasicController implements PortletContaine
 		close.setCustomEnabledLinkCSS("b_portlet_edit_delete");
 		
 		portletContainerVC.put("toolbox", toolboxContainer);
-		
 	}
 
 	/**
 	 * Initializes the portlet runtime view
 	 * @param ureq
 	 */
-	protected void initializeRunComponent(UserRequest ureq) {
-		this.runComponent = this.portlet.getInitialRunComponent(getWindowControl(), ureq);
-		this.portletContainerVC.put("portlet", runComponent);
+	protected void initializeRunComponent(UserRequest ureq, boolean editModeEnabled) {
+		runComponent = portlet.getInitialRunComponent(getWindowControl(), ureq);
+		portletContainerVC.put("portlet", runComponent);
+		addAdditonalTools(ureq, editModeEnabled);
 	}
 	
 	/**
@@ -135,7 +135,7 @@ public class PortletContainer extends BasicController implements PortletContaine
 	 * @param value Boolean value
 	 */
 	protected void contextPut(String name, Boolean value) {
-		this.portletContainerVC.contextPut(name, value);
+		portletContainerVC.contextPut(name, value);
 	}
 	
 	/**
@@ -166,18 +166,20 @@ public class PortletContainer extends BasicController implements PortletContaine
 	/**
 	 * @param editModeEnabled true: portal is in edit mode, false in run mode
 	 */
-	protected void setIsEditMode(UserRequest ureq, Boolean editModeEnabled) {
-		this.portletContainerVC.contextPut(MODE_EDIT, editModeEnabled);
-		
+	protected void setIsEditMode(UserRequest ureq, boolean editModeEnabled) {
+		portletContainerVC.contextPut(MODE_EDIT, editModeEnabled);
 		//only create sorting and moving stuff if switching to edit mode otherwise lots or memory is wasted!
-		if (editModeEnabled) {
-			Controller additionalPortletTools = portlet.getTools(ureq, getWindowControl());
-			if(additionalPortletTools!=null) {
-				toolboxContainer.contextPut("hasAdditional", Boolean.TRUE);
-				toolboxContainer.put("additionalTools", additionalPortletTools.getInitialComponent());
-			}
-		}
+		addAdditonalTools(ureq, editModeEnabled);
+	}
+	
+	private void addAdditonalTools(UserRequest ureq, boolean editModeEnabled) {
+		if(!editModeEnabled) return;
 		
+		Controller additionalPortletTools = portlet.getTools(ureq, getWindowControl());
+		if(additionalPortletTools!=null) {
+			toolboxContainer.contextPut("hasAdditional", Boolean.TRUE);
+			toolboxContainer.put("additionalTools", additionalPortletTools.getInitialComponent());
+		}
 	}
 
 	public void setCanMoveDown(boolean canMoveDown) {
diff --git a/src/main/java/org/olat/home/controllerCreators/HomePortalControllerCreator.java b/src/main/java/org/olat/home/controllerCreators/HomePortalControllerCreator.java
index be3077a6e3b..b6dd307f90f 100644
--- a/src/main/java/org/olat/home/controllerCreators/HomePortalControllerCreator.java
+++ b/src/main/java/org/olat/home/controllerCreators/HomePortalControllerCreator.java
@@ -135,10 +135,10 @@ public class HomePortalControllerCreator extends AutoCreator  {
 		@Override
 		public void event(UserRequest ureq, Component source, Event event) {
 			if (source == portalBackButton){
-				this.myPortal.setIsEditMode(ureq, Boolean.FALSE);
+				myPortal.setIsEditMode(ureq, false);
 				welcome.contextPut("portalEditMode", Boolean.FALSE);
 			} else if (source == portalEditButton){
-				this.myPortal.setIsEditMode(ureq, Boolean.TRUE);
+				myPortal.setIsEditMode(ureq, true);
 				welcome.contextPut("portalEditMode", Boolean.TRUE);
 			} 
 		}
diff --git a/src/main/java/org/olat/note/NotesPortletRunController.java b/src/main/java/org/olat/note/NotesPortletRunController.java
index f02fd60f73f..aed0e44dc61 100644
--- a/src/main/java/org/olat/note/NotesPortletRunController.java
+++ b/src/main/java/org/olat/note/NotesPortletRunController.java
@@ -248,6 +248,7 @@ public class NotesPortletRunController extends AbstractPortletRunController<Note
 	protected void doDispose() {
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, eventBusThisIdentityOres);
 		super.doDispose();
+		portletToolsController = null;
 	}
 	
 	/**
-- 
GitLab