From b6aefb0989160828eedce767df0605222b5cd65e Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Mon, 26 Dec 2011 17:02:35 +0100
Subject: [PATCH] Added some more functionality; Refactored some code; Added
 the plugin-finder.

---
 .../beans/AvailablePluginsBean.java           |  2 +-
 .../{ => webgui}/beans/ComponentBean.java     |  2 +-
 .../beans/CurrentProjectBean.java             |  2 +-
 .../beans/CurrentSelectedPluginBean.java      |  2 +-
 .../{ => webgui}/beans/ProjectsBean.java      |  2 +-
 .../java/kieker/webgui/beans/StringBean.java  | 24 ++++++++++++
 .../kieker/{ => webgui}/beans/TreeBean.java   |  2 +-
 .../kieker/webgui/common/PluginFinder.java    | 39 +++++++++++++++++++
 Kieker.WebGUI/src/main/webapp/main.xhtml      | 12 +++++-
 9 files changed, 80 insertions(+), 7 deletions(-)
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/AvailablePluginsBean.java (95%)
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/ComponentBean.java (98%)
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/CurrentProjectBean.java (91%)
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/CurrentSelectedPluginBean.java (76%)
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/ProjectsBean.java (98%)
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java
 rename Kieker.WebGUI/src/main/java/kieker/{ => webgui}/beans/TreeBean.java (97%)
 create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java

diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/AvailablePluginsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java
similarity index 95%
rename from Kieker.WebGUI/src/main/java/kieker/beans/AvailablePluginsBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java
index 89458881..f1be8d02 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/AvailablePluginsBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/ComponentBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java
similarity index 98%
rename from Kieker.WebGUI/src/main/java/kieker/beans/ComponentBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java
index 6938d17e..3b47ebd4 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/ComponentBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 import javax.faces.bean.ApplicationScoped;
 import javax.faces.bean.ManagedBean;
diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/CurrentProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java
similarity index 91%
rename from Kieker.WebGUI/src/main/java/kieker/beans/CurrentProjectBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java
index f6d46719..162bc70f 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/CurrentProjectBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 import kieker.analysis.model.analysisMetaModel.MIProject;
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/CurrentSelectedPluginBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java
similarity index 76%
rename from Kieker.WebGUI/src/main/java/kieker/beans/CurrentSelectedPluginBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java
index 630ca5c2..af894290 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/CurrentSelectedPluginBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 /**
  *
diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/ProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java
similarity index 98%
rename from Kieker.WebGUI/src/main/java/kieker/beans/ProjectsBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java
index 9f18ed15..1e668396 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/ProjectsBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java
new file mode 100644
index 00000000..b14a57e2
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java
@@ -0,0 +1,24 @@
+package kieker.webgui.beans;
+
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.RequestScoped;
+
+/**
+ *
+ * @author Nils Christian Ehmke
+ */
+@ManagedBean
+@RequestScoped
+public class StringBean {
+
+    private String string;
+
+    public String getString() {
+        return string;
+    }
+
+    public void setString(String string) {
+        this.string = string;
+    }
+
+}
diff --git a/Kieker.WebGUI/src/main/java/kieker/beans/TreeBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java
similarity index 97%
rename from Kieker.WebGUI/src/main/java/kieker/beans/TreeBean.java
rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java
index 0d2ecfc9..9f8112ae 100644
--- a/Kieker.WebGUI/src/main/java/kieker/beans/TreeBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java
@@ -1,4 +1,4 @@
-package kieker.beans;
+package kieker.webgui.beans;
 
 import javax.faces.bean.ApplicationScoped;
 import javax.faces.bean.ManagedBean;
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java
new file mode 100644
index 00000000..2c96f898
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java
@@ -0,0 +1,39 @@
+package kieker.webgui.common;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import kieker.analysis.plugin.port.Plugin;
+
+/**
+ * @author Nils Christian Ehmke
+ */
+public class PluginFinder {
+
+    public static List<Class<?>> getAllPluginsWithinJar(final URL url) throws IOException {
+        final ClassLoader classLoader = new URLClassLoader(new URL[]{url});
+        final JarFile jarFile = new JarFile(new File(url.getPath()));
+        final List<Class<?>> result = new ArrayList<Class<?>>();
+        Enumeration<JarEntry> jarEntries = jarFile.entries();
+        while (jarEntries.hasMoreElements()) {
+            JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
+            try {
+                String name = jarEntry.toString();
+                name = name.replace('/', '.');
+                name = name.replace(".class", "");
+                Class<?> c = classLoader.loadClass(name);
+                if (c.isAnnotationPresent(Plugin.class)) {
+                    result.add(c);
+                }
+            } catch (Throwable ex) {
+            }
+        }
+        return result;
+    }
+}
diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml
index cc18abb3..1e1bfa88 100644
--- a/Kieker.WebGUI/src/main/webapp/main.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/main.xhtml
@@ -33,7 +33,7 @@
                     <h:form>
                         <p:menubar style="font-size: 15px">  
                             <p:submenu label="Projects">
-                                <p:menuitem value="New Project" action="#{projectsBean.addProject('NewProject')}" ajax="true" update="ProjectsList"/>
+                                <p:menuitem value="New Project" onclick="NewProjectDialog.show();" ajax="true" update="ProjectsList"/>
                                 <p:menuitem value="Save Project"/>
                                 <p:separator /> 
                                 <p:menuitem value="Delete Project"/>
@@ -115,6 +115,16 @@
             <h:outputText value="Copyright (c) 2011 Kieker Project"/> <br/><br/>
             <a href="https://se.informatik.uni-kiel.de/kieker/">https://se.informatik.uni-kiel.de/kieker/</a>
         </p:dialog>
+
+        <p:dialog header="New Project" resizable="false" modal="true" style="font-size: 15px;width: auto" widgetVar="NewProjectDialog">
+            <h:form>
+                <h:outputText value="Please enter the name of the new project: " /><br/><br/>
+                <center>
+                    <p:inputText style="width: 90%" value="#{stringBean.string}" /><br/><br/>
+                    <p:commandButton value="Submit" action="#{projectsBean.addProject(stringBean.string)}" update="ProjectsList" oncomplete="NewProjectDialog.hide();"/>
+                </center>
+            </h:form>
+        </p:dialog>
     </f:view>
 </html>
 
-- 
GitLab