From 3cf88d11e5e08b56fd30f02c7d57dda12ff34cfc Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Wed, 16 Jan 2013 11:37:28 +0100
Subject: [PATCH] OO-502: prevent the resume to reload 2x the same site

---
 .../fullWebApp/BaseFullWebappController.java     | 16 ++++++++++------
 .../generic/layout/GenericMainController.java    |  9 +++++++--
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
index 3441d3049f2..db0cc8d9187 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -422,7 +422,7 @@ public class BaseFullWebappController extends BasicController implements Generic
 			SiteInstance s = sites.get(0);
 			if (contentCtrl == null) {
 				//activate site only if no content was set -> allow content before activation of default site.
-				activateSite(s, ureq, null, null);
+				activateSite(s, ureq, null, null, false);
 				updateBusinessPath(ureq, s);
 			}
 		}
@@ -468,7 +468,7 @@ public class BaseFullWebappController extends BasicController implements Generic
 				if(siteToBusinessPath.containsKey(s)) {
 					point = siteToBusinessPath.get(s);
 				}
-				activateSite(s, ureq, null, null);
+				activateSite(s, ureq, null, null, true);
 				if(point != null) {
 					BusinessControlFactory.getInstance().addToHistory(ureq, point);
 				}
@@ -547,7 +547,7 @@ public class BaseFullWebappController extends BasicController implements Generic
 				SiteInstance site = ((StateSite)s).getSite();
 				for(SiteInstance savedSite:sites) {
 					if(site.getClass().equals(savedSite.getClass())) {
-						activateSite(savedSite, ureq, null, entries);
+						activateSite(savedSite, ureq, null, entries, false);
 						//updateBusinessPath(ureq, savedSite);
 					}
 				}
@@ -611,7 +611,8 @@ public class BaseFullWebappController extends BasicController implements Generic
 
 	// FROM FULLCHIEFCONTROLLER
 	//fxdiff BAKS-7 Resume function
-	private void activateSite(SiteInstance s, UserRequest ureq, String viewIdentifier, List<ContextEntry> entries) {
+	private void activateSite(SiteInstance s, UserRequest ureq, String viewIdentifier,
+			List<ContextEntry> entries, boolean forceReload) {
 		BornSiteInstance bs = siteToBornSite.get(s);
 		GuiStack gs;
 		Controller resC;
@@ -620,7 +621,10 @@ public class BaseFullWebappController extends BasicController implements Generic
 			// single - click -> fetch guistack from cache
 			gs = bs.getGuiStackHandle();
 			resC = bs.getController();
-			//PB//site_wControl = bs.getWindowControl();
+		} else if (bs != null && s == curSite && !forceReload) {
+			//via activate, don't force the reload
+			gs = bs.getGuiStackHandle();
+			resC = bs.getController();
 		} else {
 			// bs == null (not yet in cache) || s == curSite
 			// double click or not yet in cache.
@@ -967,7 +971,7 @@ public class BaseFullWebappController extends BasicController implements Generic
 			SiteInstance site = it_sites.next();
 			String cName = site.getClass().getName();
 			if (cName.equals(className)) {
-				activateSite(site, ureq, viewIdentifier, entries);
+				activateSite(site, ureq, viewIdentifier, entries, false);
 				return;
 			}
 		}
diff --git a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
index d49300255ea..e990bea9bd7 100644
--- a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
@@ -528,6 +528,7 @@ public abstract class GenericMainController extends MainLayoutBasicController im
 		if (entries == null || entries.isEmpty()) return;
 
 		ContextEntry entry = entries.get(0);
+		TreeNode selectedNode = getMenuTree().getSelectedNode();
 		String node = entry.getOLATResourceable().getResourceableTypeName();
 		if (node != null && node.startsWith(GMCMT)) {
 			activate(ureq, node + ":" + entries.get(0).getOLATResourceable().getResourceableId());
@@ -535,13 +536,17 @@ public abstract class GenericMainController extends MainLayoutBasicController im
 				entries = entries.subList(1, entries.size());
 			}
 			if (contentCtr instanceof Activateable2) {
-				((Activateable2) contentCtr).activate(ureq, entries, entry.getTransientState());
+				((Activateable2)contentCtr).activate(ureq, entries, entry.getTransientState());
 			}
 		} else {
 			// maybe the node is a GAE-NavigationKey ?
 			GenericActionExtension gAE = ExtManager.getInstance().getActionExtensioByNavigationKey(className, node);
 			if (gAE != null) {
-				activateTreeNodeByActionExtension(ureq, gAE);
+				//if the controller is already selected, only activate it, don't reinstanciate it
+				if(selectedNode != null && selectedNode.getUserObject() != gAE) {
+					activateTreeNodeByActionExtension(ureq, gAE);
+				}
+
 				if (entries.size() >= 1) {
 					entries = entries.subList(1, entries.size());
 				}
-- 
GitLab