From f2bc6d09995a98efb23819a290303dda69a03fa0 Mon Sep 17 00:00:00 2001 From: Nils Christian Ehmke <nie@informatik.uni-kiel.de> Date: Sun, 18 Mar 2012 19:53:43 +0100 Subject: [PATCH] Moved some code; Properties can now be manipulated; Added details. --- ...denciesBean.java => DependenciesBean.java} | 20 ++++--- ...bleProjectsBean.java => ProjectsBean.java} | 27 +++------ .../beans/application/ThemeSwitcherBean.java | 11 ++-- ...troller.java => DependencyUploadBean.java} | 10 ++-- .../session/SelectedMainProjectBean.java | 29 +++++++++ ...entPlugin.java => SelectedPluginBean.java} | 32 +++++++--- .../beans/session/SelectedProjectBean.java | 60 ++++++++++++++----- Kieker.WebGUI/src/main/webapp/main.xhtml | 34 ++++++++--- .../src/main/webapp/main/projectDialogs.xhtml | 27 ++++++++- .../src/main/webapp/manageDependencies.xhtml | 8 +-- .../src/main/webapp/projectDependencies.xhtml | 2 +- 11 files changed, 181 insertions(+), 79 deletions(-) rename Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/{AvailableDependenciesBean.java => DependenciesBean.java} (77%) rename Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/{AvailableProjectsBean.java => ProjectsBean.java} (86%) rename Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/{DependencyUploadController.java => DependencyUploadBean.java} (86%) create mode 100644 Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java rename Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/{CurrentPlugin.java => SelectedPluginBean.java} (67%) diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/DependenciesBean.java similarity index 77% rename from Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/DependenciesBean.java index 7c04fe09..5a7457d4 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/DependenciesBean.java @@ -36,17 +36,20 @@ import kieker.webgui.common.PluginClassLoader; import org.primefaces.model.UploadedFile; /** + * This bean manages all dependencies (libraries) within the application. The bean can be used to add and remove dependencies as well as to get all available + * dependencies. This bean doesn't modify other beans directly. * * @author Nils Christian Ehmke * @version 1.0 */ @ManagedBean @ApplicationScoped -public class AvailableDependenciesBean { +public class DependenciesBean { + /** * The logger within this class. */ - private static final Log LOG = LogFactory.getLog(AvailableDependenciesBean.class); + private static final Log LOG = LogFactory.getLog(DependenciesBean.class); /** * The list containing the depenencies. */ @@ -55,12 +58,12 @@ public class AvailableDependenciesBean { /** * Creates a new instance of this class. */ - public AvailableDependenciesBean() { + public DependenciesBean() { this.dependencies = FileManager.getInstance().loadAllDependencies(); } /** - * Delivers the currently available dependencies as a list. + * Delivers the currently available dependencies as a list. The list must <b>not</b> be modified. * * @return All available dependencies. */ @@ -69,7 +72,8 @@ public class AvailableDependenciesBean { } /** - * Tries to upload a given file as a new dependency. If the dependency does already exist, it will be overwritten. + * Tries to upload a given file as a new dependency. If the dependency does already exist, it will be overwritten. If the dependencies has been uploaded + * sucesfully, the plugin class loader will get the lib as well. * * @param file * The file to be uploaded. @@ -91,14 +95,14 @@ public class AvailableDependenciesBean { 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); + DependenciesBean.LOG.error("Could not add the dependency to the ClassLoader.", ex); } } } } /** - * Tries to delete a given dependency. + * Tries to delete a given dependency. Once this has been done, the class loader cannot use the dependency any longer. * * @param dependency * The dependency to be removed. @@ -112,7 +116,7 @@ public class AvailableDependenciesBean { PluginClassLoader.getInstance().removeURL(new URL("file", "localhost", dependency.getFilePath())); this.dependencies.remove(dependency); } catch (final MalformedURLException ex) { - AvailableDependenciesBean.LOG.error("Could not remove the dependency from the ClassLoader.", ex); + DependenciesBean.LOG.error("Could not remove the dependency from the ClassLoader.", ex); } } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java similarity index 86% rename from Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java index 0e4e6465..710b7db0 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java @@ -19,7 +19,6 @@ ***************************************************************************/ package kieker.webgui.beans.application; -import java.io.File; import java.util.List; import javax.faces.application.FacesMessage; @@ -31,9 +30,7 @@ import kieker.analysis.model.analysisMetaModel.MIDependency; import kieker.analysis.model.analysisMetaModel.MIPlugin; import kieker.analysis.model.analysisMetaModel.MIProject; import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory; -import kieker.webgui.beans.session.SelectedProjectBean; import kieker.webgui.common.FileManager; -import org.primefaces.event.ToggleEvent; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; @@ -41,14 +38,15 @@ import org.primefaces.model.TreeNode; /** * This bean can be used to handle all available projects within the program. It is like a blackboard for all other components when it comes to the actual projects * <b>stored</b> on the file system. The properties of the projects, like the adding of dependencies the an actual existing project, can be done otherwise, but the - * storage is done via this bean. + * storage is done via this bean. Other beans (like for the currently selected main project) are not modified directly by this bean. If the user removes the main + * project, the bean for the main project has to handle this. * * @author Nils Christian Ehmke * @version 1.0 */ @ManagedBean @ApplicationScoped -public class AvailableProjectsBean { +public class ProjectsBean { /** * A list containing all available projects. @@ -62,7 +60,7 @@ public class AvailableProjectsBean { /** * Creates a new instance of this class. */ - public AvailableProjectsBean() { + public ProjectsBean() { /* Load all projects from the file system. */ this.projects = FileManager.getInstance().loadAllProjects(); this.factory = new MAnalysisMetaModelFactory(); @@ -88,16 +86,7 @@ public class AvailableProjectsBean { * Try to save the project. If this fails, the project exists already. */ if (FileManager.getInstance().saveNewProject(project)) { - /* - * Set the new project as the main project, if the current user doesn't have one. - */ - final FacesContext context = FacesContext.getCurrentInstance(); - final SelectedProjectBean bean = context.getApplication().evaluateExpressionGet(context, "#{selectedProjectBean}", - SelectedProjectBean.class); - if (bean != null && bean.getMainProject() == null) { - bean.setMainProject(project); - } - + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "New Project: " + projectName)); this.projects.add(project); } else { /* Inform the user about the fail. */ @@ -120,11 +109,13 @@ public class AvailableProjectsBean { final TreeNode dependenciesNode = new DefaultTreeNode("dependencies", "Dependencies", projectNode); final TreeNode usedPluginsNode = new DefaultTreeNode("usedPlugins", "Used Plugins", projectNode); + /* Append the used plugins and dependencies. */ for (final MIPlugin plugin : project.getPlugins()) { - new DefaultTreeNode("usedPlugin", plugin.getClassname(), usedPluginsNode); + new DefaultTreeNode("usedPlugin", plugin.getName(), usedPluginsNode); } + for (final MIDependency dependency : project.getDependencies()) { - new DefaultTreeNode("dependencies", new File(dependency.getFilePath()).getName(), dependenciesNode); + new DefaultTreeNode("dependencies", dependency.getFilePath(), dependenciesNode); } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java index 44295e53..92891b7d 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java @@ -28,9 +28,8 @@ import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; /** - * This bean is an application-wide bean, responsible for storing the possible - * themes (look and feels) available within the program. It is not possible to - * import new themes during runtime. + * This bean is an application-wide bean, responsible for storing the possible themes (look and feels) available within the program. It is not possible to import new + * themes during runtime. * * @author Nils Christian Ehmke * @version 1.0 @@ -54,16 +53,14 @@ public class ThemeSwitcherBean { /** * Returns the available themes. * - * @return A map containing the user readable names of the themes as a key - * and the actual theme-names as the corresponding value. + * @return A map containing the user readable names of the themes as a key and the actual theme-names as the corresponding value. */ public final Map<String, String> getThemes() { return this.themes; } /** - * Initializes the bean. If one wants to add new themes to the program, - * this is the right place. + * Initializes the bean. If one wants to add new themes to the program, this is the right place. */ @PostConstruct public final void init() { diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadBean.java similarity index 86% rename from Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadBean.java index 8817b703..4f5f2d04 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadBean.java @@ -24,7 +24,7 @@ import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.faces.context.FacesContext; -import kieker.webgui.beans.application.AvailableDependenciesBean; +import kieker.webgui.beans.application.DependenciesBean; import org.primefaces.model.UploadedFile; @@ -35,7 +35,7 @@ import org.primefaces.model.UploadedFile; */ @ManagedBean @SessionScoped -public class DependencyUploadController { +public class DependencyUploadBean { /** * The file stored within this bean. @@ -45,7 +45,7 @@ public class DependencyUploadController { /** * Creates a new instance of this class. */ - public DependencyUploadController() { + public DependencyUploadBean() { /* No code necessary. */ } @@ -74,8 +74,8 @@ public class DependencyUploadController { public void upload() { if (this.file != null) { final FacesContext context = FacesContext.getCurrentInstance(); - final AvailableDependenciesBean bean = context.getApplication().evaluateExpressionGet(context, "#{availableDependenciesBean}", - AvailableDependenciesBean.class); + final DependenciesBean bean = context.getApplication().evaluateExpressionGet(context, "#{availableDependenciesBean}", + DependenciesBean.class); if (bean != null) { bean.uploadDependency(this.file); } 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 new file mode 100644 index 00000000..b14b1338 --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedMainProjectBean.java @@ -0,0 +1,29 @@ +/*************************************************************************** + * 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. + ***************************************************************************/ + +package kieker.webgui.beans.session; + +/** + * + * @author Nils Christian Ehmke + */ +public class SelectedMainProjectBean { + +} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentPlugin.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedPluginBean.java similarity index 67% rename from Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentPlugin.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedPluginBean.java index 6ac84137..56df3821 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentPlugin.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedPluginBean.java @@ -20,31 +20,47 @@ package kieker.webgui.beans.session; -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.MIPlugin; -import kieker.analysis.model.analysisMetaModel.MIProperty; -import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory; /** + * This bean can be used to save the currently selected plugin of the user. * * @author Nils Christian Ehmke + * @version 1.0 */ @ManagedBean @SessionScoped -public class CurrentPlugin { +public final class SelectedPluginBean { + /** + * The plugin which is stored by this container. + */ private MIPlugin plugin; - public CurrentPlugin() {} + /** + * Creates a new instance of this class. + */ + public SelectedPluginBean() {} + /** + * Delivers the stored plugin. + * + * @return The plugin within this container. + */ public MIPlugin getPlugin() { - return plugin; + return this.plugin; } - public void setPlugin(MIPlugin plugin) { + /** + * Sets the plugin stored by this bean. + * + * @param plugin + * The new bean to be stored within this bean. + */ + public void setPlugin(final MIPlugin plugin) { this.plugin = plugin; } } 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 10c4412f..9006c55e 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 @@ -23,21 +23,20 @@ import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Map; 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.*; import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory; import kieker.analysis.plugin.AbstractAnalysisPlugin; import kieker.analysis.plugin.AbstractPlugin; import kieker.analysis.plugin.AbstractReaderPlugin; +import kieker.common.configuration.Configuration; import kieker.webgui.common.FileManager; import kieker.webgui.common.PluginClassLoader; import kieker.webgui.common.PluginFinder; @@ -285,22 +284,51 @@ public class SelectedProjectBean { return root; } + private static void addConfiguration(final AbstractPlugin plugin, final MIPlugin mPlugin) { + /* Get the current configuration and use it to initialize the model plugin. */ + final Configuration configuration = plugin.getCurrentConfiguration(); + final MAnalysisMetaModelFactory factory = new MAnalysisMetaModelFactory(); + + /* Run through all entries. */ + Iterator<Map.Entry<Object, Object>> iterator = configuration.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry<Object, Object> entry = iterator.next(); + /* Create a property object for the current entry. */ + MIProperty property = factory.createProperty(); + property.setName(entry.getKey().toString()); + property.setValue(entry.getValue().toString()); + + mPlugin.getProperties().add(property); + } + } + 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 + // 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(); + try { + AbstractPlugin plugin = pluginClass.getConstructor(Configuration.class).newInstance(new Configuration()); - if (AbstractReaderPlugin.class.isAssignableFrom(pluginClass)) { - final MIReader reader = factory.createReader(); - reader.setClassname(pluginClass.getCanonicalName()); - reader.setName(pluginClass.getSimpleName()); + if (AbstractReaderPlugin.class.isAssignableFrom(pluginClass)) { + final MIReader reader = factory.createReader(); + reader.setClassname(pluginClass.getCanonicalName()); + reader.setName(pluginClass.getSimpleName()); + addConfiguration(plugin, reader); - this.mainProject.getPlugins().add(reader); - } else { - final MIAnalysisPlugin filter = factory.createAnalysisPlugin(); - filter.setClassname(pluginClass.getCanonicalName()); - filter.setName(pluginClass.getSimpleName()); + this.mainProject.getPlugins().add(reader); + } else { + final MIAnalysisPlugin filter = factory.createAnalysisPlugin(); + filter.setClassname(pluginClass.getCanonicalName()); + filter.setName(pluginClass.getSimpleName()); + addConfiguration(plugin, filter); - this.mainProject.getPlugins().add(filter); + this.mainProject.getPlugins().add(filter); + } + } catch (Exception ex) { + // TODO Log exception } } + + public final void removePlugin(final MIPlugin plugin) { + this.mainProject.getPlugins().remove(plugin); + } } diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml index 2300c5af..0450f9ac 100644 --- a/Kieker.WebGUI/src/main/webapp/main.xhtml +++ b/Kieker.WebGUI/src/main/webapp/main.xhtml @@ -31,11 +31,11 @@ <!-- 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" action="#{availableProjectsBean.saveProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> + <p:menuitem value="Save Project" ajax="true" action="#{projectsBean.saveProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> <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" onclick="deleteProjectDialog.show()" /> - <p:menuitem value="Reset Project" ajax="true" action="#{availableProjectsBean.resetProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> + <p:menuitem value="Reset Project" ajax="true" onclick="resetProjectDialog.show()" /> <p:separator /> <p:menuitem value="Configure Dependencies" ajax="false" url="/Kieker.WebGUI/projectDependencies" /> </p:submenu> @@ -44,6 +44,7 @@ <p:menuitem value="About..." ajax="true" onclick="aboutDialog.show()" /> </p:submenu> + <p:menuitem value="Start/Stop Analysis"></p:menuitem> </p:menubar> </h:form> @@ -55,7 +56,7 @@ <p:layoutUnit 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" value="#{availableProjectsBean.projectsRoot}" var="node"> + <p:tree selection="#{selectedProjectBean.selectedNode}" id="projectsTree" selectionMode="single" value="#{projectsBean.projectsRoot}" var="node"> <p:ajax event="select" listener="#{selectedProjectBean.onNodeSelect}"/> <p:treeNode type="project"> @@ -79,12 +80,12 @@ </p:tree> <p:contextMenu for="projectsTree" nodeType="project"> - <p:menuitem value="Save Project" ajax="true" action="#{availableProjectsBean.saveProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> + <p:menuitem value="Save Project" ajax="true" action="#{projectsBean.saveProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> <p:menuitem value="Set as Main Project" ajax="true" action="#{selectedProjectBean.setMainProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm :toolpalette :centerForm" /> <p:separator /> <p:menuitem value="Delete Project" ajax="true" onclick="deleteProjectDialog.show()" /> - <p:menuitem value="Reset Project" ajax="true" action="#{availableProjectsBean.resetProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" /> + <p:menuitem value="Reset Project" ajax="true" onclick="resetProjectDialog.show()" /> <p:separator /> <p:menuitem value="Configure Dependencies" ajax="false" url="/Kieker.WebGUI/projectDependencies" /> </p:contextMenu> @@ -105,7 +106,8 @@ <h:form id="centerForm"> <ui:repeat id="centerRepeat" value="#{selectedProjectBean.mainProject.plugins}" var="plugin"> <p:panel header="#{plugin.name}" closable="true" closeSpeed="200" toggleSpeed="200" toggleable="true" id="plugin" style="width: 30%"> - <p:commandLink ajax="true" value="Configure" action="#{currentPlugin.setPlugin(plugin)}" update=":propertiesForm"/> + <p:commandLink ajax="true" value="Configure" action="#{selectedPluginBean.setPlugin(plugin)}" update=":propertiesForm"/> + <p:ajax event="close" listener="#{selectedProjectBean.removePlugin(plugin)}" update=":centerForm"/> </p:panel> <p:draggable for="plugin"> </p:draggable> @@ -118,16 +120,27 @@ <!-- The following layout unit is located at the bottom and will be used for properties. --> <p:layoutUnit position="south" size="150" header="Properties" resizable="true" collapsible="true"> <h:form id="propertiesForm"> - <c:if test="#{not empty currentPlugin.plugin}"> - <p:dataTable value="#{currentPlugin.plugin.properties}" var="property" id="propertiesList"> + <c:if test="#{not empty selectedPluginBean.plugin}"> + <p:dataTable value="#{selectedPluginBean.plugin.properties}" var="property" id="propertiesList"> <p:column headerText="Key" style="width:125px"> <h:outputText value="#{property.name}"/> </p:column> <p:column headerText="Value" style="width:125px"> - <h:outputText value="#{property.value}"/> + <p:cellEditor > + <f:facet name="output"> + <h:outputText value="#{property.value}"/> + </f:facet> + <f:facet name="input"> + <h:inputText value="#{property.value}"/> + </f:facet> + </p:cellEditor> </p:column> + <p:column headerText="Options" style="width:50px"> + <p:rowEditor /> + </p:column> + </p:dataTable> </c:if> </h:form> @@ -150,6 +163,9 @@ <p:commandLink value="#{filter.simpleName}" action="#{selectedProjectBean.addPlugin(filter)}" update=":projectsForm :centerForm"/><br/> </ui:repeat> </p:tab> + <p:tab title="Repositories"> + + </p:tab> </p:accordionPanel> </h:form> </p:layoutUnit> diff --git a/Kieker.WebGUI/src/main/webapp/main/projectDialogs.xhtml b/Kieker.WebGUI/src/main/webapp/main/projectDialogs.xhtml index 9adc77b3..35963c35 100644 --- a/Kieker.WebGUI/src/main/webapp/main/projectDialogs.xhtml +++ b/Kieker.WebGUI/src/main/webapp/main/projectDialogs.xhtml @@ -3,7 +3,8 @@ xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" - xmlns:p="http://primefaces.org/ui"> + xmlns:p="http://primefaces.org/ui" + xmlns:c="http://java.sun.com/jsp/jstl/core"> <!-- ******************************************************************************** --> <!-- This is the dialog to create a new project. --> @@ -21,7 +22,7 @@ value="#{stringBean.string}" /> <br /> <br /> <p:commandButton value="Ok" - action="#{availableProjectsBean.addProject(stringBean.string)}" + action="#{projectsBean.addProject(stringBean.string)}" update=":projectsForm" oncomplete="newProjectDialog.hide()" /> <p:spacer width="100" height="10" /> @@ -41,7 +42,7 @@ <br /> <center> <p:commandButton value="Yes" - action="#{availableProjectsBean.deleteProject(selectedProjectBean.getSelectedProject())}" + action="#{projectsBean.deleteProject(selectedProjectBean.getSelectedProject())}" update=":projectsForm" oncomplete="deleteProjectDialog.hide()" /> <p:spacer width="100" height="10" /> @@ -50,4 +51,24 @@ </h:form> </p:dialog> <!-- ******************************************************************************** --> + + <!-- ******************************************************************************** --> + <!-- This is the dialog to reset the selected project. --> + <p:dialog id="resetProjectDialog" header="Reset Project" resizable="false" + modal="true" widgetVar="resetProjectDialog"> + <h:form> + <h:outputText value="Do you really want to reset the selected project?" /> + <br /> + <br /> + <center> + <p:commandButton value="Yes" + action="#{projectsBean.resetProject(selectedProjectBean.getSelectedProject())}" + update=":projectsForm" + oncomplete="resetProjectDialog.hide()" /> + <p:spacer width="100" height="10" /> + <p:commandButton value="Cancel" onclick="resetProjectDialog.hide()" /> + </center> + </h:form> + </p:dialog> + <!-- ******************************************************************************** --> </ui:composition> \ No newline at end of file diff --git a/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml b/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml index 29b158d4..6ed5e575 100644 --- a/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml +++ b/Kieker.WebGUI/src/main/webapp/manageDependencies.xhtml @@ -26,7 +26,7 @@ <p:layoutUnit header="Currently available Dependencies" position="center" > <!-- This form shows the currently available dependencies. --> <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:dataTable id="currentDependencies" value="#{dependenciesBean.dependencies}" var="dependency" paginator="true" rows="10" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" > <p:column> <f:facet name="header"> @@ -64,7 +64,7 @@ </f:facet> <div align="center"> <p:commandButton ajax="true" update=":currentDependenciesForm" icon="ui-icon-trash" title="Delete" - action="#{availableDependenciesBean.deleteDependency(dependency)}"/> + action="#{dependenciesBean.deleteDependency(dependency)}"/> </div> </p:column> </p:dataTable> @@ -77,13 +77,13 @@ <br /> <br /> <h:form enctype="multipart/form-data"> - <p:fileUpload value="#{dependencyUploadController.file}" + <p:fileUpload value="#{dependencyUploadBean.file}" allowTypes="/(\.|\/)(jar)$/" sizeLimit="104857600" mode="simple" /> <p:spacer width ="50px" height="0px"/> - <p:commandLink ajax="false" actionListener="#{dependencyUploadController.upload}"> + <p:commandLink ajax="false" actionListener="#{dependencyUploadBean.upload}"> <h:outputText value="Upload File" /> </p:commandLink> </h:form> diff --git a/Kieker.WebGUI/src/main/webapp/projectDependencies.xhtml b/Kieker.WebGUI/src/main/webapp/projectDependencies.xhtml index edb745a0..a0b85d88 100644 --- a/Kieker.WebGUI/src/main/webapp/projectDependencies.xhtml +++ b/Kieker.WebGUI/src/main/webapp/projectDependencies.xhtml @@ -30,7 +30,7 @@ <p:selectManyMenu value="#{selectedDependenciesBean.dependencies}" style="width: 100%" converter="kieker.webgui.converter.MIDependencyToStringConverter"> - <f:selectItems value="#{availableDependenciesBean.dependencies}" + <f:selectItems value="#{dependenciesBean.dependencies}" var="dependency" itemLabel="#{dependency.filePath}" itemValue="#{player}" /> </p:selectManyMenu> -- GitLab