diff --git a/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar b/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar index ac109796b7bdfaa0b6818ef6332b0de816c05d36..15c8b031e00eafcb48dd93e1ff8222848b5f3211 100644 Binary files a/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar and b/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar differ 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 92e90171c12984e66883ff1330e63d97f189776b..7c04fe091af0e75f8d4116489f273e583e3eaa58 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 @@ -88,7 +88,7 @@ public class AvailableDependenciesBean { } } try { - PluginClassLoader.getInstance().addURL(new URL("file", "localhost", dependency.getFilePath())); + PluginClassLoader.getInstance().addURL(new URL("file", "localhost", FileManager.getInstance().getFullPath(dependency))); this.dependencies.add(dependency); } catch (final MalformedURLException ex) { AvailableDependenciesBean.LOG.error("Could not add the dependency to the ClassLoader.", ex); 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 885b227e759d307a1cad402959b6e0aec45580ee..10c4412ffededcc92da1aa93f224eaf28101d4e3 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 @@ -29,11 +29,16 @@ import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; +import kieker.analysis.model.analysisMetaModel.MIAnalysisPlugin; import kieker.analysis.model.analysisMetaModel.MIDependency; import kieker.analysis.model.analysisMetaModel.MIProject; +import kieker.analysis.model.analysisMetaModel.MIReader; +import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory; import kieker.analysis.plugin.AbstractAnalysisPlugin; +import kieker.analysis.plugin.AbstractPlugin; import kieker.analysis.plugin.AbstractReaderPlugin; +import kieker.webgui.common.FileManager; import kieker.webgui.common.PluginClassLoader; import kieker.webgui.common.PluginFinder; @@ -175,22 +180,23 @@ public class SelectedProjectBean { * * @return A list with all readers. */ - public final List<Class<?>> getAvailableReaders() { - final List<Class<?>> list = new ArrayList<Class<?>>(); + public final List<Class<AbstractReaderPlugin>> getAvailableReaders() { + final List<Class<AbstractReaderPlugin>> list = new ArrayList<Class<AbstractReaderPlugin>>(); if (this.mainProject != null) { for (final MIDependency lib : this.mainProject.getDependencies()) { try { - PluginClassLoader.getInstance().addURL(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, lib.getFilePath())); + PluginClassLoader.getInstance().addURL( + new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib))); } catch (final MalformedURLException ex) { // TODO Log exception } try { final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, - SelectedProjectBean.URL_LOCALHOST, lib.getFilePath())); + SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib))); for (final Class<?> plugin : plugins) { if (!Modifier.isAbstract(plugin.getModifiers()) && AbstractReaderPlugin.class.isAssignableFrom(plugin)) { - list.add(plugin); + list.add((Class<AbstractReaderPlugin>) plugin); } } } catch (final MalformedURLException ex) { @@ -208,22 +214,23 @@ public class SelectedProjectBean { * * @return A list with all filter. */ - public final List getAvailableFilters() { - final List<Class<?>> list = new ArrayList<Class<?>>(); + public final List<Class<AbstractAnalysisPlugin>> getAvailableFilters() { + final List<Class<AbstractAnalysisPlugin>> list = new ArrayList<Class<AbstractAnalysisPlugin>>(); if (this.mainProject != null) { for (final MIDependency lib : this.mainProject.getDependencies()) { try { - PluginClassLoader.getInstance().addURL(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, lib.getFilePath())); + PluginClassLoader.getInstance().addURL( + new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib))); } catch (final MalformedURLException ex) { // TODO Log exception } try { final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, - SelectedProjectBean.URL_LOCALHOST, lib.getFilePath())); + SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib))); for (final Class<?> plugin : plugins) { if (!Modifier.isAbstract(plugin.getModifiers()) && AbstractAnalysisPlugin.class.isAssignableFrom(plugin)) { - list.add(plugin); + list.add((Class<AbstractAnalysisPlugin>) plugin); } } } catch (final MalformedURLException ex) { @@ -257,7 +264,7 @@ public class SelectedProjectBean { } try { final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, - SelectedProjectBean.URL_LOCALHOST, lib.getFilePath())); + SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib))); for (final Class<?> plugin : plugins) { if (!Modifier.isAbstract(plugin.getModifiers())) { if (AbstractReaderPlugin.class.isAssignableFrom(plugin)) { @@ -277,4 +284,23 @@ public class SelectedProjectBean { } return root; } + + public final void addPlugin(final Class<AbstractPlugin> pluginClass) { + // TODO It seems like it is necessary to completly load all properties, including the available ports in order to work + final MAnalysisMetaModelFactory factory = new MAnalysisMetaModelFactory(); + + if (AbstractReaderPlugin.class.isAssignableFrom(pluginClass)) { + final MIReader reader = factory.createReader(); + reader.setClassname(pluginClass.getCanonicalName()); + reader.setName(pluginClass.getSimpleName()); + + this.mainProject.getPlugins().add(reader); + } else { + final MIAnalysisPlugin filter = factory.createAnalysisPlugin(); + filter.setClassname(pluginClass.getCanonicalName()); + filter.setName(pluginClass.getSimpleName()); + + this.mainProject.getPlugins().add(filter); + } + } } 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 401e351bc20ecb6ea1522b1c77681146af983bb6..7ecdbc3ad1bc502f21e0636c3012cd2de72effc6 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java @@ -30,6 +30,8 @@ import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import kieker.analysis.AnalysisController; +import kieker.analysis.model.analysisMetaModel.*; +import kieker.analysis.model.analysisMetaModel.*; import kieker.analysis.model.analysisMetaModel.MIDependency; import kieker.analysis.model.analysisMetaModel.MIProject; import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory; @@ -274,7 +276,7 @@ public final class FileManager { } } final MIDependency dependency = this.factory.createDependency(); - dependency.setFilePath(depFile.getAbsolutePath()); + dependency.setFilePath(depFile.getName()); return dependency; } @@ -302,7 +304,7 @@ public final class FileManager { for (final File file : files) { if (file.isFile() && file.getName().endsWith(FileManager.JAR_EXTENSION)) { final MIDependency dependency = this.factory.createDependency(); - dependency.setFilePath(file.getAbsolutePath()); + dependency.setFilePath(file.getName()); resultList.add(dependency); } } @@ -319,7 +321,7 @@ public final class FileManager { * @return true iff the dependency exists and the removal was succesful. */ public final synchronized boolean deleteDependency(final MIDependency dependency) { - final File file = new File(dependency.getFilePath()); + final File file = new File(FileManager.LIB_DIR, dependency.getFilePath()); if (file.isFile()) { return file.delete(); } @@ -366,6 +368,9 @@ public final class FileManager { return AnalysisController.loadFromFile(projectFile); } return null; + } + public String getFullPath(final MIDependency dependency) { + return new File(FileManager.LIB_DIR, dependency.getFilePath()).getAbsolutePath(); } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java index 89d7ffad1f71339e352bce38aac7b115874d3a62..88964223ff2decb9cde814687d92c40e4809998c 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java @@ -30,6 +30,7 @@ import javax.faces.convert.Converter; import javax.faces.convert.FacesConverter; import kieker.analysis.model.analysisMetaModel.MIDependency; +import kieker.webgui.common.FileManager; import kieker.webgui.common.PluginFinder; /** @@ -113,7 +114,8 @@ public class MIDependencyToCountPluginsConverter implements Converter { } String result; try { - result = Integer.toString(PluginFinder.getAllPluginsWithinJar(new URL("file", "localhost", ((MIDependency) o).getFilePath())).size()); + result = Integer.toString(PluginFinder.getAllPluginsWithinJar(new URL("file", "localhost", FileManager.getInstance().getFullPath((MIDependency) o))) + .size()); } catch (final MalformedURLException ex) { result = ""; } catch (final NullPointerException ex) { diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml index b48b150b4b43483a3f00ed92484bcc1156b7e4a2..43945563355ce4fd92e45984695ff6b0b6db431a 100644 --- a/Kieker.WebGUI/src/main/webapp/main.xhtml +++ b/Kieker.WebGUI/src/main/webapp/main.xhtml @@ -101,6 +101,10 @@ <!-- ******************************************************************************** --> <!-- The following layout unit is within the center and used for the graph. --> <p:layoutUnit position="center" id="centerLayout"> + <ui:repeat id="centerRepeat" value="#{selectedProjectBean.mainProject.plugins}" var="plugin"> + <p:panel header="#{plugin.name}" id="plugin" style="width: 30%"/> + <p:draggable for="plugin"/> + </ui:repeat> </p:layoutUnit> <!-- ******************************************************************************** --> @@ -148,12 +152,12 @@ <p:accordionPanel multiple="true" activeIndex=""> <p:tab title="Reader"> <ui:repeat value="#{selectedProjectBean.availableReaders}" var="reader"> - <p:commandLink value="#{reader.simpleName}"/><br/> + <p:commandLink value="#{reader.simpleName}" action="#{selectedProjectBean.addPlugin(reader)}" update=":projectsForm :centerLayout" /><br/> </ui:repeat> </p:tab> <p:tab title="Filter"> <ui:repeat value="#{selectedProjectBean.availableFilters}" var="filter"> - <p:commandLink value="#{filter.simpleName}"/><br/> + <p:commandLink value="#{filter.simpleName}" action="#{selectedProjectBean.addPlugin(filter)}" update=":projectsForm :centerLayout"/><br/> </ui:repeat> </p:tab> </p:accordionPanel>