diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java index 881850ce8974b1398ea0684781bf573644bd72d9..6af9e452b5350d1e897a58f3b10735b08aea6915 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentController.java @@ -9,12 +9,12 @@ import gov.anl.aps.dm.portal.model.beans.ExperimentFacade; import gov.anl.aps.dm.portal.model.beans.RoleTypeFacade; import gov.anl.aps.dm.portal.model.beans.UserExperimentRoleFacade; import gov.anl.aps.dm.portal.model.beans.UserInfoFacade; +import gov.anl.aps.dm.portal.model.entities.CloneableEntity; import gov.anl.aps.dm.portal.model.entities.RoleType; import gov.anl.aps.dm.portal.model.entities.UserExperimentRole; import gov.anl.aps.dm.portal.model.entities.UserInfo; -import gov.anl.aps.dm.portal.model.tempstorage.ExperimentUser; +// import gov.anl.aps.dm.portal.model.tempstorage.ExperimentUser; import gov.anl.aps.dm.portal.utilities.SessionUtility; -import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -48,6 +48,107 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper @EJB private UserExperimentRoleFacade userExperimentRoleFacade; + public class ExperimentUser extends CloneableEntity { + + String username; + String name; + int userId; + int experimentId; + private final boolean [] roles; +// private final boolean [] updatedRoles; + int maxRoleId = 4; // this is hardcoded, should be determined from the RoleType data table. + // for now leave it hardcoded + +// Map<RoleType, Boolean> roles = new HashMap(); + + public ExperimentUser(int experimentId, int userId) { + roles = new boolean[maxRoleId+1]; +// updatedRoles = new boolean[maxRoleId+1]; + this.experimentId = experimentId; + this.userId = userId; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isIsManager() { + return roles[2]; + } + + public void setIsManager(boolean isManager) { + logger.debug("setting Manager role for experiment "+ experimentId + " and user " + username + " to " + isManager); + roles[2] = isManager; + } + + public boolean isIsPI() { + return roles[3]; + } + + public void setIsPI(boolean isPI) { + roles[3] = isPI; + } + + public boolean isIsUser() { + return roles[4]; + } + + public void setIsUser(boolean isUser) { + roles[4] = isUser; + } + + public void setIsInRole(RoleType role, boolean isInRole) { + roles[role.getId()] = isInRole; +// updatedRoles[role.getId()] = isInRole; + } + + public boolean[] getRoles() { + return roles; + } + + public void removeAllExperimentRoles() { + UserExperimentRole userExperimentRole; + for (int i = 1; i <= maxRoleId; i++) { + if (roles[i]) { + userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, i); + userExperimentRoleFacade.remove(userExperimentRole); +// updatedRoles[i] = false; + } + } + } + + public boolean canAddUsers() { + return roles[2] || roles[3]; + } + + @Override + public int hashCode() { + return userId * 1000 + experimentId; + } + + @Override + public boolean equals(Object object) { + // TODO: Warning - this method won't work in the case the id fields are not set + if (!(object instanceof ExperimentUser)) { + return false; + } + return ((userId == ((ExperimentUser)object).userId) && (experimentId == ((ExperimentUser)object).experimentId)); + } + +} + class ExperimentUsersTable extends DataTableController<ExperimentUser> { @Override @@ -67,16 +168,21 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } List<ExperimentUser> convertExperimentUsers(List<UserInfo> list) { + logger.debug("converring ExperimentUser "); List<RoleType> roleTypes = roleTypeFacade.findByRoleSystemType(false); - generateColumns(roleTypes); for (UserInfo user : list) { ExperimentUser eUser = new ExperimentUser(getCurrent().getId(), user.getId()); eUser.setUsername(user.getUsername()); + if (experimentUsers.containsKey(eUser)) { + eUser = experimentUsers.get(eUser); + } else { + experimentUsers.put(eUser, eUser); + } eUser.setName(user.getLastName() + ", " + user.getFirstName()); for (RoleType roleType : roleTypes) { - eUser.setIsInRole(roleType, user.inRole(roleType.getId(), getCurrent().getId())); + boolean inRole = user.inRole(roleType.getId(), getCurrent().getId()); + eUser.setIsInRole(roleType, inRole); } - experimentUsers.put(eUser, eUser.getRoles()); } return new ArrayList<>(experimentUsers.keySet()); } @@ -85,31 +191,11 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper public String getTableName() { return "experimentUsersTable"; } - } - - static public class ColumnModel implements Serializable { - private String header; - private int property; - - public ColumnModel(String header, int property) { - this.header = header; - this.property = property; - } - - public String getHeader() { - return header; - } - - public void setHeader(String header) { - this.header = header; - } - - public int getProperty() { - return property; - } - public void setProperty(int property) { - this.property = property; + @Override + public void resetList() { +// experimentUsers.clear(); + super.resetList(); } } @@ -135,8 +221,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper private ExperimentController.ExperimentUsersTable experimentUsersListTable; private ExperimentController.ExperimentUsersTable experimentUsersEditTable; private ExperimentController.NoExperimentUsersTypeTable noExperimentUsersTypeTable; - private List<ExperimentController.ColumnModel> columns = new ArrayList(); - final private Map<ExperimentUser, boolean[]> experimentUsers = new HashMap<>(); + final private Map<ExperimentUser, ExperimentUser> experimentUsers = new HashMap<>(); public ExperimentController() { this.experimentUsersListTable = new ExperimentController.ExperimentUsersTable(); @@ -214,6 +299,34 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } return "Experiment " + experiment.getName() + " already exists."; } + + @Override + public String update() { +// findUsersInExperiment(int experimentId) + for (ExperimentUser experimentUser: experimentUsers.keySet()) { + UserInfo userInfo = userInfoFacade.find(experimentUser.userId); + for (int i = 2; i <= 4; i++) { + UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(experimentUser.userId, experimentUser.experimentId, i); + if (experimentUser.roles[i] && (userExperimentRole == null)) { + userExperimentRole = new UserExperimentRole(experimentUser.userId, experimentUser.experimentId, i); + userExperimentRoleFacade.create(userExperimentRole); +// userInfo.addUserExperimentRole(userExperimentRole); + logger.debug("adding userExperimentRole " + experimentUser.userId + " " + experimentUser.experimentId + " " + i); + } + else if (!experimentUser.roles[i] && (userExperimentRole != null)) { + userExperimentRoleFacade.remove(userExperimentRole); +// userInfo.removeUserExperimentRole(userExperimentRole); + logger.debug("removing userExperimentRole " + experimentUser.userId + " " + experimentUser.experimentId + " " + i); + } +// experimentUser.roles[i] = experimentUser.updatedRoles[i]; + } + } + +// clear(); + experimentUsersListTable.resetList(); + experimentUsersEditTable.resetList(); + return super.update(); + } private void verifyExperiment(Experiment experiment) throws InvalidDate, MissingProperty { if (experiment.getExperimentType() == null) { @@ -226,20 +339,12 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } // the methods for Experiment User - public List<ExperimentController.ColumnModel> getColumns() { - return columns; - } - - public void setColumns(List<ExperimentController.ColumnModel> columns) { - this.columns = columns; - } public void clear() { experimentUsersListTable.resetList(); experimentUsersEditTable.resetList(); experimentUsers.clear(); noExperimentUsersTypeTable.resetList(); - columns.clear(); } public ExperimentController.ExperimentUsersTable getExperimentUsersListTable() { @@ -265,13 +370,6 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper public void setNoExperimentUsersTypeTable(ExperimentController.NoExperimentUsersTypeTable noExperimentUsersTypeTable) { this.noExperimentUsersTypeTable = noExperimentUsersTypeTable; } - - void generateColumns(List<RoleType> roleTypes) { - for (RoleType role : roleTypes) { - ExperimentController.ColumnModel column = new ExperimentController.ColumnModel(role.getName(), role.getId()); - columns.add(column); - } - } public boolean canAddUsers(String username) { UserInfo user = userInfoFacade.findByUsername(username); @@ -291,13 +389,18 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } public String getRemovedUserName() { - return experimentUsersEditTable.getCurrentObject().getName(); + if (experimentUsersEditTable.getCurrentObject() != null) { + return experimentUsersEditTable.getCurrentObject().getUsername(); + } + return ""; } - public void removeUser() { + public String removeUser() { ExperimentUser user = experimentUsersEditTable.getCurrentObject(); user.removeAllExperimentRoles(); experimentUsers.remove(user); + clear(); + return "edit?faces-redirect=true"; } public String addExperimentUser() { @@ -315,6 +418,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper userExperimentRole = new UserExperimentRole(user.getId(), current.getId(), 4); // set the User userExperimentRoleFacade.create(userExperimentRole); } + clear(); return edit(); } catch (RuntimeException ex) { SessionUtility.addErrorMessage("Error", "Could not update UserInfo" + ": " + ex.getMessage()); @@ -322,17 +426,17 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } } } - -// @Override -// public String update() { -// logger.debug("current name "+current.getName()); -// logger.debug("current startDate "+current.getStartDate()); -// logger.debug("current endDate "+current.getEndDate()); -// String s = super.update(); -// logger.debug("redirecting to " + s); -// return s; -// } + public boolean hasSystemRole(String user) { + RoleType rt; + rt = roleTypeFacade.findById(1); + if (rt == null) { + return false; + } + return rt.isAdmin(user); + } + + @FacesConverter(forClass = Experiment.class) public static class ExperimentControllerConverter implements Converter { diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java index 2b16116621f3c8b9c807036c02f1ced105152b57..4d223067b891a5ac3cb11be0209498a07d67254a 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserExperimentRoleFacade.java @@ -7,7 +7,6 @@ package gov.anl.aps.dm.portal.model.beans; import gov.anl.aps.dm.portal.model.entities.UserExperimentRole; -import gov.anl.aps.dm.portal.model.entities.UserInfo; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -37,7 +36,7 @@ public class UserExperimentRoleFacade extends AbstractFacade<UserExperimentRole> return (UserExperimentRole) em.createNamedQuery("UserExperimentRole.findByUserExperimentRole") .setParameter("userId", userId) .setParameter("experimentId", experimentId) - .setParameter(roleId, roleId) + .setParameter("roleTypeId", roleId) .getSingleResult(); } catch (NoResultException ex) { diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java index 455ef2ea333605607f7f7479fa47c1043e0e2d51..ed24a143b02b4c7d42b5a6ad78231a2722d162cd 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/UserInfo.java @@ -201,6 +201,18 @@ public class UserInfo extends CloneableEntity } return false; } + + public void addUserExperimentRole(UserExperimentRole experimentRole) { + if (!inRole(experimentRole.getUserExperimentRolePK().getRoleTypeId(), experimentRole.getUserExperimentRolePK().getExperimentId())) { + userExperimentRoleList.add(experimentRole); + } + } + + public void removeUserExperimentRole(UserExperimentRole experimentRole) { + if (inRole(experimentRole.getUserExperimentRolePK().getRoleTypeId(), experimentRole.getUserExperimentRolePK().getExperimentId())) { + userExperimentRoleList.remove(experimentRole); + } + } @Override public int hashCode() { diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/tempstorage/ExperimentUser.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/tempstorage/ExperimentUser.java index 47a7a704c4d45c0c739772b843222d1337c234a7..95ee79c6083c9618640cc9a6308bc9755b4d874d 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/tempstorage/ExperimentUser.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/tempstorage/ExperimentUser.java @@ -20,7 +20,7 @@ public class ExperimentUser extends CloneableEntity { String name; int userId; int experimentId; - private boolean [] roles; + private final boolean [] roles; static int maxRoleId = 4; // this is hardcoded, should be determined from the RoleType data table. // for now leave it hardcoded @@ -48,33 +48,60 @@ public class ExperimentUser extends CloneableEntity { this.name = name; } - public void setIsInRole(RoleType role, boolean isInRole) { - roles[role.getId()] = isInRole; + public boolean isIsManager() { + return roles[2]; } - - public boolean getIsInRole(RoleType role) { - return roles[role.getId()]; + + public void setIsManager(boolean isManager) { + roles[2] = isManager; + if (isManager) { + UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 2); + userExperimentRoleFacade.create(userExperimentRole); + } else { + UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 2); + userExperimentRoleFacade.remove(userExperimentRole); + } } - public boolean[] getRoles() { - return roles; + public boolean isIsPI() { + return roles[3]; } - public void setRoles(boolean[] roles) { - UserExperimentRole userExperimentRole; - for (int i = 1; i <= maxRoleId; i++) { - if (roles[i] && !this.roles[i]) { - userExperimentRole = new UserExperimentRole(userId, experimentId, i); - userExperimentRoleFacade.create(userExperimentRole); - } else if (!roles[i] && this.roles[i]) { - userExperimentRole = new UserExperimentRole(userId, experimentId, i); - userExperimentRoleFacade.remove(userExperimentRole); - } + public void setIsPI(boolean isPI) { + roles[3] = isPI; + if (isPI) { + UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 3); + userExperimentRoleFacade.create(userExperimentRole); + } else { + UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 3); + userExperimentRoleFacade.remove(userExperimentRole); + } + } + + public boolean isIsUser() { + return roles[4]; + } + + public void setIsUser(boolean isUser) { + roles[4] = isUser; + if (isUser) { + UserExperimentRole userExperimentRole = new UserExperimentRole(userId, experimentId, 4); + userExperimentRoleFacade.create(userExperimentRole); + } else { + UserExperimentRole userExperimentRole = userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, 4); + userExperimentRoleFacade.remove(userExperimentRole); } - this.roles = roles; + } + + public void setIsInRole(RoleType role, boolean isInRole) { + roles[role.getId()] = isInRole; + } + + public boolean[] getRoles() { + return roles; } - public void removeAllExperimentRoles() { + public void removeAllExperimentRoles(UserExperimentRoleFacade userExperimentRoleFacade) { UserExperimentRole userExperimentRole; for (int i = 1; i <= maxRoleId; i++) { if (roles[i]) { @@ -85,14 +112,7 @@ public class ExperimentUser extends CloneableEntity { } public boolean canAddUsers() { - // this can be tied to permission. For now let's hardcode - if (roles[2] || roles[3]) { - return true; - } - else { - return false; - } - + return roles[2] || roles[3]; } @Override diff --git a/src/java/DmWebPortal/web/views/experiment/edit.xhtml b/src/java/DmWebPortal/web/views/experiment/edit.xhtml index 4dc82894fd2bea6840f9b51baa38e36c19dfb025..bceb961bc2ae038ed0d32628cbbe57b99ec85e6d 100644 --- a/src/java/DmWebPortal/web/views/experiment/edit.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/edit.xhtml @@ -15,7 +15,7 @@ <h1>Edit Experiment</h1> </div> - <p:accordionPanel multiple="true" dynamic="true" cache="true" > + <p:accordionPanel multiple="true" dynamic="true" cache="false" activeIndex="0,1" > <p:tab title="Experiment Properties" id="detailsTab" > <div class="middleCenterLeftContent"> @@ -35,7 +35,7 @@ <p:commandButton action="#{experimentController.prepareList()}" immediate="true" value="Return" alt="Return" icon="ui-icon-arrowreturnthick-1-w"/> </div> - <ui:include src="experimentUserRemoveDialog.xhtml" /> + <ui:include src="experimentUserRemoveDialog.xhtml" /> </h:form> </ui:define> </ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml index ad18cc0fc4adcc4747a5cf39e07252317220aefa..28e5c19c11dcfdee0032d6601dc49295c43f6d4b 100644 --- a/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/experimentUserRemoveDialog.xhtml @@ -4,10 +4,10 @@ xmlns:p="http://primefaces.org/ui" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> - <p:confirmDialog id="experimentUserRemoveDialog" message="Remove user from Experiment?" + <p:confirmDialog id="experimentUserRemoveDialog" message="Remove user #{experimentController.getRemovedUserName()} from Experiment?" header="Remove User" severity="alert" widgetVar="experimentUserRemoveDialogWidget" styleClass="dialog"> - <p:commandButton value="Yes" oncomplete="experimentUserRemoveDialogWidget.hide()" action="#{experimentController.removeUser()}"/> + <p:commandButton value="Yes" oncomplete="PF('experimentUserRemoveDialogWidget').hide()" action="#{experimentController.removeUser()}" update="@form"/> <p:commandButton value="No" onclick="PF('experimentUserRemoveDialogWidget').hide()" type="button" /> </p:confirmDialog> </ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentUsersEditDataTable.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentUsersEditDataTable.xhtml index bf78da68e0aa581f063e97ef9fe5a1f85513a905..c66760b41efb00da69ab958bd3a61e7126f21ade 100644 --- a/src/java/DmWebPortal/web/views/experiment/experimentUsersEditDataTable.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/experimentUsersEditDataTable.xhtml @@ -8,58 +8,65 @@ - <ui:include src="experimentUserAddDialog.xhtml" /> - - <p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="#{experimentController.canAddUsers(loginController.username)}" icon="ui-icon-plus" > - <p:tooltip for="experimentUserAddButton" value="Add new users." /> - </p:commandButton> - - <p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersEditTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersEditWidget').clearFilters()" update="experimentUsersEditDataTable"> - <p:tooltip for="ResetFiltersButton" value="Reset filters."/> - </p:commandButton> - - <p:dataTable id="experimentUsersEditDataTable" - var="experimentUserObject" - value="#{experimentController.experimentUsersEditTable.listDataModel}" - filteredValue="#{experimentController.experimentUsersEditTable.filteredObjectList}" - paginator="true" - paginatorAlwaysVisible="false" - rows="25" - binding="#{experimentController.experimentUsersEditTable.listDataTable}" - widgetVar="experimentUsersEditWidget" - emptyMessage="No users found."> + <ui:include src="experimentUserAddDialog.xhtml" /> + + <p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="#{experimentController.canAddUsers(loginController.username)}" icon="ui-icon-plus" > + <p:tooltip for="experimentUserAddButton" value="Add new users." /> + </p:commandButton> + + <p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersEditTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersEditWidget').clearFilters()" update="experimentUsersEditDataTable"> + <p:tooltip for="ResetFiltersButton" value="Reset filters."/> + </p:commandButton> + + <p:dataTable id="experimentUsersEditDataTable" + var="experimentUserObject" + value="#{experimentController.experimentUsersEditTable.listDataModel}" + filteredValue="#{experimentController.experimentUsersEditTable.filteredObjectList}" + paginator="true" + paginatorAlwaysVisible="false" + rows="25" + binding="#{experimentController.experimentUsersEditTable.listDataTable}" + widgetVar="experimentUsersEditWidget" + emptyMessage="No users found."> <ui:param name="experimentRoles" value="#{experimentUserObject.roles}" /> <p:column sortBy="#{experimentUserObject.username}" headerText="Username" - filterBy="#{experimentUserObject.username}" filterMatchMode="contains" > - <h:outputText value="#{experimentUserObject.username}"/> - </p:column> - - <p:column sortBy="#{experimentUserObject.name}" headerText="Last, First Name" - filterBy="#{experimentUserObject.name}" filterMatchMode="contains" > - <h:outputText value="#{experimentUserObject.name}"/> - </p:column> - - <p:columns value="#{experimentController.columns}" var="column"> - <ui:param name="columnId" value="#{column.property}" /> - - <f:facet name="header"> - <h:outputText value="#{column.header}" /> - </f:facet> - <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentRoles[columnId]}" /> - <p:selectBooleanCheckbox value="#{experimentRoles[columnId]}" rendered="true" /> - </p:columns> - - <p:column headerText="Actions" > - <div class="actionLink" > - <p:commandLink oncomplete="PF('experimentUserRemoveDialogWidget').show()" rendered="true" styleClass="ui-icon ui-icon-trash" title="Remove" > - <f:setPropertyActionListener value="#{experimentUserObject}" target="#{experimentController.experimentUsersEditTable.currentObject}" /> - </p:commandLink> - </div> - </p:column> - - </p:dataTable> + filterBy="#{experimentUserObject.username}" filterMatchMode="contains" > + <h:outputText value="#{experimentUserObject.username}"/> + </p:column> + + <p:column sortBy="#{experimentUserObject.name}" headerText="Last, First Name" + filterBy="#{experimentUserObject.name}" filterMatchMode="contains" > + <h:outputText value="#{experimentUserObject.name}"/> + </p:column> + + <ui:param name="isAdmin" value="#{experimentController.hasSystemRole(loginController.username)}" /> + <p:column headerText="Manager"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isManager} AND #{!isAdmin}" /> + <p:selectBooleanCheckbox value="#{experimentUserObject.isManager}" rendered="#{isAdmin}" immediate="true" /> + </p:column> + + <p:column headerText="Principal Investigator"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isPI} AND #{!isAdmin}" /> + <p:selectBooleanCheckbox value="#{experimentUserObject.isPI}" rendered="#{isAdmin}" /> + </p:column> + + <p:column headerText="User"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isUser} AND #{!isAdmin}" /> + <p:selectBooleanCheckbox value="#{experimentUserObject.isUser}" rendered="#{isAdmin}" /> + </p:column> + + + <p:column headerText="Actions" rendered="#{isAdmin}"> + <div class="actionLink" > + <p:commandLink oncomplete="PF('experimentUserRemoveDialogWidget').show()" rendered="true" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form"> + <f:setPropertyActionListener value="#{experimentUserObject}" target="#{experimentController.experimentUsersEditTable.currentObject}" /> + </p:commandLink> + </div> + </p:column> + + </p:dataTable> </ui:composition> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml index 6cc0abc41e08b6e44e2fef0a4df6cfd38f3c1196..3ffb91e5a1bba05872c0f06f268f2782fd4d16a4 100644 --- a/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/experimentUsersListDataTable.xhtml @@ -3,7 +3,6 @@ <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"> <p:commandButton id="ResetFiltersButton" action="#{experimentController.experimentUsersListTable.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight" oncomplete="PF('experimentUsersListWidget').clearFilters()" update="experimentUsersListDataTable"> @@ -31,12 +30,19 @@ <h:outputText value="#{experimentUserObject.name}"/> </p:column> - <p:columns value="#{experimentController.columns}" var="column"> - <f:facet name="header"> - <h:outputText value="#{column.header}" /> - </f:facet> - <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.roles[column.property]}" /> - </p:columns> + + <p:column headerText="Manager"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isManager}" /> + </p:column> + + <p:column headerText="Principal Investigator"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isPI}" /> + </p:column> + + <p:column headerText="User"> + <h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isUser}" /> + </p:column> + </p:dataTable> diff --git a/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml b/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml index 3ce041b0f358f8b747e81e0450c96849305f2a81..6b2d01d12f7d9e4a8a07f216d0f82b636e643a60 100644 --- a/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/experimentViewPanelGrid.xhtml @@ -6,7 +6,7 @@ xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:f="http://xmlns.jcp.org/jsf/core"> - <ui:param name="experimentObject" value="#{experimentController.selected}"/> + <ui:param name="experimentObject" value="#{experimentController.current}"/> <p:panelGrid columns="2" styleClass="viewEntityDetails"> diff --git a/src/java/DmWebPortal/web/views/experiment/view.xhtml b/src/java/DmWebPortal/web/views/experiment/view.xhtml index 4ca098c16a7dba0d19538efab53d847e20bb61a8..43b5d3b686bb49bfe655ffd81f30469ce504282d 100644 --- a/src/java/DmWebPortal/web/views/experiment/view.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/view.xhtml @@ -14,7 +14,8 @@ <h1>Experiment Details</h1> </div> - <p:accordionPanel multiple="true"> + <ui:param name="experimentObject" value="#{experimentController.current}"/> + <p:accordionPanel multiple="true" activeIndex="0,1" > <p:tab title="Experiment Properties"> <div class="middleCenterLeftContent"> <ui:include src="experimentViewPanelGrid.xhtml"/>