From 48b30c5c5820c8fe5d7547b7c60a6b41e1d873c3 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Fri, 7 Jun 2013 15:22:39 +0200
Subject: [PATCH] Started with refactoring of the pages

---
 .../bin/data/Advanced Example/meta.dat        |   5 --
 .../Bookstore-Example/Bookstore-Example.kax   |   6 --
 .../bin/data/Bookstore-Example/meta.dat       |   4 +-
 .../CPU-and-Memory-Example.kax                |  14 +++-
 .../bin/data/CPU-and-Memory-Example/meta.dat  |   6 +-
 .../Timer-Counter-Example.kax                 |   3 -
 .../bin/data/Timer-Counter-Example/meta.dat   |   6 +-
 .../Trace-Reconstruction-Example.kax}         |   0
 .../Trace-Reconstruction-Example/meta.dat     |   5 ++
 ...kieker-20100830-082225582-UTC-Thread-2.dat |   0
 .../testdata/kieker.map                       |   0
 .../kieker/webgui/common/ClassContainer.java  |   7 ++
 .../kieker/webgui/domain/DisplayType.java     |   5 +-
 .../webgui/service/impl/utility/Analysis.java |   5 ++
 .../web/beans/view/CurrentCockpitBean.java    |  79 +++++++++++++++++-
 .../web/beans/view/CurrentControllerBean.java |  10 +++
 .../lang/CockpitEditorPage_de.properties      |   5 +-
 .../lang/CockpitEditorPage_en.properties      |   5 +-
 .../resources/lang/CockpitPage_de.properties  |   3 -
 .../resources/lang/CockpitPage_en.properties  |   5 +-
 .../main/resources/lang/Common_de.properties  |   1 +
 .../main/resources/lang/Common_en.properties  |   1 +
 .../resources/lang/LoginPage_de.properties    |  13 ++-
 .../resources/lang/LoginPage_en.properties    |  14 ++--
 .../lang/ProjectOverviewPage_de.properties    |  22 +++--
 .../lang/ProjectOverviewPage_en.properties    |  22 +++--
 Kieker.WebGUI/src/main/webapp/LoginPage.xhtml |  36 +++++---
 .../main/webapp/css/AnalysisEditorPage.css    |  14 ++++
 Kieker.WebGUI/src/main/webapp/css/Common.css  |   5 +-
 Kieker.WebGUI/src/main/webapp/css/Icons.css   |  43 +++++-----
 .../src/main/webapp/css/LoginPage.css         |  20 ++---
 .../main/webapp/css/ProjectOverviewPage.css   |  59 ++++++++++++-
 .../dialogs/ProjectOverviewPageDialogs.xhtml  |  37 ++++----
 .../src/main/webapp/img/icons/CopyProject.png | Bin 0 -> 494 bytes
 .../main/webapp/img/icons/DeleteProject.png   | Bin 0 -> 694 bytes
 .../main/webapp/img/icons/ImportProject.png   | Bin 759 -> 1953 bytes
 .../webapp/img/icons/ImportProjectSmall.png   | Bin 0 -> 720 bytes
 .../main/webapp/img/icons/ManageLibraries.png | Bin 914 -> 2551 bytes
 .../webapp/img/icons/ManageLibrariesSmall.png | Bin 0 -> 914 bytes
 .../src/main/webapp/img/icons/NewProject.png  | Bin 471 -> 898 bytes
 .../main/webapp/img/icons/NewProjectSmall.png | Bin 0 -> 471 bytes
 .../src/main/webapp/img/icons/Reload.png      | Bin 792 -> 2018 bytes
 .../src/main/webapp/img/icons/ReloadSmall.png | Bin 0 -> 792 bytes
 .../main/webapp/img/icons/RenameProject.png   | Bin 0 -> 667 bytes
 .../src/main/webapp/img/icons/Save.png        | Bin 623 -> 1445 bytes
 .../src/main/webapp/img/icons/SaveAs.png      | Bin 623 -> 1445 bytes
 .../src/main/webapp/img/icons/SaveAsSmall.png | Bin 0 -> 623 bytes
 .../src/main/webapp/img/icons/SaveSmall.png   | Bin 0 -> 623 bytes
 .../webapp/pages/AnalysisEditorPage.xhtml     |  16 +++-
 .../main/webapp/pages/CockpitEditorPage.xhtml |   9 --
 .../src/main/webapp/pages/CockpitPage.xhtml   |  12 +--
 .../main/webapp/pages/ControllerPage.xhtml    |   3 +
 .../webapp/pages/ProjectOverviewPage.xhtml    |  35 ++++++--
 53 files changed, 363 insertions(+), 172 deletions(-)
 delete mode 100644 Kieker.WebGUI/bin/data/Advanced Example/meta.dat
 rename Kieker.WebGUI/bin/data/{Advanced Example/Advanced Example.kax => Trace-Reconstruction-Example/Trace-Reconstruction-Example.kax} (100%)
 create mode 100644 Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/meta.dat
 rename Kieker.WebGUI/bin/data/{Advanced Example => Trace-Reconstruction-Example}/testdata/kieker-20100830-082225582-UTC-Thread-2.dat (100%)
 rename Kieker.WebGUI/bin/data/{Advanced Example => Trace-Reconstruction-Example}/testdata/kieker.map (100%)
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/CopyProject.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/DeleteProject.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ImportProjectSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ManageLibrariesSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/NewProjectSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/ReloadSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/RenameProject.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SaveAsSmall.png
 create mode 100644 Kieker.WebGUI/src/main/webapp/img/icons/SaveSmall.png

diff --git a/Kieker.WebGUI/bin/data/Advanced Example/meta.dat b/Kieker.WebGUI/bin/data/Advanced Example/meta.dat
deleted file mode 100644
index f46da07d..00000000
--- a/Kieker.WebGUI/bin/data/Advanced Example/meta.dat	
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-#Sun May 19 16:38:30 CEST 2013
-owner=admin
-last\ user=admin
-analysis\ layout=id0 -593 -253 348 72;id1 -611 -32 312 72;id2 -243 -32 336 72;id3 133 -38 288 132;id4 479 -26 276 108;id5 1187 -41 468 96;id6 2055 -23 816 144;id7 1119 213 876 84;id8 2033 365 804 84;id9 2051 201 840 144;id10 2817 44 564 72;id11 2919 -71 360 72;id12 3349 -50 372 72;\#id2.2 id3.6 -43.5 -20 -43.5 10;id2.2 id3.5 -43.5 -20 -43.5 -14;id4.12 id5.14 648.5 -26 648.5 -29;id4.12 id7.20 648.5 -26 648.5 225;id5.0 id12.R 1588.5 -47 1588.5 -177 3130.5 -177 3130.5 -38;id6.1 id12.R 2502.5 -53 2502.5 -38;id6.17 id10.29 2502.5 -17 2502.5 56;id7.21 id8.23 1598.5 213 1598.5 365;id7.22 id8.24 1588.5 237 1588.5 389;id9.2 id12.R 3130.5 171 3130.5 -38;id9.27 id10.29 2502.5 231 2502.5 56;id10.3 id12.R 3130.5 56 3130.5 -38;id11.4 id12.R 3130.5 -59 3130.5 -38;
diff --git a/Kieker.WebGUI/bin/data/Bookstore-Example/Bookstore-Example.kax b/Kieker.WebGUI/bin/data/Bookstore-Example/Bookstore-Example.kax
index cd65e801..a4892db1 100644
--- a/Kieker.WebGUI/bin/data/Bookstore-Example/Bookstore-Example.kax
+++ b/Kieker.WebGUI/bin/data/Bookstore-Example/Bookstore-Example.kax
@@ -48,12 +48,6 @@
   </plugins>
   <dependencies filePath="BookstoreApplication.jar"/>
   <dependencies filePath="commons-cli-1.2.jar"/>
-  <views name="Counter View" description="Shows the available counters">
-    <displayConnectors name="Invalid Counter" display="//@plugins.3/@displays.2"/>
-    <displayConnectors name="Valid Counter" display="//@plugins.4/@displays.2"/>
-    <displayConnectors name="Global Counter" display="//@plugins.5/@displays.2"/>
-    <displayConnectors name="Global Counter (Meter Gauge)" display="//@plugins.5/@displays.3"/>
-  </views>
   <properties name="recordsTimeUnit" value="NANOSECONDS"/>
   <properties name="projectName" value="AnalysisProject"/>
 </Project>
diff --git a/Kieker.WebGUI/bin/data/Bookstore-Example/meta.dat b/Kieker.WebGUI/bin/data/Bookstore-Example/meta.dat
index 684ae968..30e4b3f5 100644
--- a/Kieker.WebGUI/bin/data/Bookstore-Example/meta.dat
+++ b/Kieker.WebGUI/bin/data/Bookstore-Example/meta.dat
@@ -1,6 +1,6 @@
 #
-#Tue Jun 04 10:45:34 CEST 2013
+#Thu Jun 06 21:28:46 CEST 2013
 owner=admin
-cockpit\ layout=0 0 0 1 1 0 1 1 
 last\ user=user
+cockpit\ layout=
 analysis\ layout=id0 -593 -253 348 72;id1 -671 -51 192 72;id2 -55 -63 336 84;id3 655 35 276 72;id4 315 47 276 84;id5 315 -93 252 84;id6 -399 -51 264 84;id7 643 -97 252 72;\#id2.2 id5.8 144.5 -63 144.5 -81;id2.3 id4.5 144.5 -39 144.5 59;id5.9 id7.14 484.5 -93 484.5 -85;
diff --git a/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/CPU-and-Memory-Example.kax b/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/CPU-and-Memory-Example.kax
index 298e2d4f..fba9424a 100644
--- a/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/CPU-and-Memory-Example.kax
+++ b/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/CPU-and-Memory-Example.kax
@@ -10,12 +10,22 @@
   <plugins xsi:type="Reader" name="FSReader" classname="kieker.analysis.plugin.reader.filesystem.FSReader">
     <properties name="inputDirs" value="data/CPU-and-Memory-Example/testdata"/>
     <properties name="ignoreUnknownRecordTypes" value="false"/>
-    <outputPorts name="monitoringRecords" subscribers="//@plugins.0/@inputPorts.0"/>
+    <outputPorts name="monitoringRecords" subscribers="//@plugins.2/@inputPorts.0"/>
   </plugins>
-  <views name="View" description="No description available.">
+  <plugins xsi:type="Filter" name="RealtimeRecordDelayFilter" classname="kieker.analysis.plugin.filter.forward.RealtimeRecordDelayFilter">
+    <properties name="numWorkers" value="1"/>
+    <properties name="additionalShutdownDelaySeconds" value="5"/>
+    <properties name="warnOnNegativeSchedTimeSeconds" value="2"/>
+    <properties name="timerPrecision" value="MILLISECONDS"/>
+    <outputPorts name="outputRecords" subscribers="//@plugins.0/@inputPorts.0"/>
+    <inputPorts name="inputRecords"/>
+  </plugins>
+  <views name="CPU View" description="No description available.">
     <displayConnectors name="XYPlot CPU utilization Display" display="//@plugins.0/@displays.0"/>
     <displayConnectors name="Meter Gauge CPU total utilization Display" display="//@plugins.0/@displays.1"/>
   </views>
+  <views name="Memory View" description="No description available.">
+  </views>
   <properties name="recordsTimeUnit" value="NANOSECONDS"/>
   <properties name="projectName" value="AnalysisProject"/>
 </Project>
diff --git a/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/meta.dat b/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/meta.dat
index 68896c1d..366b9e18 100644
--- a/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/meta.dat
+++ b/Kieker.WebGUI/bin/data/CPU-and-Memory-Example/meta.dat
@@ -1,6 +1,6 @@
 #
-#Thu Jun 06 09:16:16 CEST 2013
+#Thu Jun 06 12:48:33 CEST 2013
 owner=admin
+last\ user=user
 cockpit\ layout=0 0 1 0 0 1 
-last\ user=admin
-analysis\ layout=id0 -1418 -586 336 72;id1 -1140 -428 420 72;id2 -1490 -428 192 72;\#;
+analysis\ layout=id0 -495 -241 336 72;id1 223 -83 420 72;id2 -567 -83 192 72;id3 -229 -83 396 72;\#;
diff --git a/Kieker.WebGUI/bin/data/Timer-Counter-Example/Timer-Counter-Example.kax b/Kieker.WebGUI/bin/data/Timer-Counter-Example/Timer-Counter-Example.kax
index ac222a44..15e805d1 100644
--- a/Kieker.WebGUI/bin/data/Timer-Counter-Example/Timer-Counter-Example.kax
+++ b/Kieker.WebGUI/bin/data/Timer-Counter-Example/Timer-Counter-Example.kax
@@ -47,9 +47,6 @@
     <displayConnectors name="Timestamp Records (Meter Gauge)" display="//@plugins.3/@displays.3"/>
     <displayConnectors name="Timestamps (Meter Gauge)" display="//@plugins.4/@displays.3"/>
   </views>
-  <views name="Only Records View" description="No description available.">
-    <displayConnectors name="Timestamp Records" display="//@plugins.3/@displays.1"/>
-  </views>
   <properties name="recordsTimeUnit" value="NANOSECONDS"/>
   <properties name="projectName" value="AnalysisProject"/>
 </Project>
diff --git a/Kieker.WebGUI/bin/data/Timer-Counter-Example/meta.dat b/Kieker.WebGUI/bin/data/Timer-Counter-Example/meta.dat
index 8fbfbb64..3b4da792 100644
--- a/Kieker.WebGUI/bin/data/Timer-Counter-Example/meta.dat
+++ b/Kieker.WebGUI/bin/data/Timer-Counter-Example/meta.dat
@@ -1,6 +1,6 @@
 #
-#Sun Jun 02 11:24:25 CEST 2013
+#Thu Jun 06 21:29:55 CEST 2013
 owner=admin
