From 9bb790958cd98c36b47d34e87880aab2221d379a Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Fri, 23 Mar 2012 22:04:01 +0100
Subject: [PATCH] Code quality.

---
 .../request/SelectedDependenciesBean.java     | 30 +++++++++----------
 .../beans/session/AnalysisControllerBean.java | 20 +++++++++----
 .../beans/session/CurrentThemeBean.java       | 16 +++++++---
 .../session/SelectedMainProjectBean.java      | 18 ++++++-----
 .../webgui/common/PluginClassLoader.java      | 21 +++++++++----
 5 files changed, 67 insertions(+), 38 deletions(-)

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
index d1c4c67d..8bb1d32d 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
@@ -68,25 +68,25 @@ public class SelectedDependenciesBean {
 
 		if (selProjBean != null) {
 			this.project = selProjBean.getSelectedProject();
+		} else {
+			this.project = null;
+		}
 
-			/*
-			 * The adding of the already existing dependencies within the project is troublesome. As the names cannot be compared, we have to do this manually and
-			 * use our "own" dependencies which we have to compare with the dependencies in the project.
-			 */
-			if (depBean != null) {
-				final List<MIDependency> availableDependencies = depBean.getDependencies();
-
-				for (final MIDependency dependency : this.project.getDependencies()) {
-					for (final MIDependency actDependency : availableDependencies) {
-						if (actDependency.getFilePath().equals(dependency.getFilePath())) {
-							this.dependencies.add(actDependency);
-							continue;
-						}
+		/*
+		 * The adding of the already existing dependencies within the project is troublesome. As the names cannot be compared, we have to do this manually and
+		 * use our "own" dependencies which we have to compare with the dependencies in the project.
+		 */
+		if (selProjBean != null && depBean != null) {
+			final List<MIDependency> availableDependencies = depBean.getDependencies();
+
+			for (final MIDependency dependency : this.project.getDependencies()) {
+				for (final MIDependency actDependency : availableDependencies) {
+					if (actDependency.getFilePath().equals(dependency.getFilePath())) {
+						this.dependencies.add(actDependency);
+						continue;
 					}
 				}
 			}
-		} else {
-			this.project = null;
 		}
 	}
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/AnalysisControllerBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/AnalysisControllerBean.java
index f19fd1ed..27fa0157 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/AnalysisControllerBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/AnalysisControllerBean.java
@@ -91,7 +91,9 @@ public class AnalysisControllerBean {
 				/* Try to create the controller. */
 				this.controller = new AnalysisController(tempFile, PluginClassLoader.getInstance());
 				/* Don't forget to remove the temporary file. */
-				tempFile.delete();
+				if (!tempFile.delete()) {
+					AnalysisControllerBean.LOG.warn("Could not remove temporary file.");
+				}
 			} catch (final IOException ex) {
 				AnalysisControllerBean.LOG.error("Could not create analysis controller.", ex);
 			} catch (final NullPointerException ex) {
@@ -100,21 +102,29 @@ public class AnalysisControllerBean {
 		}
 	}
 
+	/**
+	 * Starts asynchronously the analysis controller within this bean.
+	 */
 	public void start() {
-		new Thread() {
+		final Thread thread = new Thread() {
 			@Override
 			public void run() {
 				AnalysisControllerBean.this.controller.run();
 			}
-		}.start();
+		};
+		thread.start();
 	}
 
+	/**
+	 * Stops asynchronously the analysis controller within this bean.
+	 */
 	public void stop() {
-		new Thread() {
+		final Thread thread = new Thread() {
 			@Override
 			public void run() {
 				AnalysisControllerBean.this.controller.terminate();
 			}
-		}.start();
+		};
+		thread.start();
 	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
index c29d6b7f..a37b465f 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
@@ -47,6 +47,14 @@ public class CurrentThemeBean {
 	 * The default theme used for all users.
 	 */
 	private static final String DEFAULT_THEME = "glass-x";
+	/**
+	 * The key to identify the theme in the properties.
+	 */
+	private static final String KEY_THEME = "theme";
+	/**
+	 * The key to identify the theme in the cookie.
+	 */
+	private static final String KEY_COOKIE_THEME = "theme";
 	/**
 	 * The current theme.
 	 */
@@ -59,8 +67,8 @@ public class CurrentThemeBean {
 		/* Get the parameters within the current context. */
 		final Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
 		/* Try to find the default theme within the parameters. */
-		if (params.containsKey("theme")) {
-			this.theme = params.get("theme");
+		if (params.containsKey(CurrentThemeBean.KEY_THEME)) {
+			this.theme = params.get(CurrentThemeBean.KEY_THEME);
 		} else {
 			/* Use the default theme. */
 			this.theme = CurrentThemeBean.DEFAULT_THEME;
@@ -69,8 +77,8 @@ public class CurrentThemeBean {
 		/* Try to find the cookie for the theme. */
 		final Map<String, Object> cookies = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();
 
-		if (cookies.containsKey("theme")) {
-			this.theme = ((Cookie) cookies.get("theme")).getValue();
+		if (cookies.containsKey(CurrentThemeBean.KEY_COOKIE_THEME)) {
+			this.theme = ((Cookie) cookies.get(CurrentThemeBean.KEY_COOKIE_THEME)).getValue();
 		}
 	}
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java
index 5a5e1e35..6d24c6f6 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java
@@ -42,9 +42,7 @@ import kieker.analysis.model.analysisMetaModel.MIPlugin;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.analysis.model.analysisMetaModel.MIProperty;
 import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
-import kieker.analysis.plugin.filter.AbstractFilterPlugin;
 import kieker.analysis.plugin.AbstractPlugin;
-import kieker.analysis.plugin.reader.AbstractReaderPlugin;
 import kieker.analysis.plugin.filter.AbstractFilterPlugin;
 import kieker.analysis.plugin.reader.AbstractReaderPlugin;
 import kieker.analysis.repository.AbstractRepository;
@@ -75,6 +73,10 @@ public class SelectedMainProjectBean {
 	 * The error message used if a plugin could not be instantiated for various reasons.
 	 */
 	private static final String ERR_MSG_LOAD_PLUGIN = "Could not instantiate plugin.";
+	/**
+	 * The error message used if dependency could not loaded due to an invalid URL.
+	 */
+	private static final String ERR_MSG_INVALID_URL = "Invalid URL for dependency.";
 	/**
 	 * This constant is used as the host for the dependencies.
 	 */
@@ -149,7 +151,7 @@ public class SelectedMainProjectBean {
 					PluginClassLoader.getInstance().addURL(
 							new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE, SelectedMainProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 				try {
 					final List<Class<AbstractPlugin>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE,
@@ -160,7 +162,7 @@ public class SelectedMainProjectBean {
 						}
 					}
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 			}
 		}
@@ -182,7 +184,7 @@ public class SelectedMainProjectBean {
 					PluginClassLoader.getInstance().addURL(
 							new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE, SelectedMainProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 				try {
 					final List<Class<AbstractPlugin>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE,
@@ -193,7 +195,7 @@ public class SelectedMainProjectBean {
 						}
 					}
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 			}
 		}
@@ -216,7 +218,7 @@ public class SelectedMainProjectBean {
 					PluginClassLoader.getInstance().addURL(
 							new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE, SelectedMainProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 				try {
 					final List<Class<AbstractRepository>> repositories = PluginFinder.getAllRepositoriesWithinJar(new URL(SelectedMainProjectBean.URL_PROTOCOL_FILE,
@@ -227,7 +229,7 @@ public class SelectedMainProjectBean {
 						}
 					}
 				} catch (final MalformedURLException ex) {
-					SelectedMainProjectBean.LOG.warn("Invalid URL for dependency.", ex);
+					SelectedMainProjectBean.LOG.warn(SelectedMainProjectBean.ERR_MSG_INVALID_URL, ex);
 				}
 			}
 		}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java
index 905fc698..f6e2d820 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginClassLoader.java
@@ -51,7 +51,7 @@ public final class PluginClassLoader extends ClassLoader {
 	/**
 	 * The singleton instance of this class.
 	 */
-	private static final PluginClassLoader INSTANCE = new PluginClassLoader();
+	private static PluginClassLoader instance;
 	/**
 	 * This list contains a class loader for each url added to this class loader.
 	 */
@@ -65,9 +65,9 @@ public final class PluginClassLoader extends ClassLoader {
 		final List<MIDependency> libs = FileManager.getInstance().loadAllDependencies();
 		for (final MIDependency lib : libs) {
 			try {
-				addURL(new URL("file", "localhost", FileManager.getInstance().getFullPath(lib)));
-			} catch (MalformedURLException ex) {
-				LOG.warn("Could not load library.", ex);
+				this.addURL(new URL("file", "localhost", FileManager.getInstance().getFullPath(lib)));
+			} catch (final MalformedURLException ex) {
+				PluginClassLoader.LOG.warn("Could not load library.", ex);
 			}
 		}
 	}
@@ -106,9 +106,18 @@ public final class PluginClassLoader extends ClassLoader {
 	 * @return The singleton instance of this class.
 	 */
 	public static final PluginClassLoader getInstance() {
+		/* Create the singleton instance if necessary and use a doPrivileged-block. */
 		synchronized (PluginClassLoader.class) {
-			return PluginClassLoader.INSTANCE;
+			if (PluginClassLoader.instance == null) {
+				PluginClassLoader.instance = (PluginClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
+					@Override
+					public Object run() {
+						return new PluginClassLoader();
+					}
+				});
+			}
 		}
+		return PluginClassLoader.instance;
 	}
 
 	/**
@@ -124,7 +133,7 @@ public final class PluginClassLoader extends ClassLoader {
 	public Class<?> loadClass(final String name) throws ClassNotFoundException {
 		try {
 			return ClassLoader.getSystemClassLoader().loadClass(name);
-		} catch (ClassNotFoundException ex) {
+		} catch (final ClassNotFoundException ex) {
 			/* Ignore exception. */
 		}
 		synchronized (this) {
-- 
GitLab