From adfe7cd56a36aab42d2be50f18863b338299c44a Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Tue, 4 Dec 2012 00:01:43 +0100
Subject: [PATCH] Deactivated more components for guests; Initial auto layout
 will now be performed

---
 .../beans/view/CurrentAnalysisEditorBean.java |   4 +
 .../view/CurrentAnalysisEditorGraphBean.java  |  12 +
 .../webapp/pages/AnalysisEditorPage.xhtml     | 227 +++++++++---------
 3 files changed, 134 insertions(+), 109 deletions(-)

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
index 22d813a1..81fbdbc0 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
@@ -503,6 +503,10 @@ public final class CurrentAnalysisEditorBean {
 		this.currentAnalysisEditorGraphBean.setGridColor(this.userBean.getGridColor());
 		this.currentAnalysisEditorGraphBean.setGridSize(this.userBean.getGridSize());
 
+		// Perform an initial auto layout
+		this.currentAnalysisEditorGraphBean.startAutoLayout();
+		this.currentAnalysisEditorGraphBean.checkReadOnlyForGuests();
+
 		// Repaint the graph
 		this.currentAnalysisEditorGraphBean.refreshGraph();
 	}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorGraphBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorGraphBean.java
index e4ca8e11..4c30b444 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorGraphBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorGraphBean.java
@@ -38,6 +38,7 @@ import kieker.monitoring.core.registry.Registry;
 import kieker.webgui.common.exception.InvalidInputSizeException;
 import kieker.webgui.common.exception.UninitializedGraphException;
 import kieker.webgui.service.IGraphLayoutService;
+import kieker.webgui.web.beans.session.UserBean;
 
 import org.primefaces.context.RequestContext;
 
@@ -163,6 +164,8 @@ public final class CurrentAnalysisEditorGraphBean {
 
 	@Autowired
 	private IGraphLayoutService layouter;
+	@Autowired
+	private UserBean userBean;
 
 	/**
 	 * This map contains all components (plugins, repositories and ports) within the graph to identify them with a unique ID.
@@ -662,4 +665,13 @@ public final class CurrentAnalysisEditorGraphBean {
 		this.refreshGraph();
 	}
 
+	/**
+	 * This method checks whether the current user is a guest and activates the read only mode if necessary.
+	 */
+	public void checkReadOnlyForGuests() {
+		if ("Guest".equals(this.userBean.getUserrole())) {
+			RequestContext.getCurrentInstance().execute("graph.setReadOnly('false', 'true');");
+		}
+	}
+
 }
diff --git a/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml b/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
index 063bbab7..38800bc6 100644
--- a/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/pages/AnalysisEditorPage.xhtml
@@ -4,7 +4,8 @@
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:p="http://primefaces.org/ui"
-      xmlns:f="http://java.sun.com/jsf/core">
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:c="http://java.sun.com/jsp/jstl/core">
 
     <h:head/>
 
@@ -79,13 +80,17 @@
             <!-- Those are the menu bar entries left from the help-submenu. -->
             <ui:define name="furtherMenuBarEntries">
                 <p:submenu  label="#{localizedMessages.file}">
-                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-save" value="  #{localizedMessages.saveProject}" update=":messages" ajax="true" action="#{currentAnalysisEditorBean.saveProject(false)}" disabled="#{empty currentAnalysisEditorBean.project}"/>
-                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveAs" value="  #{localizedMessages.saveProjectAs}" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
-                    <p:separator />
+                    <c:if test="#{sec:areAnyGranted('User, Administrator')}">
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-save" value="  #{localizedMessages.saveProject}" update=":messages" ajax="true" action="#{currentAnalysisEditorBean.saveProject(false)}" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-saveAs" value="  #{localizedMessages.saveProjectAs}" update=":messages" ajax="true" disabled="#{true or empty currentAnalysisEditorBean.project}"/>
+                        <p:separator />
+                    </c:if>
                     <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-reload" value="  #{localizedMessages.reloadProject}" ajax="false" url="analysisEditor?projectName=#{currentAnalysisEditorBean.projectName}" disabled="#{empty currentAnalysisEditorBean.project}" />
                     <p:separator/>