-last\ user=admin
-cockpit\ layout=0 0 0 1 0 2 1 0 1 1 1 2 0 3 1 3 0 0 
+cockpit\ layout=0 0 0 1 0 2 1 0 1 1 1 2 0 3 1 3 
+last\ user=user
 analysis\ layout=id0 -2221 -900 336 72;id1 -2281 -618 216 84;id2 -1547 -748 204 72;id3 -1547 -618 204 72;id4 -1911 -606 396 84;id5 -1911 -740 312 84;\#id1.0 id5.9 -2142.5 -619.5 -2142.5 -729.5;id5.10 id2.2 -1682.5 -741.5 -1682.5 -737.5;
diff --git a/Kieker.WebGUI/bin/data/Advanced Example/Advanced Example.kax b/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/Trace-Reconstruction-Example.kax
similarity index 100%
rename from Kieker.WebGUI/bin/data/Advanced Example/Advanced Example.kax
rename to Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/Trace-Reconstruction-Example.kax
diff --git a/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/meta.dat b/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/meta.dat
new file mode 100644
index 00000000..a4c86b3b
--- /dev/null
+++ b/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/meta.dat
@@ -0,0 +1,5 @@
+#
+#Thu Jun 06 21:28:29 CEST 2013
+owner=admin
+last\ user=user
+analysis\ layout=id0 -495 -241 336 72;id1 -507 -20 312 72;id2 -139 -20 336 72;id3 237 -26 288 132;id4 583 -14 276 108;id5 1291 -29 468 96;id6 2159 -11 816 144;id7 1223 225 876 84;id8 2137 377 804 84;id9 2155 213 840 144;id10 2921 56 564 72;id11 3023 -59 360 72;id12 3453 -38 372 72;\#id2.2 id3.6 60.5 -8.5 60.5 21.5;id2.2 id3.5 60.5 -8.5 60.5 -2.5;id4.12 id5.15 752.5 -14.5 752.5 -17.5;id4.12 id7.22 752.5 -14.5 752.5 236.5;id5.14 id12.R 1692.5 -35.5 1692.5 -165.5 3234.5 -165.5 3234.5 -26.5;id6.17 id12.R 2606.5 -41.5 2606.5 -26.5;id6.19 id10.33 2606.5 -5.5 2606.5 67.5;id7.23 id8.25 1702.5 224.5 1702.5 376.5;id7.24 id8.26 1692.5 248.5 1692.5 400.5;id9.27 id12.R 3234.5 182.5 3234.5 -26.5;id9.30 id10.33 2606.5 242.5 2606.5 67.5;id10.32 id12.R 3234.5 67.5 3234.5 -26.5;id11.34 id12.R 3234.5 -47.5 3234.5 -26.5;
diff --git a/Kieker.WebGUI/bin/data/Advanced Example/testdata/kieker-20100830-082225582-UTC-Thread-2.dat b/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/testdata/kieker-20100830-082225582-UTC-Thread-2.dat
similarity index 100%
rename from Kieker.WebGUI/bin/data/Advanced Example/testdata/kieker-20100830-082225582-UTC-Thread-2.dat
rename to Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/testdata/kieker-20100830-082225582-UTC-Thread-2.dat
diff --git a/Kieker.WebGUI/bin/data/Advanced Example/testdata/kieker.map b/Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/testdata/kieker.map
similarity index 100%
rename from Kieker.WebGUI/bin/data/Advanced Example/testdata/kieker.map
rename to Kieker.WebGUI/bin/data/Trace-Reconstruction-Example/testdata/kieker.map
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/ClassContainer.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/ClassContainer.java
index fecc5c8d..b8215482 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/ClassContainer.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/ClassContainer.java
@@ -24,6 +24,7 @@ import kieker.analysis.display.HtmlText;
 import kieker.analysis.display.Image;
 import kieker.analysis.display.MeterGauge;
 import kieker.analysis.display.PlainText;
+import kieker.analysis.display.TagCloud;
 import kieker.analysis.display.XYPlot;
 import kieker.analysis.display.annotation.Display;
 import kieker.analysis.plugin.AbstractPlugin;
