diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java index f1be8d02406d5ff4fd1f33961a21b1714aecd59d..cfef25fd9cfd58bd69bd1c54517a1761baeb6e0a 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailablePluginsBean.java @@ -2,11 +2,12 @@ package kieker.webgui.beans; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; -import javax.faces.bean.SessionScoped; import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; /** + * This bean can be used to store and read the currently available plugins for + * the current main project. * * @author Nils Christian Ehmke */ @@ -17,7 +18,7 @@ public class AvailablePluginsBean { public synchronized TreeNode getAvailablePluginsRoot() { TreeNode root = new DefaultTreeNode("Root", null); - final TreeNode readedNode = new DefaultTreeNode("Reader", root); + final TreeNode readerNode = new DefaultTreeNode("Reader", root); final TreeNode analysisPluginsNode = new DefaultTreeNode("AnalysisPlugins", root); return root; diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailableProjectsBean.java similarity index 74% rename from Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java rename to Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailableProjectsBean.java index 1e6683965ef91e11227449cb83dd67b721398ca5..c3a44929378062e37d8b03c1dce12922bcf002cb 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ProjectsBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/AvailableProjectsBean.java @@ -10,26 +10,27 @@ import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.TreeNode; /** + * This bean can be used to handle all available projects within the program. * * @author Nils Christian Ehmke */ @ManagedBean @ApplicationScoped -public class ProjectsBean { +public class AvailableProjectsBean { private final List<MIProject> projects; private final MAnalysisMetaModelFactory factory; - public ProjectsBean() { + public AvailableProjectsBean() { projects = new ArrayList<MIProject>(); factory = new MAnalysisMetaModelFactory(); } public synchronized boolean addProject(final String projectName) { final MIProject project = factory.createProject(); - + project.setName(projectName); - + return projects.add(project); } @@ -37,13 +38,9 @@ public class ProjectsBean { TreeNode root = new DefaultTreeNode("Root", null); for (final MIProject project : projects) { - final TreeNode projectNode = new DefaultTreeNode(project.getName(), root); - final TreeNode dependenciesNode = new DefaultTreeNode("Dependencies", projectNode); - final TreeNode usedPluginsNode = new DefaultTreeNode("Used Plugins", projectNode); - - // for (final String dependency : project.getDependencies()) { - // final TreeNode dependencyNode = new DefaultTreeNode(dependency, dependenciesNode); - // } + final TreeNode projectNode = new DefaultTreeNode("project", project, root); + final TreeNode dependenciesNode = new DefaultTreeNode("dependencies", "Dependencies", projectNode); + final TreeNode usedPluginsNode = new DefaultTreeNode("usedPlugins", "Used Plugins", projectNode); } return root; diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java deleted file mode 100644 index 3b47ebd4a4471ff061d1c5d91432e9cf353dc8c8..0000000000000000000000000000000000000000 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/ComponentBean.java +++ /dev/null @@ -1,40 +0,0 @@ -package kieker.webgui.beans; - -import javax.faces.bean.ApplicationScoped; -import javax.faces.bean.ManagedBean; -import org.primefaces.model.DefaultTreeNode; -import org.primefaces.model.TreeNode; - -/** - * - * @author Nils Christian Ehmke - */ -@ManagedBean -@ApplicationScoped -public class ComponentBean { - - private TreeNode root; - - public ComponentBean() { - root = new DefaultTreeNode("Root", null); - TreeNode node0 = new DefaultTreeNode("Reader", root); - TreeNode node1 = new DefaultTreeNode("Analysis Plugins", root); - - TreeNode node00 = new DefaultTreeNode("FSReader", node0); - TreeNode node01 = new DefaultTreeNode("JMXReader", node0); - - TreeNode node10 = new DefaultTreeNode("DummyRecordConsumer", node1); - TreeNode node11 = new DefaultTreeNode("SilentCountingRecordConsumer", node1); - TreeNode node12 = new DefaultTreeNode("TraceEquivalenceClassFilter", node1); - TreeNode node13 = new DefaultTreeNode("ExecutionRecordTransformationFilter", node1); - TreeNode node14 = new DefaultTreeNode("ResourceUtilizationPlugin", node1); - TreeNode node15 = new DefaultTreeNode("TraceReconstructionPlugin", node1); - TreeNode node16 = new DefaultTreeNode("CPUGraphPlugin", node1); - TreeNode node17 = new DefaultTreeNode("SequenceDiagrammPlugin", node1); - TreeNode node18 = new DefaultTreeNode("DependencyGraphPlugin", node1); - } - - public TreeNode getRoot() { - return root; - } -} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java deleted file mode 100644 index 162bc70f308a0685fbd59fd5df61dfccac3ea094..0000000000000000000000000000000000000000 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentProjectBean.java +++ /dev/null @@ -1,20 +0,0 @@ -package kieker.webgui.beans; - -import kieker.analysis.model.analysisMetaModel.MIProject; - -/** - * - * @author Nils Christian Ehmke - */ -public class CurrentProjectBean { - - private MIProject project; - - public MIProject getProject() { - return project; - } - - public void setProject(MIProject project) { - this.project = project; - } -} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java deleted file mode 100644 index af89429067a375e74c2d4f6d3c64ca11eecb5c79..0000000000000000000000000000000000000000 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/CurrentSelectedPluginBean.java +++ /dev/null @@ -1,9 +0,0 @@ -package kieker.webgui.beans; - -/** - * - * @author Nils Christian Ehmke - */ -public class CurrentSelectedPluginBean { - -} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/SelectedProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/SelectedProjectBean.java new file mode 100644 index 0000000000000000000000000000000000000000..210602348d11fb71b07fe52bc8a90826e549eca6 --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/SelectedProjectBean.java @@ -0,0 +1,61 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package kieker.webgui.beans; + +import javax.faces.bean.ManagedBean; +import javax.faces.bean.SessionScoped; +import kieker.analysis.model.analysisMetaModel.MIProject; +import org.primefaces.model.TreeNode; + +/** + * This bean can be used to store the currently selected project and the current + * main project for the user. + * + * @author Nils Christian Ehmke + */ +@ManagedBean +@SessionScoped +public class SelectedProjectBean { + + private TreeNode selectedNode; + private MIProject selectedProject; + private MIProject mainProject; + + public MIProject getMainProject() { + return mainProject; + } + + public void setMainProject(MIProject mainProject) { + this.mainProject = mainProject; + System.out.println("Mainproject:" + mainProject); + } + + public MIProject getSelectedProject() { + return selectedProject; + } + + public void setSelectedProject(MIProject selectedProject) { + this.selectedProject = selectedProject; + System.out.println("SelectedProject:" + selectedProject); + } + + public TreeNode getSelectedNode() { + return selectedNode; + } + + public void setSelectedNode(TreeNode selectedNode) { + this.selectedNode = selectedNode; + if (selectedNode != null && selectedNode.getData() instanceof MIProject) { + setSelectedProject((MIProject) selectedNode.getData()); + } else { + setSelectedProject(null); + } + System.out.println("SelectedNode:" + selectedNode); + } + + public String getColor(MIProject project) { + return (project == mainProject) ? "red" : "lightsteelblue"; + } +} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java index b14a57e282948636cde2f99a4bc84429f409698b..925e44bd7ba9bd0a1424ae34e16c0113bb27833f 100644 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/StringBean.java @@ -4,6 +4,7 @@ import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; /** + * This bean can be used to store a simple string. * * @author Nils Christian Ehmke */ @@ -13,6 +14,10 @@ public class StringBean { private String string; + public StringBean() { + this.string = ""; + } + public String getString() { return string; } @@ -21,4 +26,7 @@ public class StringBean { this.string = string; } + public void clear() { + this.string = ""; + } } diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java deleted file mode 100644 index 9f8112ae8f3eee49382417858af4c0966a8921d5..0000000000000000000000000000000000000000 --- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/TreeBean.java +++ /dev/null @@ -1,41 +0,0 @@ -package kieker.webgui.beans; - -import javax.faces.bean.ApplicationScoped; -import javax.faces.bean.ManagedBean; -import org.primefaces.model.DefaultTreeNode; -import org.primefaces.model.TreeNode; - -/** - * - * @author Nils Christian Ehmke - */ -@ManagedBean -@ApplicationScoped -public class TreeBean { - - private TreeNode root; - - public TreeBean() { - root = new DefaultTreeNode("Root", null); - TreeNode node0 = new DefaultTreeNode("jPetStore Monitoring", root); - TreeNode node1 = new DefaultTreeNode("Bookstore Monitoring", root); - - TreeNode node2 = new DefaultTreeNode("Dependency", node1); - TreeNode node3 = new DefaultTreeNode("Kieker.jar", node2); - TreeNode node4 = new DefaultTreeNode("Used Plugins", node1); - - TreeNode node11 = new DefaultTreeNode("Reader", node4); - TreeNode node12 = new DefaultTreeNode("Analysis Plugins", node4); - - TreeNode node5 = new DefaultTreeNode("FSReader", node11); - TreeNode node6 = new DefaultTreeNode("ResourceUtilizationPlugin", node12); - TreeNode node7 = new DefaultTreeNode("TraceReconstructionPlugin", node12); - TreeNode node8 = new DefaultTreeNode("CPUGraphPlugin", node12); - TreeNode node9 = new DefaultTreeNode("SequenceDiagrammPlugin", node12); - TreeNode node10 = new DefaultTreeNode("DependencyGraphPlugin", node12); - } - - public TreeNode getRoot() { - return root; - } -} diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..62af7d4fff49858c32d84e0d506df1130a012f1f --- /dev/null +++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java @@ -0,0 +1,27 @@ +package kieker.webgui.converter; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.convert.Converter; +import javax.faces.convert.FacesConverter; +import kieker.analysis.model.analysisMetaModel.MIProject; + +/** + * This converter can be used to convert an instance of <i>MIProject</i> to a + * human readle string, but <b>not</b> vice versa. + * + * @author Nils Christian Ehmke + */ +@FacesConverter(value = "kieker.webgui.converter.MIProjectToStringConverter") +public class MIProjectToStringConverter implements Converter { + + @Override + public Object getAsObject(FacesContext fc, UIComponent uic, String string) { + return null; + } + + @Override + public String getAsString(FacesContext fc, UIComponent uic, Object o) { + return (o == null || !(o instanceof MIProject)) ? null : ((MIProject) o).getName(); + } +} diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml index 0daec44e25ab02b578a165da9d845d3e4dc49db7..f90aa6285b185ca4a23ef956cb1898a7f6a06056 100644 --- a/Kieker.WebGUI/src/main/webapp/main.xhtml +++ b/Kieker.WebGUI/src/main/webapp/main.xhtml @@ -32,45 +32,50 @@ <p:layoutUnit position="north" size="60" collapsible="false"> <h:form> <p:menubar style="font-size: 15px"> - <p:submenu label="Projects"> + <p:submenu label="File"> <p:menuitem value="New Project" onclick="NewProjectDialog.show();" ajax="true" update="ProjectsList"/> - <p:menuitem value="Save Project"/> - <p:separator /> - <p:menuitem value="Delete Project"/> </p:submenu> <p:submenu label="Help"> <p:menuitem value="About..." onclick="AboutDialog.show();"/> </p:submenu> - + </p:menubar> - + </h:form> </p:layoutUnit> <!-- The following layout is at the left side of the page and shows the available projects. --> <p:layoutUnit style="font-size:15px" header="Projects" collapsible="true" position="west" size="200" resizable="true" minSize="100"> <h:form id="ProjectsList"> - <p:tree id="ProjectsListTree" selectionMode="single" style="width: auto" value="#{projectsBean.projectsRoot}" var="node" > - <p:treeNode> + <p:tree selection="#{selectedProjectBean.selectedNode}" id="ProjectsListTree" selectionMode="single" style="width: auto" value="#{availableProjectsBean.projectsRoot}" var="node" > + <p:treeNode type="project"> + <h:outputText style="color: #{selectedProjectBean.getColor(node)}" value="#{node}"> + <f:converter converterId="kieker.webgui.converter.MIProjectToStringConverter"/> + </h:outputText> + </p:treeNode> + <p:treeNode type="dependencies"> + <h:outputText value="#{node}"/> + </p:treeNode> + <p:treeNode type="usedPlugins"> <h:outputText value="#{node}"/> </p:treeNode> </p:tree> <p:contextMenu style="font-size:15px" for="ProjectsListTree"> - <p:menuitem value="Set as Main Project" update="ProjectsList"/> + <p:menuitem value="Set as Main Project" action="#{selectedProjectBean.setMainProject(selectedProjectBean.getSelectedProject())}" update="ProjectsListTree"/> <p:menuitem value="Save Project" update="ProjectsList"/> <p:separator/> <p:menuitem value="Delete Project" /> </p:contextMenu> - + </h:form> </p:layoutUnit> <!-- The following layout unit is within the center and used for the graph. --> <p:layoutUnit style="font-size:15px" position="center"> - + </p:layoutUnit> <!-- The following layout unit is located at the bottom and will be used for properties. --> @@ -127,12 +132,14 @@ <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"> + <p:dialog id="NewProjectDialog" header="New Project" resizable="false" modal="true" style="font-size: 15px;width: auto" widgetVar="NewProjectDialog" > + <p:ajax event="close" update="NewProjectDialog" listener="#{stringBean.clear()}" /> + <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();"/> + <p:inputText id="NewProjectInput" style="width: 90%" value="#{stringBean.string}" /><br/><br/> + <p:commandButton value="Submit" action="#{availableProjectsBean.addProject(stringBean.string)}" update="ProjectsList" oncomplete="NewProjectDialog.hide();"/> </center> </h:form> </p:dialog>