-                    <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-manageLibraries" value="  #{localizedAnalysisEditorPageMessages.manageLibraries}" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
-                    <p:separator />
+                    <c:if test="#{sec:areAnyGranted('User, Administrator')}">
+                        <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-manageLibraries" value="  #{localizedAnalysisEditorPageMessages.manageLibraries}" onclick="manageLibrariesDialog.show()" ajax="true" disabled="#{empty currentAnalysisEditorBean.project}"/>
+                        <p:separator />
+                    </c:if>
                     <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-settings" value="  #{localizedMessages.settings}" onclick="settingsDlg.show()" ajax="true"/>
                     <p:separator />
                     <p:menuitem styleClass="element-with-whitespace" icon="ui-icon-close" value="  #{localizedMessages.closeProject}" action="ProjectOverviewPage.xhtml?faces-redirect=true" ajax="false"/>
@@ -139,11 +144,11 @@
                             <!-- The classname is not editable, the name is editable with a specific target, other properies are editable normally. -->
                             <p:column headerText="#{localizedMessages.value}" style="width:125px">
                                 <h:outputText id="className" value="#{currentAnalysisEditorBean.selectedPlugin.classname}" rendered="#{rowIndex == 0}"/>
-                                <p:inplace id="nameEditor" editor="true" rendered="#{rowIndex == 1}" >  
+                                <p:inplace id="nameEditor" editor="true" rendered="#{rowIndex == 1}" disabled="#{not sec:areAnyGranted('User, Administrator')}" >  
                                     <p:inputText value="#{currentAnalysisEditorBean.selectedPlugin.name}" />
                                     <p:ajax event="save" listener="#{currentAnalysisEditorGraphBean.renameNode(currentAnalysisEditorBean.selectedPlugin, currentAnalysisEditorBean.selectedPlugin.name)}" />
                                 </p:inplace>  
-                                <p:inplace id="normalEditor" editor="true" rendered="#{rowIndex > 1}">  
+                                <p:inplace id="normalEditor" editor="true" rendered="#{rowIndex > 1}" disabled="#{not sec:areAnyGranted('User, Administrator')}">  
                                     <p:inputText value="#{property.value}" />
                                 </p:inplace>  
                                 <p:tooltip for="className" value="#{localizedAnalysisEditorPageMessages.tooltipClassName}" rendered="#{rowIndex == 0}"/>
@@ -154,113 +159,117 @@
                     </h:form>
                 </p:layoutUnit>
 
-                <!-- The following is the toolpalette, presenting the available plugins etc. -->
-                <p:layoutUnit position="east" size="300" header="#{localizedAnalysisEditorPageMessages.availablePlugins}" resizable="true" collapsible="true">
-                    <h:form id="toolpalette">
-                        <p:accordionPanel multiple="true" activeIndex="0,1,2">
-                            <p:tab title="#{localizedAnalysisEditorPageMessages.reader}">
-                                <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.readers}" var="reader">
-                                    <p:commandLink id="readerLink" value="#{reader.plugin.name}" action="#{currentAnalysisEditorBean.addPlugin(reader)}" update=":messages" disabled="#{not reader.fullyInitialized}" /><br/>
-                                    <p:tooltip for="readerLink">
-                                        <b><h:outputText value="#{reader.plugin.name} (#{reader.plugin.classname})"/></b>
-                                        <br/>
-                                        <h:outputText value="#{reader.description}"/>
-                                        <br/><br/>
-                                        <ui:fragment rendered="#{not empty reader.plugin.outputPorts}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.outputPorts}:"/></b>
-                                            <p:dataList value="#{reader.plugin.outputPorts}" var="port">
-                                                #{port.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty reader.plugin.repositories}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.repositoryPorts}:" /></b>
-                                            <p:dataList value="#{reader.plugin.repositories}" var="port">
-                                                #{port.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty reader.plugin.properties}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
-                                            <p:dataList value="#{reader.plugin.properties}" var="property">
-                                                #{property.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty reader.dependency}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                <c:if test="#{sec:areAnyGranted('User, Administrator')}">
+                    <!-- The following is the toolpalette, presenting the available plugins etc. -->
+                    <p:layoutUnit position="east" size="300" header="#{localizedAnalysisEditorPageMessages.availablePlugins}" resizable="true" collapsible="true">
+                        <h:form id="toolpalette">
+                            <p:accordionPanel multiple="true" activeIndex="0,1,2">
+                                <p:tab title="#{localizedAnalysisEditorPageMessages.reader}">
+                                    <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.readers}" var="reader">
+                                        <p:commandLink id="readerLink" value="#{reader.plugin.name}" action="#{currentAnalysisEditorBean.addPlugin(reader)}" update=":messages" disabled="#{not reader.fullyInitialized}" /><br/>
+                                        <p:tooltip for="readerLink">
+                                            <b><h:outputText value="#{reader.plugin.name} (#{reader.plugin.classname})"/></b>
                                             <br/>
