From 75e6c3b097b35433596a338af176ae0e41271921 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 8 Jan 2015 22:17:22 +0100
Subject: [PATCH] OO-1378: implement a hook to init the tools automatically
 after pushing the controller to the stack

---
 .../components/stack/TooledController.java    | 34 +++++++++++++++++++
 .../components/stack/TooledStackedPanel.java  |  3 ++
 .../title/TitledWrapperController.java        | 12 ++++++-
 .../StatisticCourseNodesController.java       | 10 +++++-
 .../QTI12AssessmentStatisticsController.java  | 10 +++++-
 5 files changed, 66 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/org/olat/core/gui/components/stack/TooledController.java

diff --git a/src/main/java/org/olat/core/gui/components/stack/TooledController.java b/src/main/java/org/olat/core/gui/components/stack/TooledController.java
new file mode 100644
index 00000000000..22156947a6e
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/components/stack/TooledController.java
@@ -0,0 +1,34 @@
+/**
+ * <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.core.gui.components.stack;
+
+/**
+ * 
+ * Init the tools after push
+ * 
+ * Initial date: 08.01.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public interface TooledController {
+	
+	public void initTools();
+
+}
diff --git a/src/main/java/org/olat/core/gui/components/stack/TooledStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/TooledStackedPanel.java
index 1d6b3c96240..4e272dec6e0 100644
--- a/src/main/java/org/olat/core/gui/components/stack/TooledStackedPanel.java
+++ b/src/main/java/org/olat/core/gui/components/stack/TooledStackedPanel.java
@@ -148,6 +148,9 @@ public class TooledStackedPanel extends BreadcrumbedStackedPanel implements Stac
 		TooledBreadCrumb currentCrumb = getCurrentCrumb();
 		if(currentCrumb == null || currentCrumb.getController() != controller) {
 			super.pushController(displayName, controller);
+			if(controller instanceof TooledController) {
+				((TooledController)controller).initTools();
+			}
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java
index ffe154026f0..67fae5d457c 100644
--- a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java
@@ -30,6 +30,7 @@ import java.util.List;
 
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.stack.TooledController;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.ConfigurationChangedListener;
 import org.olat.core.gui.control.Controller;
@@ -54,7 +55,8 @@ import org.olat.core.util.StringHelper;
  * Initial Date:  21.06.2007 <br>
  * @author Lavinia Dumitrescu, Florian Gnägi
  */
-public class TitledWrapperController extends BasicController implements CloneableController, Activateable2, ConfigurationChangedListener {
+public class TitledWrapperController extends BasicController
+	implements CloneableController, Activateable2, TooledController, ConfigurationChangedListener {
 	
 	private static final String COMPONENT_NAME = "child";
 	//Velocity variable
@@ -144,6 +146,7 @@ public class TitledWrapperController extends BasicController implements Cloneabl
 		}
 	}
 
+	@Override
 	protected void doDispose() {		
 		if (descriptionController != null) {
 			descriptionController.dispose();
@@ -154,6 +157,13 @@ public class TitledWrapperController extends BasicController implements Cloneabl
 		contentController = null;
 	}
 	
+	@Override
+	public void initTools() {
+		if(contentController instanceof TooledController) {
+			((TooledController)contentController).initTools();
+		}
+	}
+
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
 		if(contentController instanceof Activateable2) {
diff --git a/src/main/java/org/olat/course/statistic/StatisticCourseNodesController.java b/src/main/java/org/olat/course/statistic/StatisticCourseNodesController.java
index 1e98b578b02..3fa85d242bc 100644
--- a/src/main/java/org/olat/course/statistic/StatisticCourseNodesController.java
+++ b/src/main/java/org/olat/course/statistic/StatisticCourseNodesController.java
@@ -27,6 +27,7 @@ import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.panel.Panel;
+import org.olat.core.gui.components.stack.TooledController;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
 import org.olat.core.gui.components.tree.GenericTreeModel;
 import org.olat.core.gui.components.tree.GenericTreeNode;
@@ -57,7 +58,7 @@ import org.olat.ims.qti.statistics.QTIType;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class StatisticCourseNodesController extends BasicController implements Activateable2 {
+public class StatisticCourseNodesController extends BasicController implements Activateable2, TooledController {
 	private final MenuTree courseTree;
 	private final TooledStackedPanel stackPanel;
 	private final LayoutMain3ColsController layoutCtr;
@@ -101,6 +102,13 @@ public class StatisticCourseNodesController extends BasicController implements A
 		}
 	}
 	
+	@Override
+	public void initTools() {
+		if(currentCtrl instanceof TooledController) {
+			((TooledController)currentCtrl).initTools();
+		}
+	}
+	
 	private TreeModel buildTreeModel(final UserRequest ureq, final UserCourseEnvironment userCourseEnv) {
 		final GenericTreeModel gtm = new GenericTreeModel();
 		final GenericTreeNode rootTreeNode = new GenericTreeNode();
diff --git a/src/main/java/org/olat/ims/qti/statistics/ui/QTI12AssessmentStatisticsController.java b/src/main/java/org/olat/ims/qti/statistics/ui/QTI12AssessmentStatisticsController.java
index 196931fe6c1..3363bfac410 100644
--- a/src/main/java/org/olat/ims/qti/statistics/ui/QTI12AssessmentStatisticsController.java
+++ b/src/main/java/org/olat/ims/qti/statistics/ui/QTI12AssessmentStatisticsController.java
@@ -37,6 +37,7 @@ import org.olat.core.gui.components.chart.StatisticsComponent;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.link.LinkPopupSettings;
+import org.olat.core.gui.components.stack.TooledController;
 import org.olat.core.gui.components.stack.TooledStackedPanel;
 import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
 import org.olat.core.gui.components.velocity.VelocityContainer;
@@ -66,7 +67,7 @@ import org.olat.repository.RepositoryManager;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class QTI12AssessmentStatisticsController extends BasicController {
+public class QTI12AssessmentStatisticsController extends BasicController implements TooledController {
 
 	private final QTIType type;
 	private final Float maxScore;
@@ -160,6 +161,13 @@ public class QTI12AssessmentStatisticsController extends BasicController {
 			stackPanel.removeTool(printLink);
 		}
 	}
+	
+	public void initTools() {
+		if(stackPanel != null) {
+			stackPanel.addTool(printLink, Align.right);
+			stackPanel.addTool(downloadRawLink, Align.right);
+		}
+	}
 
 	private Float getCutValueSetting(QTICourseNode testNode) {
 		Float cutValueSetting;
-- 
GitLab