Skip to content
Snippets Groups Projects
Commit 71d45c26 authored by Barbara B. Frosik's avatar Barbara B. Frosik
Browse files

No commit message

No commit message
parent 8e02355d
No related branches found
No related tags found
No related merge requests found
Showing
with 157 additions and 102 deletions
......@@ -15,6 +15,7 @@ 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.utilities.DoubleKeyMap;
import gov.anl.aps.dm.portal.utilities.SessionUtility;
import java.util.ArrayList;
import java.util.HashMap;
......@@ -120,7 +121,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
}
}
@Override
public int hashCode() {
return userId + experimentId * 100;
......@@ -150,15 +151,18 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
List<ExperimentUser> convertExperimentUsers(List<UserInfo> list) {
if (!initialized) {
initializeRoleTypes();
}
logger.debug("converting ExperimentUser ");
List<RoleType> roleTypes = roleTypeFacade.findByRoleSystemType(false);
ExperimentUser experimentUser;
for (UserInfo user : list) {
if ((experimentUser = experimentUsers.get(user)) == null) {
if ((experimentUser = experimentUsers.getByFirstKey(user)) == null) {
experimentUser = new ExperimentUser(getCurrent().getId(), user.getId());
experimentUser.setUsername(user.getUsername());
experimentUser.setName(user.getLastName() + ", " + user.getFirstName());
experimentUsers.put(user, experimentUser);
experimentUsers.put(user, user.getId(), experimentUser);
}
for (RoleType roleType : roleTypes) {
boolean inRole = user.inRole(roleType.getId(), getCurrent().getId());
......@@ -196,9 +200,11 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
private ExperimentController.ExperimentUsersTable experimentUsersListTable = new ExperimentController.ExperimentUsersTable();
private ExperimentController.ExperimentUsersTable experimentUsersEditTable = new ExperimentController.ExperimentUsersTable();
private ExperimentController.NoExperimentUsersTypeTable noExperimentUsersTypeTable = new ExperimentController.NoExperimentUsersTypeTable();
final private Map<UserInfo, ExperimentUser> experimentUsers = new HashMap<>();
final private DoubleKeyMap<UserInfo, Integer, ExperimentUser> experimentUsers = new DoubleKeyMap<>();
final private Map<String, RoleType> experimentRoles = new HashMap<>();
int maxExperimentRoleTypeId = 0;
boolean initialized = false;
private UserInfo loggedUser = null;
public ExperimentController() {
this.experimentUsersListTable = new ExperimentController.ExperimentUsersTable();
......@@ -237,8 +243,8 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
@Override
public String prepareEdit(Experiment experiment) {
clear();
if (maxExperimentRoleTypeId == 0) {
setMaxExperimentRoleTypeId();
if (!initialized) {
initializeRoleTypes();
}
return super.prepareEdit(experiment);
}
......@@ -246,13 +252,10 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
@Override
public String prepareView(Experiment experiment) {
clear();
if (maxExperimentRoleTypeId == 0) {
setMaxExperimentRoleTypeId();
}
return super.prepareView(experiment);
}
private void setMaxExperimentRoleTypeId() {
private void initializeRoleTypes() {
List<RoleType> roleTypesList = roleTypeFacade.findAll();
for (RoleType roleType : roleTypesList) {
if (!roleType.isIsSystemRole()) {
......@@ -263,6 +266,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
}
maxExperimentRoleTypeId++;
initialized = true;
}
@Override
......@@ -341,8 +345,8 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
public void updateRemovedExperimentRoles() {
UserExperimentRole userExperimentRole;
for (UserInfo user : experimentUsers.keySet()) {
ExperimentUser experimentUser = experimentUsers.get(user);
for (UserInfo user : experimentUsers.firstKeySet()) {
ExperimentUser experimentUser = experimentUsers.getByFirstKey(user);
for (RoleType roleType : experimentRoles.values()) {
int roleId = roleType.getId();
if ((!experimentUser.userRoles[roleId]) && (user.inRole(roleId, experimentUser.experimentId))) {
......@@ -358,9 +362,9 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
@Override
public String update() {
boolean updated;
for (UserInfo user : experimentUsers.keySet()) {
for (UserInfo user : experimentUsers.firstKeySet()) {
updated = false;
ExperimentUser experimentUser = experimentUsers.get(user);
ExperimentUser experimentUser = experimentUsers.getByFirstKey(user);
for (RoleType roleType : experimentRoles.values()) {
if (!roleType.isIsSystemRole()) {
int roleId = roleType.getId();
......@@ -416,8 +420,8 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
private UserInfo findUserInExperiment(ExperimentUser experimentUser) {
for (UserInfo user : experimentUsers.keySet()) {
if (experimentUsers.get(user).equals(experimentUser)) {
for (UserInfo user : experimentUsers.firstKeySet()) {
if (experimentUsers.getByFirstKey(user).equals(experimentUser)) {
return user;
}
}
......@@ -448,7 +452,42 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
}
}
}
public boolean canEditExperiment(int userId, int experimentId) {
if (!initialized) {
initializeRoleTypes();
}
// user that is Manager or PI can edit experiment
int managerRoleId = experimentRoles.get(RoleTypeName.MANAGER).getId();
int piRoleId = experimentRoles.get(RoleTypeName.PI).getId();
return ((userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, managerRoleId) != null) ||
(userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, piRoleId) != null));
}
public boolean canDeleteExperiment(int userId, int experimentId) {
if (!initialized) {
initializeRoleTypes();
}
// user that is Manager can delete experiment
return (userExperimentRoleFacade.findByUserExperimentRole(userId, experimentId, experimentRoles.get(RoleTypeName.MANAGER).getId()) != null);
}
public boolean canAddManager(int userId) {
ExperimentUser logged = experimentUsers.getBySecondKey(userId);
if (logged == null) {
return false;
}
return logged.isIsManager();
}
public boolean canAddPiAndUser(int userId) {
ExperimentUser logged = experimentUsers.getBySecondKey(userId);
if (logged == null) {
return false;
}
return logged.isIsManager() || logged.isIsPI();
}
@FacesConverter(forClass = Experiment.class)
public static class ExperimentControllerConverter implements Converter {
......
......@@ -5,6 +5,7 @@
*/
package gov.anl.aps.dm.portal.controllers;
import gov.anl.aps.dm.portal.constants.RoleTypeName;
import gov.anl.aps.dm.portal.model.beans.RoleTypeFacade;
import gov.anl.aps.dm.portal.model.beans.UserInfoFacade;
import gov.anl.aps.dm.portal.model.entities.RoleType;
......@@ -34,10 +35,11 @@ public class LoginController implements Serializable
private RoleTypeFacade roleTypeFacade;
private String username = null;
private int id;
private String password = null;
private boolean loggedIn = false;
private UserInfo user = null;
int ADMIN_ROLE_ID = 1;
private boolean isAdmin;
private static final Logger logger = Logger.getLogger(LoginController.class.getName());
......@@ -83,6 +85,10 @@ public class LoginController implements Serializable
this.username = username;
}
public int getUserId() {
return id;
}
/**
* Check if user is logged in.
*
......@@ -129,6 +135,8 @@ public class LoginController implements Serializable
loggedIn = true;
SessionUtility.addInfoMessage("Successful Login", "User " + username + " is logged in.");
isAdmin = roleTypeFacade.findByName(RoleTypeName.ADMIN).isAdmin(username);
id = user.getId();
return getLandingPage();
}
else {
......@@ -178,13 +186,8 @@ public class LoginController implements Serializable
return "/views/login?faces-redirect=true";
}
public boolean hasSystemRole() {
RoleType adminRoleType;
adminRoleType = roleTypeFacade.findById(ADMIN_ROLE_ID);
if (adminRoleType == null) {
return false;
}
return adminRoleType.isAdmin(username);
public boolean isAdmin() {
return isAdmin;
}
......
/*
* 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.utilities;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author bfrosik
* @param <K1>
* @param <K2>
* @param <E>
*/
public class DoubleKeyMap <K1, K2, E> {
private final Map<K1, E> map1 = new HashMap<>();
private final Map<K2, E> map2 = new HashMap<>();
public void put(K1 key1, K2 key2, E value) {
map1.put(key1, value);
map2.put(key2, value);
}
public E getByFirstKey(K1 key1) {
return map1.get(key1);
}
public E getBySecondKey(K2 key2) {
return map2.get(key2);
}
public void remove(K1 key1, K2 key2) {
map1.remove(key1);
map2.remove(key2);
}
public Collection<E> values() {
return map1.values();
}
public Collection<K1> firstKeySet() {
return map1.keySet();
}
public Collection<K2> secondKeySet() {
return map2.keySet();
}
public void clear() {
map1.clear();
map2.clear();
}
}
......@@ -10,7 +10,7 @@
<ui:param name="entityTypeName" value="#{entityController.entityTypeName}"/>
<div class="actionButton">
<p:commandButton id="#{entityTypeName}AddButton" action="#{entityController.prepareCreate()}" rendered="#{loginController.loggedIn}" value="Add" alt="Add new #{entityTypeName}" icon="ui-icon-plus">
<p:commandButton id="#{entityTypeName}AddButton" action="#{entityController.prepareCreate()}" rendered="#{loginController.admin}" value="Add" alt="Add new #{entityTypeName}" icon="ui-icon-plus">
<p:tooltip for="#{entityTypeName}AddButton" value="Create new #{entityController.displayEntityTypeName}."/>
</p:commandButton>
......
......@@ -58,10 +58,10 @@
<p:commandLink action="#{experimentController.prepareView(experimentObject)}" styleClass="ui-icon ui-icon-info" title="View">
</p:commandLink>
<p:commandLink action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-pencil" title="Edit">
<p:commandLink action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{loginController.admin or experimentController.canEditExperiment(loginController.userId, experimentObject.id)}" styleClass="ui-icon ui-icon-pencil" title="Edit">
</p:commandLink>
<p:commandLink oncomplete="PF('experimentDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<p:commandLink oncomplete="PF('experimentDestroyDialogWidget').show()" rendered="#{loginController.admin or experimentController.canDeleteExperiment(loginController.userId, experimentObject.id)}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<f:setPropertyActionListener value="#{experimentObject}" target="#{experimentController.current}"/>
</p:commandLink>
</div>
......
......@@ -10,7 +10,9 @@
<ui:include src="experimentUserAddDialog.xhtml" />
<p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="#{loginController.hasSystemRole()}" icon="ui-icon-plus" >
<ui:param name="isAdmin" value="#{loginController.admin}" />
<p:commandButton id="experimentUserAddButton" value="Add" onclick="PF('experimentUserAddDialogWidget').show();" rendered="true" icon="ui-icon-plus" >
<p:tooltip for="experimentUserAddButton" value="Add new users." />
</p:commandButton>
......@@ -29,7 +31,8 @@
widgetVar="experimentUsersEditWidget"
emptyMessage="No users found.">
<ui:param name="experimentRoles" value="#{experimentUserObject.roles}" />
<ui:param name="isManager" value="#{experimentController.canAddManager(loginController.userId)}" />
<ui:param name="isPi" value="#{experimentController.canAddPiAndUser(loginController.userId)}" />
<p:column sortBy="#{experimentUserObject.username}" headerText="Username"
filterBy="#{experimentUserObject.username}" filterMatchMode="contains" >
......@@ -41,24 +44,23 @@
<h:outputText value="#{experimentUserObject.name}"/>
</p:column>
<ui:param name="isAdmin" value="#{loginController.hasSystemRole()}" />
<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" />
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isManager and !isAdmin and !isManager}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isManager}" rendered="#{isAdmin or isManager}" 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}" />
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isPI and !isAdmin and !isPi}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isPI}" rendered="#{isAdmin or isPi}" />
</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}" />
<h:outputText value="" styleClass="ui-icon ui-icon-check" rendered="#{experimentUserObject.isUser and !isAdmin and !isPi}" />
<p:selectBooleanCheckbox value="#{experimentUserObject.isUser}" rendered="#{isAdmin or isPi}" />
</p:column>
<p:column headerText="Actions" rendered="#{isAdmin}">
<p:column headerText="Actions" rendered="#{isAdmin or isManager}">
<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}" />
......
......@@ -40,8 +40,8 @@
<p:column headerText="Actions" >
<div class="actionLink">
<p:commandLink action="#{experimentTypeController.prepareView(experimentTypeObject)}" styleClass="ui-icon ui-icon-info" title="View"/>
<p:commandLink action="#{experimentTypeController.prepareEdit(experimentTypeObject)}" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink oncomplete="PF('experimentTypeDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<p:commandLink action="#{experimentTypeController.prepareEdit(experimentTypeObject)}" rendered="#{loginController.admin}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink oncomplete="PF('experimentTypeDestroyDialogWidget').show()" rendered="#{loginController.admin}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<f:setPropertyActionListener value="#{experimentTypeObject}" target="#{experimentTypeController.current}"/>
</p:commandLink>
</div>
......
<?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"
template="../../templates/contentViewTemplate4x3.xhtml">
<ui:define name="middleCenter">
<div class="pageTitle">
<h1>Add Role</h1>
</div>
<h:form id="addRoleTypeForm">
<ui:include src="roleTypeCreatePanelGrid.xhtml"/>
<p/>
<div class="actionButton">
<p:commandButton action="#{roleTypeController.create()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/>
<p:commandButton action="#{roleTypeController.prepareList()}" immediate="true" value="Cancel" alt="Cancel" icon="ui-icon-cancel"/>
</div>
</h:form>
</ui:define>
</ui:composition>
......@@ -15,14 +15,17 @@
<h:form id="viewRoleTypeListForm">
<ui:param name="entityController" value="#{roleTypeController}"/>
<ui:include src="../common/commonListActionButtons.xhtml"/>
<div class="actionButton">
<p:commandButton id="#{entityTypeName}ResetFiltersButton" action="#{entityController.resetList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight">
<p:tooltip for="#{entityTypeName}ResetFiltersButton" value="Reset list filters."/>
</p:commandButton>
</div>
<h:panelGroup>
<ui:include src="roleTypeListDataTable.xhtml"/>
</h:panelGroup>
<ui:include src="roleTypeDestroyDialog.xhtml"/>
</h:form>
</ui:define>
......
<?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="roleTypeDestroyDialog" message="Delete role #{roleTypeController.getCurrentEntityInstanceName()}?"
header="Delete RoleType" severity="alert" widgetVar="roleTypeDestroyDialogWidget"
styleClass="dialog">
<p:commandButton value="Yes" oncomplete="roleTypeDestroyDialogWidget.hide()" action="#{roleTypeController.destroy()}"/>
<p:commandButton value="No" onclick="PF('roleTypeDestroyDialogWidget').hide()" type="button" />
</p:confirmDialog>
</ui:composition>
......@@ -32,23 +32,16 @@
filterBy="#{roleTypeObject.description}" filterMatchMode="contains">
<h:outputText value="#{roleTypeObject.description}"/>
</p:column>
<c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/>
<p:column headerText="Actions" >
<div class="actionLink">
<p:commandLink action="#{roleTypeController.prepareView(roleTypeObject)}" styleClass="ui-icon ui-icon-info" title="View"/>
<p:commandLink action="#{roleTypeController.prepareEdit(roleTypeObject)}" rendered="#{isEntityWriteable}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink oncomplete="PF('roleTypeDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<f:setPropertyActionListener value="#{roleTypeObject}" target="#{roleTypeController.current}"/>
</p:commandLink>
<p:commandLink action="#{userSystemRoleController.prepareSystemRoleView()}" rendered="#{roleTypeController.isRoleSystemType(roleTypeObject)}" styleClass="ui-icon ui-icon-person" title="List All" >
<f:setPropertyActionListener value="#{roleTypeObject}" target="#{userSystemRoleController.systemRole}"/>
<p:commandLink action="#{roleTypeController.prepareEdit(roleTypeObject)}" rendered="#{loginController.admin}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink action="#{userSystemRoleController.prepareSystemRoleView()}" rendered="#{roleTypeController.isRoleSystemType(roleTypeObject)}" styleClass="ui-icon ui-icon-person" title="List All" >
<f:setPropertyActionListener value="#{roleTypeObject}" target="#{userSystemRoleController.systemRole}"/>
</p:commandLink>
</div>
</div>
</p:column>
</p:dataTable>
</ui:composition>
......@@ -55,8 +55,8 @@
<p:column headerText="Actions" >
<div class="actionLink">
<p:commandLink action="#{userInfoController.prepareView(userInfoObject)}" styleClass="ui-icon ui-icon-info" title="View"/>
<p:commandLink action="#{userInfoController.prepareEdit(userInfoObject)}" rendered="#{loginController.isUserWriteable(userInfoObject)}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink oncomplete="PF('userInfoDestroyDialogWidget').show()" rendered="#{loginController.loggedIn}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<p:commandLink action="#{userInfoController.prepareEdit(userInfoObject)}" rendered="#{loginController.admin}" styleClass="ui-icon ui-icon-pencil" title="Edit"/>
<p:commandLink oncomplete="PF('userInfoDestroyDialogWidget').show()" rendered="#{loginController.admin}" styleClass="ui-icon ui-icon-trash" title="Delete" update="@form">
<f:setPropertyActionListener value="#{userInfoObject}" target="#{userInfoController.current}"/>
</p:commandLink>
</div>
......
......@@ -16,7 +16,7 @@
<h:form id="adminListForm">
<div class="actionButton">
<p:commandButton id="systemRoleAddButton" value="Add" onclick="PF('systemRoleAddDialogWidget').show();" rendered="#{loginController.hasSystemRole()}" icon="ui-icon-plus" >
<p:commandButton id="systemRoleAddButton" value="Add" onclick="PF('systemRoleAddDialogWidget').show();" rendered="#{loginController.admin}" icon="ui-icon-plus" >
<p:tooltip for="systemRoleAddButton" value="Add new Administrators."/>
</p:commandButton>
......
......@@ -46,7 +46,7 @@
<p:column headerText="Actions" >
<div class="actionLink" >
<p:commandLink oncomplete="PF('systemRoleRemoveDialogWidget').show()" rendered="#{loginController.hasSystemRole() and (loginController.username != systemUserObject.username)}" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form" >
<p:commandLink oncomplete="PF('systemRoleRemoveDialogWidget').show()" rendered="#{loginController.admin and (loginController.username != systemUserObject.username)}" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form" >
<f:setPropertyActionListener value="#{systemUserObject}" target="#{userSystemRoleController.systemRoleTable.currentObject}" />
</p:commandLink>
</div>
......
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