-                                            <h:outputText value="#{reader.dependency}"/>
-                                        </ui:fragment>
-                                    </p:tooltip>
-                                </ui:repeat>
-                            </p:tab>
-                            <p:tab title="#{localizedAnalysisEditorPageMessages.filter}">
-                                <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.filters}" var="filter">
-                                    <p:commandLink id="filterLink" value="#{filter.plugin.name}" action="#{currentAnalysisEditorBean.addPlugin(filter)}" update=":messages"/><br/>
-                                    <p:tooltip for="filterLink">
-                                        <b><h:outputText value="#{filter.plugin.name} (#{filter.plugin.classname})"/></b>
-                                        <br/>
-                                        <h:outputText value="#{filter.description}"/>
-                                        <br/><br/>
-                                        <ui:fragment rendered="#{not empty filter.plugin.inputPorts}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.inputPorts}:"/></b>
-                                            <p:dataList value="#{filter.plugin.inputPorts}" var="port">
-                                                #{port.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty filter.plugin.outputPorts}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.outputPorts}:"/></b>
-                                            <p:dataList value="#{filter.plugin.outputPorts}" var="port">
-                                                #{port.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty filter.plugin.repositories}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.repositoryPorts}:"/></b>
-                                            <p:dataList value="#{filter.plugin.repositories}" var="port">
-                                                #{port.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty filter.plugin.properties}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
-                                            <p:dataList value="#{filter.plugin.properties}" var="property">
-                                                #{property.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty filter.dependency}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                                            <h:outputText value="#{reader.description}"/>
+                                            <br/><br/>
+                                            <ui:fragment rendered="#{not empty reader.plugin.outputPorts}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.outputPorts}:"/></b>
+                                                <p:dataList value="#{reader.plugin.outputPorts}" var="port">
+                                                    #{port.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty reader.plugin.repositories}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.repositoryPorts}:" /></b>
+                                                <p:dataList value="#{reader.plugin.repositories}" var="port">
+                                                    #{port.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty reader.plugin.properties}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
+                                                <p:dataList value="#{reader.plugin.properties}" var="property">
+                                                    #{property.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty reader.dependency}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                                                <br/>
+                                                <h:outputText value="#{reader.dependency}"/>
+                                            </ui:fragment>
+                                        </p:tooltip>
+                                    </ui:repeat>
+                                </p:tab>
+                                <p:tab title="#{localizedAnalysisEditorPageMessages.filter}">
+                                    <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.filters}" var="filter">
+                                        <p:commandLink id="filterLink" value="#{filter.plugin.name}" action="#{currentAnalysisEditorBean.addPlugin(filter)}" update=":messages"/><br/>
+                                        <p:tooltip for="filterLink">
+                                            <b><h:outputText value="#{filter.plugin.name} (#{filter.plugin.classname})"/></b>
                                             <br/>
