Skip to content
Snippets Groups Projects
Commit 9c6bbc4e authored by Nils Christian Ehmke's avatar Nils Christian Ehmke
Browse files

Advanced the WebGUI; Main-Project now selectable; Correct the menus

parent 5c3ac9e1
No related branches found
No related tags found
No related merge requests found
Showing
with 128 additions and 137 deletions
...@@ -2,11 +2,12 @@ package kieker.webgui.beans; ...@@ -2,11 +2,12 @@ package kieker.webgui.beans;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped; import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.DefaultTreeNode; import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode; 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 * @author Nils Christian Ehmke
*/ */
...@@ -17,7 +18,7 @@ public class AvailablePluginsBean { ...@@ -17,7 +18,7 @@ public class AvailablePluginsBean {
public synchronized TreeNode getAvailablePluginsRoot() { public synchronized TreeNode getAvailablePluginsRoot() {
TreeNode root = new DefaultTreeNode("Root", null); 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); final TreeNode analysisPluginsNode = new DefaultTreeNode("AnalysisPlugins", root);
return root; return root;
......
...@@ -10,26 +10,27 @@ import org.primefaces.model.DefaultTreeNode; ...@@ -10,26 +10,27 @@ import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode; import org.primefaces.model.TreeNode;
/** /**
* This bean can be used to handle all available projects within the program.
* *
* @author Nils Christian Ehmke * @author Nils Christian Ehmke
*/ */
@ManagedBean @ManagedBean
@ApplicationScoped @ApplicationScoped
public class ProjectsBean { public class AvailableProjectsBean {
private final List<MIProject> projects; private final List<MIProject> projects;
private final MAnalysisMetaModelFactory factory; private final MAnalysisMetaModelFactory factory;
public ProjectsBean() { public AvailableProjectsBean() {
projects = new ArrayList<MIProject>(); projects = new ArrayList<MIProject>();
factory = new MAnalysisMetaModelFactory(); factory = new MAnalysisMetaModelFactory();
} }
public synchronized boolean addProject(final String projectName) { public synchronized boolean addProject(final String projectName) {
final MIProject project = factory.createProject(); final MIProject project = factory.createProject();
project.setName(projectName); project.setName(projectName);
return projects.add(project); return projects.add(project);
} }
...@@ -37,13 +38,9 @@ public class ProjectsBean { ...@@ -37,13 +38,9 @@ public class ProjectsBean {
TreeNode root = new DefaultTreeNode("Root", null); TreeNode root = new DefaultTreeNode("Root", null);
for (final MIProject project : projects) { for (final MIProject project : projects) {
final TreeNode projectNode = new DefaultTreeNode(project.getName(), root); final TreeNode projectNode = new DefaultTreeNode("project", project, root);
final TreeNode dependenciesNode = new DefaultTreeNode("Dependencies", projectNode); final TreeNode dependenciesNode = new DefaultTreeNode("dependencies", "Dependencies", projectNode);
final TreeNode usedPluginsNode = new DefaultTreeNode("Used Plugins", projectNode); final TreeNode usedPluginsNode = new DefaultTreeNode("usedPlugins", "Used Plugins", projectNode);
// for (final String dependency : project.getDependencies()) {
// final TreeNode dependencyNode = new DefaultTreeNode(dependency, dependenciesNode);
// }
} }
return root; return root;
......
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;
}
}
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;
}
}
package kieker.webgui.beans;
/**
*
* @author Nils Christian Ehmke
*/
public class CurrentSelectedPluginBean {
}
/*
* 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";
}
}
...@@ -4,6 +4,7 @@ import javax.faces.bean.ManagedBean; ...@@ -4,6 +4,7 @@ import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped; import javax.faces.bean.RequestScoped;
/** /**
* This bean can be used to store a simple string.
* *
* @author Nils Christian Ehmke * @author Nils Christian Ehmke
*/ */
...@@ -13,6 +14,10 @@ public class StringBean { ...@@ -13,6 +14,10 @@ public class StringBean {
private String string; private String string;
public StringBean() {
this.string = "";
}
public String getString() { public String getString() {
return string; return string;
} }
...@@ -21,4 +26,7 @@ public class StringBean { ...@@ -21,4 +26,7 @@ public class StringBean {
this.string = string; this.string = string;
} }
public void clear() {
this.string = "";
}
} }
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;
}
}
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();
}
}
...@@ -32,45 +32,50 @@ ...@@ -32,45 +32,50 @@
<p:layoutUnit position="north" size="60" collapsible="false"> <p:layoutUnit position="north" size="60" collapsible="false">
<h:form> <h:form>
<p:menubar style="font-size: 15px"> <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="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>
<p:submenu label="Help"> <p:submenu label="Help">
<p:menuitem value="About..." onclick="AboutDialog.show();"/> <p:menuitem value="About..." onclick="AboutDialog.show();"/>
</p:submenu> </p:submenu>
</p:menubar> </p:menubar>
</h:form> </h:form>
</p:layoutUnit> </p:layoutUnit>
<!-- The following layout is at the left side of the page and shows the available projects. --> <!-- 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"> <p:layoutUnit style="font-size:15px" header="Projects" collapsible="true" position="west" size="200" resizable="true" minSize="100">
<h:form id="ProjectsList"> <h:form id="ProjectsList">
<p:tree id="ProjectsListTree" selectionMode="single" style="width: auto" value="#{projectsBean.projectsRoot}" var="node" > <p:tree selection="#{selectedProjectBean.selectedNode}" id="ProjectsListTree" selectionMode="single" style="width: auto" value="#{availableProjectsBean.projectsRoot}" var="node" >
<p:treeNode> <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}"/> <h:outputText value="#{node}"/>
</p:treeNode> </p:treeNode>
</p:tree> </p:tree>
<p:contextMenu style="font-size:15px" for="ProjectsListTree"> <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:menuitem value="Save Project" update="ProjectsList"/>
<p:separator/> <p:separator/>
<p:menuitem value="Delete Project" /> <p:menuitem value="Delete Project" />
</p:contextMenu> </p:contextMenu>
</h:form> </h:form>
</p:layoutUnit> </p:layoutUnit>
<!-- The following layout unit is within the center and used for the graph. --> <!-- The following layout unit is within the center and used for the graph. -->
<p:layoutUnit style="font-size:15px" position="center"> <p:layoutUnit style="font-size:15px" position="center">
</p:layoutUnit> </p:layoutUnit>
<!-- The following layout unit is located at the bottom and will be used for properties. --> <!-- The following layout unit is located at the bottom and will be used for properties. -->
...@@ -127,12 +132,14 @@ ...@@ -127,12 +132,14 @@
<a href="https://se.informatik.uni-kiel.de/kieker/">https://se.informatik.uni-kiel.de/kieker/</a> <a href="https://se.informatik.uni-kiel.de/kieker/">https://se.informatik.uni-kiel.de/kieker/</a>
</p:dialog> </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:form>
<h:outputText value="Please enter the name of the new project: " /><br/><br/> <h:outputText value="Please enter the name of the new project: " /><br/><br/>
<center> <center>
<p:inputText style="width: 90%" value="#{stringBean.string}" /><br/><br/> <p:inputText id="NewProjectInput" style="width: 90%" value="#{stringBean.string}" /><br/><br/>
<p:commandButton value="Submit" action="#{projectsBean.addProject(stringBean.string)}" update="ProjectsList" oncomplete="NewProjectDialog.hide();"/> <p:commandButton value="Submit" action="#{availableProjectsBean.addProject(stringBean.string)}" update="ProjectsList" oncomplete="NewProjectDialog.hide();"/>
</center> </center>
</h:form> </h:form>
</p:dialog> </p:dialog>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment