diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentUsersController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentUsersController.java new file mode 100644 index 0000000000000000000000000000000000000000..10ef18390aed58a5d1009b6953cef22d1ebd4fbd --- /dev/null +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentUsersController.java @@ -0,0 +1,106 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package gov.anl.aps.dm.portal.controllers; + + +import gov.anl.aps.dm.portal.model.beans.UserExperimentRoleFacade; +import gov.anl.aps.dm.portal.model.entities.Experiment; +import gov.anl.aps.dm.portal.model.entities.UserInfo; +import java.io.Serializable; +import java.util.List; +import javax.ejb.EJB; +import javax.enterprise.context.SessionScoped; +import javax.inject.Named; +import org.apache.log4j.Logger; + +@Named("experimentUsersController") +@SessionScoped +public class ExperimentUsersController implements Serializable { + + private static final Logger logger = Logger.getLogger(ExperimentUsersController.class.getName()); + + @EJB + private UserExperimentRoleFacade userExperimentRoleFacade; + + public ExperimentUsersController() { + this.experimentUsersTable = new ExperimentUsersTable(); + } + + class ExperimentUsersTable extends DataTableController<UserInfo> { + + @Override + public String getEntityTypeName() { + return "UserInfo"; + } + + @Override + public List<UserInfo> findAll() { + // find all users in experiment + return null; + } + } + + private ExperimentUsersTable experimentUsersTable; + private Experiment experiment; + + public Experiment getExperiment() { + return experiment; + } + + public void setExperiment(Experiment experiment) { + this.experiment = experiment; + } + + public ExperimentUsersTable getExperimentUsersTable() { + return experimentUsersTable; + } + + public void setExperimentUsersTable(ExperimentUsersTable experimentUsersTable) { + this.experimentUsersTable = experimentUsersTable; + } + + public String getCurrentEntityInstanceName() { + return null; + } + + public String remove() { + return null; + } + + public boolean canRemove(String removerUsername, UserInfo removee) { + return false; + } + + public boolean canAddUsers(String username) { + return true; + } + + public boolean isManager(String userId) { + return true; + } + + public boolean isPI(String userId) { + return true; + } + + public boolean isUser(String userId) { + return true; + } + + public boolean canAssignManager(String userId) { + return true; + } + + public boolean canAssignPI(String userId) { + return true; + } + + public boolean canAssignUser(String userId) { + return true; + } + +} diff --git a/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml index fafd0ef0a0a7ccadf5957a9c379d6de255c01562..0e3880e3bc06db5931f369087904a1064572793d 100644 --- a/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/experimentListDataTable.xhtml @@ -49,14 +49,16 @@ filterBy="#{experimentObject.endDate}" filterMatchMode="contains" width="120"> <h:outputText value="#{experimentObject.endDate}"> - <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> + <f:convertDateTime pattern="#{resources.DatePattern}" type="date" /> </h:outputText> </p:column> - + <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/> <p:column headerText="Actions" width="70"> <div class="actionLink"> - <p:commandLink action="#{experimentController.prepareView(experimentObject)}" styleClass="ui-icon ui-icon-info" title="View"/> + <p:commandLink action="#{experimentController.prepareView(experimentObject)}" styleClass="ui-icon ui-icon-info" title="View"> + <f:setPropertyActionListener value="#{experimentObject}" target="#{experimentUsersController.experiment}"/> + </p:commandLink> <p:commandLink action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{isEntityWriteable}" styleClass="ui-icon ui-icon-pencil" title="Edit"/> <p:commandLink oncomplete="PF('experimentDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form"> <f:setPropertyActionListener value="#{experimentObject}" target="#{experimentController.current}"/> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml new file mode 100644 index 0000000000000000000000000000000000000000..6b5a7432c8e44d7b4b51064cbefa85b1a99c5d27 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:p="http://primefaces.org/ui" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> + + <p:confirmDialog id="experimentUserRemoveDialog" message="Remove user #{experimentUsersController.getCurrentEntityInstanceName()} from Experiment?" + header="Remove User" severity="alert" widgetVar="experimentUserRemoveDialogWidget" + styleClass="dialog"> + <p:commandButton value="Yes" oncomplete="experimentUserRemoveDialogWidget.hide()" action="#{experimentUsersController.remove()}"/> + <p:commandButton value="No" onclick="PF('experimentUserRemoveDialogWidget').hide()" type="button" /> + </p:confirmDialog> +</ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml new file mode 100644 index 0000000000000000000000000000000000000000..e96797062ef9a8c3c7bfa1143523fd1da3ebfc75 --- /dev/null +++ b/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<ui:composition xmlns="http://www.w3.org/1999/xhtml" + xmlns:h="http://java.sun.com/jsf/html" + xmlns:p="http://primefaces.org/ui" + xmlns:f="http://java.sun.com/jsf/core" + xmlns:ui="http://xmlns.jcp.org/jsf/facelets" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> + + <div class="actionButton"> + + <p:commandButton id="experimentUserAddButton" value="Add" rendered="#{experimentUsersController.canAddUsers(loginController.username)}" icon="ui-icon-plus" > + <p:tooltip for="experimentUserAddButton" value="Add new Users."/> + </p:commandButton> + + <p:commandButton id="ResetFiltersButton" action="#{experimentUsersController.experimentUsersTable.resetFilterList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight"> + <p:tooltip for="ResetFiltersButton" value="Reset list filters."/> + </p:commandButton> + </div> + + <p:dataTable id="experimentUsersListDataTable" + var="experimentUserObject" + value="#{experimentUsersController.experimentUsersTable.listDataModel}" + filteredValue="#{experimentUsersController.experimentUsersTable.filteredObjectList}" + paginator="true" + paginatorAlwaysVisible="false" + rows="25" + binding="#{experimentUsersController.experimentUsersTable.listDataTable}" + widgetVar="experimentUsersListWidget" + emptyMessage="No users found."> + + <p:column sortBy="#{experimentUserObject.username}" headerText="Username" + filterBy="#{experimentUserObject.username}" filterMatchMode="contains" width="100"> + <h:outputText value="#{experimentUserObject.username}"/> + </p:column> + + <p:column sortBy="#{experimentUserObject.lastName}, #{experimentUserObject.firstName}" headerText="Last, First Name" + filterBy="#{experimentUserObject.lastName}, #{experimentUserObject.firstName}" filterMatchMode="contains" width="120"> + <h:outputText value="#{experimentUserObject.lastName}, #{experimentUserObject.firstName}"/> + </p:column> + + <p:column headerText="Manager" width="40"> + <p:selectBooleanCheckbox value="#{experimentUsersController.isManager(experimentUserObject.id)}" rendered="#{experimentUserObject.canAssignManager(loginController.username)}" /> + </p:column> + + <p:column headerText="PI" width="40"> + <p:selectBooleanCheckbox value="#{experimentUsersController.isPI(experimentUserObject.id)}" rendered="#{experimentUserObject.canAssignPI(loginController.username)}" /> + + </p:column> + + <p:column headerText="User" width="40"> + <p:selectBooleanCheckbox value="#{experimentUsersController.isUser(experimentUserObject.id)}" rendered="#{experimentUserObject.canAssignUser(loginController.username)}" /> + + </p:column> + + + <p:column headerText="Actions" width="40"> + <div class="actionLink" > + <p:commandLink oncomplete="PF('experimentUserRemoveDialogWidget').show()" rendered="#{experimentUsersController.canRemove(loginController.username, experimentUserObject)}" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form" > + <f:setPropertyActionListener value="#{experimentUserObject}" target="#{experimentUsersController.experimentUsersTable.current}" /> + </p:commandLink> + </div> + </p:column> + + </p:dataTable> + +</ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/view.xhtml b/src/java/DmWebPortal/web/views/experiment/view.xhtml index c6fb37081892d5ce022429762f18f1a5db9c4023..97d346db42a7b4f375761bb5e160c5b89c736642 100644 --- a/src/java/DmWebPortal/web/views/experiment/view.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/view.xhtml @@ -31,9 +31,14 @@ <ui:include src="experimentDestroyDialog.xhtml"/> + <p/> + <h2>Experiment Users</h2> + <p/> + + <ui:include src="experimentUsersListDataTable.xhtml"/> + + </div> - - </h:form>