@@ -66,6 +67,7 @@ public class ClassContainer {
 	private Class<?> htmlTextClass;
 	private Class<?> xyPlotClass;
 	private Class<?> meterGaugeClass;
+	private Class<?> tagCloudClass;
 
 	private Class<? extends Annotation> pluginAnnotationClass;
 	private Class<? extends Annotation> repositoryAnnotationClass;
@@ -101,6 +103,7 @@ public class ClassContainer {
 			this.imageClass = classLoader.loadClass(Image.class.getName());
 			this.xyPlotClass = classLoader.loadClass(XYPlot.class.getName());
 			this.meterGaugeClass = classLoader.loadClass(MeterGauge.class.getName());
+			this.tagCloudClass = classLoader.loadClass(TagCloud.class.getName());
 
 			// Now we load the more specific annotation classes
 			this.pluginAnnotationClass = (Class<? extends Annotation>) classLoader.loadClass(Plugin.class.getName());
@@ -197,4 +200,8 @@ public class ClassContainer {
 		return this.meterGaugeClass;
 	}
 
+	public Class<?> getTagCloudClass() {
+		return this.tagCloudClass;
+	}
+
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/domain/DisplayType.java b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/DisplayType.java
index d9f48669..a3fd472e 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/domain/DisplayType.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/domain/DisplayType.java
@@ -32,6 +32,7 @@ public enum DisplayType {
 	/** Represents the image display type. */
 	IMAGE,
 	/** Represents the meter gauge display type. */
-	METER_GAUGE
-
+	METER_GAUGE,
+	/** Represents the tag cloud display type. */
+	TAG_CLOUD
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/utility/Analysis.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/utility/Analysis.java
index 1707f71c..66c411ec 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/utility/Analysis.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/utility/Analysis.java
@@ -186,6 +186,9 @@ public class Analysis {
 				if (STATE.TERMINATED.toString().equals(state.toString())) {
 					retState = STATE.TERMINATED;
 				}
+				if (STATE.TERMINATING.toString().equals(state.toString())) {
+					retState = STATE.TERMINATING;
+				}
 			}
 			return retState;
 		} catch (final MirrorException ex) {
@@ -267,6 +270,8 @@ public class Analysis {
 			return DisplayType.XY_PLOT;
 		} else if (parameter == this.classContainer.getMeterGaugeClass()) {
 			return DisplayType.METER_GAUGE;
+		} else if (parameter == this.classContainer.getTagCloudClass()) {
+			return DisplayType.TAG_CLOUD;
 		} else {
 			return null;
 		}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentCockpitBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentCockpitBean.java
index 831d78e1..cac899a9 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentCockpitBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentCockpitBean.java
@@ -20,12 +20,15 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 import javax.faces.application.Application;
 import javax.faces.application.FacesMessage;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
 import javax.faces.component.html.HtmlOutputText;
 import javax.faces.context.FacesContext;
+import javax.faces.model.SelectItem;
 
 import kieker.analysis.AnalysisController;
 import kieker.analysis.model.analysisMetaModel.MIDisplayConnector;
@@ -48,6 +51,7 @@ import org.primefaces.component.chart.metergauge.MeterGaugeChart;
 import org.primefaces.component.dashboard.Dashboard;
 import org.primefaces.component.panel.Panel;
 import org.primefaces.component.selectcheckboxmenu.SelectCheckboxMenu;
+import org.primefaces.component.tagcloud.TagCloud;
 import org.primefaces.model.DashboardColumn;
 import org.primefaces.model.DashboardModel;
 import org.primefaces.model.DefaultDashboardColumn;
@@ -55,6 +59,9 @@ import org.primefaces.model.DefaultDashboardModel;
 import org.primefaces.model.chart.CartesianChartModel;
 import org.primefaces.model.chart.LineChartSeries;
 import org.primefaces.model.chart.MeterGaugeChartModel;
+import org.primefaces.model.tagcloud.DefaultTagCloudItem;
+import org.primefaces.model.tagcloud.DefaultTagCloudModel;
+import org.primefaces.model.tagcloud.TagCloudModel;
 
 import net.vidageek.mirror.dsl.Mirror;
 import net.vidageek.mirror.exception.MirrorException;
@@ -234,6 +241,16 @@ public class CurrentCockpitBean {
 		return false;
 	}
 
+	public boolean isAnalysisTerminating() {
+		try {
+			return this.projectService.getCurrentState(this.projectName) == AnalysisController.STATE.TERMINATING;
+		} catch (final NullPointerException ex) {
+			// This exception can occur, when the projectsBean has not been initialized
+			LOG.warn("A null pointer exception occured.", ex);
+		}
+		return false;
+	}
+
 	/**
 	 * Checks whether the analysis is currently in the failed state.
 	 * 
@@ -280,6 +297,9 @@ public class CurrentCockpitBean {
 						case METER_GAUGE:
 							this.updateMeterGaugeDisplay(component, displayConnector.getName());
 							break;
+						case TAG_CLOUD:
+							this.updateTagCloudDisplay(component, displayConnector.getName());
+							break;
 						default:
 							// Unknown type
 							this.updateDisplayWithDefaultContent(component);
@@ -435,6 +455,54 @@ public class CurrentCockpitBean {
 		}
 	}
 
+	@SuppressWarnings("unchecked")
+	private void updateTagCloudDisplay(final UIComponent component, final String displayConnectorName) {
+		final boolean isAlreadyCorrectlyInitialized = (component.getChildCount() == 1) && (component.getChildren().get(0) instanceof MeterGaugeChart);
+
+		final TagCloudModel tagCloudModel;
+
+		// Avoid unnecessary component creation. Use the existing components if they are already existing and from the correct type.
+		if (isAlreadyCorrectlyInitialized) {
+			final TagCloud tagCloud = (TagCloud) component.getChildren().get(0);
+			tagCloudModel = tagCloud.getModel();
+		} else {
+			final FacesContext facesContext = FacesContext.getCurrentInstance();
+			final Application application = facesContext.getApplication();
+
+			// Create the Primefaces chart component
+			final TagCloud tagCloud = (TagCloud) application.createComponent(facesContext, "org.primefaces.component.TagCloud",
+					"org.primefaces.component.TagCloudRenderer");
+
+			// Add the corresponding model
+			tagCloudModel = new DefaultTagCloudModel();
+			tagCloud.setModel(tagCloudModel);
+
+			component.getChildren().clear();
+			component.getChildren().add(tagCloud);
+		}
+
+		try {
+			final Object displayObj = this.projectService.getDisplay(this.projectName, this.activeView.getName(), displayConnectorName);
+
+			final Map<String, AtomicLong> counters = (Map<String, AtomicLong>) new Mirror().on(displayObj).invoke().method("getCounters").withoutArgs();
+			System.out.println(counters);
+			tagCloudModel.clear();
+			for (final Map.Entry<String, AtomicLong> counter : counters.entrySet()) {
+				tagCloudModel.addTag(new DefaultTagCloudItem(counter.getKey(), (int) counter.getValue().get()));
+			}
+
+		} catch (final DisplayNotFoundException ex) {
+			CurrentCockpitBean.LOG.warn("Display not found.", ex);
+			this.updateDisplayWithDefaultContent(component);
+		} catch (final MirrorException ex) {
+			CurrentCockpitBean.LOG.warn("Reflection exception.", ex);
+			this.updateDisplayWithDefaultContent(component);
+		} catch (final InvalidAnalysisStateException ex) {
+			CurrentCockpitBean.LOG.info("Project is in invalid state.", ex);
+			this.updateDisplayWithDefaultContent(component);
+		}
+	}
+
 	@SuppressWarnings("unchecked")
 	private void updateMeterGaugeDisplay(final UIComponent component, final String displayConnectorName) {
 		final boolean isAlreadyCorrectlyInitialized = (component.getChildCount() == 1) && (component.getChildren().get(0) instanceof MeterGaugeChart);
@@ -472,6 +540,7 @@ public class CurrentCockpitBean {
 				meterGaugeChartModel.setValue(0);
 			} else {
 				final List<Number> intervals = (List<Number>) new Mirror().on(displayObj).invoke().method("getIntervals").withArgs(keys.iterator().next());
+				final List<String> colors = (List<String>) new Mirror().on(displayObj).invoke().method("getIntervalColors").withArgs(keys.iterator().next());
 				final Number value = (Number) new Mirror().on(displayObj).invoke().method("getValue").withArgs(keys.iterator().next());
 
 				if (intervals.isEmpty()) {
@@ -480,7 +549,7 @@ public class CurrentCockpitBean {
 				} else {
 					meterGaugeChartModel.setIntervals(intervals);
 					meterGaugeChart.setShadow(true);
-					meterGaugeChart.setSeriesColors("66cc66, 93b75f, E7E658, cc6666");
+					meterGaugeChart.setSeriesColors(colors.toString().replace("[", "").replace("]", ""));
 					final Number maxInterval = intervals.get(intervals.size() - 1);
 					if (value.doubleValue() <= maxInterval.doubleValue()) {
 						meterGaugeChartModel.setValue(value);
@@ -543,6 +612,13 @@ public class CurrentCockpitBean {
 			final Object displayObj = this.projectService.getDisplay(this.projectName, this.activeView.getName(), displayConnectorName);
 			final Set<String> keys = (Set<String>) new Mirror().on(displayObj).invoke().method("getKeys").withoutArgs();
 
+			selectCheckboxMenu.getChildren().clear();
+			for (final String key : keys) {
+				final UISelectItem item = new UISelectItem();
+				item.setValue(new SelectItem(key));
+				selectCheckboxMenu.getChildren().add(item);
+			}
+
 			if (keys.isEmpty()) {
 				lineChartSeries.set(0, 0);
 			} else {
@@ -566,5 +642,4 @@ public class CurrentCockpitBean {
 		}
 
 	}
-
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentControllerBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentControllerBean.java
index 33c53437..1c345b02 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentControllerBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentControllerBean.java
@@ -158,6 +158,16 @@ public class CurrentControllerBean {
 		return false;
 	}
 
+	public boolean isAnalysisTerminating() {
+		try {
+			return this.projectService.getCurrentState(this.projectName) == AnalysisController.STATE.TERMINATING;
+		} catch (final NullPointerException ex) {
+			// This exception can occur, when the projectsBean has not been initialized
+			CurrentControllerBean.LOG.warn("A null pointer exception occured.", ex);
+		}
+		return false;
+	}
+
 	/**
 	 * Checks whether the analysis is currently in the ready state.
 	 * 
diff --git a/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_de.properties b/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_de.properties
index 2cbc58d6..870ad76d 100644
--- a/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_de.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_de.properties
@@ -10,7 +10,4 @@ copyView = Ansicht Kopieren
 renameView = Ansicht Umbenennen
 deleteView = Ansicht L�schen
 
-name = Name
-
-msgCockpitEditorWelcomeShort = Entwicklungsphase
-msgCockpitEditorWelcome = Der Cockpit Editor befindet sich zur Zeit noch in der Entwicklungsphase.
\ No newline at end of file
+name = Name
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_en.properties b/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_en.properties
index 55dadc86..71f62abf 100644
--- a/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_en.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/CockpitEditorPage_en.properties
@@ -10,7 +10,4 @@ copyView = Copy View
 renameView = Rename View
 deleteView = Delete View
 
-name = Name
-
-msgCockpitEditorWelcomeShort = Development Stage
-msgCockpitEditorWelcome = The cockpit editor is still in the development stage.
\ No newline at end of file
+name = Name
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/CockpitPage_de.properties b/Kieker.WebGUI/src/main/resources/lang/CockpitPage_de.properties
index 629ae3d3..1476d0e5 100644
--- a/Kieker.WebGUI/src/main/resources/lang/CockpitPage_de.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/CockpitPage_de.properties
@@ -4,6 +4,3 @@
 # welche innerhalb des Cockpits benutzt werden.
 #
 #------------------------------------------------------------------------------
-
-msgCockpitWelcomeShort = Entwicklungsphase
-msgCockpitWelcome = Das Cockpit befindet sich zur Zeit noch in der Entwicklungsphase.
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/CockpitPage_en.properties b/Kieker.WebGUI/src/main/resources/lang/CockpitPage_en.properties
index 868dd2a1..0836a7cf 100644
--- a/Kieker.WebGUI/src/main/resources/lang/CockpitPage_en.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/CockpitPage_en.properties
@@ -3,7 +3,4 @@
 # This file contains all messages, button captions etc. which are used within
 # the cockpit page.
 #
-#------------------------------------------------------------------------------
-
-msgCockpitWelcomeShort = Development Stage
-msgCockpitWelcome = The cockpit is still in the development stage.
\ No newline at end of file
+#------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/Common_de.properties b/Kieker.WebGUI/src/main/resources/lang/Common_de.properties
index e1738aca..efe5c8b5 100644
--- a/Kieker.WebGUI/src/main/resources/lang/Common_de.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/Common_de.properties
@@ -48,6 +48,7 @@ stateReady = Bereit
 stateRunning = L�uft
 stateTerminated = Beendet
 stateFailed = Absturz
+stateTerminating = Beim Beenden
 
 #------------------------------------------------------------------------------
 #
diff --git a/Kieker.WebGUI/src/main/resources/lang/Common_en.properties b/Kieker.WebGUI/src/main/resources/lang/Common_en.properties
index badbab4a..3124574c 100644
--- a/Kieker.WebGUI/src/main/resources/lang/Common_en.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/Common_en.properties
@@ -48,6 +48,7 @@ stateReady = Ready
 stateRunning = Running
 stateTerminated = Terminated
 stateFailed = Failed
+stateTerminating = Terminating
 
 #------------------------------------------------------------------------------
 #
diff --git a/Kieker.WebGUI/src/main/resources/lang/LoginPage_de.properties b/Kieker.WebGUI/src/main/resources/lang/LoginPage_de.properties
index 185013d2..270f895c 100644
--- a/Kieker.WebGUI/src/main/resources/lang/LoginPage_de.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/LoginPage_de.properties
@@ -1,18 +1,17 @@
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 #
-# Diese Datei beinhaltet s\u00e4mtliche Nachrichten, Buttonbeschriftungen etc., 
-# welche innerhalb der Anmeldeseite benutzt werden.
+# Diese Datei beinhaltet s\u00e4mtliche lokalisierten Texte, welche innerhalb der Anmeldeseite benutzt werden.
 #
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 
 msgWelcomeShort = Willkommen bei der Kieker.WebGUI
-msgWelcome = Dies ist eine fr\u00fche Beta Version der Kieker Web GUI. Deshalb kann diese noch Bugs enthalten und einige Funktionalit\u00e4ten sind m\u00f6glicherweise noch nicht implementiert. Benutzen sie den Benutzer "admin" mit dem Passwort "kieker" um sich anzumelden und fortzufahren.
+msgWelcome = Dies ist eine Beta Version der Kieker Web GUI. Deshalb kann diese noch Bugs enthalten und einige Funktionalit\u00e4ten sind m\u00f6glicherweise noch nicht implementiert. Benutzen sie den Benutzer "admin" mit dem Passwort "kieker" um sich anzumelden und fortzufahren.
+
 username = Benutzername
 password = Passwort
-
 login = Anmelden
-loginFailed = Login fehlgeschlagen.
 
+loginFailed = Login fehlgeschlagen.
 logout = Sie haben sich erfolgreich ausgeloggt.
 
 hint = Hinweis: Die Kieker.WebGUI ben\u00f6tigt Cookies und JavaScript, um korrekt zu funktionieren. Bitte stellen Sie sicher, dass beides aktiviert ist.
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/LoginPage_en.properties b/Kieker.WebGUI/src/main/resources/lang/LoginPage_en.properties
index 00fc5c59..f5349597 100644
--- a/Kieker.WebGUI/src/main/resources/lang/LoginPage_en.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/LoginPage_en.properties
@@ -1,19 +1,17 @@
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 #
-# This file contains all messages, button captions etc. which are used within
-# the login page.
+# This file contains all localized texts, which are used within the login page.
 #
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 
 msgWelcomeShort = Welcome to the Kieker.WebGUI
-msgWelcome = This is an early beta version of the Kieker Web GUI. Therefore it may contain bugs and some functionality may have not been implemented yet. Use the user "admin" with the password "kieker" to login and continue.
+msgWelcome = This is a beta version of the Kieker Web GUI. Therefore it may contain bugs and some functionality may have not been implemented yet. Use the user "admin" with the password "kieker" to login and continue.
 
 username = Username
 password = Password
-
 login = Login
-loginFailed = Login failed.
 
+loginFailed = Login failed.
 logout = You have logged out successfully.
 
-hint = Hint: The Kieker.WebGUI requires Cookies and JavaScript in order to work correctly. Please make sure that both is enabled.
\ No newline at end of file
+hint = Hint: The Kieker.WebGUI requires cookies and JavaScript in order to work correctly. Please make sure that both is enabled.
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_de.properties b/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_de.properties
index f26b7405..7234f9e8 100644
--- a/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_de.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_de.properties
@@ -1,17 +1,22 @@
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 #
-# Diese Datei beinhaltet s\u00e4mtliche Nachrichten, Buttonbeschriftungen etc., 
-# welche innerhalb der Projekt\u00fcbersichtsseite benutzt werden.
+# Diese Datei beinhaltet s\u00e4mtliche Texte, welche innerhalb der Projekt\u00fcbersichtsseite benutzt werden.
 #
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
+
+msgReallyDeleteProject = M\u00f6chten Sie das ausgew\u00e4hlte Projekt wirklich l\u00f6schen?
+
+tooltipNewProject = Erstellt ein neues Projekt
+tooltipImportProject = Importiert ein bereits existentes Projekt in die Anwendung 
+tooltipReloadProjectsList = Aktualisiert die Liste von verfügbaren Projekten
 
 newProject = Neues Projekt
 importProject = Projekt Importieren
 refreshProjectsList = Projektliste Aktualisieren
 
 projectName = Projektname
-state = Status
-lastModification = Letzte \u00c4nderung
+state = Status der Analyse
+lastModification = \u00c4nderungsdatum
 owner = Besitzer
 lastEditor = Letzter Bearbeiter
 
@@ -20,6 +25,5 @@ renameProject = Projekt Umbenennen
 deleteProject = Projekt L\u00f6schen
 
 name = Name
-newName = Neuer Name 
-
-msgReallyDeleteProject = M\u00f6chten Sie wirklich das ausgew\u00e4hlte Projekt l\u00f6schen?
\ No newline at end of file
+file = Datei
+newName = Neuer Name 
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_en.properties b/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_en.properties
index b915b322..100d37ee 100644
--- a/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_en.properties
+++ b/Kieker.WebGUI/src/main/resources/lang/ProjectOverviewPage_en.properties
@@ -1,17 +1,22 @@
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
 #
-# This file contains all messages, button captions etc. which are used within
-# the project overview page.
+# This file contains all texts, which are used within the project overview page.
 #
-#------------------------------------------------------------------------------
+#----------------------------------------------------------------------------------------------------------------
+
+msgReallyDeleteProject = Do you really want to delete the selected project?
+
+tooltipNewProject = Creates a new project
+tooltipImportProject = Imports an already existing project into the application
+tooltipReloadProjectsList = Refreshes the list of available projects
 
 newProject = New Project
 importProject = Import Project
 refreshProjectsList = Refresh Projects List
 
 projectName = Project Name
-state = State
-lastModification = Last Modification
+state = State of the Analysis
+lastModification = Date of Change
 owner = Owner
 lastEditor = Last Editor
 
@@ -20,6 +25,5 @@ renameProject = Rename Project
 deleteProject = Delete Project
 
 name = Name
-newName = New Name 
-
-msgReallyDeleteProject = Do you really want to delete the selected project?
\ No newline at end of file
+file = File
+newName = New Name 
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/LoginPage.xhtml b/Kieker.WebGUI/src/main/webapp/LoginPage.xhtml
index c6b6a1ee..85faf4ac 100644
--- a/Kieker.WebGUI/src/main/webapp/LoginPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/LoginPage.xhtml
@@ -8,71 +8,81 @@
       xmlns:c="http://java.sun.com/jsp/jstl/core">
 
     <h:head/>
-    
+
     <h:body>
         <ui:composition template="#{root}/templates/DefaultTemplate.xhtml">
+            <!-- We use a view parameter named "state" here. It defines whether a login failed or whether the user just logged out. -->
             <ui:define name="metadata">
-                <f:metadata>
+                <f:metadata> 
                     <f:viewParam id="state" name="state"/>
                 </f:metadata>
             </ui:define>
 
+            <!-- Import the localized strings. -->
             <ui:define name="bundleIncludes">
                 <f:loadBundle var="localizedLoginMessages" basename="lang.LoginPage"/>  
             </ui:define>
 
+            <!-- Import the CSS file for this page. -->
             <ui:define name="additionalCssIncludes">
                 <link rel="stylesheet" type="text/css" href="#{root}/css/LoginPage.css" />
             </ui:define>
 
+            <!-- This JavaScript code will be executed in the onload-part of the body. It shows a localized welcome message using the growl component. -->
             <ui:define name="js">
-                <!-- This javascript code will be executed in the onload-part of the body and shows a localized welcome message via the growl-component. -->
                 <script>        
                     bodyLoaded = function() {
-                        msgs.renderMessage({summary : '#{localizedLoginMessages.msgWelcomeShort}', detail : '#{localizedLoginMessages.msgWelcome}', severity: 'info'});
-                    }
+                        msgs.renderMessage({
+                            summary : '#{localizedLoginMessages.msgWelcomeShort}',
+                            detail : '#{localizedLoginMessages.msgWelcome}', 
+                            severity: 'info'});
+                    };
                 </script>
             </ui:define>
 
+            <!-- This definition contains the login form. It uses the Spring framework to perform the actual login. -->
             <ui:define name="inner-content">
                 <form id="loginForm" action="#{root}/j_spring_security_check" method="post">  
-                    <p:panel header="#{localizedLoginMessages.msgWelcomeShort}" styleClass="login-panel">
-                        <h:panelGrid columnClasses="col1 , col2" styleClass="grid" columns="2" cellpadding="5" >  
+                    <p:panel header="#{localizedLoginMessages.msgWelcomeShort}" styleClass="login-form-panel">
+                        <h:panelGrid columnClasses="login-form-col-1, login-form-col-2" styleClass="login-form-grid" columns="2" cellpadding="5" >  
                             <h:outputLabel for="j_username" value="#{localizedLoginMessages.username}:" />  
-                            <p:inputText styleClass="input" id="j_username" required="true" label="username" />  
+                            <p:inputText styleClass="login-form-input" id="j_username" required="true" />  
 
                             <h:outputLabel for="j_password" value="#{localizedLoginMessages.password}:" />  
-                            <p:password styleClass="input" id="j_password" required="false" label="password" />  
+                            <p:password styleClass="login-form-input" id="j_password" required="false" />  
                         </h:panelGrid>  
                         <hr/>
                         <div align="right">
+                            <!-- There are problems with the button and the command button of Primefaces. We therefore use a default button and add some additional 
+                                 skins. -->
                             <button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only">
                                 <span class="ui-button-text">#{localizedLoginMessages.login}</span>
                             </button>
                         </div>
                     </p:panel>
 
+                    <!-- This code shows a hint panel depending on the given view parameter. -->
                     <c:if test="#{state == 'logout'}">
-                        <div class="hint-panel">
+                        <div class="login-form-hint-panel">
                             <p:spacer width="0" height="25"/>
                             <h:outputText value="#{localizedLoginMessages.logout}"/><br/>
                         </div>
                     </c:if>
                     <c:if test="#{state == 'fail'}">
-                        <div class="hint-panel">
+                        <div class="login-form-hint-panel">
                             <p:spacer width="0" height="25" />
                             <h:outputText style="color: red" value="#{localizedLoginMessages.loginFailed}"/><br/>
                         </div>
                     </c:if>
 
                     <p:spacer width="0" height="40"/>
-                    <div class="hint-panel">
+                    <div class="login-form-hint-panel">
                         <h:outputText value="#{localizedLoginMessages.hint}"/>
                     </div>
                 </form>
             </ui:define>
         </ui:composition>
-        
+
     </h:body>
 
 </html>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/AnalysisEditorPage.css b/Kieker.WebGUI/src/main/webapp/css/AnalysisEditorPage.css
index 1889c5a7..8ad1e4b7 100644
--- a/Kieker.WebGUI/src/main/webapp/css/AnalysisEditorPage.css
+++ b/Kieker.WebGUI/src/main/webapp/css/AnalysisEditorPage.css
@@ -32,4 +32,18 @@
     font-size:10px;
     font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
     padding:7px;
+}
+
+/* The following code is for icon definition. */
+
+.ui-icon-manageLibraries {
+    background: url('../img/icons/ManageLibraries.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-manageLibrariesSmall {
+    background: url('../img/icons/ManageLibrariesSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
 }
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/css/Common.css b/Kieker.WebGUI/src/main/webapp/css/Common.css
index 6cf1da11..6f59699e 100644
--- a/Kieker.WebGUI/src/main/webapp/css/Common.css
+++ b/Kieker.WebGUI/src/main/webapp/css/Common.css
@@ -1,11 +1,11 @@
 @charset "UTF-8";
 
 .ui-growl {
-    width: 500px
+    width: 35% !important;
 }
 
 .ui-growl-message {
-    width: 400px;
+    width: 90% !important;
     text-align: justify;
 }
 
@@ -15,6 +15,7 @@
 .ui-layout-north {
     z-index: 20 !important;
     overflow: visible !important;
+    border-style: none !important;
 }
 
 .ui-layout-north .ui-layout-unit-content {
diff --git a/Kieker.WebGUI/src/main/webapp/css/Icons.css b/Kieker.WebGUI/src/main/webapp/css/Icons.css
index 88818fe7..fdf90f2c 100644
--- a/Kieker.WebGUI/src/main/webapp/css/Icons.css
+++ b/Kieker.WebGUI/src/main/webapp/css/Icons.css
@@ -6,12 +6,6 @@
     width:16px;
 }
 
-.ui-icon-reload {
-    background: url('../img/icons/Reload.png') no-repeat !important;
-    height:16px;
-    width:16px;
-}
-
 .ui-icon-settings {
     background: url('../img/icons/Settings.png') no-repeat !important;
     height:16px;
@@ -141,24 +135,24 @@
 
 .ui-icon-save {
     background: url('../img/icons/Save.png') no-repeat !important;
-    height:16px;
-    width:16px;
+    height:32px;
+    width:32px;
 }
 
 .ui-icon-saveAs {
     background: url('../img/icons/SaveAs.png') no-repeat !important;
-    height:16px;
-    width:16px;
+    height:32px;
+    width:32px;
 }
 
-.ui-icon-newProject {
-    background: url('../img/icons/NewProject.png') no-repeat !important;
+.ui-icon-saveSmall {
+    background: url('../img/icons/SaveSmall.png') no-repeat !important;
     height:16px;
     width:16px;
 }
 
-.ui-icon-importProject {
-    background: url('../img/icons/ImportProject.png') no-repeat !important;
+.ui-icon-saveAsSmall {
+    background: url('../img/icons/SaveAsSmall.png') no-repeat !important;
     height:16px;
     width:16px;
 }
@@ -175,12 +169,6 @@
     width:16px;
 }
 
-.ui-icon-manageLibraries {
-    background: url('../img/icons/ManageLibraries.png') no-repeat !important;
-    height:16px;
-    width:16px;
-}
-
 .ui-icon-copy {
     background: url('../img/icons/Copy.png') no-repeat !important;
     height:16px;
@@ -197,4 +185,17 @@
     background: url('../img/icons/Delete.png') no-repeat !important;
     height:16px;
     width:16px;
-}
\ No newline at end of file
+}
+
+.ui-icon-reload {
+    background: url('../img/icons/Reload.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-reloadSmall {
+    background: url('../img/icons/ReloadSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
diff --git a/Kieker.WebGUI/src/main/webapp/css/LoginPage.css b/Kieker.WebGUI/src/main/webapp/css/LoginPage.css
index ad91576c..d6febd73 100644
--- a/Kieker.WebGUI/src/main/webapp/css/LoginPage.css
+++ b/Kieker.WebGUI/src/main/webapp/css/LoginPage.css
@@ -1,37 +1,37 @@
 @charset "UTF-8";
 
-.ui-panel {
-    font-size: 12px;
-}
-
-.col1 {
+.login-form-col-1 {
     width: fit-content !important;
     text-align: right;
 }
 
-.col2 {
+.login-form-col-2 {
     width: 100% !important;
 }
 
-.input {
+.login-form-input {
     width: 100% !important;
 }
 
-.grid {
+.login-form-grid {
     width: 100% !important;
 }
 
-.login-panel {
+.login-form-panel {
     width: 50%;
     text-align: center;
 }
 
-.hint-panel {
+.login-form-hint-panel {
     width: 50%;
     text-align: center;
     font-size: 11px;
 }
 
+.ui-panel {
+    font-size: 12px;
+}
+
 .ui-growl {
     width: 500px
 }
diff --git a/Kieker.WebGUI/src/main/webapp/css/ProjectOverviewPage.css b/Kieker.WebGUI/src/main/webapp/css/ProjectOverviewPage.css
index f506fa16..babbf995 100644
--- a/Kieker.WebGUI/src/main/webapp/css/ProjectOverviewPage.css
+++ b/Kieker.WebGUI/src/main/webapp/css/ProjectOverviewPage.css
@@ -1,9 +1,66 @@
 @charset "UTF-8";
 
+.import-dialog-col-1 {
+    width: fit-content !important;
+    text-align: right;
+}
+
+.import-dialog-col-2 {
+
+}
+
 .ui-datatable-header {
     font-size: 12px;
 }
 
 .ui-datatable-footer {
-     font-size: 12px;
+    font-size: 12px;
+}
+
+.ui-layout-center {
+    border-style: none !important;
+}
+
+/* The following code is for icon definition. */
+
+.ui-icon-newProjectSmall {
+    background: url('../img/icons/NewProjectSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-newProject {
+    background: url('../img/icons/NewProject.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-importProject {
+    background: url('../img/icons/ImportProject.png') no-repeat !important;
+    height:32px;
+    width:32px;
+}
+
+.ui-icon-importProjectSmall {
+    background: url('../img/icons/ImportProjectSmall.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-copyProject {
+    background: url('../img/icons/CopyProject.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-renameProject {
+    background: url('../img/icons/RenameProject.png') no-repeat !important;
+    height:16px;
+    width:16px;
+}
+
+.ui-icon-deleteProject {
+    background: url('../img/icons/DeleteProject.png') no-repeat !important;
+    height:16px;
+    width:16px;
 }
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/ProjectOverviewPageDialogs.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/ProjectOverviewPageDialogs.xhtml
index 99ea950a..1e41117e 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/ProjectOverviewPageDialogs.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/ProjectOverviewPageDialogs.xhtml
@@ -24,6 +24,8 @@
     </p:dialog>
     <!-- ******************************************************************************** -->
 
+    <!-- ******************************************************************************** -->
+    <!-- This is the dialog to rename a project. -->
     <p:dialog id="renameProjectDlg" header="#{localizedProjectOverviewMessages.renameProject}" resizable="false" modal="true" widgetVar="renameProjectDialog">
         <!-- Make sure that closing of the dialog also clears the input field. -->
         <p:ajax event="close" update="renameProjectDialogForm:renameProjectInputText" />
@@ -40,7 +42,10 @@
             </div>
         </h:form>  
     </p:dialog>
+    <!-- ******************************************************************************** -->
 
+    <!-- ******************************************************************************** -->
+    <!-- This is the dialog to delete a project. -->
     <p:dialog id="deleteProjectDlg" header="#{localizedProjectOverviewMessages.deleteProject}" resizable="false" modal="true" widgetVar="deleteProjectDialog">
 
         <h:form id="deleteProjectDialogForm">  
@@ -54,7 +59,10 @@
             </div>
         </h:form>  
     </p:dialog>
+    <!-- ******************************************************************************** -->
 
+    <!-- ******************************************************************************** -->
+    <!-- This is the dialog to copy a project. -->
     <p:dialog id="copyProjectDlg" header="#{localizedProjectOverviewMessages.copyProject}" resizable="false" modal="true" widgetVar="copyProjectDialog">
         <!-- Make sure that closing of the dialog also clears the input field. -->
         <p:ajax event="close" update="copyProjectDialogForm:copyProjectDialogInputText" />
@@ -71,37 +79,28 @@
             </div>
         </h:form>  
     </p:dialog>
+    <!-- ******************************************************************************** -->
 
-    <p:dialog header="Save Project" resizable="false" modal="true" widgetVar="forceSaveDlg">
-        <h:form>
-            <div style="text-align: center">
-                <h:outputText value="The project has been modified externally in the meanwhile. Do you want to overwrite the changes?" /> 
-            </div>
-            <hr/>
-            <div style="text-align: right">
-                <p:commandButton value="Yes" action="#{currentCockpitEditorBean.saveProject(true)}" oncomplete="forceSaveDlg.hide()" update=":messages" />
-                <p:spacer width="10px" height="10" />
-                <p:commandButton value="Cancel" onclick="forceSaveDlg.hide()" />
-            </div>
-        </h:form>
-    </p:dialog>
-
+    <!-- ******************************************************************************** -->
+    <!-- This is the dialog to import a project. -->
     <p:dialog id="importProjectDlg" header="#{localizedProjectOverviewMessages.importProject}" resizable="false" modal="true" widgetVar="importProjectDialog">
         <!-- Make sure that closing of the dialog also clears the input field. -->
         <p:ajax event="close" update="importProjectDialogForm:newProjectInputText" />
 
         <h:form id="importProjectDialogForm" enctype="multipart/form-data">  
-            <div style="text-align: left">
+            <h:panelGrid columnClasses="import-dialog-col-1, import-dialog-col-2" styleClass="login-form-grid" columns="2" cellpadding="5" >  
                 <h:outputText value="#{localizedProjectOverviewMessages.name}: " /> 
-                <p:inputText id="newProjectInputText" value="#{stringBean.string}" style="width: 95%" />
-                <br/> <br/>
-                <p:fileUpload allowTypes="kax" mode="simple" value="#{uploadFileBean.file}"/>
-            </div>
+                <p:inputText id="newProjectInputText" value="#{stringBean.string}" /> 
 
+                <h:outputText value="#{localizedProjectOverviewMessages.file}: " /> 
+                <p:fileUpload allowTypes="kax" mode="simple" value="#{uploadFileBean.file}"/>
+            </h:panelGrid>
             <hr/>
             <div style="text-align: right">
                 <p:commandButton value="#{localizedMessages.ok}"  update=":projectsListForm :messages" action="#{projectsBean.uploadProject(stringBean.string, uploadFileBean.file, currentProjectOverviewBean, userBean)}" ajax="false" oncomplete="importProjectDialog.hide()" />
             </div>
         </h:form>  
     </p:dialog>
+    <!-- ******************************************************************************** -->
+
 </ui:composition>
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/CopyProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/CopyProject.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7f287c47e2e4f05b95781f0059212e25ecc4f73
GIT binary patch
literal 494
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7w|crbhE&{|I_Y%QAqSDR
zbd7t9O(g>7EAE)!74sq}R>Vu&tK_BEcfG5v4-S=IcvI7`&!O-#Ta<=~$V;v2l~bhl
zD41nE_mS@S*!1_Ifn?j~kN=;uO!r!PI&JgMa|S*fGq=R(?H6&~Da!ItP*zY+gv-%$
zlF0PaPfhG{wnv-HK6{~R?>`y7_9Uf=FaAm!%s>C~d(y^$-+%x4YE7-O;VKZCDQ`ZT
z_lU!+WefS0w%@L`m*81aV)b_ydx3?_IcC0<!VJD@!cRU{T&S>-JGrUG_t!lQh56^_
zv%FwpkTfZER_d+Vdr!7;Pk_Vn%a#(3<qWJ0(^4;%ShXHJRO5Cx&%DPqa0$a^<_x2G
zt5zw^KkxpYL1C$>6tCR#B1^6fx8JHOGc-K5XfeF@d{OA?P`UKYHxqW>waaF!+g~p~
z;bh9Wq6N%6voF5-YSlmaq{{8At@BRw?fs?PSSZ$gbk%cq$9E124zdj=%<32mI$e}{
zu4e6RU|WB^JA3ObXA`Ntw|+kUCsq2Ep+`%sd&U)GMvmo5vaA!fJ}TO&b3DoLpv1u)
zK^L;NUecQCB_Y4)_~XKPXB1NMOy=G<o9+9LadM)7+>(t-jSLJ744$rjF6*2UngFw~
B*4_XB

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/DeleteProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/DeleteProject.png
new file mode 100644
index 0000000000000000000000000000000000000000..a546aad5eab4f6668e5daefabc07e11e6a483484
GIT binary patch
literal 694
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toYCT;XLn>}1rz{XK;L~IF
z@?LGRbjgy(y1Hk#rlc-C`twJ{&Koyw{QLLg<Kx$>!}I6e+x7LqndScRVeW3f{vOYA
zh>cC&vTIk`@`VczDn~}HoG&9I!{g)A!&CqNUvkCwcgn{ntDk@R{@&i#a&mG7lB*fl
zu9e-Ws_M$Uum1nP=kM?DkKeI#=f8~`HZ&}`VPEs(&+EIp%jdZF%We1a>Dk$Fwc*^k
zc{iGx_OR}+|Nryf|Nr~@=gg7e>FMd=`Ty_l<C?#}{(jew-^cOhe*FP0TU*ZEjIpt`
z8!Ibse*XXG=kLc~zh9ppwm0_R*YE%1-QpGR|8J^y*<bhjS7^fZb$i1sEi-q-To9i<
zd9vaE`}_af-}2x7xAx@Urk~IE&+qBcpDAH|w(8#g+TVN`2l7@wdKB}9ZOiuW$I?=l
zp1WUHdi;L1{kuAUGyh*|2h<K+*s?#;VYcu0)mH1(u77)Ly*4Y$YoqjqOP6G4PZ2S%
z|Fp34zkR`;|Aq&%4=p#}f6u_*&Sd8QyNCJrKmIyt=Jwp%iC1q$b>D4Rwrt&vj*baG
z&+oJU8C$fd<Knp+@4j!}e_tX$cK^{^Nq0W}`@Q=9p4;2sZ+P`G^H`pPudnx-)vF&f
z85&Ofum8_JJtZ|gx#IIz-sT(ioNUMPb?oQcR-fEb{ax>~r1399-h{NY#7$dEJ?5F^
ze$tVY%q;lw_ut>?j5D|-_tpJ9_u<pi?6%w6<^Q~Y{d&XBvbT>46Rdvrzhm;Vv#aZ0
zwCK}KPR_zZN=i*UYu2oBc=-Q7$%pw5-`@VtQ~X@7=E9{Q@lU_M>rdeRw?LX9so2QS
zkh8P9`}OM8*&5v3+#mn3H<{<(+q1v!@2|7l^Y6zo7TGg>^q--|Fq7L%AvT2}kb!}L
N!PC{xWt~$(69AGEc!2-_

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ImportProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/ImportProject.png
index 1279be4f8df032f4f93395f70ef9fa87fd001920..a29d2103e2793e548afd5ee04f3a502ad034af9a 100644
GIT binary patch
literal 1953
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

literal 759
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to_IbKEhE&{2ogD8GoG5bO
z{NL@B@6DEnPi$P`!j_uy|I0IHeO>vQNlmt@UlP7t@Rs6Klyvzq!DF^X{FWIU6Hi?|
zb+Kv!M=8&?b_D^kAD0%WPU{oMo?ZTZ_x9rVCH1%1+u#2_SAOoj_4Ath3m2rQ2z90f
zibzgNHBI*CNGy%r9xM{t|H#R*?f0?@n}2bWmP|-=mbK*Px1YwwF7LuC>wEct0gpuS
zODV=>xdsw3Gw02F$Jgpq#dzWF-QwiLhhL=`ct40;d7-*7Fkxds!qzC?3!grHQeS`l
z_SSv-;#f+`;y$0z*EzN4K(klL1rynlzb9lJLjO0cKG>+x&H3SHP3*&h9UK$%cH0&g
zcN-m!^kuLVnVO(0FzufI!I{BI98C#J5}1@GdI(-n+-d7S|Lm!=zJ7aT`Q{2PdZx(!
zQZ^%dE%UtRz6XB%s0cTa(q+13eP`Zo{`gZ(bK58TI#sf;sch!WUH<wEM_O81)8xsM
zubZ2jcQ<%*>@XIYAiUekV=do`@(rmBuM(uA{4EknOG}dz5*C<G^~#-M``DG`i|wqb
z+y4bcWO7BtgcXEtZZ&x$CMzXd{or%oujR{@y%W9vydWl{ygJXeQuTkB<R6Yo)AK<A
z`WF-)@Ng_N-k;zqH=Bcn>91(RX9>smC-%%)x|7M__^WIeW?w~zWEI|9{vB-de_y|L
z?bpZauTmR|Id)j?(kK=ald!69*tbAIWqF1JA4kVcd4X!{XUDC+s82rmpE2CF_MYm^
zywt|zPgcwgbrX(#Fy>meK~(+ypYQES8*fCoavhI8x2w7>?hIFxYw0JM<3=LRC0$<6
z8On@ZeBWu_%zw!LalN<l_F~J_<xC1UF7&3ZzcDvy@!7!W!`5^B?!`r)y_uDB;QEa#
zS{q;ee%?PZ<k4xDwEFPX3?d>H8`yh}8EZKvCmZfKw(Z!N2tD5r)#$AM{I`OA6f8RX
SOc@v$7(8A5T-G@yGywpZ!BWQn

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ImportProjectSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/ImportProjectSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..f97a121d48058e85664303edf0aac817028b5a30
GIT binary patch
literal 720
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!torhB?LhE&{2PC3BjQ{*f3
z=FJ<U88c=a_;bI$&iKuZeaau7HO;<$@v2dh@d1mQ8%n(%PtkH)@TOkjzxaiQmRAwK
ze|yWxE1hd7d3){ECan#OJORv7RoQRXpI1p}sGaIMW!1K(|Nd>?cYRCao24NChrRkC
z|KWX$e}DVD$#c)Xf=@-aZ=MX-OEPuPjap;5&t^qibMw^3#;4-U#>UJyTJG0NNX+<G
zU|>^I{Qv!}U(Ry=-|KEPUu|e95Ki~|Z9n<u+?gh<madW&Gg~F={{BDr;n8#5w(s)u
zjScjs-#ziSZ+YFTJBw%No!~Nk-1%i|#jk&#tM?sm(wF>qqr;%1NW<vQukXzdueQJD
zdDK2r@<;s#!-8VYySJ*}tV%n6r}lpU&kL<@-4_ByBI>@s%WeDrzwzBPv6KxS9*IAG
zyi+~=l=ZYk#Qy(@44l$ZvkheIejnJC^=MkM2HTpsleRv*f8G4wd;8kNgtSCP?~UCa
zMt^?%>1=#?y}Tgd&;Re!9o@X<Jbaqo_Oftk@umlC5mFjPQ;*)9b9s{Zg><Gi8DZs3
zH+vj<>m?)_3x7R-Z_gHR=~nT(lh@8%`)XGZ+9q|WhxOsH<0eaY=-Aa(FpC|V=J4<D
z@8b$97o6Gf_{rf^RpBzX#TAKhYwz0?`*I$iZ@;hk=Ys-<<xDI;{=c_xZdf64c$u^L
za`CUZ=ba1_yjDI>E6?_wf8Tz;a*(8ne#736|K%?<)bq@-so~)^pO=+Cr*;9?(S|;m
z=~EZZTb5Yga8gX0q3z)R{q>R-J9kQot+$Q|G=A)$-o^Nr_1x#$J32xZJ1P$_vTdBp
zIWejs?iaJqrTTsKi8Cz9qn|A?eV)ERB4M%aJ6)|a+5CJC8`3&93qCx+k;u&a{Os=Y
g-F)$tm7*$K4Dn`M3L)VyLFtvj)78&qol`;+066txQ2+n{

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibraries.png b/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibraries.png
index 7f06b149360c48b1aeada49f841fcf87db0c20fd..38cc1ddc88f4fc351980786048489cded4016ce0 100644
GIT binary patch
literal 2551
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

literal 914
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toBRyRlLn?0h24!c+q>9+y
zKa=up=1iMgx;KxR-newl#PF(6w&^;x8LeWwZ_MBbJLojyXjjJyk3Yf5-BC-jbZ?vx
zaAi6wFShYQS?*P*&VNEz9w;x2oxLuz%rj}*%{^wH|LobUebjo+&o;?(JHOA_$rHkF
z_w%Ml@%zS<06{?>Mn?Mw(-|X~EZBXdBa9obh9)SnpYgwY<o;si^}b8*%cM;_TYYre
zyT+5p*7aE*y6Vso;H^~3D71<xMkqq9sPRN`_kkQnjdSZ0AHDf#eDibr?}*^rn>YHN
zEYDwY+uSHr)kx7RgM(Si_tAs{HWQ1z9rk&o@N*w{(*Hbd+HpVgP1W+!FYbQ*a$x$u
zjwS^`CzjS-+9hqZ4Jwm3Zf>b$ou}%jpO&9e@a^*V+Yu$lxo^$=-S@&NlWF2t(+Qb5
z^N&2VQqxIht&?}2&|<?<Gd1U0en$hh*}fkS-m=`jFzeDbHU8Jvp4uIGTxf7?h5TYa
zndIdChYDjV*0VS|EDUh4o9}+VSbw47KJj$FJ+4f;nrkcnFSsZBLq=9sHbArE*RQG@
z+j?X4*h2#Yqr=%vpB(=BG5*87PQ{Y9?~gChZ!2Ezq2R={cCY(a{_3;~SFW%GisT<Q
zotC&>=Rl0+fhgTWYJY4dw$_BJUkVo5C#}|4dOP@*GJF5alk6&A-mdx7#;*K-&VyO1
zn;uPjd%*hTrX4Lwp(5)0ceZ``Fp*_-zF+2UzCDZI-+cLC<~5}=KRr1Xxy<wIsR{p7
z@bXEj;`Ks<weOAvST&zkb{Afg7wwgO`}?MQn{OW#E??hx{;#JC=hIJC;VVog`a16r
zc*?NOEBD8fQ@Ve?e0Apx+ibct_m$NW`+orpf8VlsJ%0I#CC>a^M1c<T9W&1<MIT!g
z1lNVWJ#aFReSfTsmqDtxSNBo=mnYi~SN!|us`IywvFEnI^{orGS%rMFGoRf4*PpHJ
zsZzH4#EG{*Iv+ds<NI=<HC4s?x8<IHU3GqOqRZdy7w#4aKYPUU*6w&$KzF2a$4gdm
z)s1b_+}jj21DcHXNzFZU)%&>Skz>Ej%F4=k_kDbIaJkOqEr%zmPP@h<Zg<pQ(I|hT
zjMnWkp7%2kND4m@kC(J5v;BSj_`O>T70dj2oEGez^sD}8{{2(+OmFJv$4uw0`FZ>0
e8+q^lOl@~Fs^o27eqvx?VDNPHb6Mw<&;$T(54n&4

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibrariesSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/ManageLibrariesSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f06b149360c48b1aeada49f841fcf87db0c20fd
GIT binary patch
literal 914
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!toBRyRlLn?0h24!c+q>9+y
zKa=up=1iMgx;KxR-newl#PF(6w&^;x8LeWwZ_MBbJLojyXjjJyk3Yf5-BC-jbZ?vx
zaAi6wFShYQS?*P*&VNEz9w;x2oxLuz%rj}*%{^wH|LobUebjo+&o;?(JHOA_$rHkF
z_w%Ml@%zS<06{?>Mn?Mw(-|X~EZBXdBa9obh9)SnpYgwY<o;si^}b8*%cM;_TYYre
zyT+5p*7aE*y6Vso;H^~3D71<xMkqq9sPRN`_kkQnjdSZ0AHDf#eDibr?}*^rn>YHN
zEYDwY+uSHr)kx7RgM(Si_tAs{HWQ1z9rk&o@N*w{(*Hbd+HpVgP1W+!FYbQ*a$x$u
zjwS^`CzjS-+9hqZ4Jwm3Zf>b$ou}%jpO&9e@a^*V+Yu$lxo^$=-S@&NlWF2t(+Qb5
z^N&2VQqxIht&?}2&|<?<Gd1U0en$hh*}fkS-m=`jFzeDbHU8Jvp4uIGTxf7?h5TYa
zndIdChYDjV*0VS|EDUh4o9}+VSbw47KJj$FJ+4f;nrkcnFSsZBLq=9sHbArE*RQG@
z+j?X4*h2#Yqr=%vpB(=BG5*87PQ{Y9?~gChZ!2Ezq2R={cCY(a{_3;~SFW%GisT<Q
zotC&>=Rl0+fhgTWYJY4dw$_BJUkVo5C#}|4dOP@*GJF5alk6&A-mdx7#;*K-&VyO1
zn;uPjd%*hTrX4Lwp(5)0ceZ``Fp*_-zF+2UzCDZI-+cLC<~5}=KRr1Xxy<wIsR{p7
z@bXEj;`Ks<weOAvST&zkb{Afg7wwgO`}?MQn{OW#E??hx{;#JC=hIJC;VVog`a16r
zc*?NOEBD8fQ@Ve?e0Apx+ibct_m$NW`+orpf8VlsJ%0I#CC>a^M1c<T9W&1<MIT!g
z1lNVWJ#aFReSfTsmqDtxSNBo=mnYi~SN!|us`IywvFEnI^{orGS%rMFGoRf4*PpHJ
zsZzH4#EG{*Iv+ds<NI=<HC4s?x8<IHU3GqOqRZdy7w#4aKYPUU*6w&$KzF2a$4gdm
z)s1b_+}jj21DcHXNzFZU)%&>Skz>Ej%F4=k_kDbIaJkOqEr%zmPP@h<Zg<pQ(I|hT
zjMnWkp7%2kND4m@kC(J5v;BSj_`O>T70dj2oEGez^sD}8{{2(+OmFJv$4uw0`FZ>0
e8+q^lOl@~Fs^o27eqvx?VDNPHb6Mw<&;$T(54n&4

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/NewProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/NewProject.png
index 2ddf3bf9c96c5e53d5531866cfef0766fbb5b39f..c39a62f447089f3c7c95bce9a1d69152d7c95cc3 100644
GIT binary patch
literal 898
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANOKo}Mm_Ar-gwPPg`n3Y0jm
zZ>CmSl9X6bP+~GiE%t6Nv-e?_ON{b1qVk@>i+?yQX3DghP?90Ok%h;xu%ICIA&26=
zN6IdXS2i0?`ti(Z|NAA!1K#g-(!W=ClCvm}@BaIL`;Y&;!db5));-hO%4(l^1E<#8
zhYuH4l$E9BXJ`M8dMzpYKRG4kh`pU%Uijl3F?!sKG`Nl?1@73hM~AuPY=%kQ&+rBY
zh8tHHrg*77levEOY;QqnX{eo@-9L`5y48{i6%`f_zE*`YKDcdfXJ^!~d$;w%l`B0N
zM33y<YwMk!{=EM`Tf^&LzoIU@{_4|t`Eqb!dHMBASFbMR_{d^lVj?nQ#*7ux3{S*)
z*qBdqw^&$O3U1%NT~}?gr`RLTgn|MC153-5R_qrnLmCST3l+C)*|MRQkMXBMnvrDp
z&75ftd$<^^4*gJOIWmuNqx|)kHx8w@Iyw3*zx?dpy?YyU8je3sWT;pmC;H=&!;b!j
zjO^^}m7hO<{=RteVpYxq2M#zSWMz4oGPEBs_%P|nod;P8M~)q1JDaxo$n(#lqKqNc
z>l+@ND_oc?r^LtL<<0o(_wUzX4btUZ1~H5*5%KZMXV0F^aw=Aip?E>x>Ibe0A<RV$
zO@c3W1Tk#CeOBZGQ$xGbOrIbPcOx@1HP(WiG3&*ep68!G+`uq{xr^cJltk0#QyDfX
z7Ff+)AH?c)PMa}hvH;_ivO`gG7O!2i=0c2~`-5{6nJi@bc8NZCdffVcvA2p4kHa?p
z8*j_l7L@Fm_4t&(YWMNSCE3~C4f2%?Jd9r9*-By6$*K%D!*Vv?lwc^+`L=+oMQZ7^
z>C<1HJI6P3=FExg2O3+LGZGCdgJ(=Q@#f7M8-~7=iq@>uiy2c6&GC5l?Aa0q1C0#=
z4@y@}byX7FwST|=v**vBG8(W%X>HiD#f6`b@5G@)O*ReJ6gk=tfBEoX!jHdonhyT{
z{LB}OSh~Brzr1+S!P4xg=}=y7&b(v){_7$Ps})4JJQ>%7WhYcs-72fD{(W6>X;uBc
z__g{Ed>9yBhG>1|`_(A2VC&Ye&hhd0pC3DRtnC!vas6r2_l4hno?Tk{RsGNPFPv)1
zFGKF!yZ28_=m>-GMQJ<HtG~W&eZw5HbLY;V;db-&L+pO@ehGPJfBC;hH3I_!gQu&X
J%Q~loCIH!^nW+E(

literal 471
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7=Xts~hE&|@y=<L*C_sea
z!R)i~4@Am$@3Q!D$o*fVbG>Wk@_!wCm!v)ly1EF;)GS<dEOy;wg|4m_Q_N=b@o{D4
zy>Ir&TKwd|*;bY3kLMH%^F5H@Yu|MGsnCJB7W2=01WqYme)(tN?;hpp2NM{a7f!gX
zBdN&JcU<|#`|lZ>Z|<qInRmXvLFcrA4Bu>~S<4y^KXfSHbD_ef?&$lvNVYFr+ivS_
zxS6v>sArGM;=qqwUw+q0bh`L33Qa%V8s;cAk3C}j_4`MYE>1j~CdgW~_nxyu{?ihx
zz?`j7D_4eeO;_<;?6CcIYm<TvOOLLu7`Lfh|L2)LZH#mMjte<V@>E^I#1x~QvHf;=
zd&O-wM-GK9rTM3yN?gd=DmSlb-kRe@J41v!S>~UAE_orxEYUz>3B&QidZDj(B|iU*
z@l~5#voIjRVe!R=y8ZVr3G_Ow3`ug>8`o|(|GbgG?6X%&tj<n9oyvA4%k;(9DqZHw
zFQ+g~^=f6jnkD*Z{*l~k>u<`aO+M+bBUb!Ce+FZt!-Jc7+wCWcf8A{MZu|H0-E)nk
edQ~R<<_>bwP<ZEZa{>bc1B0ilpUXO@geCwPOw>&P

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/NewProjectSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/NewProjectSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ddf3bf9c96c5e53d5531866cfef0766fbb5b39f
GIT binary patch
literal 471
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7=Xts~hE&|@y=<L*C_sea
z!R)i~4@Am$@3Q!D$o*fVbG>Wk@_!wCm!v)ly1EF;)GS<dEOy;wg|4m_Q_N=b@o{D4
zy>Ir&TKwd|*;bY3kLMH%^F5H@Yu|MGsnCJB7W2=01WqYme)(tN?;hpp2NM{a7f!gX
zBdN&JcU<|#`|lZ>Z|<qInRmXvLFcrA4Bu>~S<4y^KXfSHbD_ef?&$lvNVYFr+ivS_
zxS6v>sArGM;=qqwUw+q0bh`L33Qa%V8s;cAk3C}j_4`MYE>1j~CdgW~_nxyu{?ihx
zz?`j7D_4eeO;_<;?6CcIYm<TvOOLLu7`Lfh|L2)LZH#mMjte<V@>E^I#1x~QvHf;=
zd&O-wM-GK9rTM3yN?gd=DmSlb-kRe@J41v!S>~UAE_orxEYUz>3B&QidZDj(B|iU*
z@l~5#voIjRVe!R=y8ZVr3G_Ow3`ug>8`o|(|GbgG?6X%&tj<n9oyvA4%k;(9DqZHw
zFQ+g~^=f6jnkD*Z{*l~k>u<`aO+M+bBUb!Ce+FZt!-Jc7+wCWcf8A{MZu|H0-E)nk
edQ~R<<_>bwP<ZEZa{>bc1B0ilpUXO@geCwPOw>&P

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Reload.png b/Kieker.WebGUI/src/main/webapp/img/icons/Reload.png
index 494964cc71d2c52576356eaf6fb74f4c7f166990..620b3233cd2c2df95541599efb0d1ef4df651ca8 100644
GIT binary patch
literal 2018
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

literal 792
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to?t8j8hE&|@om}lPIZ)!*
z{P)GDGpFT6w52RP+j42jq@`1qCR{ptNw4Xw&jtmd%|6_z5>c~WXn9^(Vh|u56}Q5^
zM{k<3wxN!u>hiURGCvDNuQOe~yLN7^SKI#^-2BfA_};&_dH%FkQ%B&c<m^S)esa0m
zylx4~-(t&qI_KiQYJXjp6(=}$SAQxBX39x>G4*`UeCt_xtB!B6{9SZg{Xchsa;S>;
z?hsYB!)Ih}=mgkIEGw;laa(g*nXe9y$G2%q=Xwe^zvsWueS(uw@J4ZDoO8-Fo4!d)
zt8zbnezJDv7OPX+pMU8)%P#V!RmYR%W0E;z%=TD@tykJ@x4&qg`8s^5Vo2eh)nE23
z(YX92_~eSvcst3j_EF0_&zLRqonpG+rtE>cuUuv?PGT<5h<dWEQGTAcjKv1Otanqy
z0xK_`*spPNTEk<T<o>CWYJV5xmX!Q>yrF8#*4_ShgRcME{n=x}Rz=mn6&5?R8MK>E
zy}DKPDnz1hs%O$_4R!xd?vvg)xFnZtJ*+b$<W!->|Jkp-%B^07Jv>+ypm#u@RV&L{
zYUSU?8+RtiUN|Z`VSnKa%bT&6F3)&X&+ghE7XIg!V})7W&)SI@wJbbd2MjtsRb2^G
zv@57B;agneUoJQ2C&PKp2SGY5Go{+yRwl}QdvLT*;CSevt>^X`WOit3OW00`?yJ$N
zFtu3f`GS|XNxtGqsQYe<14>obI0aMZuI%mA`L>qx!k$*sk7iCc?N-<{vY#~UNM!sL
z;goW}xYJ_BO3vFZE=&IN%ssF*?TXoVg^8>p#~ylx8EwjSbGYsP$z%VHACr#nJ-PI@
zPC}PO_{3YKjJ>uM!5@X#@2xgC$K>b!D8thxtF0~JR9%mdJYx&z!5fbcwohK%@I+W$
zjQK+-Yiy+SsyNMw%Ox7Wz1MkjtK&dZ#)-?)6OGm#ww)_z;_Lk4eQQUm-Ur3G*@3Sw
z*c&kIWagdfb+|4qPpVb!LC?zv3+EsD-kO$N_lME{ibDR8)!QN%7#J8lUHx3vIVCg!
E0L2D$XaE2J

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/ReloadSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/ReloadSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..494964cc71d2c52576356eaf6fb74f4c7f166990
GIT binary patch
literal 792
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to?t8j8hE&|@om}lPIZ)!*
z{P)GDGpFT6w52RP+j42jq@`1qCR{ptNw4Xw&jtmd%|6_z5>c~WXn9^(Vh|u56}Q5^
zM{k<3wxN!u>hiURGCvDNuQOe~yLN7^SKI#^-2BfA_};&_dH%FkQ%B&c<m^S)esa0m
zylx4~-(t&qI_KiQYJXjp6(=}$SAQxBX39x>G4*`UeCt_xtB!B6{9SZg{Xchsa;S>;
z?hsYB!)Ih}=mgkIEGw;laa(g*nXe9y$G2%q=Xwe^zvsWueS(uw@J4ZDoO8-Fo4!d)
zt8zbnezJDv7OPX+pMU8)%P#V!RmYR%W0E;z%=TD@tykJ@x4&qg`8s^5Vo2eh)nE23
z(YX92_~eSvcst3j_EF0_&zLRqonpG+rtE>cuUuv?PGT<5h<dWEQGTAcjKv1Otanqy
z0xK_`*spPNTEk<T<o>CWYJV5xmX!Q>yrF8#*4_ShgRcME{n=x}Rz=mn6&5?R8MK>E
zy}DKPDnz1hs%O$_4R!xd?vvg)xFnZtJ*+b$<W!->|Jkp-%B^07Jv>+ypm#u@RV&L{
zYUSU?8+RtiUN|Z`VSnKa%bT&6F3)&X&+ghE7XIg!V})7W&)SI@wJbbd2MjtsRb2^G
zv@57B;agneUoJQ2C&PKp2SGY5Go{+yRwl}QdvLT*;CSevt>^X`WOit3OW00`?yJ$N
zFtu3f`GS|XNxtGqsQYe<14>obI0aMZuI%mA`L>qx!k$*sk7iCc?N-<{vY#~UNM!sL
z;goW}xYJ_BO3vFZE=&IN%ssF*?TXoVg^8>p#~ylx8EwjSbGYsP$z%VHACr#nJ-PI@
zPC}PO_{3YKjJ>uM!5@X#@2xgC$K>b!D8thxtF0~JR9%mdJYx&z!5fbcwohK%@I+W$
zjQK+-Yiy+SsyNMw%Ox7Wz1MkjtK&dZ#)-?)6OGm#ww)_z;_Lk4eQQUm-Ur3G*@3Sw
z*c&kIWagdfb+|4qPpVb!LC?zv3+EsD-kO$N_lME{ibDR8)!QN%7#J8lUHx3vIVCg!
E0L2D$XaE2J

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/RenameProject.png b/Kieker.WebGUI/src/main/webapp/img/icons/RenameProject.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d223bb3063ba8c5736ce788519d664a399dc107
GIT binary patch
literal 667
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!tol001;Ln>~yPQIHRlqhjv
zezA<#m7@+P%(fo!|DdN)kj=Ys_lM%T3F4Cy7S}r}y7>N{AfudRe)mn@)dj9T(_d`c
zw(Et?`b!x-AuW&diq<}JFZO$D`~1PQrC(!Y?j5eK+yDIW9{p!UI}Q4eZ`KsxcydAg
z)z_-U5jt_<T2qU!RF^#!{r=|Qx6Lj!m4cgZ=2U2iC>>4u7@)u7YL?^Lu;#3-RWr`#
z#wI7SzxSJCv)3lVNBeHxdEqlzTQ4znx?Bnm(3{?PHqH6z@v`Qv=J6-q$4%Llf4BN~
zTIpA|w2cuNjUifZH8Zx~E@9<hlgnm&HS_j^xlflV7cXIcTl;5yL)YP7<_F5t7JU3^
zx942XfoK1w_D<*450RD+$~}`~_V{4JgefOe_OhPkN?3Y)!+gGjr><FiIR4JTZoay}
z@<rP=c6M?`DNH~8Uueth>W2Ecjq_jb-taF~<Xq-5#!#+Km!=C@TYC<q7=2yGaB$5f
zlcwbfy4GAxA2~EcxT@4nrcAo<vgCM^gTe(<<~5;hjh954<PTNlvHak06TMX6o?s#+
z$rx3_9gz0TkL6&00`I}Y)8!dfty^ueiuH<>vVjE8j{EQJtvo7Jna^Gco$}LW&Q6hK
z)yE3=cnkC&=PY56Y>Zofyw*-$Q>e2oYU}$Azw6{Wa`;pp`&oUSU*Mjw{dPZV-1_NH
zKL2#?_D@fIa77^|pqH`#_-oGKja#<3Sjh0XH7u)C(GcNk&=W1NkoggQB+2m5%Mv4|
ztx>)0hZBP|M84T}UU^dApJC$V<L76@^lIV7jJ%?qcM@MYzxq^C7rwuAWyr57UQ6c%
bztQ(DGA&AeSjWS_z`)??>gTe~DWM4fIp#Od

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/Save.png b/Kieker.WebGUI/src/main/webapp/img/icons/Save.png
index 76613eca1233548d23d83e418273aaf0c65b299e..599a230e3b01595874c8cbd969d7cf7405c87d94 100644
GIT binary patch
literal 1445
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANN<Ii4<#Ar-gYhDCa$x(lrR
zedqhvodT|l9gp(pNt(wLa9agVY4|m<gYof`a89Qr4xX$d58CCmI!+0+uUOC_|C2-O
zQHOk>;GO9&W(yehxdq<2{`^zW)jj)OmhTn%^z^)mNNN84cdLSzuUfsHrQc>rIl~e0
z`1ttQt5>h~U%O^aPHs-lyEA9be3|s+y-@Q(hgV!*bx%!Anz!X2Uwa{M!NQfdZ%6NS
zTl}*+Ir;HgEr#su?B2Nb`Mi95b?=@&b$x$eZgH>MgHNA=%(VEb_V3t{aNgY9T<yS%
z+b>^gzIppL_Hi-ey5CRb7>bLFv+w+fPECF4o|u>@AT7-;CMMRfLXttKYMQx}Bj?4_
z=R97_Z4h|T+{`><?%dXe3l(3ycu~>%W|~5WwJ<}*9Y*tialyf#;}Q}SmMmMww9KJQ
zuj`gTW5<=r%U=Bc{W~!+kufSd+TGyjd4sD}!VE8bx-+h4XJ_Yb5K~ZAcJ7OM8FR&p
z&E>fa!_u|ew~MQ(sV!K)-oO2~QsKWlEDU~Z%BI>+pFR~35n-7*bEXmV|D!DuTVLFX
zsA<^BI(P2e3zsf2y?*^#eaBJ$rw%ilOv1yjKU}m(siUv2?aP-E%c`Ye%N%>=xvymj
z3=e1T?d{Ex^fEXl{nYT!o#V%scPpuT`uU~txeBffPj+BYv{H|aiQ#E(Zm#iWJ2gS*
zfcd|F|4IV`0|O!=I6OT)d#Z$r)=g_`4>~Y+(z3|~Wo2xlqM{e>-aWg$ru9=0TZ4PR
zp`%}C{9gZ(Wy-W^OtP-?>Qfb0Eq$=iY5~)pef!dW=4WIiR9_6|y;a-zfalDlrAwDe
zuIigGVZ!-4ckeFTwM**5%!Zj87WlLZwM2a^eEITa<Em9!+r;nJAJdIrv@dm9PHwL5
z#SaWd6S~wHXU&@Bu=?sLKFh!Smf=kb&qYlA8DE|}>8YWuo&5U3$Lu-3S!Pe17kPMF
z_Ui`^3|>Be{$0`X<*Qdr>FMd$I8Ry{D!Tm-kQeyu-{;A}VYp$-mLpsjZ>$R6U}@{h
z@chiAxpU_V2mL>G`Esy#_vK5M4xBvc**9x@Lh3(GiMx_X@9SSk<mKibJaB;Fe$}4c
zyI=P!@Ktc_VPazX=cFL^{Q2`wuFh=}B^R9b?9Kc5<D+Bsk?yYMWo3Kz?>`@Dx@O%v
zw#3GN2N@FX9ad6Ode)J*s7GtMnc$2mQ$##GJQAd*=0>bFE%r4#cKo>H-x?o(|KNkh
zZqJ`Tx3{yjluWZWIF(*lSopU_(Q=uGhq#D{LtUNS>&MpC)^Dt3LtjmM^itqA>-@z@
z*It$wHJm-`E2+|??HE><l;79arz-K%dtzLc9E*av`E<|dXz9Dp-&lX;U|RZYM)szQ
z_wMl-8ygqxonU*8V_sL5x%qZ4&fW7{!XJOXQB@!COhPkB*V5Wrde-dOjNI+Dhf5se
z;_mJBJ863Lz{QJ#+PgMxH1smm4*Qk3P~`HAS+lBIU+sMI_O0&1&GN-XMf;v!)#3YP
z=;`Cr^6OWXg^f*0@x+M}jTkQO+<20K?MP<Y%Ed1-KL|S}S5{U^M4p>uV`HOY5+fro
zf4^yBq<~Z0%@l!b=A@*g2(A@fCmky)EK*WaXZ}(B_*mU+&C#Q-5|WZT%d0ZhtX;eI
z%-OTHPkTMO+4ecO-+!q3BrQK*UwTmzH!pAN+qb!4H%(T=UY06cQR<;(#kBBSa<jc!
zzPr2o{1dx3uv;WeT%yRWA22T=(aYla3pcSdJ>t{uJgnIL^!=XKAJdb#`fu@;I%s9+
z9ji+?&`@_&q01*>_l_MAa`N)^4ae>;KlJpVpr?k^kNV~v`wX(4?r;+;srd6hWN+k$
z<$;ISCq0f;_{i<~R(?YE$D0-E5<l)L#9iLfvhU*yxzat%A6_v0V=Osw;x2nwdo%+B
O1B0ilpUXO@geCwr46yA0

literal 623
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to%sgEjLn>}94Yuu&3KW?4
z{QrM{5$?y14yzq34185wADog9aP$xs2?+_gG}Fv+hgO-F!q#3EX-+fs6)cWT3TBH^
zEjpSqHhj2$_3WPM)z6q-%FMXC-P-tm-RHA9jmEtfy2Dma)tGupJ!`9!iqOeG5myKC
zzT=A>9v`<?dtfbQEyMTvXN{dLqsP)q<`X@ZyeQlKQj$YafrIG|<3*+$@4vs<cQa?f
z-8}i%Uw?7iY?ojV+oLbSCC}8z!2Cerjs}NOf*<3jpEgg5c8b{5Cq-&aef9b4*HRq`
zo_P!_iXR`Hay4&zbASfR)~L72ZTAcr7GL~fI{D-tFBKt$>8B$NvkH?AGG<6mIe7J|
zC{O!geTgbxgP9R)ulZ?Bt@2_N;W}C`Ss*Lc&DwG}F=K1g{f~3o6B^GvEcnymwwOQA
zgH2)bNk5()6Q=wt+ui!LiuY!YnAX%&=bsk+?0CRo>bLy!^qV<hw{px3BzSmQE-z2m
zQ-AMNf<eQ}60M%&kJ*o;7{$iK#oa5aI+-#_G_ZVU%>RyC@4qj+nR6(|jQI{T*OwVL
z-hNA$>tF7hsifL*G$~+hnB)5E&Q^2N76mPDxSJ>5byUgv@}0Q#-zP=rOnV-;{=0Nv
zkdx-+SdFP(3ogG@kn7)^vM*xsMUGQXKY8BpTRvH3$G)Oox5;0A|BXyp{P|~1h`5ua
zqK5VpyO};m+!iaY3)8;#?(EsK(fd4D+>07rrT#1uQCHZ#zxDgJzyo^@-%WA3^7PyL
hee*t>&r9CVD7V$UY@fv690mpk22WQ%mvv4FO#m>d8lwOJ

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SaveAs.png b/Kieker.WebGUI/src/main/webapp/img/icons/SaveAs.png
index 76613eca1233548d23d83e418273aaf0c65b299e..599a230e3b01595874c8cbd969d7cf7405c87d94 100644
GIT binary patch
literal 1445
zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANN<Ii4<#Ar-gYhDCa$x(lrR
zedqhvodT|l9gp(pNt(wLa9agVY4|m<gYof`a89Qr4xX$d58CCmI!+0+uUOC_|C2-O
zQHOk>;GO9&W(yehxdq<2{`^zW)jj)OmhTn%^z^)mNNN84cdLSzuUfsHrQc>rIl~e0
z`1ttQt5>h~U%O^aPHs-lyEA9be3|s+y-@Q(hgV!*bx%!Anz!X2Uwa{M!NQfdZ%6NS
zTl}*+Ir;HgEr#su?B2Nb`Mi95b?=@&b$x$eZgH>MgHNA=%(VEb_V3t{aNgY9T<yS%
z+b>^gzIppL_Hi-ey5CRb7>bLFv+w+fPECF4o|u>@AT7-;CMMRfLXttKYMQx}Bj?4_
z=R97_Z4h|T+{`><?%dXe3l(3ycu~>%W|~5WwJ<}*9Y*tialyf#;}Q}SmMmMww9KJQ
zuj`gTW5<=r%U=Bc{W~!+kufSd+TGyjd4sD}!VE8bx-+h4XJ_Yb5K~ZAcJ7OM8FR&p
z&E>fa!_u|ew~MQ(sV!K)-oO2~QsKWlEDU~Z%BI>+pFR~35n-7*bEXmV|D!DuTVLFX
zsA<^BI(P2e3zsf2y?*^#eaBJ$rw%ilOv1yjKU}m(siUv2?aP-E%c`Ye%N%>=xvymj
z3=e1T?d{Ex^fEXl{nYT!o#V%scPpuT`uU~txeBffPj+BYv{H|aiQ#E(Zm#iWJ2gS*
zfcd|F|4IV`0|O!=I6OT)d#Z$r)=g_`4>~Y+(z3|~Wo2xlqM{e>-aWg$ru9=0TZ4PR
zp`%}C{9gZ(Wy-W^OtP-?>Qfb0Eq$=iY5~)pef!dW=4WIiR9_6|y;a-zfalDlrAwDe
zuIigGVZ!-4ckeFTwM**5%!Zj87WlLZwM2a^eEITa<Em9!+r;nJAJdIrv@dm9PHwL5
z#SaWd6S~wHXU&@Bu=?sLKFh!Smf=kb&qYlA8DE|}>8YWuo&5U3$Lu-3S!Pe17kPMF
z_Ui`^3|>Be{$0`X<*Qdr>FMd$I8Ry{D!Tm-kQeyu-{;A}VYp$-mLpsjZ>$R6U}@{h
z@chiAxpU_V2mL>G`Esy#_vK5M4xBvc**9x@Lh3(GiMx_X@9SSk<mKibJaB;Fe$}4c
zyI=P!@Ktc_VPazX=cFL^{Q2`wuFh=}B^R9b?9Kc5<D+Bsk?yYMWo3Kz?>`@Dx@O%v
zw#3GN2N@FX9ad6Ode)J*s7GtMnc$2mQ$##GJQAd*=0>bFE%r4#cKo>H-x?o(|KNkh
zZqJ`Tx3{yjluWZWIF(*lSopU_(Q=uGhq#D{LtUNS>&MpC)^Dt3LtjmM^itqA>-@z@
z*It$wHJm-`E2+|??HE><l;79arz-K%dtzLc9E*av`E<|dXz9Dp-&lX;U|RZYM)szQ
z_wMl-8ygqxonU*8V_sL5x%qZ4&fW7{!XJOXQB@!COhPkB*V5Wrde-dOjNI+Dhf5se
z;_mJBJ863Lz{QJ#+PgMxH1smm4*Qk3P~`HAS+lBIU+sMI_O0&1&GN-XMf;v!)#3YP
z=;`Cr^6OWXg^f*0@x+M}jTkQO+<20K?MP<Y%Ed1-KL|S}S5{U^M4p>uV`HOY5+fro
zf4^yBq<~Z0%@l!b=A@*g2(A@fCmky)EK*WaXZ}(B_*mU+&C#Q-5|WZT%d0ZhtX;eI
z%-OTHPkTMO+4ecO-+!q3BrQK*UwTmzH!pAN+qb!4H%(T=UY06cQR<;(#kBBSa<jc!
zzPr2o{1dx3uv;WeT%yRWA22T=(aYla3pcSdJ>t{uJgnIL^!=XKAJdb#`fu@;I%s9+
z9ji+?&`@_&q01*>_l_MAa`N)^4ae>;KlJpVpr?k^kNV~v`wX(4?r;+;srd6hWN+k$
z<$;ISCq0f;_{i<~R(?YE$D0-E5<l)L#9iLfvhU*yxzat%A6_v0V=Osw;x2nwdo%+B
O1B0ilpUXO@geCwr46yA0

literal 623
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to%sgEjLn>}94Yuu&3KW?4
z{QrM{5$?y14yzq34185wADog9aP$xs2?+_gG}Fv+hgO-F!q#3EX-+fs6)cWT3TBH^
zEjpSqHhj2$_3WPM)z6q-%FMXC-P-tm-RHA9jmEtfy2Dma)tGupJ!`9!iqOeG5myKC
zzT=A>9v`<?dtfbQEyMTvXN{dLqsP)q<`X@ZyeQlKQj$YafrIG|<3*+$@4vs<cQa?f
z-8}i%Uw?7iY?ojV+oLbSCC}8z!2Cerjs}NOf*<3jpEgg5c8b{5Cq-&aef9b4*HRq`
zo_P!_iXR`Hay4&zbASfR)~L72ZTAcr7GL~fI{D-tFBKt$>8B$NvkH?AGG<6mIe7J|
zC{O!geTgbxgP9R)ulZ?Bt@2_N;W}C`Ss*Lc&DwG}F=K1g{f~3o6B^GvEcnymwwOQA
zgH2)bNk5()6Q=wt+ui!LiuY!YnAX%&=bsk+?0CRo>bLy!^qV<hw{px3BzSmQE-z2m
zQ-AMNf<eQ}60M%&kJ*o;7{$iK#oa5aI+-#_G_ZVU%>RyC@4qj+nR6(|jQI{T*OwVL
z-hNA$>tF7hsifL*G$~+hnB)5E&Q^2N76mPDxSJ>5byUgv@}0Q#-zP=rOnV-;{=0Nv
zkdx-+SdFP(3ogG@kn7)^vM*xsMUGQXKY8BpTRvH3$G)Oox5;0A|BXyp{P|~1h`5ua
zqK5VpyO};m+!iaY3)8;#?(EsK(fd4D+>07rrT#1uQCHZ#zxDgJzyo^@-%WA3^7PyL
hee*t>&r9CVD7V$UY@fv690mpk22WQ%mvv4FO#m>d8lwOJ

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SaveAsSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/SaveAsSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..76613eca1233548d23d83e418273aaf0c65b299e
GIT binary patch
literal 623
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to%sgEjLn>}94Yuu&3KW?4
z{QrM{5$?y14yzq34185wADog9aP$xs2?+_gG}Fv+hgO-F!q#3EX-+fs6)cWT3TBH^
zEjpSqHhj2$_3WPM)z6q-%FMXC-P-tm-RHA9jmEtfy2Dma)tGupJ!`9!iqOeG5myKC
zzT=A>9v`<?dtfbQEyMTvXN{dLqsP)q<`X@ZyeQlKQj$YafrIG|<3*+$@4vs<cQa?f
z-8}i%Uw?7iY?ojV+oLbSCC}8z!2Cerjs}NOf*<3jpEgg5c8b{5Cq-&aef9b4*HRq`
zo_P!_iXR`Hay4&zbASfR)~L72ZTAcr7GL~fI{D-tFBKt$>8B$NvkH?AGG<6mIe7J|
zC{O!geTgbxgP9R)ulZ?Bt@2_N;W}C`Ss*Lc&DwG}F=K1g{f~3o6B^GvEcnymwwOQA
zgH2)bNk5()6Q=wt+ui!LiuY!YnAX%&=bsk+?0CRo>bLy!^qV<hw{px3BzSmQE-z2m
zQ-AMNf<eQ}60M%&kJ*o;7{$iK#oa5aI+-#_G_ZVU%>RyC@4qj+nR6(|jQI{T*OwVL
z-hNA$>tF7hsifL*G$~+hnB)5E&Q^2N76mPDxSJ>5byUgv@}0Q#-zP=rOnV-;{=0Nv
zkdx-+SdFP(3ogG@kn7)^vM*xsMUGQXKY8BpTRvH3$G)Oox5;0A|BXyp{P|~1h`5ua
zqK5VpyO};m+!iaY3)8;#?(EsK(fd4D+>07rrT#1uQCHZ#zxDgJzyo^@-%WA3^7PyL
hee*t>&r9CVD7V$UY@fv690mpk22WQ%mvv4FO#m>d8lwOJ

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/img/icons/SaveSmall.png b/Kieker.WebGUI/src/main/webapp/img/icons/SaveSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..76613eca1233548d23d83e418273aaf0c65b299e
GIT binary patch
literal 623
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!to%sgEjLn>}94Yuu&3KW?4
z{QrM{5$?y14yzq34185wADog9aP$xs2?+_gG}Fv+hgO-F!q#3EX-+fs6)cWT3TBH^
zEjpSqHhj2$_3WPM)z6q-%FMXC-P-tm-RHA9jmEtfy2Dma)tGupJ!`9!iqOeG5myKC
zzT=A>9v`<?dtfbQEyMTvXN{dLqsP)q<`X@ZyeQlKQj$YafrIG|<3*+$@4vs<cQa?f
z-8}i%Uw?7iY?ojV+oLbSCC}8z!2Cerjs}NOf*<3jpEgg5c8b{5Cq-&aef9b4*HRq`
zo_P!_iXR`Hay4&zbASfR)~L72ZTAcr7GL~fI{D-tFBKt$>8B$NvkH?AGG<6mIe7J|
zC{O!geTgbxgP9R)ulZ?Bt@2_N;W}C`Ss*Lc&DwG}F=K1g{f~3o6B^GvEcnymwwOQA
zgH2)bNk5()6Q=wt+ui!LiuY!YnAX%&=bsk+?0CRo>bLy!^qV<hw{px3BzSmQE-z2m
zQ-AMNf<eQ}60M%&kJ*o;7{$iK#oa5aI+-#_G_ZVU%>RyC@4qj+nR6(|jQI{T*OwVL
z-hNA$>tF7hsifL*G$~+hnB)5E&Q^2N76mPDxSJ>5byUgv@}0Q#-zP=rOnV-;{=0Nv
zkdx-+SdFP(3ogG@kn7)^vM*xsMUGQXKY8BpTRvH3$G)Oox5;0A|BXyp{P|~1h`5ua
zqK5VpyO};m+!iaY3)8;#?(EsK(fd4D+>07rrT#1uQCHZ#zxDgJzyo^@-%WA3^7PyL
hee*t>&r9CVD7V$UY@fv690mpk22WQ%mvv4FO#m>d8lwOJ

literal 0
HcmV?d00001

diff --git a/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
index bf71a7c5..5b591383 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
@@ -96,14 +96,14 @@
             <ui:define name="furtherMenuBarEntries">
                 <p:submenu  label="#{localizedMessages.file}">
                     <c:if test="#{sec:areAnyGranted('User, Administrator')}">
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-save" value="  #{localizedMessages.saveProject}" ajax="true" onstart="preSaveProject(false)"  disabled="#{empty currentAnalysisEditorBean.project}"/>
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveAs" value="  #{localizedMessages.saveProjectAs}" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveSmall" value="  #{localizedMessages.saveProject}" ajax="true" onstart="preSaveProject(false)"  disabled="#{empty currentAnalysisEditorBean.project}"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveAsSmall" value="  #{localizedMessages.saveProjectAs}" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
                         <p:separator />
                     </c:if>
-                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reload" value="  #{localizedMessages.reloadProject}" ajax="false" url="analysisEditor?projectName=#{currentAnalysisEditorBean.projectName}" disabled="#{empty currentAnalysisEditorBean.project}" />
+                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reloadSmall" value="  #{localizedMessages.reloadProject}" ajax="false" url="analysisEditor?projectName=#{currentAnalysisEditorBean.projectName}" disabled="#{empty currentAnalysisEditorBean.project}" />
                     <p:separator/>
                     <c:if test="#{sec:areAnyGranted('User, Administrator')}">
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-manageLibraries" value="  #{localizedAnalysisEditorPageMessages.manageLibraries}" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-manageLibrariesSmall" value="  #{localizedAnalysisEditorPageMessages.manageLibraries}" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
                         <p:separator />
                     </c:if>
                     <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
@@ -128,6 +128,14 @@
             <ui:define name="furtherMenuBar">
                 <p:spacer height="5"/>
                 <p:menubar> 
+                    <p:menuitem id="b1" styleClass="element-with-whitespace" icon="ui-icon-save" ajax="true" onstart="preSaveProject(false)"  disabled="#{empty currentAnalysisEditorBean.project}"/>
+                    <!-- A dummy item as a separator between the items. -->
+                    <p:menuitem style="width: 15px" disabled="true"/>
+
+                    <p:menuitem id="b2" styleClass="element-with-whitespace" icon="ui-icon-manageLibraries" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                    <!-- A dummy item as a separator between the items. -->
+                    <p:menuitem style="width: 15px" disabled="true"/>
+
                     <p:menuitem id="btnScaleToFit" styleClass="element-with-whitespace" icon="ui-icon-scaleToFit" ajax="true" action="#{currentAnalysisEditorGraphBean.scaleToFit()}"/>
                     <p:menuitem id="btnGrid" styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.gridEnabled ? 'ui-icon-gridEnabled' : 'ui-icon-gridDisabled'}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchGrid()}" update=":menuForm"/>
                     <p:menuitem id="btnSnap" styleClass="element-with-whitespace" icon="#{currentAnalysisEditorGraphBean.snapEnabled ? 'ui-icon-snapEnabled' : 'ui-icon-snapDisabled'}" ajax="true" action="#{currentAnalysisEditorGraphBean.switchSnap()}" update=":menuForm"/>
diff --git a/Kieker.WebGUI/src/main/webapp/pages/CockpitEditorPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/CockpitEditorPage.xhtml
index 594ed95d..50bb316a 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/CockpitEditorPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/CockpitEditorPage.xhtml
@@ -37,15 +37,6 @@
                 </h:form>
             </ui:define>
 
-            <ui:define name="js">
-                <!-- This javascript code will be executed in the onload-part of the body and shows a localized message via the growl-component. -->
-                <script>
-                    bodyLoaded = function() {
-                        msgs.renderMessage({summary: '#{localizedCockpitEditorPageMessages.msgCockpitEditorWelcomeShort}', detail: '#{localizedCockpitEditorPageMessages.msgCockpitEditorWelcome}', severity: 'info'});
-                    }
-                </script>
-            </ui:define>
-
             <!-- Those are the menu bar entries left from the help-submenu. -->
             <ui:define name="furtherMenuBarEntries">
                 <p:submenu  label="#{localizedMessages.file}">
diff --git a/Kieker.WebGUI/src/main/webapp/pages/CockpitPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/CockpitPage.xhtml
index 9a311551..814f33f2 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/CockpitPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/CockpitPage.xhtml
@@ -31,15 +31,6 @@
                 <link rel="stylesheet" type="text/css" href="#{root}/css/CockpitPage.css" />
             </ui:define>
 
-            <ui:define name="js">
-                <!-- This javascript code will be executed in the onload-part of the body and shows a localized message via the growl-component. -->
-                <script>        
-                    bodyLoaded = function() {
-                        msgs.renderMessage({summary : '#{localizedCockpitPageMessages.msgCockpitWelcomeShort}', detail : '#{localizedCockpitPageMessages.msgCockpitWelcome}', severity: 'info'});
-                    }
-                </script>
-            </ui:define>
-
             <!-- Those are the menu bar entries left from the help-submenu. -->
             <ui:define name="furtherMenuBarEntries">
                 <p:submenu label="#{localizedMessages.file}"> 
@@ -90,6 +81,9 @@
                                 <h:graphicImage url="#{currentCockpitBean.isAnalysisRunning() ? '../img/LEDs/Icon_LED_Green.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
                                 <h:outputText value="#{localizedMessages.stateRunning}"/>
 
+                                <h:graphicImage url="#{currentCockpitBean.isAnalysisTerminating() ? '../img/LEDs/Icon_LED_Yellow.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
+                                <h:outputText value="#{localizedMessages.stateTerminating}"/>
+
                                 <h:graphicImage url="#{currentCockpitBean.isAnalysisTerminated() ? '../img/LEDs/Icon_LED_Red.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
                                 <h:outputText value="#{localizedMessages.stateTerminated}"/>
 
diff --git a/Kieker.WebGUI/src/main/webapp/pages/ControllerPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/ControllerPage.xhtml
index f2a20143..8db919a9 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/ControllerPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/ControllerPage.xhtml
@@ -96,6 +96,9 @@
                                 <h:graphicImage url="#{currentControllerBean.isAnalysisRunning() ? '../img/LEDs/Icon_LED_Green.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
                                 <h:outputText value="#{localizedMessages.stateRunning}"/>
 
+                                <h:graphicImage url="#{currentControllerBean.isAnalysisTerminating() ? '../img/LEDs/Icon_LED_Yellow.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
+                                <h:outputText value="#{localizedMessages.stateTerminating}"/>
+
                                 <h:graphicImage url="#{currentControllerBean.isAnalysisTerminated() ? '../img/LEDs/Icon_LED_Red.png' : '../img/LEDs/Icon_LED_Gray.png'}" height="50px"/>
                                 <h:outputText value="#{localizedMessages.stateTerminated}"/>
 
diff --git a/Kieker.WebGUI/src/main/webapp/pages/ProjectOverviewPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/ProjectOverviewPage.xhtml
index fe10ce65..ef884c85 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/ProjectOverviewPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/ProjectOverviewPage.xhtml
@@ -12,33 +12,51 @@
     <h:body>
 
         <ui:composition template="/templates/PagesTemplate.xhtml">
-            <ui:param name="unsavedModifications" value="false"/>
+            <!-- Those are parameters of the page. They are mostly used by the underlying template pages. -->
             <ui:param name="projectName" value="#{currentProjectOverviewBean.projectName}"/>
+            <ui:param name="unsavedModifications" value="false"/>
             <ui:param name="pagename" value="projectOverview"/>
             <ui:param name="showProjectName" value="false"/>
 
+            <!-- Import the localized strings. -->
             <ui:define name="bundleIncludes">
                 <f:loadBundle var="localizedProjectOverviewMessages" basename="lang.ProjectOverviewPage"/>
             </ui:define>
 
+            <!-- Import the CSS file for this page. -->
             <ui:define name="cssIncludes">
                 <link rel="stylesheet" type="text/css" href="#{root}/css/ProjectOverviewPage.css" />
             </ui:define>
 
-            <!-- Those are the menu bar entries left from the help-submenu. -->
+            <!-- Those are the menu bar entries left from the help menu. -->
             <ui:define name="furtherMenuBarEntries">
                 <p:submenu label="#{localizedMessages.file}">
                     <c:if test="#{sec:areAnyGranted('User, Administrator')}">
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-newProject" value="  #{localizedProjectOverviewMessages.newProject}" onclick="newProjectDialog.show()" ajax="true"/>
-                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-importProject" value="  #{localizedProjectOverviewMessages.importProject}" onclick="importProjectDialog.show()" ajax="true"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-newProjectSmall" value="  #{localizedProjectOverviewMessages.newProject}" onclick="newProjectDialog.show()" ajax="true"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-importProjectSmall" value="  #{localizedProjectOverviewMessages.importProject}" onclick="importProjectDialog.show()" ajax="true"/>
                         <p:separator/>
                     </c:if>
-                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reload" value="  #{localizedProjectOverviewMessages.refreshProjectsList}" update=":projectsListForm" action="#{currentProjectOverviewBean.updateAvailableProjects()}" ajax="true"/>
+                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reloadSmall" value="  #{localizedProjectOverviewMessages.refreshProjectsList}" update=":projectsListForm" action="#{currentProjectOverviewBean.updateAvailableProjects()}" ajax="true"/>
                     <p:separator/>
                     <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
                 </p:submenu>
             </ui:define>   
 
+            <ui:define name="furtherMenuBar">
+                <p:spacer height="5"/>
+                <p:menubar> 
+                    <p:menuitem id="btnNewProject" styleClass="element-with-whitespace" icon="ui-icon-newProject" onclick="newProjectDialog.show()" ajax="true" />
+                    <p:menuitem id="btnImportProject" styleClass="element-with-whitespace" icon="ui-icon-importProject" onclick="importProjectDialog.show()" ajax="true"  />
+                    <!-- A dummy item as a separator between the items. -->
+                    <p:menuitem style="width: 15px" disabled="true"/>
+                    <p:menuitem id="btnReloadProjectList" styleClass="element-with-whitespace" icon="ui-icon-reload" update=":projectsListForm" action="#{currentProjectOverviewBean.updateAvailableProjects()}" ajax="true"  />
+                </p:menubar>
+                <p:tooltip for="btnNewProject" value="#{localizedProjectOverviewMessages.tooltipNewProject}"/>
+                <p:tooltip for="btnImportProject"  value="#{localizedProjectOverviewMessages.tooltipImportProject}"/>
+                <p:tooltip for="btnReloadProjectList"  value="#{localizedProjectOverviewMessages.tooltipReloadProjectsList}"/>
+            </ui:define>
+
+            <!-- The central component contains the currently available projects. -->
             <ui:define name="centerContent">
                 <h:form id="projectsListForm">  
                     <p:dataTable emptyMessage="#{localizedMessages.noRecordsFound}" 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">  
@@ -68,12 +86,13 @@
                                 </p:menuitem>
                                 <c:if test="#{sec:areAnyGranted('User, Administrator')}">
                                     <p:separator/>
-                                    <p:menuitem id="copyButton" icon="ui-icon-copy"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.copyProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()" update=":messages"/>
-                                    <p:menuitem id="renameButton" icon="ui-icon-edit"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.renameProject}"  action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()" disabled="true" update=":messages"/>
-                                    <p:menuitem id="deleteButton" icon="ui-icon-delete"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.deleteProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" update=":messages"/>      
+                                    <p:menuitem id="copyButton" icon="ui-icon-copyProject"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.copyProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()" update=":messages"/>
+                                    <p:menuitem id="renameButton" icon="ui-icon-renameProject"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.renameProject}"  action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()" disabled="true" update=":messages"/>
+                                    <p:menuitem id="deleteButton" icon="ui-icon-deleteProject"  styleClass="element-with-whitespace" value="  #{localizedProjectOverviewMessages.deleteProject}" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" update=":messages"/>      
                                 </c:if>
                             </p:menu>
                         </p:column>  
+                        
                         <p:column headerText="#{localizedProjectOverviewMessages.state}" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}">  
                             <h:outputText value="#{projectsBean.getAnalysisControllerState(project)}"/>  
                         </p:column>
-- 
GitLab