-                                            <h:outputText value="#{filter.dependency}"/>
-                                        </ui:fragment>
-                                    </p:tooltip>                                
-                                </ui:repeat>
-                            </p:tab>
-                            <p:tab title="#{localizedAnalysisEditorPageMessages.repositories}">
-                                <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.repositories}" var="repository">
-                                    <p:commandLink id="repositoryLink" value="#{repository.repository.name}" action="#{currentAnalysisEditorBean.addRepository(repository)}" update=":messages"/><br/>
-                                    <p:tooltip for="repositoryLink">
-                                        <b><h:outputText value="#{repository.repository.name} (#{repository.repository.classname})"/></b>
-                                        <br/>
-                                        <h:outputText value="#{repository.description}"/>
-                                        <br/><br/>
-                                        <ui:fragment rendered="#{not empty repository.repository.properties}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
-                                            <p:dataList value="#{repository.repository.properties}" var="property">
-                                                #{property.name}
-                                            </p:dataList>
-                                        </ui:fragment>
-                                        <ui:fragment rendered="#{not empty repository.dependency}">
-                                            <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                                            <h:outputText value="#{filter.description}"/>
+                                            <br/><br/>
+                                            <ui:fragment rendered="#{not empty filter.plugin.inputPorts}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.inputPorts}:"/></b>
+                                                <p:dataList value="#{filter.plugin.inputPorts}" var="port">
+                                                    #{port.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty filter.plugin.outputPorts}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.outputPorts}:"/></b>
+                                                <p:dataList value="#{filter.plugin.outputPorts}" var="port">
+                                                    #{port.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty filter.plugin.repositories}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.repositoryPorts}:"/></b>
+                                                <p:dataList value="#{filter.plugin.repositories}" var="port">
+                                                    #{port.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty filter.plugin.properties}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
+                                                <p:dataList value="#{filter.plugin.properties}" var="property">
+                                                    #{property.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty filter.dependency}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                                                <br/>
+                                                <h:outputText value="#{filter.dependency}"/>
+                                            </ui:fragment>
+                                        </p:tooltip>                                
+                                    </ui:repeat>
+                                </p:tab>
+                                <p:tab title="#{localizedAnalysisEditorPageMessages.repositories}">
+                                    <ui:repeat value="#{currentAnalysisEditorBean.availableComponents.repositories}" var="repository">
+                                        <p:commandLink id="repositoryLink" value="#{repository.repository.name}" action="#{currentAnalysisEditorBean.addRepository(repository)}" update=":messages"/><br/>
+                                        <p:tooltip for="repositoryLink">
+                                            <b><h:outputText value="#{repository.repository.name} (#{repository.repository.classname})"/></b>
                                             <br/>
-                                            <h:outputText value="#{repository.dependency}"/>
-                                        </ui:fragment>
-                                    </p:tooltip>  
-                                </ui:repeat>
-                            </p:tab>
-                        </p:accordionPanel>
-                    </h:form>
-                </p:layoutUnit>
+                                            <h:outputText value="#{repository.description}"/>
+                                            <br/><br/>
+                                            <ui:fragment rendered="#{not empty repository.repository.properties}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.configuration}:"/></b>
+                                                <p:dataList value="#{repository.repository.properties}" var="property">
+                                                    #{property.name}
+                                                </p:dataList>
+                                            </ui:fragment>
+                                            <ui:fragment rendered="#{not empty repository.dependency}">
+                                                <b><h:outputText value="#{localizedAnalysisEditorPageMessages.dependencies}:"/></b>
+                                                <br/>
+                                                <h:outputText value="#{repository.dependency}"/>
+                                            </ui:fragment>
+                                        </p:tooltip>  
+                                    </ui:repeat>
+                                </p:tab>
+                            </p:accordionPanel>
+                        </h:form>
+                    </p:layoutUnit>
+                </c:if>
             </ui:define>
 
             <ui:define name="furtherDialogIncludes">
-                <ui:include src="../dialogs/AnalysisEditorPageDialogs.xhtml" />
+                <c:if test="#{sec:areAnyGranted('User, Administrator')}">
+                    <ui:include src="../dialogs/AnalysisEditorPageDialogs.xhtml" />
+                </c:if>
             </ui:define>
 
         </ui:composition>
-- 
GitLab