From 3ef3f2f9790502870ce56e4ae44938648f16fa04 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 5 Jun 2014 13:27:42 +0200
Subject: [PATCH] OO-1068: fix user tools after the stackoverflow's fix

---
 .../fullWebApp/BaseFullWebappController.java  | 22 +++++++++++++------
 .../navigation/AbstractSiteInstance.java      |  2 +-
 src/main/java/org/olat/home/HomeSite.java     |  3 +--
 3 files changed, 17 insertions(+), 10 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 eb1688a9725..e586886b2f6 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -62,10 +62,10 @@ import org.olat.core.gui.control.ChiefController;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.ScreenMode;
+import org.olat.core.gui.control.ScreenMode.Mode;
 import org.olat.core.gui.control.VetoableCloseController;
 import org.olat.core.gui.control.WindowBackOffice;
 import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.ScreenMode.Mode;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.creator.ControllerCreator;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
@@ -98,6 +98,7 @@ import org.olat.core.util.i18n.I18nManager;
 import org.olat.core.util.i18n.I18nModule;
 import org.olat.core.util.prefs.Preferences;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.home.HomeSite;
 
 /**
  * Description:<br>
@@ -148,6 +149,8 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 	// used as link id which is load url safe (e.g. replayable
 	private int dtabCreateCounter = 0;
 	// the sites list
+	
+	private SiteInstance userTools;
 	private List<SiteInstance> sites;
 	private Map<SiteInstance, BornSiteInstance> siteToBornSite = new HashMap<SiteInstance, BornSiteInstance>();
 	//fxdiff BAKS-7 Resume function
@@ -360,6 +363,7 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 		dtabsControllers = new ArrayList<>();
 
 		// -- sites -- by definition the first site is activated at the beginning
+		userTools = new HomeSite(null);
 		sites = baseFullWebappControllerParts.getSiteInstances(ureq, getWindowControl());
 		if (sites != null && sites.size() == 0) {
 			sites = null;
@@ -1057,12 +1061,16 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 	 *      java.lang.String, java.lang.String)
 	 */
 	public void activateStatic(UserRequest ureq, String className, List<ContextEntry> entries) {
-		for (Iterator<SiteInstance> it_sites = sites.iterator(); it_sites.hasNext();) {
-			SiteInstance site = it_sites.next();
-			String cName = site.getClass().getName();
-			if (cName.equals(className)) {
-				activateSite(site, ureq, entries, false);
-				return;
+		if(className != null && className.endsWith("HomeSite")) {
+			activateSite(userTools, ureq, entries, false);
+		} else {
+			for (Iterator<SiteInstance> it_sites = sites.iterator(); it_sites.hasNext();) {
+				SiteInstance site = it_sites.next();
+				String cName = site.getClass().getName();
+				if (cName.equals(className)) {
+					activateSite(site, ureq, entries, false);
+					return;
+				}
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/core/gui/control/navigation/AbstractSiteInstance.java b/src/main/java/org/olat/core/gui/control/navigation/AbstractSiteInstance.java
index 805c7b36c7f..58225588329 100644
--- a/src/main/java/org/olat/core/gui/control/navigation/AbstractSiteInstance.java
+++ b/src/main/java/org/olat/core/gui/control/navigation/AbstractSiteInstance.java
@@ -52,7 +52,7 @@ public abstract class AbstractSiteInstance implements SiteInstance {
 	public final Controller createController(UserRequest ureq, WindowControl wControl) {
 		SiteDefinitions siteDefinitions = CoreSpringFactory.getImpl(SiteDefinitions.class);
 		SiteConfiguration config = siteDefinitions.getConfigurationSite(siteDef);
-		if(StringHelper.containsNonWhitespace(config.getSecurityCallbackBeanId())) {
+		if(config != null && StringHelper.containsNonWhitespace(config.getSecurityCallbackBeanId())) {
 			String secCallbackBeanId = config.getSecurityCallbackBeanId();
 			Object siteSecCallback = CoreSpringFactory.getBean(secCallbackBeanId);
 			if (siteSecCallback instanceof SiteSecurityCallback
diff --git a/src/main/java/org/olat/home/HomeSite.java b/src/main/java/org/olat/home/HomeSite.java
index 51051c96c88..dd1e6fe9600 100644
--- a/src/main/java/org/olat/home/HomeSite.java
+++ b/src/main/java/org/olat/home/HomeSite.java
@@ -50,8 +50,7 @@ public class HomeSite extends AbstractSiteInstance {
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(HomeSite.class, ureq.getIdentity().getKey());
 		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
 		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true);
-		MainLayoutController c = new HomeMainController(ureq, bwControl);
-		return c;
+		return new HomeMainController(ureq, bwControl);
 	}
 
 	/**
-- 
GitLab