From 3a7d5cfe2d768d2d4341329c4adf435ef5e242d8 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Mon, 30 Jul 2012 15:10:05 +0200
Subject: [PATCH] Changed the scope of the most beans from session to view.

---
 .../kieker/webgui/beans/IProjectBean.java     | 54 -------------------
 .../session/CurrentAnalysisEditorBean.java    | 21 ++------
 .../beans/session/CurrentCockpitBean.java     | 21 ++------
 .../session/CurrentCockpitEditorBean.java     | 20 ++-----
 .../beans/session/CurrentControllerBean.java  | 21 ++------
 .../src/main/webapp/AnalysisEditor.xhtml      | 22 +++++---
 Kieker.WebGUI/src/main/webapp/Cockpit.xhtml   | 23 +++++---
 .../src/main/webapp/CockpitEditor.xhtml       | 23 +++++---
 .../src/main/webapp/Controller.xhtml          | 27 +++++++---
 Kieker.WebGUI/src/main/webapp/Login.xhtml     |  2 +-
 .../src/main/webapp/ProjectOverview.xhtml     | 31 +++++++----
 11 files changed, 106 insertions(+), 159 deletions(-)
 delete mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/IProjectBean.java

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/IProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/IProjectBean.java
deleted file mode 100644
index c45c5ff2..00000000
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/IProjectBean.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************
- * Copyright 2012 by
- *  + Christian-Albrechts-University of Kiel
- *    + Department of Computer Science
- *      + Software Engineering Group 
- *  and others.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.webgui.beans;
-
-/**
- * This is the interface for beans which can be used to navigate from one page to another.
- * 
- * @author Nils Christian Ehmke
- * @version 1.0
- */
-public interface IProjectBean {
-
-	/**
-	 * This method should clear the bean.
-	 * 
-	 * @return The next page.
-	 */
-	public String clearProject();
-
-	/**
-	 * This method should deliver the current project name within the bean.
-	 * 
-	 * @return The project name.
-	 */
-	public String getProjectName();
-
-	/**
-	 * This method should set the new project of the bean.
-	 * 
-	 * @param name
-	 *            The new project name.
-	 * @return The next page.
-	 */
-	public String setProject(final String name);
-
-}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentAnalysisEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentAnalysisEditorBean.java
index bd79c6a5..9e2977bc 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentAnalysisEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentAnalysisEditorBean.java
@@ -34,7 +34,7 @@ import java.util.Map;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
+import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
 import kieker.analysis.model.analysisMetaModel.MIAnalysisMetaModelFactory;
@@ -60,7 +60,6 @@ import kieker.common.configuration.Configuration;
 import kieker.common.logging.Log;
 import kieker.common.logging.LogFactory;
 import kieker.monitoring.core.registry.Registry;
-import kieker.webgui.beans.IProjectBean;
 import kieker.webgui.beans.application.ProjectsBean;
 import kieker.webgui.common.ConnectionFilterToFilter;
 import kieker.webgui.common.ConnectionFilterToRepository;
@@ -87,8 +86,8 @@ import org.eclipse.emf.ecore.EObject;
  * @version 1.0
  */
 @ManagedBean
