From f59c6167d70c9f00debc0f20e5f907066ba1f463 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Sat, 4 Feb 2012 11:00:16 +0100
Subject: [PATCH] Checkstyle; Corrected some bugs; Continued with the
 uploading-functionality

---
 .../AvailableDependenciesBean.java            | 33 +++++++++++++++++--
 .../application/AvailableProjectsBean.java    | 18 ++++++++--
 .../beans/application/package-info.java       | 24 ++++++++++++++
 .../request/SelectedDependenciesBean.java     | 14 ++++++++
 .../webgui/beans/request/package-info.java    | 25 ++++++++++++++
 .../session/DependencyUploadController.java   | 26 +++++++++++++--
 .../beans/session/SelectedProjectBean.java    | 14 ++++++++
 .../webgui/beans/session/package-info.java    | 25 ++++++++++++++
 .../kieker/webgui/common/FileManager.java     | 19 ++++++++++-
 .../kieker/webgui/common/package-info.java    | 25 ++++++++++++++
 .../kieker/webgui/converter/package-info.java | 25 ++++++++++++++
 Kieker.WebGUI/src/main/webapp/main.xhtml      | 10 ++++--
 .../src/main/webapp/manageDependencies.xhtml  |  9 +++--
 13 files changed, 254 insertions(+), 13 deletions(-)
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/package-info.java
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/package-info.java
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/common/package-info.java
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/converter/package-info.java

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
index 7230e399..1840faf7 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
@@ -36,22 +36,51 @@ public class AvailableDependenciesBean {
 
 	private final List<MIDependency> dependencies;
 
+	/**
+	 * Creates a new instance of this class.
+	 */
 	public AvailableDependenciesBean() {
 		this.dependencies = FileManager.getInstance().loadAllDependencies();
 	}
 
+	/**
+	 * Delivers the currently available dependencies as a list.
+	 * 
+	 * @return All available dependencies.
+	 */
 	public List<MIDependency> getDependencies() {
 		return this.dependencies;
 	}
 
-	public void upload(final UploadedFile file) {
+	/**
+	 * Tries to upload a given file as a new dependency. If the dependency does already exist, it will be overwritten.
+	 * 
+	 * @param file
+	 *            The file to be uploaded.
+	 */
+	public void uploadDependency(final UploadedFile file) {
 		final MIDependency dependency = FileManager.getInstance().uploadDependency(file);
 		if (dependency != null) {
+			/*
+			 * Is is possible that we already have a dependency with the same name and have to remove it first.
+			 */
+			for (final MIDependency dep : this.dependencies) {
+				if (dep.getFilePath().equals(dependency.getFilePath())) {
+					this.dependencies.remove(dep);
+					break;
+				}
+			}
 			this.dependencies.add(dependency);
 		}
 	}
 
-	public void delete(final MIDependency dependency) {
+	/**
+	 * Tries to delete a given dependency.
+	 * 
+	 * @param dependency
+	 *            The dependency to be removed.
+	 */
+	public void deleteDependency(final MIDependency dependency) {
 		final boolean result = FileManager.getInstance().deleteDependency(dependency);
 		if (result) {
 			this.dependencies.remove(dependency);
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
index d176369b..5c5d1232 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
@@ -45,11 +45,21 @@ public class AvailableProjectsBean {
 	private final List<MIProject> projects;
 	private final MAnalysisMetaModelFactory factory;
 
+	/**
+	 * Creates a new instance of this class.
+	 */
 	public AvailableProjectsBean() {
 		this.projects = FileManager.getInstance().loadAllProjects();
 		this.factory = new MAnalysisMetaModelFactory();
 	}
 
+	/**
+	 * Uses the given name to create a new project. If a project with the same
+	 * name does already exist, nothing happens.
+	 * 
+	 * @param projectName
+	 *            The name of the new project.
+	 */
 	public synchronized void addProject(final String projectName) {
 		/*
 		 * Create a new project.
@@ -68,7 +78,7 @@ public class AvailableProjectsBean {
 			final FacesContext context = FacesContext.getCurrentInstance();
 			final SelectedProjectBean bean = context.getApplication().evaluateExpressionGet(context, "#{selectedProjectBean}",
 					SelectedProjectBean.class);
-			if (bean.getMainProject() == null) {
+			if (bean != null && bean.getMainProject() == null) {
 				bean.setMainProject(project);
 			}
 
@@ -76,7 +86,11 @@ public class AvailableProjectsBean {
 		}
 	}
 
-	@SuppressWarnings("unused")
+	/**
+	 * Delivers the currently available projects as a tree root.
+	 * 
+	 * @returns The root of the currently available projects.
+	 */
 	public synchronized TreeNode getProjectsRoot() {
 		final TreeNode root = new DefaultTreeNode("Root", null);
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
new file mode 100644
index 00000000..3fd1c061
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
@@ -0,0 +1,24 @@
+/***************************************************************************
+ * Copyright 2012 by
+ *  + Christian-Albrechts-University of Kiel
+ *    + Department of Computer Science
+ *      + Software Engineering Group 
+ *  and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+/**
+ * This package contains all beans with application scope.
+ */
+package kieker.webgui.beans.application;
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 625fc06b..812fdfd0 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
@@ -34,6 +34,9 @@ public class SelectedDependenciesBean {
 
 	private DualListModel<String> dependencies;
 
+	/**
+	 * Creates a new instance of this class.
+	 */
 	public SelectedDependenciesBean() {
 		final List<String> source = new ArrayList<String>();
 		final List<String> target = new ArrayList<String>();
@@ -44,10 +47,21 @@ public class SelectedDependenciesBean {
 		this.dependencies = new DualListModel<String>(source, target);
 	}
 
+	/**
+	 * Delivers the stored dependencies within this bean.
+	 * 
+	 * @return The dependencies dual model.
+	 */
 	public DualListModel<String> getDependencies() {
 		return this.dependencies;
 	}
 
+	/**
+	 * Sets the dependencies to be stored within this bean to a new value.
+	 * 
+	 * @param dependencies
+	 *            The new dependencies dual model.
+	 */
 	public void setDependencies(final DualListModel<String> dependencies) {
 		this.dependencies = dependencies;
 	}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/package-info.java
new file mode 100644
index 00000000..e4a52d8d
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/package-info.java
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * Copyright 2012 by
+ *  + Christian-Albrechts-University of Kiel
+ *    + Department of Computer Science
+ *      + Software Engineering Group 
+ *  and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+/**
+ * This package contains all beans with request scope.
+ */
+package kieker.webgui.beans.request;
+
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
index 1b80e64f..68430d29 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
@@ -22,8 +22,9 @@ package kieker.webgui.beans.session;
 
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.SessionScoped;
+import javax.faces.context.FacesContext;
 
-import kieker.webgui.common.FileManager;
+import kieker.webgui.beans.application.AvailableDependenciesBean;
 
 import org.primefaces.model.UploadedFile;
 
@@ -42,15 +43,36 @@ public class DependencyUploadController {
 	 */
 	public DependencyUploadController() {}
 
+	/**
+	 * Delivers the instance stored within this bean.
+	 * 
+	 * @return The currently stored value within this bean.
+	 */
 	public UploadedFile getFile() {
 		return this.file;
 	}
 
+	/**
+	 * Sets the new value of the bean.
+	 * 
+	 * @param file
+	 *            The file instance to be stored within this bean.
+	 */
 	public void setFile(final UploadedFile file) {
 		this.file = file;
 	}
 
+	/**
+	 * Tries to upload the currently stored value within this bean.
+	 */
 	public void upload() {
-		FileManager.getInstance().uploadDependency(this.file);
+		if (this.file != null) {
+			final FacesContext context = FacesContext.getCurrentInstance();
+			final AvailableDependenciesBean bean = context.getApplication().evaluateExpressionGet(context, "#{availableDependenciesBean}",
+					AvailableDependenciesBean.class);
+			if (bean != null) {
+				bean.uploadDependency(this.file);
+			}
+		}
 	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
index 8ed87922..017b7703 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
@@ -24,6 +24,7 @@ import javax.faces.bean.SessionScoped;
 
 import kieker.analysis.model.analysisMetaModel.MIProject;
 
+import org.primefaces.event.NodeSelectEvent;
 import org.primefaces.model.DefaultTreeNode;
 import org.primefaces.model.TreeNode;
 
@@ -82,6 +83,10 @@ public class SelectedProjectBean {
 		return this.selectedNode;
 	}
 
+	public void onNodeSelect(final NodeSelectEvent event) {
+		this.setSelectedNode(event.getTreeNode());
+	}
+
 	public void setSelectedNode(final TreeNode selectedNode) {
 		this.selectedNode = selectedNode;
 		if (selectedNode != null && selectedNode.getData() instanceof MIProject) {
@@ -91,6 +96,15 @@ public class SelectedProjectBean {
 		}
 	}
 
+	/**
+	 * Delivers the "font weight" (whether the font is bold or normal) for a
+	 * given project. This can be especially be used to mark a selected main
+	 * project.
+	 * 
+	 * @param project
+	 *            The project to be checked.
+	 * @return "bold" if the given project is the current main project, "normal" otherwise.
+	 */
 	public String getFontWeight(final MIProject project) {
 		if (project == this.mainProject) {
 			return "bold";
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/package-info.java
new file mode 100644
index 00000000..41ada39c
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/package-info.java
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * Copyright 2012 by
+ *  + Christian-Albrechts-University of Kiel
+ *    + Department of Computer Science
+ *      + Software Engineering Group 
+ *  and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+/**
+ * This package contains all beans with session scope.
+ */
+package kieker.webgui.beans.session;
+
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
index b836ae0a..00dea2e7 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
@@ -59,11 +59,17 @@ public final class FileManager {
 	private static final FileManager INSTANCE = new FileManager();
 	private final MAnalysisMetaModelFactory factory;
 
+	/**
+	 * Creates a new instance of this class.
+	 */
 	private FileManager() {
 		this.checkAndCreateDirectories();
 		this.factory = new MAnalysisMetaModelFactory();
 	}
 
+	/**
+	 * Checks whether all directories are available and creates them if necessary.
+	 */
 	private synchronized void checkAndCreateDirectories() {
 		/*
 		 * Make sure that the directories exist and create them if necessary.
@@ -129,7 +135,6 @@ public final class FileManager {
 	 */
 	public synchronized boolean saveNewProject(final MIProject project) {
 		final String projectName = project.getName();
-
 		final File dirProject = new File(FileManager.PROJECT_DIR + File.separator + projectName);
 
 		/*
@@ -250,6 +255,11 @@ public final class FileManager {
 		return FileManager.INSTANCE;
 	}
 
+	/**
+	 * This method tries to load all available dependencies from the file system.
+	 * 
+	 * @return A list containing all available dependencies. If there are no files, an empty list will be returned.
+	 */
 	public List<MIDependency> loadAllDependencies() {
 		final List<MIDependency> resultList = new ArrayList<MIDependency>();
 		/*
@@ -271,6 +281,13 @@ public final class FileManager {
 		return resultList;
 	}
 
+	/**
+	 * Tries to delete a given dependency.
+	 * 
+	 * @param dependency
+	 *            The dependency to be removed.
+	 * @return true iff the dependency exists and the removal was succesful.
+	 */
 	public boolean deleteDependency(final MIDependency dependency) {
 		final File file = new File(dependency.getFilePath());
 		if (file.isFile()) {
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/package-info.java
new file mode 100644
index 00000000..a28a880a
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/package-info.java
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * Copyright 2012 by
+ *  + Christian-Albrechts-University of Kiel
+ *    + Department of Computer Science
+ *      + Software Engineering Group 
+ *  and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+/**
+ * This package contains all classes with general and common purpose.
+ */
+package kieker.webgui.common;
+
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/package-info.java
new file mode 100644
index 00000000..14eab31e
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/package-info.java
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * Copyright 2012 by
+ *  + Christian-Albrechts-University of Kiel
+ *    + Department of Computer Science
+ *      + Software Engineering Group 
+ *  and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+/**
+ * This package contains all converters used within the project.
+ */
+package kieker.webgui.converter;
+
diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml
index 4f108d78..1b6da6e5 100644
--- a/Kieker.WebGUI/src/main/webapp/main.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/main.xhtml
@@ -13,7 +13,7 @@
 
         <h:body>
             <!-- This is the layout for the whole page. -->
-            <p:layout fullPage="true">
+            <p:layout id="layout" fullPage="true">
 
                 <!-- ******************************************************************************** -->
                 <!-- This is the top unit within the layout and is used for the menu bar. -->
@@ -34,7 +34,9 @@
                             <!-- This is the submenu for the current project, for example if someone doesn't want to use the context menu within the browser. -->
                             <p:submenu label="Current Project">
                                 <p:menuitem value="Save Project" ajax="true" />
-                                <p:menuitem value="Set as Main Project" ajax="true" />
+                                <p:menuitem value="Set as Main Project" ajax="true"
+                                            action="#{selectedProjectBean.setMainProject(selectedProjectBean.getSelectedProject())}"
+                                            update="projectsForm" />
                                 <p:separator />
 
                                 <p:menuitem value="Delete Project" ajax="true" />
@@ -57,12 +59,13 @@
 
                 <!-- ******************************************************************************** -->
                 <!-- The following layout is at the left side of the page and shows the available projects. -->
-                <p:layoutUnit header="Projects" collapsible="true" position="west"
+                <p:layoutUnit id="projectsLayout" header="Projects" collapsible="true" position="west"
                               size="200" resizable="true" minSize="100">
                     <h:form id="projectsForm">
                         <p:tree selection="#{selectedProjectBean.selectedNode}"
                                 id="projectsTree" selectionMode="single" style="width: auto"
                                 value="#{availableProjectsBean.projectsRoot}" var="node">
+                            <p:ajax event="select" listener="#{selectedProjectBean.onNodeSelect}"/>
                             <p:treeNode type="project">
                                 <h:outputText
                                     style="font-weight: #{selectedProjectBean.getFontWeight(node)}"
@@ -198,6 +201,7 @@
                         <br /> <br />
                         <p:commandButton value="Ok"
                                          action="#{availableProjectsBean.addProject(stringBean.string)}"
+                                         update="projectsForm"
                                          oncomplete="newProjectDialog.hide()" />
                         <p:spacer width="100" height="10" />
                         <p:commandButton value="Cancel" onclick="newProjectDialog.hide()" />
diff --git a/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml b/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml
index 66751840..7e389e97 100644
--- a/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml
@@ -27,7 +27,7 @@
 
                 <p:layoutUnit header="Currently available Dependencies" position="center" >
                     <!-- This form shows the currently available dependencies. -->
-                    <h:form>
+                    <h:form id="currentDependenciesForm">
                         <p:dataTable  id="currentDependencies" value="#{availableDependenciesBean.dependencies}" var="dependency" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" >     
 
                             <p:column>  
@@ -50,9 +50,12 @@
                                 </div>
                             </p:column> 
 
-                            <p:column style="width:40px">  
+                           	<p:column style="width:40px">  
+                            	<f:facet name="header">  
+                                </f:facet>  
                                 <div align="center">
-                                    <p:commandButton icon="ui-icon-trash" title="Delete" action="{availableDependenciesBean(dependency)}"/>  
+                                    <p:commandButton ajax="true" update="currentDependenciesForm" icon="ui-icon-trash" title="Delete" 
+                                    action="#{availableDependenciesBean.deleteDependency(dependency)}"/>  
                                 </div>
                             </p:column> 
                         </p:dataTable>  
-- 
GitLab