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

Added synchronizations within session-beans; Repositories can now be removed;...

Added synchronizations within session-beans; Repositories can now be removed; Corrected some hash map bugs within CurrentWorkSpaceProjectBean; Made sure that the converters deliver a valid string in case of null; Renamed some xhtml-components; Started with the AnalysisViewWorkSpace
parent 2872596e
No related branches found
No related tags found
No related merge requests found
Showing
with 428 additions and 203 deletions
......@@ -28,6 +28,8 @@ import javax.faces.context.FacesContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import kieker.webgui.beans.application.ThemeSwitcherBean;
/**
* This bean can be used for a single session of a user and stores the currently used theme (look and feel) for this user. Currently the default value being used is
* the "glass-x"-theme, if none other value can be find within the
......@@ -97,15 +99,17 @@ public final class CurrentThemeBean {
* The new theme to be stored within this instance.
*/
public final void setTheme(final String theme) {
this.theme = theme;
synchronized (this) {
this.theme = theme;
// Set the theme cookie.
final Cookie cookie = new Cookie(CurrentThemeBean.KEY_COOKIE_THEME, theme);
// Try to save it for a year (maximum age)
cookie.setMaxAge(60 * 60 * 24 * 365);
// Set the theme cookie.
final Cookie cookie = new Cookie(CurrentThemeBean.KEY_COOKIE_THEME, theme);
// Try to save it for a year (maximum age)
cookie.setMaxAge(60 * 60 * 24 * 365);
// Deliver the cookie
final HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.addCookie(cookie);
// Deliver the cookie
final HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
response.addCookie(cookie);
}
}
}
......@@ -75,7 +75,7 @@ import org.eclipse.emf.ecore.EObject;
* @author Nils Christian Ehmke
* @version 1.0
*/
// TODO Update port map and repository map on add/delete
// TODO Clean the connections when someone removes a plugin/repository
@ManagedBean
@SessionScoped
public final class CurrentWorkSpaceProjectBean {
......@@ -175,59 +175,63 @@ public final class CurrentWorkSpaceProjectBean {
* @return The name of the page for the project work space, if the project has been accepted, '' if it is null.
*/
public String setProject(final MIProject newProject, final String newName) {
// Remember the given parameters
this.project = newProject;
this.projectName = newName;
this.getConnectionsFromProject();
if (this.project != null) {
// Remember the current time! This is important for the later comparison of the time stamps.
this.resetTimeStamp();
// Update the class loader
this.reloadClassLoader();
// Add the libraries within the lib-folder to the current model
this.addLibrariesToModel();
// Load the available readers, filters and repositories
this.loadToolPalette();
// Load the hashmaps to get the plugins and ports
this.intializeHashMaps();
}
synchronized (this) {
// Remember the given parameters
this.project = newProject;
this.projectName = newName;
this.getConnectionsFromProject();
if (this.project != null) {
// Remember the current time! This is important for the later comparison of the time stamps.
this.resetTimeStamp();
// Update the class loader
this.reloadClassLoader();
// Add the libraries within the lib-folder to the current model
this.addLibrariesToModel();
// Load the available readers, filters and repositories
this.loadToolPalette();
// Load the hashmaps to get the plugins and ports
this.intializeHashMaps();
}
// Now deliver the correct navigation page
final String navigationPage;
if (this.project != null) {
navigationPage = CurrentWorkSpaceProjectBean.PAGE_PROJECT_WORK_SPACE;
} else {
navigationPage = "";
// Now deliver the correct navigation page
final String navigationPage;
if (this.project != null) {
navigationPage = CurrentWorkSpaceProjectBean.PAGE_PROJECT_WORK_SPACE;
} else {
navigationPage = "";
}
return navigationPage;
}
return navigationPage;
}
/**
* This method initializes the hash maps of the plugins, the ports and the repositories. The maps are cleaned beforehand.
*/
private void intializeHashMaps() {
// Clear all maps
this.pluginMap.clear();
this.portMap.clear();
this.repositoryMap.clear();
// Initialize the plugin map...
for (final MIPlugin plugin : this.project.getPlugins()) {
this.pluginMap.put(plugin.toString(), plugin);
// ..and the port map
for (final MIPort port : plugin.getOutputPorts()) {
this.portMap.put(port.toString(), port);
}
if (plugin instanceof MIFilter) {
for (final MIPort port : ((MIFilter) plugin).getInputPorts()) {
synchronized (this) {
// Clear all maps
this.pluginMap.clear();
this.portMap.clear();
this.repositoryMap.clear();
// Initialize the plugin map...
for (final MIPlugin plugin : this.project.getPlugins()) {
this.pluginMap.put(plugin.toString(), plugin);
// ..and the port map
for (final MIPort port : plugin.getOutputPorts()) {
this.portMap.put(port.toString(), port);
}
if (plugin instanceof MIFilter) {
for (final MIPort port : ((MIFilter) plugin).getInputPorts()) {
this.portMap.put(port.toString(), port);
}
}
}
// Now initialize the repository map
for (final MIRepository repository : this.project.getRepositories()) {
this.repositoryMap.put(repository.toString(), repository);
}
}
// Now initialize the repository map
for (final MIRepository repository : this.project.getRepositories()) {
this.repositoryMap.put(repository.toString(), repository);
}
}
......@@ -235,16 +239,18 @@ public final class CurrentWorkSpaceProjectBean {
* This method loads the list of available readers, filters and repositories, using the current libraries within the model.
*/
private void loadToolPalette() {
// Clean our tool palette
this.availableFilters.clear();
this.availableReaders.clear();
this.availableRepositories.clear();
// Make sure there is a project.
if (this.project != null) {
// Run through all libraries
for (final MIDependency lib : this.project.getDependencies()) {
this.addToToolPalette(lib);
synchronized (this) {
// Clean our tool palette
this.availableFilters.clear();
this.availableReaders.clear();
this.availableRepositories.clear();
// Make sure there is a project.
if (this.project != null) {
// Run through all libraries
for (final MIDependency lib : this.project.getDependencies()) {
this.addToToolPalette(lib);
}
}
}
}
......@@ -256,30 +262,32 @@ public final class CurrentWorkSpaceProjectBean {
* The library used to load the plugins and repositories.
*/
private void addToToolPalette(final MIDependency lib) {
try {
final List<Class<AbstractRepository>> repositories = PluginFinder.getAllRepositoriesWithinJar(FSManager.getInstance().getURL(lib, this.projectName),
this.classLoader);
final List<Class<AbstractPlugin>> plugins = PluginFinder.getAllPluginsWithinJar(FSManager.getInstance().getURL(lib, this.projectName),
this.classLoader);
// Now run through the available classes and add all non-abstract classes to our lists
for (final Class<AbstractRepository> repository : repositories) {
if (!Modifier.isAbstract(repository.getModifiers())) {
this.availableRepositories.add(repository);
synchronized (this) {
try {
final List<Class<AbstractRepository>> repositories = PluginFinder.getAllRepositoriesWithinJar(FSManager.getInstance().getURL(lib, this.projectName),
this.classLoader);
final List<Class<AbstractPlugin>> plugins = PluginFinder.getAllPluginsWithinJar(FSManager.getInstance().getURL(lib, this.projectName),
this.classLoader);
// Now run through the available classes and add all non-abstract classes to our lists
for (final Class<AbstractRepository> repository : repositories) {
if (!Modifier.isAbstract(repository.getModifiers())) {
this.availableRepositories.add(repository);
}
}
}
for (final Class<? extends AbstractPlugin> plugin : plugins) {
if (!Modifier.isAbstract(plugin.getModifiers())) {
if (AbstractFilterPlugin.class.isAssignableFrom(plugin)) {
this.availableFilters.add((Class<AbstractFilterPlugin>) plugin);
} else {
if (AbstractReaderPlugin.class.isAssignableFrom(plugin)) {
this.availableReaders.add((Class<AbstractReaderPlugin>) plugin);
for (final Class<? extends AbstractPlugin> plugin : plugins) {
if (!Modifier.isAbstract(plugin.getModifiers())) {
if (AbstractFilterPlugin.class.isAssignableFrom(plugin)) {
this.availableFilters.add((Class<AbstractFilterPlugin>) plugin);
} else {
if (AbstractReaderPlugin.class.isAssignableFrom(plugin)) {
this.availableReaders.add((Class<AbstractReaderPlugin>) plugin);
}
}
}
}
} catch (final MalformedURLException ex) {
ex.printStackTrace();
}
} catch (final MalformedURLException ex) {
ex.printStackTrace();
}
}
......@@ -287,11 +295,13 @@ public final class CurrentWorkSpaceProjectBean {
* This method takes all libraries from the lib-folder and adds them to the in-memory-model.
*/
private void addLibrariesToModel() {
final List<MIDependency> libs = FSManager.getInstance().getModelLibraries(this.projectName);
// Add them, but remove all existing dependencies so far to avoid double entries. This also makes sure that the model - after it has been opened - points
// just to valid dependencies (and to all of them).
this.project.getDependencies().clear();
this.project.getDependencies().addAll(libs);
synchronized (this) {
final List<MIDependency> libs = FSManager.getInstance().getModelLibraries(this.projectName);
// Add them, but remove all existing dependencies so far to avoid double entries. This also makes sure that the model - after it has been opened - points
// just to valid dependencies (and to all of them).
this.project.getDependencies().clear();
this.project.getDependencies().addAll(libs);
}
}
/**
......@@ -333,14 +343,16 @@ public final class CurrentWorkSpaceProjectBean {
* @return The name of the page of the project overview.
*/
public String clearProject() {
this.project = null;
this.projectName = null;
this.classLoader = null;
this.selectedPlugin = null;
this.timeStamp = 0;
this.pluginMap.clear();
this.filter2filterConnections.clear();
this.filter2repositoryConnections.clear();
synchronized (this) {
this.project = null;
this.projectName = null;
this.classLoader = null;
this.selectedPlugin = null;
this.timeStamp = 0;
this.pluginMap.clear();
this.filter2filterConnections.clear();
this.filter2repositoryConnections.clear();
}
return CurrentWorkSpaceProjectBean.PAGE_PROJECT_OVERVIEW;
}
......@@ -463,41 +475,43 @@ public final class CurrentWorkSpaceProjectBean {
* The plugin to be filled.
*/
private void fillPorts(final Class<AbstractPlugin> clazz, final MIPlugin plugin) {
try {
// Try to instantiate the given class, using the special constructor of Kieker.
final AbstractPlugin pluginInstance = clazz.getConstructor(Configuration.class).newInstance(new Configuration());
// Get the port and use them to initialize the model plugin.
final String[] inputPortNames = pluginInstance.getAllInputPortNames();
final String[] outputPortNames = pluginInstance.getAllOutputPortNames();
final String[] repositoryPortNames = pluginInstance.getAllRepositoryPortNames();
synchronized (this) {
try {
// Try to instantiate the given class, using the special constructor of Kieker.
final AbstractPlugin pluginInstance = clazz.getConstructor(Configuration.class).newInstance(new Configuration());
// Get the port and use them to initialize the model plugin.
final String[] inputPortNames = pluginInstance.getAllInputPortNames();
final String[] outputPortNames = pluginInstance.getAllOutputPortNames();
final String[] repositoryPortNames = pluginInstance.getAllRepositoryPortNames();
// Add input ports
if (plugin instanceof MIFilter) {
for (final String inputPortName : inputPortNames) {
final MIInputPort mInputPort = this.factory.createInputPort();
mInputPort.setName(inputPortName);
mInputPort.setParent((MIFilter) plugin);
}
}
// Add input ports
if (plugin instanceof MIFilter) {
for (final String inputPortName : inputPortNames) {
final MIInputPort mInputPort = this.factory.createInputPort();
mInputPort.setName(inputPortName);
mInputPort.setParent((MIFilter) plugin);
// Add output ports.
for (final String outputPortName : outputPortNames) {
final MIOutputPort mOutputPort = this.factory.createOutputPort();
mOutputPort.setName(outputPortName);
mOutputPort.setParent(plugin);
}
}
// Add output ports.
for (final String outputPortName : outputPortNames) {
final MIOutputPort mOutputPort = this.factory.createOutputPort();
mOutputPort.setName(outputPortName);
mOutputPort.setParent(plugin);
}
// Add repository ports.
for (final String repositoryPortName : repositoryPortNames) {
final MIRepositoryConnector mConnector = this.factory.createRepositoryConnector();
mConnector.setName(repositoryPortName);
plugin.getRepositories().add(mConnector);
}
// Add repository ports.
for (final String repositoryPortName : repositoryPortNames) {
final MIRepositoryConnector mConnector = this.factory.createRepositoryConnector();
mConnector.setName(repositoryPortName);
plugin.getRepositories().add(mConnector);
} catch (final Exception ex) {
// Inform the user about the fail!
CurrentWorkSpaceProjectBean.showMessage(FacesMessage.SEVERITY_ERROR, "An errcor occured while loading the ports of the plugin.");
}
} catch (final Exception ex) {
// Inform the user about the fail!
CurrentWorkSpaceProjectBean.showMessage(FacesMessage.SEVERITY_ERROR, "An errcor occured while loading the ports of the plugin.");
}
}
......@@ -586,8 +600,12 @@ public final class CurrentWorkSpaceProjectBean {
repository.setName(clazz.getSimpleName());
this.fillProperties(clazz, repository);
// Add it to the project
this.project.getRepositories().add(repository);
synchronized (this) {
// Add it to the project
this.project.getRepositories().add(repository);
this.repositoryMap.put(repository.toString(), repository);
}
}
/**
......@@ -609,9 +627,44 @@ public final class CurrentWorkSpaceProjectBean {
this.fillProperties(clazz, plugin);
this.fillPorts(clazz, plugin);
// Add it to the project
this.project.getPlugins().add(plugin);
this.pluginMap.put(plugin.toString(), plugin);
synchronized (this) {
// Add it to the project and don't forget to add the ports.
this.project.getPlugins().add(plugin);
this.pluginMap.put(plugin.toString(), plugin);
for (final MIPort port : plugin.getOutputPorts()) {
this.portMap.put(port.toString(), port);
}
if (plugin instanceof MIFilter) {
for (final MIPort port : ((MIFilter) plugin).getInputPorts()) {
this.portMap.put(port.toString(), port);
}
}
// Make sure the user can edit the repository connections.
final EList<MIRepositoryConnector> mConnectors = plugin.getRepositories();
for (final MIRepositoryConnector mConnector : mConnectors) {
this.filter2repositoryConnections.add(new ConnectionFilterToRepository(plugin, mConnector.getRepository(), mConnector));
}
}
}
/**
* This method removes the given repository from the project. If it is also the currently selected repository, it will be deselected.
*
* @param repository
* The repository to be removed from the project.
*/
public void removeRepository(final MIRepository repository) {
synchronized (this) {
this.project.getRepositories().remove(repository);
// Remove the repository from the map
this.repositoryMap.remove(repository.toString());
if (this.selectedRepository == repository) {
this.selectedRepository = null;
}
}
}
/**
......@@ -621,10 +674,22 @@ public final class CurrentWorkSpaceProjectBean {
* The plugin to be removed from the project.
*/
public void removePlugin(final MIPlugin plugin) {
this.project.getPlugins().remove(plugin);
this.pluginMap.remove(plugin.toString());
if (this.selectedPlugin == plugin) {
this.selectedPlugin = null;
synchronized (this) {
this.project.getPlugins().remove(plugin);
// Remove the plugin and its ports from the map
this.pluginMap.remove(plugin.toString());
for (final MIPort port : plugin.getOutputPorts()) {
this.portMap.remove(port.toString(), port);
}
if (plugin instanceof MIFilter) {
for (final MIPort port : ((MIFilter) plugin).getInputPorts()) {
this.portMap.remove(port.toString(), port);
}
}
if (this.selectedPlugin == plugin) {
this.selectedPlugin = null;
}
}
}
......@@ -634,10 +699,12 @@ public final class CurrentWorkSpaceProjectBean {
* @return The currently selected plugin or repository.
*/
public EObject getSelectedPlugin() {
if (this.selectedPlugin != null) {
return this.selectedPlugin;
} else {
return this.selectedRepository;
synchronized (this) {
if (this.selectedPlugin != null) {
return this.selectedPlugin;
} else {
return this.selectedRepository;
}
}
}
......@@ -648,8 +715,11 @@ public final class CurrentWorkSpaceProjectBean {
* The new selection.
*/
public void setSelectedPlugin(final MIPlugin selectedPlugin) {
this.selectedPlugin = selectedPlugin;
this.selectedRepository = null;
synchronized (this) {
this.selectedPlugin = selectedPlugin;
this.selectedRepository = null;
System.out.println(this);
}
}
/**
......@@ -659,8 +729,10 @@ public final class CurrentWorkSpaceProjectBean {
* The new selection.
*/
public void setSelectedRepository(final MIRepository selectedRepository) {
this.selectedRepository = selectedRepository;
this.selectedPlugin = null;
synchronized (this) {
this.selectedRepository = selectedRepository;
this.selectedPlugin = null;
}
}
/**
......@@ -706,24 +778,26 @@ public final class CurrentWorkSpaceProjectBean {
* This method extracts the connections between the filters from the current main project.
*/
private void getConnectionsFromProject() {
this.filter2filterConnections.clear();
this.filter2repositoryConnections.clear();
if (this.project != null) {
final EList<MIPlugin> mPlugins = this.project.getPlugins();
for (final MIPlugin mPlugin : mPlugins) {
final EList<MIOutputPort> mOutputPorts = mPlugin.getOutputPorts();
for (final MIOutputPort mOutputPort : mOutputPorts) {
final EList<MIInputPort> mInputPorts = mOutputPort.getSubscribers();
for (final MIInputPort mInputPort : mInputPorts) {
this.filter2filterConnections.add(new ConnectionFilterToFilter(mPlugin, mInputPort.getParent(), mInputPort, mOutputPort));
synchronized (this) {
this.filter2filterConnections.clear();
this.filter2repositoryConnections.clear();
if (this.project != null) {
final EList<MIPlugin> mPlugins = this.project.getPlugins();
for (final MIPlugin mPlugin : mPlugins) {
final EList<MIOutputPort> mOutputPorts = mPlugin.getOutputPorts();
for (final MIOutputPort mOutputPort : mOutputPorts) {
final EList<MIInputPort> mInputPorts = mOutputPort.getSubscribers();
for (final MIInputPort mInputPort : mInputPorts) {
this.filter2filterConnections.add(new ConnectionFilterToFilter(mPlugin, mInputPort.getParent(), mInputPort, mOutputPort));
}
}
}
final EList<MIRepositoryConnector> mConnectors = mPlugin.getRepositories();
for (final MIRepositoryConnector mConnector : mConnectors) {
this.filter2repositoryConnections.add(new ConnectionFilterToRepository(mPlugin, mConnector.getRepository(), mConnector));
final EList<MIRepositoryConnector> mConnectors = mPlugin.getRepositories();
for (final MIRepositoryConnector mConnector : mConnectors) {
this.filter2repositoryConnections.add(new ConnectionFilterToRepository(mPlugin, mConnector.getRepository(), mConnector));
}
}
}
}
......@@ -762,16 +836,18 @@ public final class CurrentWorkSpaceProjectBean {
* @return A list containing all available and valid connections.
*/
public List<ConnectionFilterToFilter> getValidConnections() {
final List<ConnectionFilterToFilter> validConnections = new ArrayList<ConnectionFilterToFilter>();
final List<ConnectionFilterToFilter> availableConnections = this.getFilterConnections();
synchronized (this) {
final List<ConnectionFilterToFilter> validConnections = new ArrayList<ConnectionFilterToFilter>();
final List<ConnectionFilterToFilter> availableConnections = this.getFilterConnections();
for (final ConnectionFilterToFilter connection : availableConnections) {
if (connection.isValid()) {
validConnections.add(connection);
for (final ConnectionFilterToFilter connection : availableConnections) {
if (connection.isValid()) {
validConnections.add(connection);
}
}
}
return validConnections;
return validConnections;
}
}
/**
......@@ -785,15 +861,17 @@ public final class CurrentWorkSpaceProjectBean {
* This method "submits" the current connections to the main project (In other words: The connections will be stored within the main project).
*/
public void submitConnections() {
for (final ConnectionFilterToFilter connection : this.filter2filterConnections) {
if (connection.isValid()) {
connection.getOutputPort().getSubscribers().add(connection.getInputPort());
synchronized (this) {
for (final ConnectionFilterToFilter connection : this.filter2filterConnections) {
if (connection.isValid()) {
connection.getOutputPort().getSubscribers().add(connection.getInputPort());
}
}
}
for (final ConnectionFilterToRepository connection : this.filter2repositoryConnections) {
if (connection.isValid()) {
connection.getOutputPort().setRepository(connection.getDestination());
for (final ConnectionFilterToRepository connection : this.filter2repositoryConnections) {
if (connection.isValid()) {
connection.getOutputPort().setRepository(connection.getDestination());
}
}
}
}
......
......@@ -21,10 +21,13 @@
package kieker.webgui.common;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import kieker.analysis.AnalysisController;
import kieker.analysis.AnalysisController.STATE;
import kieker.analysis.display.AbstractDisplay;
import kieker.analysis.exception.AnalysisConfigurationException;
import kieker.analysis.model.analysisMetaModel.MIProject;
import kieker.webgui.common.exception.AnalysisNotInstantiatedException;
......@@ -225,4 +228,56 @@ public final class ACManager {
return controllerState;
}
/**
* This method delivers the current displays of the given project. They can be used to show the stored information but should <b>not</b> be modified.
*
* @param projectName
* The name of the project whose displays should be delivered.
* @return A list of pairs containing the displays and the name of them.
*/
public List<Pair<String, AbstractDisplay>> getCurrentDisplays(final String projectName) {
final List<Pair<String, AbstractDisplay>> result = new ArrayList<Pair<String, AbstractDisplay>>();
return result;
}
/**
* This helper thread is used to update the available displays of the ACManager at regular intervals. <b>Important:</b> If the interrupt-method of the thread is
* being called, it will be terminated.
*
* @author Nils Christian Ehmke
* @version 1.0
*/
@SuppressWarnings("unused")
private class DisplayUpdateThread extends Thread {
/**
* This is the time the thread waits between the updates.
*/
private static final long SLEEP_TIME_MS = 2 * 1000;
/**
* Default constructor.
*/
public DisplayUpdateThread() {
// No code necessary
}
@Override
public void run() {
// Run until we have been interrupted
while (!Thread.interrupted()) {
// TODO Implement
// Wait a little bit.
try {
Thread.sleep(DisplayUpdateThread.SLEEP_TIME_MS);
} catch (final InterruptedException ex) {
// We have been interrupted. Exit the thread
return;
}
}
}
}
}
......@@ -299,7 +299,7 @@ public final class FSManager {
* @param projectName
* The name of the project to be removed.
*/
private void deleteProject(final String projectName) {
public void deleteProject(final String projectName) {
// TODO Delete
}
......@@ -315,7 +315,7 @@ public final class FSManager {
* @throws IOException
* If something goes wrong during the copy procedure.
*/
private void copyProject(final String projectName, final String newName) throws ProjectAlreadyExistingException, IOException {
public void copyProject(final String projectName, final String newName) throws ProjectAlreadyExistingException, IOException {
if (projectName.equals(newName)) {
throw new ProjectAlreadyExistingException("A project with the name '" + newName + "' exists already.");
}
......
......@@ -60,6 +60,10 @@ public class MIPluginStringConverter implements Converter {
@Override
public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
return o.toString();
if (o == null) {
return "";
} else {
return o.toString();
}
}
}
......@@ -60,6 +60,10 @@ public class MIPortStringConverter implements Converter {
@Override
public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
return o.toString();
if (o == null) {
return "";
} else {
return o.toString();
}
}
}
......@@ -60,6 +60,10 @@ public class MIRepositoryStringConverter implements Converter {
@Override
public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
return o.toString();
if (o == null) {
return "";
} else {
return o.toString();
}
}
}
......@@ -24,13 +24,13 @@
<p:submenu label="File">
<p:menuitem value="Close Cockpit" action="#{currentAnalysisCockpitProjectBean.clearProject()}" ajax="false"/>
<p:separator/>
<p:menuitem value="Settings" onclick="settingsDialog.show()" ajax="true"/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true"/>
<p:separator/>
<p:menuitem value="About..." onclick="aboutDialog.show()" ajax="true"/>
<p:menuitem value="About..." onclick="aboutDlg.show()" ajax="true"/>
</p:submenu>
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
......
......@@ -24,13 +24,13 @@
<p:submenu label="File">
<p:menuitem value="Close Controller" action="#{currentAnalysisControllerProjectBean.clearProject()}" ajax="false"/>
<p:separator/>
<p:menuitem value="Settings" onclick="settingsDialog.show()" ajax="true"/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true"/>
<p:separator/>
<p:menuitem value="About..." onclick="aboutDialog.show()" ajax="true"/>
<p:menuitem value="About..." onclick="aboutDlg.show()" ajax="true"/>
</p:submenu>
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
......
......@@ -9,10 +9,90 @@
<h:head>
<title>Kieker.WebGUI</title>
<link rel="stylesheet" type="text/css" href="../css/Common.css" />
<link rel="stylesheet" type="text/css" href="../css/AnalysisViewWorkSpace.css" />
</h:head>
<h:body>
<p:layout id="layout" fullPage="true">
<p:layoutUnit position="north" collapsible="false" header="Kieker.WebGUI">
<h:form>
<p:menubar>
<p:submenu label="File">
<p:menuitem value="Save Project" update=":messages" ajax="true" action="#{currentWorkSpaceProjectBean.saveProject(false)}" 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:separator/>
<p:menuitem value="Reset Project" ajax="true" disabled="#{empty currentWorkSpaceProjectBean.project}"/>
<p:separator/>
<p:menuitem value="New View" ajax="true"/>
<p:separator/>
<p:menuitem value="Close Project" action="#{currentWorkSpaceProjectBean.clearProject()}" ajax="false"/>
<p:separator/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true"/>
<p:separator/>
<p:menuitem value="About..." onclick="aboutDlg.show()" ajax="true"/>
</p:submenu>
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
</p:menubar>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="west">
<p:accordionPanel>
<p:tab title="Plugin 001">
<p:panel id="display001" header="Display 001">
</p:panel>
<p:draggable helper="clone" revert="true" for="display001"/>
<br/>
<p:panel header="Display 002">
</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 position="center">
<p:accordionPanel>
<p:tab title="View 1">
<p:dashboard>
</p:dashboard>
</p:tab>
<p:tab title="View 2">
<p:dashboard>
</p:dashboard>
</p:tab>
</p:accordionPanel>
</p:layoutUnit>
</p:layout>
<!-- Include the dialog for the configuration. -->
<ui:include src="dialogs/settingsDialog.xhtml" />
<!-- Include the about-dialog. -->
<ui:include src="dialogs/aboutDialog.xhtml" />
</h:body>
</html>
\ No newline at end of file
......@@ -14,7 +14,6 @@
</h:head>
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" header="Kieker.WebGUI">
<h:form id="menubarForm">
......@@ -25,13 +24,13 @@
<p:separator/>
<p:menuitem value="Refresh Projects List" update=":projectsListForm" ajax="true"/>
<p:separator/>
<p:menuitem value="Settings" onclick="settingsDialog.show()" ajax="true"/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true"/>
<p:separator/>
<p:menuitem value="About..." onclick="aboutDialog.show()" ajax="true"/>
<p:menuitem value="About..." onclick="aboutDlg.show()" ajax="true"/>
</p:submenu>
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
......@@ -53,19 +52,19 @@
<p:column headerText="Last Modification" sortBy="#{projectsBean.getCurrTimeStamp(project)}" style="text-align: center">
<h:outputText value="#{projectsBean.getCurrTimeStamp(project)}" />
</p:column>
<p:column headerText="Analysis" style="text-align: center" sortBy="#{projectsBean.getAnalysisControllerState(project)}">
<h:outputText value="#{projectsBean.getAnalysisControllerState(project)}"/>
</p:column>
<p:column headerText="Options" style="text-align: center; width: 280px">
<p:column headerText="Options" style="text-align: center; width: 310px">
<p:commandButton id="openButton" ajax="false" action="#{currentWorkSpaceProjectBean.setProject(projectsBean.openProject(project), project)}" icon="ui-icon-folder-open"/>
<p:commandButton id="copyButton" icon="ui-icon-copy" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="copyProjectDialog.show()"/>
<p:commandButton id="renameButton" icon="ui-icon-pencil" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="renameProjectDialog.show()"/>
<p:commandButton id="deleteButton" icon="ui-icon-trash" action="#{currentProjectOverviewBean.setProjectName(project)}" onclick="deleteProjectDialog.show()"/>
<p:spacer height="0" width="10"/>
<p:commandButton id="controlAnalysis" ajax="false" action="#{currentAnalysisControllerProjectBean.setProject(project)}" icon="ui-icon-wrench"/>
<p:commandButton id="editAnalysisViews" icon="ui-icon-pencil"/>
<p:commandButton id="editAnalysisViews" ajax="false" action="#{currentAnalysisViewWorkSpaceProjectBean.setProject(project)}" icon="ui-icon-pencil" />
<p:commandButton id="showAnalysis" ajax="false" action="#{currentAnalysisCockpitProjectBean.setProject(project)}" icon="ui-icon-search"/>
<p:tooltip for="deleteButton" value="Delete Project"/>
......@@ -84,13 +83,12 @@
<p:growl id="messages" life="1500" showDetail="true" autoUpdate="false" sticky="false"/>
<!-- Include the dialogs for the project managment. -->
<!-- Include the about-dialog. -->
<ui:include src="dialogs/aboutDialog.xhtml" />
<!-- Include the dialogs for the project managment. -->
<ui:include src="dialogs/projectDialogs.xhtml" />
<!-- Include the dialog for the configuration. -->
<ui:include src="dialogs/settingsDialog.xhtml" />
<!-- Include the about-dialog. -->
<ui:include src="dialogs/aboutDialog.xhtml" />
</h:body>
</html>
\ No newline at end of file
......@@ -41,13 +41,13 @@
<p:separator/>
<p:menuitem value="Close Project" action="#{currentWorkSpaceProjectBean.clearProject()}" ajax="false"/>
<p:separator/>
<p:menuitem value="Settings" onclick="settingsDialog.show()" ajax="true"/>
<p:menuitem value="Settings" onclick="settingsDlg.show()" ajax="true"/>
</p:submenu>
<p:submenu label="Help">
<p:menuitem value="User Guide" ajax="true"/>
<p:separator/>
<p:menuitem value="About..." onclick="aboutDialog.show()" ajax="true"/>
<p:menuitem value="About..." onclick="aboutDlg.show()" ajax="true"/>
</p:submenu>
<p:menuitem styleClass="logOutButton" disabled="true" value="#{userBean.userName} [Log Out]" ajax="true"/>
......@@ -77,8 +77,6 @@
<div class="ui-panel-titlebar ui-widget-header ui-corner-all">
<h:outputText style="font-weight: bold" value="#{repository.getName()}"/>
</div>
<p:commandLink ajax="true" value="Connections" update=":connectionDialogForm" onclick="connectionDialog.show();"/>
<br/>
<p:commandLink ajax="true" value="Remove" action="#{currentWorkSpaceProjectBean.removeRepository(repository)}" update=":propertiesForm :centerForm"/>
</div>
</ui:repeat>
......
......@@ -6,7 +6,7 @@
xmlns:p="http://primefaces.org/ui">
<p:dialog header="About..." resizable="false" modal="true"
widgetVar="aboutDialog" id="aboutDialog">
widgetVar="aboutDlg" id="aboutDialog">
<h:form>
<img src="../img/kieker-logo-transparent.png" style="opacity: 0.25" />
<hr/>
......@@ -21,7 +21,7 @@
<a href="http://www.kieker-monitoring.net/">http://www.kieker-monitoring.net/</a>
<hr/>
<div style="text-align: right">
<p:commandButton value="Ok" onclick="aboutDialog.hide()" />
<p:commandButton value="Ok" oncomplete="aboutDlg.hide()" />
</div>
</h:form>
</p:dialog>
......
......@@ -5,7 +5,7 @@
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<p:dialog id="manageLibrariesDialog" header="Libraries" resizable="false"
<p:dialog id="manageLibrariesDlg" header="Libraries" resizable="false"
modal="true" widgetVar="manageLibrariesDialog">
<h:form id="dependenciesForm">
......
......@@ -8,7 +8,7 @@
<!-- ******************************************************************************** -->
<!-- This is the dialog to create a new project. -->
<p:dialog id="newProjectDialog" header="New Project" resizable="false" modal="true" widgetVar="newProjectDialog">
<p:dialog id="newProjectDlg" header="New Project" resizable="false" modal="true" widgetVar="newProjectDialog">
<!-- Make sure that closing of the dialog also clears the input field. -->
<p:ajax event="close" update="newProjectDialogForm:newProjectInputText" />
......@@ -28,7 +28,7 @@
</p:dialog>
<!-- ******************************************************************************** -->
<p:dialog id="renameProjectDialog" header="Rename Project" resizable="false" modal="true" widgetVar="renameProjectDialog">
<p:dialog id="renameProjectDlg" header="Rename Project" resizable="false" modal="true" widgetVar="renameProjectDialog">
<!-- Make sure that closing of the dialog also clears the input field. -->
<p:ajax event="close" update="renameProjectDialogForm:renameProjectInputText" />
......@@ -47,7 +47,7 @@
</h:form>
</p:dialog>
<p:dialog id="deleteProjectDialog" header="Delete Project" resizable="false" modal="true" widgetVar="deleteProjectDialog">
<p:dialog id="deleteProjectDlg" header="Delete Project" resizable="false" modal="true" widgetVar="deleteProjectDialog">
<h:form id="deleteProjectDialogForm">
<div style="text-align: center">
......@@ -63,7 +63,7 @@
</h:form>
</p:dialog>
<p:dialog id="copyProjectDialog" header="Copy Project" resizable="false" modal="true" widgetVar="copyProjectDialog">
<p:dialog id="copyProjectDlg" header="Copy Project" resizable="false" modal="true" widgetVar="copyProjectDialog">
<!-- Make sure that closing of the dialog also clears the input field. -->
<p:ajax event="close" update="copyProjectDialogForm:copyProjectDialogInputText" />
......
......@@ -6,7 +6,7 @@
xmlns:p="http://primefaces.org/ui">
<p:dialog id="settingsDialog" header="Settings" resizable="false"
modal="true" widgetVar="settingsDialog">
modal="true" widgetVar="settingsDlg">
<h:form>
<h:panelGrid columns="2" cellpadding="10">
<h:outputText value="Look and Feel:" />
......@@ -18,7 +18,7 @@
</h:panelGrid>
<hr/>
<div style="text-align: right">
<p:commandButton value="Ok" oncomplete="settingsDialog.hide();" />
<p:commandButton value="Ok" oncomplete="settingsDlg.hide();" />
</div>
</h:form>
</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