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

Started with the manipulation of views; A lot of minor modifications

parent 8ab0300a
No related branches found
No related tags found
No related merge requests found
...@@ -20,12 +20,10 @@ ...@@ -20,12 +20,10 @@
package kieker.webgui.beans.session; package kieker.webgui.beans.session;
import java.util.List;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped; import javax.faces.bean.SessionScoped;
import kieker.webgui.common.FSManager; import kieker.analysis.model.analysisMetaModel.MIProject;
import org.primefaces.model.DashboardColumn; import org.primefaces.model.DashboardColumn;
import org.primefaces.model.DashboardModel; import org.primefaces.model.DashboardModel;
...@@ -58,6 +56,10 @@ public class CurrentAnalysisCockpitProjectBean { ...@@ -58,6 +56,10 @@ public class CurrentAnalysisCockpitProjectBean {
* The model containing the information about the dashboard itself. * The model containing the information about the dashboard itself.
*/ */
private DashboardModel model; private DashboardModel model;
/**
* This is the actual model instance. It is the in-memory-model of the current (session) user.
*/
private MIProject project;
/** /**
* Creates a new instance of this class. * Creates a new instance of this class.
...@@ -68,11 +70,13 @@ public class CurrentAnalysisCockpitProjectBean { ...@@ -68,11 +70,13 @@ public class CurrentAnalysisCockpitProjectBean {
// This code is just for test purposes // This code is just for test purposes
this.model = new DefaultDashboardModel(); this.model = new DefaultDashboardModel();
final DashboardColumn column1 = new DefaultDashboardColumn(); final DashboardColumn column1 = new DefaultDashboardColumn();
final DashboardColumn column2 = new DefaultDashboardColumn();
column1.addWidget("panel1"); column1.addWidget("panel1");
column1.addWidget("panel2"); column1.addWidget("panel2");
this.model.addColumn(column1); this.model.addColumn(column1);
this.model.addColumn(column2);
} }
/** /**
...@@ -94,15 +98,30 @@ public class CurrentAnalysisCockpitProjectBean { ...@@ -94,15 +98,30 @@ public class CurrentAnalysisCockpitProjectBean {
this.model = model; this.model = model;
} }
/**
* This method delivers the project stored in this bean.
*
* @return The project for this user.
*/
public MIProject getProject() {
synchronized (this) {
return this.project;
}
}
/** /**
* This method sets the project stored within this bean and returns the new page for the navigation. * This method sets the project stored within this bean and returns the new page for the navigation.
* *
* @param name * @param name
* The name of the project. * The name of the project.
* @return The name of the page for the analysis cockpit. * @return The name of the page for the analysis view work space.
*/ */
public String setProject(final String name) { public String setProject(final MIProject newProject, final String newName) {
this.projectName = name; synchronized (this) {
// Remember the given parameters
this.project = newProject;
this.projectName = newName;
}
return CurrentAnalysisCockpitProjectBean.PAGE_ANALYSIS_COCKPIT; return CurrentAnalysisCockpitProjectBean.PAGE_ANALYSIS_COCKPIT;
} }
...@@ -113,7 +132,9 @@ public class CurrentAnalysisCockpitProjectBean { ...@@ -113,7 +132,9 @@ public class CurrentAnalysisCockpitProjectBean {
* @return The project name for this user. * @return The project name for this user.
*/ */
public String getProjectName() { public String getProjectName() {
return this.projectName; synchronized (this) {
return this.projectName;
}
} }
/** /**
...@@ -122,17 +143,11 @@ public class CurrentAnalysisCockpitProjectBean { ...@@ -122,17 +143,11 @@ public class CurrentAnalysisCockpitProjectBean {
* @return The name of the page of the project overview. * @return The name of the page of the project overview.
*/ */
public String clearProject() { public String clearProject() {
this.projectName = null; // NOPMD synchronized (this) {
this.projectName = null; // NOPMD
this.project = null; // NOPMD
}
return CurrentAnalysisCockpitProjectBean.PAGE_PROJECT_OVERVIEW; return CurrentAnalysisCockpitProjectBean.PAGE_PROJECT_OVERVIEW;
} }
/**
* Delivers a list containing all available views by name.
*
* @return All available views.
*/
public List<String> getViews() {
return FSManager.getInstance().getAllViews(this.projectName);
}
} }
...@@ -20,8 +20,29 @@ ...@@ -20,8 +20,29 @@
package kieker.webgui.beans.session; package kieker.webgui.beans.session;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped; import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import kieker.analysis.display.annotation.Display;
import kieker.analysis.model.analysisMetaModel.MIAnalysisMetaModelFactory;
import kieker.analysis.model.analysisMetaModel.MIPlugin;
import kieker.analysis.model.analysisMetaModel.MIProject;
import kieker.analysis.model.analysisMetaModel.MIView;
import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
import kieker.analysis.plugin.AbstractPlugin;
import kieker.webgui.common.FSManager;
import kieker.webgui.common.Pair;
import kieker.webgui.common.exception.NewerProjectException;
import org.primefaces.event.TabChangeEvent;
/** /**
* This bean contains the project of the current (session) user for the analysis view work space. * This bean contains the project of the current (session) user for the analysis view work space.
...@@ -29,10 +50,15 @@ import javax.faces.bean.SessionScoped; ...@@ -29,10 +50,15 @@ import javax.faces.bean.SessionScoped;
* @author Nils Christian Ehmke * @author Nils Christian Ehmke
* @version 1.0 * @version 1.0
*/ */
// TODO Display Semantic
@ManagedBean @ManagedBean
@SessionScoped @SessionScoped
public class CurrentAnalysisViewWorkSpaceProjectBean { public class CurrentAnalysisViewWorkSpaceProjectBean {
/**
* This is the factory which will be used to create new components for the project.
*/
private final MIAnalysisMetaModelFactory factory = new MAnalysisMetaModelFactory();
/** /**
* This is the page used for the redirecting during setting the current project of the user. * This is the page used for the redirecting during setting the current project of the user.
*/ */
...@@ -45,6 +71,22 @@ public class CurrentAnalysisViewWorkSpaceProjectBean { ...@@ -45,6 +71,22 @@ public class CurrentAnalysisViewWorkSpaceProjectBean {
* This is the name of the stored project. It can be used as an identifier within the FS-Manager * This is the name of the stored project. It can be used as an identifier within the FS-Manager
*/ */
private String projectName; private String projectName;
/**
* This is the actual model instance. It is the in-memory-model of the current (session) user.
*/
private MIProject project;
/**
* This is the time stamp of the moment, the project was loaded or last saved. It can be used to check whether the project has been modified in the meanwhile.
*/
private long timeStamp;
/**
* This is the corresponding class loader to the project. It contains always the libraries within the lib-folder of the project.
*/
private ClassLoader classLoader;
/**
* This is the currently selected view.
*/
private MIView activeView;
/** /**
* Creates a new instance of this class. * Creates a new instance of this class.
...@@ -53,6 +95,17 @@ public class CurrentAnalysisViewWorkSpaceProjectBean { ...@@ -53,6 +95,17 @@ public class CurrentAnalysisViewWorkSpaceProjectBean {
// No code necessary // No code necessary
} }
/**
* This method delivers the project stored in this bean.
*
* @return The project for this user.
*/
public MIProject getProject() {
synchronized (this) {
return this.project;
}
}
/** /**
* This method sets the project stored within this bean and returns the new page for the navigation. * This method sets the project stored within this bean and returns the new page for the navigation.
* *
...@@ -60,8 +113,18 @@ public class CurrentAnalysisViewWorkSpaceProjectBean { ...@@ -60,8 +113,18 @@ public class CurrentAnalysisViewWorkSpaceProjectBean {
* The name of the project. * The name of the project.
* @return The name of the page for the analysis view work space. * @return The name of the page for the analysis view work space.
*/ */
public String setProject(final String name) { public String setProject(final MIProject newProject, final String newName) {
this.projectName = name; synchronized (this) {
// Remember the given parameters
this.project = newProject;
this.projectName = newName;
if (this.project != null) {
// Remember the current time! This is important for the later comparison of the time stamps.
this.resetTimeStamp();
this.reloadClassLoader();
}
}
return CurrentAnalysisViewWorkSpaceProjectBean.PAGE_ANALYSIS_VIEW_WORK_SPACE; return CurrentAnalysisViewWorkSpaceProjectBean.PAGE_ANALYSIS_VIEW_WORK_SPACE;
} }
...@@ -72,7 +135,9 @@ public class CurrentAnalysisViewWorkSpaceProjectBean { ...@@ -72,7 +135,9 @@ public class CurrentAnalysisViewWorkSpaceProjectBean {
* @return The project name for this user. * @return The project name for this user.
*/ */
public String getProjectName() { public String getProjectName() {
return this.projectName; synchronized (this) {
return this.projectName;
}
} }
/** /**
...@@ -81,8 +146,160 @@ public class CurrentAnalysisViewWorkSpaceProjectBean { ...@@ -81,8 +146,160 @@ public class CurrentAnalysisViewWorkSpaceProjectBean {
* @return The name of the page of the project overview. * @return The name of the page of the project overview.
*/ */
public String clearProject() { public String clearProject() {
this.projectName = null; // NOPMD synchronized (this) {
this.projectName = null; // NOPMD
this.project = null; // NOPMD
this.classLoader = null; // NOPMD
this.activeView = null; // NOPMD
}
return CurrentAnalysisViewWorkSpaceProjectBean.PAGE_PROJECT_OVERVIEW; return CurrentAnalysisViewWorkSpaceProjectBean.PAGE_PROJECT_OVERVIEW;
} }
/**
* This method tries to save the current project and informs the user about success or fail.
*
* @param overwriteNewerProject
* This flag determines whether a newer project should be overwritten.
*/
public void saveProject(final boolean overwriteNewerProject) {
synchronized (this) {
try {
FSManager.getInstance().saveProject(this.projectName, this.project, this.timeStamp, overwriteNewerProject);
CurrentAnalysisViewWorkSpaceProjectBean.showMessage(FacesMessage.SEVERITY_INFO, "Project saved.");
// Update the time stamp!
this.resetTimeStamp();
} catch (final IOException ex) {
CurrentAnalysisViewWorkSpaceProjectBean.showMessage(FacesMessage.SEVERITY_ERROR, "An error occured while saving the projct.");
} catch (final NewerProjectException ex) {
CurrentAnalysisViewWorkSpaceProjectBean.showMessage(FacesMessage.SEVERITY_WARN, "The project has been modified externally in the meanwhile.");
}
}
}
/**
* This method shows the current user a message by using the growl-component of PrimeFaces.
*
* @param severity
* The severity of the message.
* @param msg
* The message itself.
*/
private static void showMessage(final Severity severity, final String msg) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, "", msg));
}
/**
* This method sets the time stamp to the current system time.
*/
public void resetTimeStamp() {
synchronized (this) {
this.timeStamp = System.currentTimeMillis();
}
}
/**
* This method delivers the available displays of the given plugin.
*
* @param clazz
* The plugin whose displays should be delivered.
* @return The available displays.
*/
public List<Display> getDisplays(final Class<AbstractPlugin> clazz) {
final List<Display> result = new ArrayList<Display>();
synchronized (this) {
if (clazz != null) {
// Run through all available methods and find the annotated ones
final Method[] methods = clazz.getMethods();
for (final Method method : methods) {
final Display displayAnnot = method.getAnnotation(Display.class);
if (displayAnnot != null) {
result.add(displayAnnot);
}
}
}
}
return result;
}
/**
* This method delivers a list of pairs containing the available plugins and their classes.
*
* @return A list with the plugins.
*/
public List<Pair<MIPlugin, Class<AbstractPlugin>>> getPlugins() {
final List<Pair<MIPlugin, Class<AbstractPlugin>>> result = new ArrayList<Pair<MIPlugin, Class<AbstractPlugin>>>();
synchronized (this) {
for (final MIPlugin plugin : this.project.getPlugins()) {
try {
result.add(new Pair<MIPlugin, Class<AbstractPlugin>>(plugin, (Class<AbstractPlugin>) this.classLoader.loadClass(plugin.getClassname())));
} catch (final ClassNotFoundException ex) {
// TODO Catch
}
}
}
return result;
}
/**
* This method adds a new view to the project.
*
* @param viewName
* The name of the new view.
*/
public void addView(final String viewName) {
synchronized (this) {
final MIView view = this.factory.createView();
view.setName(viewName);
this.project.getViews().add(view);
}
}
/**
* Delivers the currently selected view.
*
* @return The currently active view.
*/
public MIView getActiveView() {
synchronized (this) {
return this.activeView;
}
}
/**
* This method sets the active view to a new value.
*
* @param view
* The new active view.
*/
public void setActiveView(final MIView view) {
synchronized (this) {
this.activeView = view;
}
}
public void addDisplayToView(final Display display) {
// No code necessary
}
public void onChange(final TabChangeEvent event) {
if (event.getData() instanceof MIView) {
this.setActiveView((MIView) event.getData());
}
}
/**
* This method reloads the class loader. In other words: The class loader will always be able to load classes from the jar-files within the lib-folder of the
* project.
*/
private void reloadClassLoader() {
synchronized (this) {
this.classLoader = FSManager.getInstance().getClassLoader(this.projectName);
}
}
} }
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<!-- This is the layout for the whole page. --> <!-- This is the layout for the whole page. -->
<p:layout id="layout" fullPage="true"> <p:layout id="layout" fullPage="true">
<p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - Cockpit"> <p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - Cockpit (#{currentAnalysisCockpitProjectBean.projectName})">
<h:form> <h:form>
<p:menubar> <p:menubar>
<p:submenu label="File"> <p:submenu label="File">
...@@ -42,10 +42,10 @@ ...@@ -42,10 +42,10 @@
<p:layoutUnit position="center" id="centerLayout"> <p:layoutUnit position="center" id="centerLayout">
<p:dashboard id="board" model="#{currentAnalysisCockpitProjectBean.model}"> <p:dashboard id="board" model="#{currentAnalysisCockpitProjectBean.model}">
<p:panel id="panel1" header="N/A"> <p:panel id="panel1" header="N/A" toggleable="true">
<h:outputText value="N/A" /> <h:outputText value="N/A" />
</p:panel> </p:panel>
<p:panel id="panel2" header="N/A"> <p:panel id="panel2" header="N/A" toggleable="true">
<h:outputText value="N/A" /> <h:outputText value="N/A" />
</p:panel> </p:panel>
</p:dashboard> </p:dashboard>
...@@ -53,9 +53,10 @@ ...@@ -53,9 +53,10 @@
<p:layoutUnit position="west" size="300" header="Views" resizable="true" collapsible="true"> <p:layoutUnit position="west" size="300" header="Views" resizable="true" collapsible="true">
<h:form id="viewsForm"> <h:form id="viewsForm">
<p:accordionPanel multiple="true" activeIndex="" value="#{currentAnalysisCockpitProjectBean.views}" var="currView"> <p:accordionPanel multiple="true" activeIndex="" value="#{currentAnalysisCockpitProjectBean.project.views}" var="currView">
<p:tab title="#{currView}"> <p:tab title="#{currView.name}">
<h:outputText value="Some description here."/> <h:outputText value="#{currView.description}" rendered="#{not empty currView.description}"/>
<h:outputText value="No description available. Click here to activate this view." rendered="#{empty currView.description}"/>
</p:tab> </p:tab>
</p:accordionPanel> </p:accordionPanel>
</h:form> </h:form>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<!-- This is the layout for the whole page. --> <!-- This is the layout for the whole page. -->
<p:layout id="layout" fullPage="true"> <p:layout id="layout" fullPage="true">
<p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - Analysis Controller"> <p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - Analysis Controller (#{currentAnalysisControllerProjectBean.projectName})">
<h:form> <h:form>
<p:menubar> <p:menubar>
<p:submenu label="File"> <p:submenu label="File">
......
...@@ -16,19 +16,21 @@ ...@@ -16,19 +16,21 @@
<h:body> <h:body>
<p:layout id="layout" fullPage="true"> <p:layout id="layout" fullPage="true">
<p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - View Work Space"> <p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI - View Work Space (#{currentAnalysisViewWorkSpaceProjectBean.projectName})">
<h:form> <h:form>
<p:menubar> <p:menubar>
<p:submenu label="File"> <p:submenu label="File">
<p:menuitem value="Save Project" update=":messages" ajax="true" action="#{currentWorkSpaceProjectBean.saveProject(false)}" disabled="#{empty currentWorkSpaceProjectBean.project}"/> <p:menuitem value="New View" onclick="newViewDialog.show()" ajax="true"/>
<p:separator/>
<p:menuitem value="Save Project" update=":messages" ajax="true" action="#{currentAnalysisViewWorkSpaceProjectBean.saveProject(false)}" disabled="#{empty currentAnalysisViewWorkSpaceProjectBean.project}"/>
<p:menuitem value="Save Project As" update=":messages" ajax="true" disabled="#{empty currentWorkSpaceProjectBean.project}"/> <p:menuitem value="Save Project As" update=":messages" ajax="true" disabled="#{empty currentWorkSpaceProjectBean.project}"/>
<p:menuitem styleClass="Force-Save-Project-Button" value="Force Save Project" update=":messages" ajax="true" action="#{currentWorkSpaceProjectBean.saveProject(true)}" disabled="#{empty currentWorkSpaceProjectBean.project}"/> <p:menuitem styleClass="Force-Save-Project-Button" value="Force Save Project" update=":messages" ajax="true" action="#{currentAnalysisViewWorkSpaceProjectBean.saveProject(true)}" disabled="#{empty currentAnalysisViewWorkSpaceProjectBean.project}"/>
<p:separator/> <p:separator/>
<p:menuitem value="Reload Project" ajax="true" disabled="#{empty currentWorkSpaceProjectBean.project or true}"/> <p:menuitem value="Reload Project" ajax="true" disabled="#{empty currentAnalysisViewWorkSpaceProjectBean.project or true}"/>
<p:separator/> <p:separator/>
<p:menuitem value="New View" ajax="true" disabled="true"/> <p:menuitem value="New View" ajax="true" disabled="true"/>
<p:separator/> <p:separator/>
<p:menuitem value="Close Project" action="#{currentWorkSpaceProjectBean.clearProject()}" ajax="false"/> <p:menuitem value="Close Project" action="#{currentAnalysisViewWorkSpaceProjectBean.clearProject()}" ajax="false"/>
<p:separator/> <p:separator/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/> <p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu> </p:submenu>
...@@ -45,53 +47,41 @@ ...@@ -45,53 +47,41 @@
</h:form> </h:form>
</p:layoutUnit> </p:layoutUnit>
<p:layoutUnit position="west"> <p:layoutUnit size="300" position="west">
<h:form rendered="#{not empty currentAnalysisViewWorkSpaceProjectBean.project}">
<p:accordionPanel> <p:accordionPanel activeIndex="-1" value="#{currentAnalysisViewWorkSpaceProjectBean.plugins}" var="pair">
<p:tab title="Plugin 001"> <p:tab title="#{pair.fst.name}">
<p:panel id="display001" header="Display 001"> <ui:repeat value="#{currentAnalysisViewWorkSpaceProjectBean.getDisplays(pair.snd)}" var="display">
<p:commandLink id="displayLink" value="#{display.name()}"/>
</p:panel> <p:tooltip style="font-size: 15px" for="displayLink" value="#{display.description()}"/>
<p:draggable helper="clone" revert="true" for="display001"/> </ui:repeat>
<br/> </p:tab>
<p:panel header="Display 002"> </p:accordionPanel>
</h:form>
</p:panel>
</p:tab>
<p:tab title="Plugin 002">
<p:panel header="Display 001">
</p:panel>
<br/>
<p:panel header="Display 002">
</p:panel>
</p:tab>
</p:accordionPanel>
</p:layoutUnit> </p:layoutUnit>
<p:layoutUnit position="center"> <p:layoutUnit position="center">
<p:accordionPanel> <h:form id="viewsForm">
<p:tab title="View 1"> <p:accordionPanel value="#{currentAnalysisViewWorkSpaceProjectBean.project.views}" var="viewComp" activeIndex="-1">
<p:dashboard> <p:tab title="#{viewComp.name}" closable="true">
<p:dashboard>
</p:dashboard>
</p:tab> </p:dashboard>
</p:tab>
<p:tab title="View 2"> <p:ajax event="tabChange" listener="#{currentAnalysisViewWorkSpaceProjectBean.onChange}" />
<p:dashboard> </p:accordionPanel>
</h:form>
</p:dashboard>
</p:tab>
</p:accordionPanel>
</p:layoutUnit> </p:layoutUnit>
</p:layout> </p:layout>
<p:growl id="messages" life="1500" showDetail="true" autoUpdate="false" sticky="false"/>
<!-- Include the dialog for the configuration. --> <!-- Include the dialog for the configuration. -->
<ui:include src="dialogs/settingsDialog.xhtml" /> <ui:include src="dialogs/settingsDialog.xhtml" />
<!-- Include the dialogs for the views. -->
<ui:include src="dialogs/viewDialogs.xhtml" />
<!-- Include the about-dialog. --> <!-- Include the about-dialog. -->
<ui:include src="dialogs/aboutDialog.xhtml" /> <ui:include src="dialogs/aboutDialog.xhtml" />
</h:body> </h:body>
......
...@@ -35,12 +35,18 @@ ...@@ -35,12 +35,18 @@
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/> <p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
</p:menubar> </p:menubar>
</h:form> </h:form>
</p:layoutUnit> </p:layoutUnit>
<p:layoutUnit position="center"> <p:layoutUnit position="center">
<h:form id="projectsListForm"> <h:form id="projectsListForm">
<p:dataTable rows="15" paginator="true" var="project" rowsPerPageTemplate="5,10,15,25,50" value="#{projectsBean.projects}" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"> <p:toolbar>
<p:toolbarGroup style="font-size: 15px" align="left">
<p:commandButton icon="ui-icon-plus" value="Project" onclick="newProjectDialog.show()" ajax="true"/>
</p:toolbarGroup>
</p:toolbar>
<p:dataTable rows="15" paginator="true" paginatorPosition="bottom" var="project" rowsPerPageTemplate="5,10,15,25,50" value="#{projectsBean.projects}" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">
<p:column headerText="Project Name" id="modelHeader" sortBy="#{project}"> <p:column headerText="Project Name" id="modelHeader" sortBy="#{project}">
<p:commandLink id="dynaButton" value="#{project}"/> <p:commandLink id="dynaButton" value="#{project}"/>
...@@ -51,8 +57,8 @@ ...@@ -51,8 +57,8 @@
<p:menuitem id="deleteButton" value="Delete Project" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" disabled="true"/> <p:menuitem id="deleteButton" value="Delete Project" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()" disabled="true"/>
<p:separator/> <p:separator/>
<p:menuitem id="controlAnalysis" value="Open Analysis Control" ajax="false" action="#{currentAnalysisControllerProjectBean.setProject(project)}" /> <p:menuitem id="controlAnalysis" value="Open Analysis Control" ajax="false" action="#{currentAnalysisControllerProjectBean.setProject(project)}" />
<p:menuitem id="editAnalysisViews" value="Edit Analysis Views" ajax="false" action="#{currentAnalysisViewWorkSpaceProjectBean.setProject(project)}" /> <p:menuitem id="editAnalysisViews" value="Edit Analysis Views" ajax="false" action="#{currentAnalysisViewWorkSpaceProjectBean.setProject(projectsBean.openProject(project), project)}" />
<p:menuitem id="showAnalysis" value="View Running Analysis" ajax="false" action="#{currentAnalysisCockpitProjectBean.setProject(project)}" /> <p:menuitem id="showAnalysis" value="View Running Analysis" ajax="false" action="#{currentAnalysisCockpitProjectBean.setProject(projectsBean.openProject(project), project)}" />
</p:menu> </p:menu>
</p:column> </p:column>
<p:column headerText="State" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}"> <p:column headerText="State" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}">
......
...@@ -44,6 +44,16 @@ ...@@ -44,6 +44,16 @@
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/> <p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu> </p:submenu>
<p:submenu label="View">
<p:menuitem value="Project Overview"/>
<p:separator/>
<p:menuitem value="Project Work Space" disabled="true"/>
<p:separator/>
<p:menuitem value="Analysis Controller"/>
<p:menuitem value="Analysis View Work Space"/>
<p:menuitem value="Analysis Cockpit"/>
</p:submenu>
<p:submenu label="Help"> <p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true" disabled="true"/> <p:menuitem value="User Guide" ajax="true" disabled="true"/>
<p:separator/> <p:separator/>
......
.ui-dashboard-column {
width: 50%
}
\ No newline at end of file
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
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:c="http://java.sun.com/jsp/jstl/core">
<!-- ******************************************************************************** -->
<!-- This is the dialog to create a new view. -->
<p:dialog id="newViewDlg" header="New View" resizable="false" modal="true" widgetVar="newViewDialog">
<!-- Make sure that closing of the dialog also clears the input field. -->
<p:ajax event="close" update="newViewDialogForm:newViewInputText" />
<h:form id="newViewDialogForm">
<div style="text-align: center">
<h:outputText value="Name: " />
<p:inputText id="newViewInputText" value="#{stringBean.string}" />
</div>
<hr/>
<div style="text-align: right">
<p:commandButton value="Ok" action="#{currentAnalysisViewWorkSpaceProjectBean.addView(stringBean.string)}" update=":messages :viewsForm" oncomplete="newViewDialog.hide()" />
<p:spacer width="10px" height="10" />
<p:commandButton value="Cancel" onclick="newViewDialog.hide()" />
</div>
</h:form>
</p:dialog>
</ui:composition>
\ No newline at end of file
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