-@SessionScoped
-public final class CurrentAnalysisEditorBean implements IProjectBean {
+@ViewScoped
+public final class CurrentAnalysisEditorBean {
 	/**
 	 * This is the log for errors, exceptions etc.
 	 */
@@ -182,8 +181,7 @@ public final class CurrentAnalysisEditorBean implements IProjectBean {
 	 *            The name of the project.
 	 * @return The name of the page for the project work space, if the project has been accepted, '' if it is null.
 	 */
-	@Override
-	public String setProject(final String newName) {
+	public void setProjectName(final String newName) {
 		synchronized (this) {
 			// Remember the given parameters
 			this.project = ProjectsBean.getInstance().openProject(newName);
@@ -202,15 +200,6 @@ public final class CurrentAnalysisEditorBean implements IProjectBean {
 				// Load the hashmaps to get the plugins and ports
 				this.intializeHashMaps();
 			}
-
-			// Now deliver the correct navigation page
-			final String navigationPage;
-			if (this.project != null) {
-				navigationPage = Global.PAGE_PROJECT_WORK_SPACE;
-			} else {
-				navigationPage = "";
-			}
-			return navigationPage;
 		}
 	}
 
@@ -397,7 +386,6 @@ public final class CurrentAnalysisEditorBean implements IProjectBean {
 	 * 
 	 * @return The project name for this user.
 	 */
-	@Override
 	public String getProjectName() {
 		synchronized (this) {
 			return this.projectName;
@@ -420,7 +408,6 @@ public final class CurrentAnalysisEditorBean implements IProjectBean {
 	 * 
 	 * @return The name of the page of the project overview.
 	 */
-	@Override
 	public String clearProject() {
 		synchronized (this) {
 			this.project = null; // NOPMD
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitBean.java
index 666d6de2..6ca7d965 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitBean.java
@@ -21,7 +21,7 @@
 package kieker.webgui.beans.session;
 
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
+import javax.faces.bean.ViewScoped;
 
 import kieker.analysis.display.AbstractDisplay;
 import kieker.analysis.display.HtmlText;
@@ -29,7 +29,6 @@ import kieker.analysis.display.Image;
 import kieker.analysis.display.PlainText;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.analysis.model.analysisMetaModel.MIView;
-import kieker.webgui.beans.IProjectBean;
 import kieker.webgui.beans.application.ProjectsBean;
 import kieker.webgui.common.ACManager;
 import kieker.webgui.common.Global;
@@ -41,8 +40,8 @@ import kieker.webgui.common.Global;
  * @version 1.0
  */
 @ManagedBean
-@SessionScoped
-public class CurrentCockpitBean implements IProjectBean {
+@ViewScoped
+public class CurrentCockpitBean {
 
 	/**
 	 * This is the name of the stored project. It can be used as an identifier within the FS-Manager
@@ -82,21 +81,11 @@ public class CurrentCockpitBean implements IProjectBean {
 	 *            The name of the project.
 	 * @return The name of the page for the cockpit.
 	 */
-	@Override
-	public String setProject(final String newName) {
+	public void setProjectName(final String newName) {
 		synchronized (this) {
 			// Remember the given parameters
 			this.project = ProjectsBean.getInstance().openProject(newName);
 			this.projectName = newName;
-
-			// Now deliver the correct navigation page
-			final String navigationPage;
-			if (this.project != null) {
-				navigationPage = Global.PAGE_ANALYSIS_COCKPIT;
-			} else {
-				navigationPage = "";
-			}
-			return navigationPage;
 		}
 	}
 
@@ -105,7 +94,6 @@ public class CurrentCockpitBean implements IProjectBean {
 	 * 
 	 * @return The project name for this user.
 	 */
-	@Override
 	public String getProjectName() {
 		synchronized (this) {
 			return this.projectName;
@@ -223,7 +211,6 @@ public class CurrentCockpitBean implements IProjectBean {
 	 * 
 	 * @return The name of the page of the project overview.
 	 */
-	@Override
 	public String clearProject() {
 		synchronized (this) {
 			this.projectName = null; // NOPMD
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitEditorBean.java
index a5c8f53e..376f61e8 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentCockpitEditorBean.java
@@ -29,7 +29,7 @@ import java.util.UUID;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
+import javax.faces.bean.ViewScoped;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
 import javax.faces.context.FacesContext;
@@ -44,7 +44,6 @@ import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
 import kieker.analysis.plugin.AbstractPlugin;
 import kieker.common.logging.Log;
 import kieker.common.logging.LogFactory;
-import kieker.webgui.beans.IProjectBean;
 import kieker.webgui.beans.application.ProjectsBean;
 import kieker.webgui.common.FSManager;
 import kieker.webgui.common.Global;
@@ -60,8 +59,8 @@ import org.primefaces.event.TabChangeEvent;
  * @version 1.0
  */
 @ManagedBean
-@SessionScoped
-public class CurrentCockpitEditorBean implements IProjectBean {
+@ViewScoped
+public class CurrentCockpitEditorBean {
 	/**
 	 * This is the log for errors, exceptions etc.
 	 */
@@ -112,8 +111,7 @@ public class CurrentCockpitEditorBean implements IProjectBean {
 	 *            The name of the project.
 	 * @return The name of the page for the analysis view work space.
 	 */
-	@Override
-	public String setProject(final String newName) {
+	public void setProjectName(final String newName) {
 		synchronized (this) {
 			// Remember the given parameters
 			this.project = ProjectsBean.getInstance().openProject(newName);
@@ -123,14 +121,6 @@ public class CurrentCockpitEditorBean implements IProjectBean {
 				// Remember the current time! This is important for the later comparison of the time stamps.
 				this.resetTimeStamp();
 			}
-			// Now deliver the correct navigation page
-			final String navigationPage;
-			if (this.project != null) {
-				navigationPage = Global.PAGE_ANALYSIS_VIEW_WORK_SPACE;
-			} else {
-				navigationPage = "";
-			}
-			return navigationPage;
 		}
 	}
 
@@ -139,7 +129,6 @@ public class CurrentCockpitEditorBean implements IProjectBean {
 	 * 
 	 * @return The project name for this user.
 	 */
-	@Override
 	public String getProjectName() {
 		synchronized (this) {
 			return this.projectName;
@@ -151,7 +140,6 @@ public class CurrentCockpitEditorBean implements IProjectBean {
 	 * 
 	 * @return The name of the page of the project overview.
 	 */
-	@Override
 	public String clearProject() {
 		synchronized (this) {
 			this.projectName = null; // NOPMD
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentControllerBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentControllerBean.java
index 8fa3f7f8..f0102426 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentControllerBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentControllerBean.java
@@ -25,7 +25,7 @@ import java.io.IOException;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
-import javax.faces.bean.SessionScoped;
+import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
 import kieker.analysis.AnalysisController;
@@ -33,7 +33,6 @@ import kieker.analysis.exception.AnalysisConfigurationException;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.common.logging.Log;
 import kieker.common.logging.LogFactory;
-import kieker.webgui.beans.IProjectBean;
 import kieker.webgui.beans.application.ProjectsBean;
 import kieker.webgui.common.ACManager;
 import kieker.webgui.common.Global;
@@ -49,8 +48,8 @@ import kieker.webgui.common.exception.ProjectStillRunningException;
  * @version 1.0
  */
 @ManagedBean
-@SessionScoped
-public class CurrentControllerBean implements IProjectBean {
+@ViewScoped
+public class CurrentControllerBean {
 	/**
 	 * This is the log for errors, exceptions etc.
 	 */
@@ -78,21 +77,11 @@ public class CurrentControllerBean implements IProjectBean {
 	 *            The name of the project.
 	 * @return The name of the page for the cockpit.
 	 */
-	@Override
-	public String setProject(final String newName) {
+	public void setProjectName(final String newName) {
 		synchronized (this) {
 			// Remember the given parameters
 			this.project = ProjectsBean.getInstance().openProject(newName);
 			this.projectName = newName;
-
-			// Now deliver the correct navigation page
-			final String navigationPage;
-			if (this.project != null) {
-				navigationPage = Global.PAGE_ANALYSIS_CONTROLLER;
-			} else {
-				navigationPage = "";
-			}
-			return navigationPage;
 		}
 	}
 
@@ -112,7 +101,6 @@ public class CurrentControllerBean implements IProjectBean {
 	 * 
 	 * @return The project name for this user.
 	 */
-	@Override
 	public String getProjectName() {
 		synchronized (this) {
 			return this.projectName;
@@ -124,7 +112,6 @@ public class CurrentControllerBean implements IProjectBean {
 	 * 
 	 * @return The name of the page of the project overview.
 	 */
-	@Override
 	public String clearProject() {
 		synchronized (this) {
 			this.projectName = null; // NOPMD
diff --git a/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml b/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
index 4a667acf..dda68a94 100644
--- a/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/AnalysisEditor.xhtml
@@ -7,6 +7,10 @@
       xmlns:p="http://primefaces.org/ui"
       xmlns:c="http://java.sun.com/jsp/jstl/core">
 
+    <f:metadata>
+        <f:viewParam name="projectName" value="#{currentAnalysisEditorBean.projectName}"/>
+    </f:metadata>
+    
     <h:head>
         <title>Kieker.WebGUI</title>
         <link rel="stylesheet" type="text/css" href="../css/Common.css" />
@@ -32,14 +36,20 @@
                         <p:toolbarGroup align="left">
                             <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
                         </p:toolbarGroup>
-                        <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="#{currentAnalysisEditorBean.clearProject()}" />
+                       <p:toolbarGroup align="right">
+                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" disabled="true"  ajax="false"/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" ajax="false" action="#{forwardBean.forward(currentAnalysisEditorBean, currentControllerBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" disabled="true"/>
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml">
+                                <f:param name="projectName" value="#{currentAnalysisEditorBean.projectName}" />
+                            </p:button>
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" ajax="false" action="#{forwardBean.forward(currentAnalysisEditorBean, currentCockpitEditorBean)}" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" ajax="false" action="#{forwardBean.forward(currentAnalysisEditorBean, currentCockpitBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" outcome="CockpitEditor.xhtml">
+                                <f:param name="projectName" value="#{currentAnalysisEditorBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none" outcome="Cockpit.xhtml">
+                                <f:param name="projectName" value="#{currentAnalysisEditorBean.projectName}" />
+                            </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
 
diff --git a/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml b/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
index 5c6e0cf4..81fc009f 100644
--- a/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Cockpit.xhtml
@@ -7,6 +7,10 @@
       xmlns:p="http://primefaces.org/ui"
       xmlns:c="http://java.sun.com/jsp/jstl/core">
 
+     <f:metadata>
+         <f:viewParam name="projectName" value="#{currentCockpitBean.projectName}"/>
+    </f:metadata>
+    
     <h:head>
         <title>Kieker.WebGUI</title>
         <link rel="stylesheet" type="text/css" href="../css/Common.css" />
@@ -22,16 +26,23 @@
                 <h:form>
                     <p:toolbar>
                         <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
+                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentCockpitBean.projectName, 30)}"/>
                         </p:toolbarGroup>
                         <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="#{currentCockpitBean.clearProject()}" />
+                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none"  ajax="false" action="#{forwardBean.forward(currentCockpitBean,currentAnalysisEditorBean)}"/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" ajax="false"   action="#{forwardBean.forward(currentCockpitBean,currentControllerBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
+                            </p:button>
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" ajax="false" action="#{forwardBean.forward(currentCockpitBean,currentCockpitEditorBean)}" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" ajax="false"  disabled="true" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" outcome="CockpitEditor.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none"  disabled="true">
+                            </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
                     <p:menubar>
diff --git a/Kieker.WebGUI/src/main/webapp/CockpitEditor.xhtml b/Kieker.WebGUI/src/main/webapp/CockpitEditor.xhtml
index 95bbb331..0bc9097a 100644
--- a/Kieker.WebGUI/src/main/webapp/CockpitEditor.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/CockpitEditor.xhtml
@@ -7,6 +7,10 @@
       xmlns:p="http://primefaces.org/ui"
       xmlns:c="http://java.sun.com/jsp/jstl/core">
 
+     <f:metadata>
+         <f:viewParam name="projectName" value="#{currentCockpitEditorBean.projectName}"/>
+    </f:metadata>
+    
     <h:head>
         <title>Kieker.WebGUI</title>
         <link rel="stylesheet" type="text/css" href="../css/Common.css" />
@@ -20,16 +24,23 @@
                 <h:form>
                     <p:toolbar>
                         <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
+                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentCockpitEditorBean.projectName, 30)}"/>
                         </p:toolbarGroup>
                         <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="#{currentCockpitEditorBean.clearProject()}" />
+                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none"  ajax="false" action="#{forwardBean.forward(currentCockpitEditorBean, currentAnalysisEditorBean)}"/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" ajax="false" action="#{forwardBean.forward(currentCockpitEditorBean, currentControllerBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitEditorBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitEditorBean.projectName}" />
+                            </p:button>
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" ajax="false" disabled="true" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" ajax="false" action="#{forwardBean.forward(currentCockpitEditorBean, currentCockpitBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" disabled="true">
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none" outcome="Cockpit.xhtml">
+                                <f:param name="projectName" value="#{currentCockpitEditorBean.projectName}" />
+                            </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
                     <p:menubar>
diff --git a/Kieker.WebGUI/src/main/webapp/Controller.xhtml b/Kieker.WebGUI/src/main/webapp/Controller.xhtml
index 02631cda..c77e44f2 100644
--- a/Kieker.WebGUI/src/main/webapp/Controller.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Controller.xhtml
@@ -7,6 +7,10 @@
       xmlns:p="http://primefaces.org/ui"
       xmlns:c="http://java.sun.com/jsp/jstl/core">
 
+     <f:metadata>
+         <f:viewParam name="projectName" value="#{currentControllerBean.projectName}"/>
+    </f:metadata>
+    
     <h:head>
         <title>Kieker.WebGUI</title>
         <link rel="stylesheet" type="text/css" href="../css/Common.css" />
@@ -22,16 +26,23 @@
                 <h:form>
                     <p:toolbar>
                         <p:toolbarGroup align="left">
-                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentAnalysisEditorBean.projectName, 30)}"/>
+                            <h:outputText styleClass="kieker-title" value="Kieker &raquo; #{stringBean.shortenLongName(currentControllerBean.projectName, 30)}"/>
                         </p:toolbarGroup>
-                        <p:toolbarGroup align="right">
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="#{currentControllerBean.clearProject()}"/>
+                     <p:toolbarGroup align="right">
+                            <p:commandButton styleClass="perspective-button" icon="ui-icon-home" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none"  ajax="false" action="#{forwardBean.forward(currentControllerBean, currentAnalysisEditorBean)}"/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" ajax="false" disabled="true" />
-                            <p:separator/> 
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" ajax="false" action="#{forwardBean.forward(currentControllerBean, currentCockpitEditorBean)}" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" ajax="false" action="#{forwardBean.forward(currentControllerBean, currentCockpitBean)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml">
+                                <f:param name="projectName" value="#{currentControllerBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" disabled="true">
+                            </p:button>
+                            <p:separator/>
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" outcome="CockpitEditor.xhtml">
+                                <f:param name="projectName" value="#{currentControllerBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none" outcome="Cockpit.xhtml">
+                                <f:param name="projectName" value="#{currentControllerBean.projectName}" />
+                            </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
 
diff --git a/Kieker.WebGUI/src/main/webapp/Login.xhtml b/Kieker.WebGUI/src/main/webapp/Login.xhtml
index 6f25fe57..3b6386ce 100644
--- a/Kieker.WebGUI/src/main/webapp/Login.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/Login.xhtml
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:p="http://primefaces.org/ui">
-
+    
     <h:head>
         <title>Kieker.WebGUI</title>
         <link rel="stylesheet" type="text/css" href="../css/Common.css" />
diff --git a/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml b/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
index dbd05ea6..f2b13ec5 100644
--- a/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/ProjectOverview.xhtml
@@ -3,7 +3,8 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:p="http://primefaces.org/ui">
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:f="http://java.sun.com/jsf/core">
 
     <h:head>
         <title>Kieker.WebGUI</title>
@@ -14,7 +15,7 @@
     <h:body>
         <p:layout fullPage="true">            
             <p:layoutUnit position="north">
-                <h:form>
+                <h:form id="menuForm">
                     <p:toolbar>
                         <p:toolbarGroup align="left">
                             <h:outputText styleClass="kieker-title" value="Kieker"/>
@@ -22,11 +23,19 @@
                         <p:toolbarGroup align="right">
                             <p:commandButton styleClass="perspective-button" icon="ui-icon-home" disabled="true" action="ProjectOverview.xhtml" />
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" ajax="false" action="#{currentAnalysisEditorBean.setProject(currentProjectOverviewBean.projectName)}" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" ajax="false" action="#{currentControllerBean.setProject(currentProjectOverviewBean.projectName)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Analysis Editor" style="white-space: none" outcome="AnalysisEditor.xhtml">
+                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-circle-triangle-e" value="Analysis" style="white-space: none" outcome="Controller.xhtml">
+                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" />
+                            </p:button>
                             <p:separator/>
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" ajax="false" action="#{currentCockpitEditorBean.setProject(currentProjectOverviewBean.projectName)}" />
-                            <p:commandButton styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" ajax="false" action="#{currentCockpitBean.setProject(currentProjectOverviewBean.projectName)}" />
+                            <p:button styleClass="perspective-button" icon="ui-icon-wrench" value="Cockpit Editor" style="white-space: none" outcome="CockpitEditor.xhtml">
+                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" />
+                            </p:button>
+                            <p:button styleClass="perspective-button" icon="ui-icon-image" value="Cockpit" style="white-space: none" outcome="Cockpit.xhtml">
+                                <f:param name="projectName" value="#{currentProjectOverviewBean.projectName}" />
+                            </p:button>
                         </p:toolbarGroup>
                     </p:toolbar>
 
@@ -56,18 +65,18 @@
                 <h:form id="projectsListForm"> 
                     <p:dataTable rows="15" paginator="true" paginatorPosition="both" var="project" rowsPerPageTemplate="5,10,15,25,50" value="#{currentProjectOverviewBean.projects}" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" selection="#{currentProjectOverviewBean.projectName}" rowKey="#{project}" selectionMode="single">  
                         <!-- Makes sure that rows are selected instantaneously. -->
-                        <p:ajax event="rowSelect" listener="#{currentProjectOverviewBean.onRowSelect}" />
+                        <p:ajax event="rowSelect" listener="#{currentProjectOverviewBean.onRowSelect}" update=":menuForm" />
 
                         <p:column headerText="Project Name" id="modelHeader" sortBy="#{project}">  
                             <p:commandLink id="dynaButton" value="#{project}"/>
 
                             <p:menu overlay="true" trigger="dynaButton" my="left top" at="left bottom" style="width:210px">  
-                                <p:menuitem icon="ui-icon-wrench" id="openButton" value="  Analysis Editor" styleClass="element-with-whitespace" ajax="false" action="#{currentAnalysisEditorBean.setProject(project)}"/>
-                                <p:menuitem icon="ui-icon-circle-triangle-e" id="controlAnalysis"  styleClass="element-with-whitespace" value="  Analysis" ajax="false" action="#{currentControllerBean.setProject(project)}" />
+                                <p:menuitem icon="ui-icon-wrench" id="openButton" value="  Analysis Editor" styleClass="element-with-whitespace" ajax="false" url="analysisEditor?projectName=#{project}"/>
+                                <p:menuitem icon="ui-icon-circle-triangle-e" id="controlAnalysis"  styleClass="element-with-whitespace" value="  Analysis" ajax="false" url="controller?projectName=#{project}" />
                                 <p:separator/>
 
-                                <p:menuitem icon="ui-icon-wrench" id="editAnalysisViews"  styleClass="element-with-whitespace" value="  Cockpit Editor" ajax="false" action="#{currentCockpitEditorBean.setProject(project)}" />
-                                <p:menuitem icon="ui-icon-image" id="showAnalysis"  styleClass="element-with-whitespace" value="  Cockpit" ajax="false" action="#{currentCockpitBean.setProject(project)}" />
+                                <p:menuitem icon="ui-icon-wrench" id="editAnalysisViews"  styleClass="element-with-whitespace" value="  Cockpit Editor" ajax="false" url="cockpitEditor?projectName=#{project}" />
+                                <p:menuitem icon="ui-icon-image" id="showAnalysis"  styleClass="element-with-whitespace" value="  Cockpit" ajax="false" url="cockpit?projectName=#{project}" />
                                 <p:separator/>
                                 <p:menuitem id="copyButton" icon="ui-icon-copy"  styleClass="element-with-whitespace" value="  Copy Project" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()"/>
                                 <p:menuitem id="renameButton" icon="ui-icon-pencil"  styleClass="element-with-whitespace" value="  Rename Project"  action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()" disabled="true"/>
-- 
GitLab