From e254bfa2e7527c31b7615a7dc5c7a50c9f88629d Mon Sep 17 00:00:00 2001 From: "Barbara B. Frosik" <bfrosik@aps.anl.gov> Date: Mon, 1 Dec 2014 23:30:39 +0000 Subject: [PATCH] --- .../anl/aps/dm/portal/constants/DmStatus.java | 2 +- .../controllers/CrudEntityController.java | 6 +- .../controllers/DataTableController.java | 126 ++++++++++++ .../controllers/ExperimentController.java | 8 +- .../controllers/RoleTypeController.java | 20 +- .../controllers/UserInfoController.java | 5 +- .../controllers/UserSystemRoleController.java | 181 ++++++++++++++++++ .../{IncorrectDate.java => InvalidDate.java} | 18 +- .../dm/portal/model/beans/RoleTypeFacade.java | 15 +- .../dm/portal/model/beans/UserInfoFacade.java | 22 +++ .../dm/portal/model/entities/RoleType.java | 22 +++ .../dm/portal/model/entities/UserInfo.java | 5 +- .../DmWebPortal/web/resources/css/jsfcrud.css | 2 +- .../DmWebPortal/web/resources/css/login.css | 3 +- .../DmWebPortal/web/resources/css/portal.css | 57 +++++- .../resources/js/common/forwardNotLoggedin.js | 3 +- .../web/resources/js/forwardNotLoggedin.js | 4 - .../web/resources/js/userInfo/list.filter.js | 4 - .../web/templates/homeViewTemplate.xhtml | 119 ------------ .../web/templates/loginViewTemplate.xhtml | 41 ---- .../web/views/experiment/edit.xhtml | 1 - src/java/DmWebPortal/web/views/login.xhtml | 1 - .../roleType/roleTypeListDataTable.xhtml | 14 +- .../DmWebPortal/web/views/userInfo/list.xhtml | 2 - .../web/views/userSystemRole/list.xhtml | 38 ++++ .../userSystemRole/systemRoleAddDialog.xhtml | 68 +++++++ .../systemRoleListDataTable.xhtml | 58 ++++++ .../systemRoleRemoveDialog.xhtml | 15 ++ 28 files changed, 654 insertions(+), 206 deletions(-) create mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/DataTableController.java create mode 100644 src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java rename src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/{IncorrectDate.java => InvalidDate.java} (65%) delete mode 100644 src/java/DmWebPortal/web/resources/js/forwardNotLoggedin.js delete mode 100644 src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js delete mode 100644 src/java/DmWebPortal/web/templates/homeViewTemplate.xhtml delete mode 100644 src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml create mode 100644 src/java/DmWebPortal/web/views/userSystemRole/list.xhtml create mode 100644 src/java/DmWebPortal/web/views/userSystemRole/systemRoleAddDialog.xhtml create mode 100644 src/java/DmWebPortal/web/views/userSystemRole/systemRoleListDataTable.xhtml create mode 100644 src/java/DmWebPortal/web/views/userSystemRole/systemRoleRemoveDialog.xhtml diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java index 5722ffea..66178431 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/constants/DmStatus.java @@ -14,5 +14,5 @@ public class DmStatus public static final int DM_INVALID_OBJECT_STATE = 5; public static final int DM_OBJECT_ALREADY_EXISTS = 6; public static final int DM_OBJECT_NOT_FOUND = 7; - public static final int DM_INVALID_DATES = 8; + public static final int DM_INVALID_DATE = 8; } \ No newline at end of file diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java index d7c16fed..07e9f66e 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/CrudEntityController.java @@ -23,7 +23,7 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F private static final Logger logger = Logger.getLogger(CrudEntityController.class.getName()); - private EntityType current = null; + protected EntityType current = null; private DataModel listDataModel = null; private DataTable listDataTable = null; @@ -136,7 +136,7 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F current = createEntityInstance(); return "create?faces-redirect=true"; } - + public EntityType cloneEntityInstance(EntityType entity) { EntityType clonedEntity; try { @@ -268,6 +268,8 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F } public List<EntityType> getFilteredObjectList() { + boolean isNull = (filteredObjectList == null); + logger.debug("filteredObjectList is null "+ isNull); return filteredObjectList; } diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/DataTableController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/DataTableController.java new file mode 100644 index 00000000..0f966d8f --- /dev/null +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/DataTableController.java @@ -0,0 +1,126 @@ +package gov.anl.aps.dm.portal.controllers; + +import gov.anl.aps.dm.portal.model.entities.CloneableEntity; +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import javax.annotation.PostConstruct; +import javax.faces.model.DataModel; +import javax.faces.model.ListDataModel; +import org.apache.log4j.Logger; +import org.primefaces.component.datatable.DataTable; + +public abstract class DataTableController<EntityType extends CloneableEntity> implements Serializable +{ + + private static final Logger logger = Logger.getLogger(DataTableController.class.getName()); + + + protected EntityType current = null; + + private DataModel listDataModel = null; + private DataTable listDataTable = null; + private boolean listDataModelReset = true; + private List<EntityType> filteredObjectList = null; + private List<EntityType> selectedObjectList = null; + + + public DataTableController() { + } + + @PostConstruct + public void initialize() { + } + + public abstract String getEntityTypeName(); + +// public abstract String getCurrentEntityInstanceName(); + + public EntityType getCurrent() { + return current; + } + + public void setCurrent(EntityType current) { + this.current = current; + } + + public DataModel createListDataModel() { + return new ListDataModel(findAll()); + } + + public DataModel getListDataModel() { + if (listDataModel == null) { + listDataModel = createListDataModel(); + } + return listDataModel; + } + + public abstract List<EntityType> findAll(); + + public void resetList() { + logger.debug("Resetting list"); + listDataModel = null; + listDataTable = null; + listDataModelReset = true; + filteredObjectList = null; + current = null; + } + + public DataTable getListDataTable() { + if (listDataTable == null) { + logger.debug("Recreating data table"); + listDataTable = new DataTable(); + } + return listDataTable; + } + + public void setListDataTable(DataTable listDataTable) { + this.listDataTable = listDataTable; + } + + public boolean isAnyListFilterSet() { + if (listDataTable == null) { + return false; + } + Map<String, Object> filterMap = listDataTable.getFilters(); + for (Object filter : filterMap.values()) { + if ((String)filter != null && !((String)filter).isEmpty()) { + return true; + } + } + return false; + } + + public List<EntityType> getFilteredObjectList() { + return filteredObjectList; + } + + public void setFilteredObjectList(List<EntityType> filteredObjectList) { + this.filteredObjectList = filteredObjectList; + } + + public List<EntityType> getFilteredItems() { + return filteredObjectList; + } + + public void setFilteredItems(List<EntityType> filteredItems) { + this.filteredObjectList = filteredItems; + } + + public boolean isListDataModelReset() { + if (listDataModelReset) { + listDataModelReset = false; + return true; + } + return false; + } + + public List<EntityType> getSelectedObjectList() { + return selectedObjectList; + } + + public void setSelectedObjectList(List<EntityType> selectedObjectList) { + this.selectedObjectList = selectedObjectList; + } + +} 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 d5fa1945..206fee05 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 @@ -2,7 +2,7 @@ package gov.anl.aps.dm.portal.controllers; import gov.anl.aps.dm.portal.exceptions.DmPortalException; import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists; -import gov.anl.aps.dm.portal.exceptions.IncorrectDate; +import gov.anl.aps.dm.portal.exceptions.InvalidDate; import gov.anl.aps.dm.portal.model.entities.Experiment; import gov.anl.aps.dm.portal.model.beans.ExperimentFacade; import java.util.List; @@ -63,14 +63,14 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper } @Override - public void prepareEntityInsert(Experiment experiment) throws ObjectAlreadyExists, IncorrectDate { + public void prepareEntityInsert(Experiment experiment) throws ObjectAlreadyExists, InvalidDate { Experiment existingExperiment = experimentFacade.findByName(experiment.getName()); if (existingExperiment != null) { throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists."); } if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) { - throw new IncorrectDate("Experiment end date is before start date."); + throw new InvalidDate("Experiment end date is before start date."); } logger.debug("Inserting new experiment " + experiment.getName()); @@ -80,7 +80,7 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper public void prepareEntityUpdate(Experiment experiment) throws DmPortalException { super.prepareEntityUpdate(experiment); if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) { - throw new IncorrectDate("Experiment end date is before start date."); + throw new InvalidDate("Experiment end date is before start date."); } } diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java index 8528a790..1c0e21c0 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/RoleTypeController.java @@ -5,6 +5,7 @@ import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists; import gov.anl.aps.dm.portal.model.beans.RoleTypeFacade; import gov.anl.aps.dm.portal.model.entities.RoleType; import gov.anl.aps.dm.portal.utilities.SessionUtility; +import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.enterprise.context.SessionScoped; @@ -19,6 +20,10 @@ import org.apache.log4j.Logger; @SessionScoped public class RoleTypeController extends CrudEntityController<RoleType, RoleTypeFacade> { + private static final List<String> systemRoles = new ArrayList(); + { + systemRoles.add("Administrator"); + } private static final Logger logger = Logger.getLogger(RoleTypeController.class.getName()); @@ -74,10 +79,19 @@ public class RoleTypeController extends CrudEntityController<RoleType, RoleTypeF public void prepareEntityUpdate(RoleType roleType) throws DmPortalException { super.prepareEntityUpdate(roleType); } - + + public boolean isRoleSystemType(String name) { + if (name == null) { + logger.warn("Current row is not set"); + // Do nothing if current item is not set. + return false; + } + + return systemRoles.contains(name); + } + @FacesConverter(forClass = RoleType.class) - public static class RoleTypeControllerConverter implements Converter - { + public static class RoleTypeControllerConverter implements Converter { @Override public Object getAsObject(FacesContext facesContext, UIComponent component, String value) { diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java index a89a6067..5a58c9f5 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserInfoController.java @@ -5,6 +5,7 @@ import gov.anl.aps.dm.portal.exceptions.ObjectAlreadyExists; import gov.anl.aps.dm.portal.model.entities.UserInfo; import gov.anl.aps.dm.portal.model.beans.UserInfoFacade; import gov.anl.aps.dm.portal.utilities.SessionUtility; +import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; @@ -27,7 +28,7 @@ public class UserInfoController extends CrudEntityController<UserInfo, UserInfoF private UserInfoFacade userInfoFacade; private String passwordEntry = null; - + public UserInfoController() { } @@ -100,7 +101,7 @@ public class UserInfoController extends CrudEntityController<UserInfo, UserInfoF this.passwordEntry = passwordEntry; } - @FacesConverter(forClass = UserInfo.class) +@FacesConverter(forClass = UserInfo.class) public static class UserInfoControllerConverter implements Converter { diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java new file mode 100644 index 00000000..da428975 --- /dev/null +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/UserSystemRoleController.java @@ -0,0 +1,181 @@ +/* + * 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.RoleTypeFacade; +import gov.anl.aps.dm.portal.model.beans.UserInfoFacade; +import gov.anl.aps.dm.portal.model.entities.RoleType; +import gov.anl.aps.dm.portal.model.entities.UserInfo; +import gov.anl.aps.dm.portal.utilities.SessionUtility; +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("userSystemRoleController") +@SessionScoped +public class UserSystemRoleController implements Serializable +{ + + @EJB + private UserInfoFacade userInfoFacade; + + @EJB + private RoleTypeFacade roleTypeFacade; + + public UserSystemRoleController() { + this.systemRoleTable = new SystemRoleTypeTable(); + this.noSystemRoleTable = new NoSystemRoleTypeTable(); + } + + class SystemRoleTypeTable extends DataTableController<UserInfo> { + + @Override + public String getEntityTypeName() { + return "UserInfo"; + } + + @Override + public List<UserInfo> findAll() { + try { + int id = Integer.parseInt(systemRoleId); + return userInfoFacade.findSystemRoleUsers(id); + } catch (NumberFormatException e) { + return null; + } + } + } + + class NoSystemRoleTypeTable extends DataTableController<UserInfo> { + + @Override + public String getEntityTypeName() { + return "UserInfo"; + } + + @Override + public List<UserInfo> findAll() { + try { + int id = Integer.parseInt(systemRoleId); + return userInfoFacade.findNoSystemRoleUsers(id); + } catch (NumberFormatException e) { + return null; + } + } + } + + private SystemRoleTypeTable systemRoleTable; + private NoSystemRoleTypeTable noSystemRoleTable; + + private String systemRoleId; + + private static final Logger logger = Logger.getLogger(UserSystemRoleController.class.getName()); + + + public SystemRoleTypeTable getSystemRoleTable() { + return systemRoleTable; + } + + public void setSystemRoleTable(SystemRoleTypeTable systemRoleTable) { + this.systemRoleTable = systemRoleTable; + } + + public NoSystemRoleTypeTable getNoSystemRoleTable() { + return noSystemRoleTable; + } + + public void setNoSystemRoleTable(NoSystemRoleTypeTable noSystemRoleTable) { + this.noSystemRoleTable = noSystemRoleTable; + } + + public String getSystemRoleId() { + return systemRoleId; + } + + public void setSystemRoleId(String systemRoleId) { + this.systemRoleId = systemRoleId; + } + + public String getSystemRoleName() { + int id = Integer.parseInt(systemRoleId); + return roleTypeFacade.findById(id).getName(); + } + + public String resetSystemRoleUserList() { + logger.debug("Resetting System Role User list"); + systemRoleTable.resetList(); + return "/views/userSystemRole/list?faces-redirect=true"; + } + + public void resetNoSystemRoleUserList() { + logger.debug("Resetting System Role Add User list"); + noSystemRoleTable.resetList(); +// return "/views/userSystemRole/list?faces-redirect=true"; + } + + public boolean hasSystemRole(String user) { + logger.debug("in hasSystemRole username, roleId "+ user+" "+systemRoleId); + int id = Integer.parseInt(systemRoleId); + RoleType rt = roleTypeFacade.findById(id); + if (rt == null) { + return false; + } + return rt.isAdmin(user); + } + + public String prepareSystemRoleView() { + logger.debug("Preparing system role view"); + return "/views/userSystemRole/list?faces-redirect=true"; + } + + public String addSystemRole() { + int id = Integer.parseInt(systemRoleId); + RoleType rt = roleTypeFacade.findById(id); + if (rt != null) { + List<UserInfo> uiList = noSystemRoleTable.getSelectedObjectList(); + + if (uiList == null) { + logger.debug("null selected list"); + } else if (uiList.isEmpty()) { + logger.debug("empty selected list"); + } else { + for (UserInfo userInfo : uiList) { + rt.addRoleTypeToUser(userInfo); + } + } + } + try { + roleTypeFacade.edit(rt); + resetNoSystemRoleUserList(); + return resetSystemRoleUserList(); + } catch (RuntimeException ex) { + SessionUtility.addErrorMessage("Error", "Could not update RoleType" + ": " + ex.getMessage()); + return null; + } + } + + public String removeSystemRole() { + logger.debug("removing system role from user"); + int id = Integer.parseInt(systemRoleId); + RoleType rt = roleTypeFacade.findById(id); + if (rt != null) { + rt.removeRoleTypeFromUser(systemRoleTable.current); + } + try { + roleTypeFacade.edit(rt); + return resetSystemRoleUserList(); + } + catch (RuntimeException ex) { + SessionUtility.addErrorMessage("Error", "Could not update RoleType" + ": " + ex.getMessage()); + return null; + } + + } + +} diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/InvalidDate.java similarity index 65% rename from src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java rename to src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/InvalidDate.java index 1b1f1a4b..ffe8accf 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/IncorrectDate.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/exceptions/InvalidDate.java @@ -12,16 +12,16 @@ import gov.anl.aps.dm.portal.constants.DmStatus; /** * Object already exists exception class. */ -public class IncorrectDate extends DmPortalException +public class InvalidDate extends DmPortalException { /** * Constructor. */ - public IncorrectDate() + public InvalidDate() { super(); - setErrorCode(DmStatus.DM_INVALID_DATES); + setErrorCode(DmStatus.DM_INVALID_DATE); } /** @@ -29,10 +29,10 @@ public class IncorrectDate extends DmPortalException * * @param message Error message */ - public IncorrectDate(String message) + public InvalidDate(String message) { super(message); - setErrorCode(DmStatus.DM_INVALID_DATES); + setErrorCode(DmStatus.DM_INVALID_DATE); } /** @@ -40,10 +40,10 @@ public class IncorrectDate extends DmPortalException * * @param throwable Throwable object */ - public IncorrectDate(Throwable throwable) + public InvalidDate(Throwable throwable) { super(throwable); - setErrorCode(DmStatus.DM_INVALID_DATES); + setErrorCode(DmStatus.DM_INVALID_DATE); } /** @@ -52,10 +52,10 @@ public class IncorrectDate extends DmPortalException * @param message Error message * @param throwable Throwable object */ - public IncorrectDate(String message, Throwable throwable) + public InvalidDate(String message, Throwable throwable) { super(message, throwable); - setErrorCode(DmStatus.DM_INVALID_DATES); + setErrorCode(DmStatus.DM_INVALID_DATE); } } \ No newline at end of file diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java index 04a018b2..412bbea3 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/RoleTypeFacade.java @@ -7,6 +7,8 @@ package gov.anl.aps.dm.portal.model.beans; import gov.anl.aps.dm.portal.model.entities.RoleType; +import gov.anl.aps.dm.portal.model.entities.UserInfo; +import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -30,14 +32,23 @@ public class RoleTypeFacade extends AbstractFacade<RoleType> public RoleTypeFacade() { super(RoleType.class); } - + public RoleType findByName(String name) { try { return (RoleType) em.createNamedQuery("RoleType.findByName") .setParameter("name", name) .getSingleResult(); + } catch (NoResultException ex) { } - catch (NoResultException ex) { + return null; + } + + public RoleType findById(int id) { + try { + return (RoleType) em.createNamedQuery("RoleType.findById") + .setParameter("id", id) + .getSingleResult(); + } catch (NoResultException ex) { } return null; } diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java index 770a6eff..16b40cf5 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/beans/UserInfoFacade.java @@ -6,6 +6,7 @@ package gov.anl.aps.dm.portal.model.beans; import gov.anl.aps.dm.portal.model.entities.UserInfo; +import java.util.List; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.NoResultException; @@ -46,4 +47,25 @@ public class UserInfoFacade extends AbstractFacade<UserInfo> return findByUsername(username) != null; } + public List<UserInfo> findNoSystemRoleUsers(Integer roleTypeId) { + try { + return (List<UserInfo>) em.createNamedQuery("UserInfo.findNonAdmins") + .setParameter("roleTypeId", roleTypeId) + .getResultList(); + } + catch (NoResultException ex) { + } + return null; + } + + public List<UserInfo> findSystemRoleUsers(int roleTypeId) { + try { + return (List<UserInfo>) em.createNamedQuery("UserInfo.findUsersInRole") + .setParameter("roleTypeId", roleTypeId) + .getResultList(); + } + catch (NoResultException ex) { + } + return null; + } } diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java index 3476b24c..55c47b96 100644 --- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java +++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/model/entities/RoleType.java @@ -6,6 +6,7 @@ package gov.anl.aps.dm.portal.model.entities; +import java.util.ArrayList; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; @@ -105,6 +106,27 @@ public class RoleType extends CloneableEntity public void setUserInfoList(List<UserInfo> userInfoList) { this.userInfoList = userInfoList; } + + public void addRoleTypeToUser(UserInfo userInfo) { + if (userInfoList == null) + userInfoList = new ArrayList(); + if (!userInfoList.contains(userInfo)) { + userInfoList.add(userInfo); + } + } + + public void removeRoleTypeFromUser(UserInfo userInfo) { + userInfoList.remove(userInfo); + } + + public boolean isAdmin(String userName) { + for (UserInfo userInfo : getUserInfoList()) + { + if (userInfo.getUsername().equals(userName)) + return true; + } + return false; + } @XmlTransient public List<UserExperimentRole> getUserExperimentRoleList() { 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 2083e39e..ddf7eb8c 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 @@ -40,7 +40,10 @@ import javax.xml.bind.annotation.XmlTransient; @NamedQuery(name = "UserInfo.findByMiddleName", query = "SELECT u FROM UserInfo u WHERE u.middleName = :middleName"), @NamedQuery(name = "UserInfo.findByEmail", query = "SELECT u FROM UserInfo u WHERE u.email = :email"), @NamedQuery(name = "UserInfo.findByDescription", query = "SELECT u FROM UserInfo u WHERE u.description = :description"), - @NamedQuery(name = "UserInfo.findByPassword", query = "SELECT u FROM UserInfo u WHERE u.password = :password")}) + @NamedQuery(name = "UserInfo.findByPassword", query = "SELECT u FROM UserInfo u WHERE u.password = :password"), + @NamedQuery(name = "UserInfo.findNonAdmins", query = "SELECT u FROM UserInfo u WHERE u.id NOT IN (SELECT u2.id from UserInfo u2 JOIN u2.roleTypeList rt WHERE rt.id = :roleTypeId)"), + @NamedQuery(name = "UserInfo.findUsersInRole", query = "SELECT u FROM UserInfo u WHERE u.id IN (SELECT u2.id from UserInfo u2 JOIN u2.roleTypeList rt WHERE rt.id = :roleTypeId)")}) + public class UserInfo extends CloneableEntity { @Id diff --git a/src/java/DmWebPortal/web/resources/css/jsfcrud.css b/src/java/DmWebPortal/web/resources/css/jsfcrud.css index fa75f5b0..811a9604 100644 --- a/src/java/DmWebPortal/web/resources/css/jsfcrud.css +++ b/src/java/DmWebPortal/web/resources/css/jsfcrud.css @@ -5,7 +5,7 @@ root { body { font-family: Arial, Helvetica, sans-serif; color: #3a4f54; - background-color: #dfecf1; + background-color: #f2f4f7; font-size: small; } diff --git a/src/java/DmWebPortal/web/resources/css/login.css b/src/java/DmWebPortal/web/resources/css/login.css index f6cc4767..4a1d0ef4 100644 --- a/src/java/DmWebPortal/web/resources/css/login.css +++ b/src/java/DmWebPortal/web/resources/css/login.css @@ -103,7 +103,7 @@ a:link:hover, a:visited:hover { } input { - background: #6da5d8; + background: #f2f4f7; box-shadow: 0px 3px 5px #d5d5d5; } @@ -136,7 +136,6 @@ h1 { color: saddlebrown; border: #f2f4f7; size: auto; - tab-size: calc; drop-initial-size: auto; } diff --git a/src/java/DmWebPortal/web/resources/css/portal.css b/src/java/DmWebPortal/web/resources/css/portal.css index 5ebe4fb9..22159fbe 100644 --- a/src/java/DmWebPortal/web/resources/css/portal.css +++ b/src/java/DmWebPortal/web/resources/css/portal.css @@ -1,5 +1,5 @@ body { - background-color: #b2d5d6; + background-color: #f2f4f7; font-size: 12px; font-family: Verdana, "Verdana CE", Arial, "Arial CE", "Lucida Grande CE", lucida, "Helvetica CE", sans-serif; color: #000000; @@ -226,6 +226,61 @@ a:link:hover, a:visited:hover { width: 300px; } +.systemRoleAddTable { + +} + +.systemRoleAddTable td:nth-child(1) { + width: 16px; + text-align:center; +} + +.systemRoleAddTable td:nth-child(2) { + width: 100px; +} + +.systemRoleAddTable td:nth-child(3) { + width: 120px; +} + +.systemRoleAddTable td:nth-child(4) { + width: 120px; +} + +.systemRoleAddTable td:nth-child(5) { + width: 200px; +} + +.systemRoleTable { + +} + +.systemRoleTable td:nth-child(1) { + width: 16px; + text-align:center; +} + +.systemRoleTable td:nth-child(2) { + width: 100px; +} + +.systemRoleTable td:nth-child(3) { + width: 120px; +} + +.systemRoleTable td:nth-child(4) { + width: 120px; +} + +.systemRoleTable td:nth-child(5) { + width: 200px; +} + +.systemRoleTable td:nth-child(7) { + width: 150px; + visibility:visible; +} + .entityLogList td:last-child { width: 195px; } diff --git a/src/java/DmWebPortal/web/resources/js/common/forwardNotLoggedin.js b/src/java/DmWebPortal/web/resources/js/common/forwardNotLoggedin.js index d5075dd2..97b82833 100644 --- a/src/java/DmWebPortal/web/resources/js/common/forwardNotLoggedin.js +++ b/src/java/DmWebPortal/web/resources/js/common/forwardNotLoggedin.js @@ -1,2 +1 @@ - window.location = "/dm/views/login.xhtml"; - + window.location = "/dm/views/login.xhtml"; \ No newline at end of file diff --git a/src/java/DmWebPortal/web/resources/js/forwardNotLoggedin.js b/src/java/DmWebPortal/web/resources/js/forwardNotLoggedin.js deleted file mode 100644 index d21f80ed..00000000 --- a/src/java/DmWebPortal/web/resources/js/forwardNotLoggedin.js +++ /dev/null @@ -1,4 +0,0 @@ - - window.location = "/dm/views/login.xhtml"; - - diff --git a/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js b/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js deleted file mode 100644 index b7634e98..00000000 --- a/src/java/DmWebPortal/web/resources/js/userInfo/list.filter.js +++ /dev/null @@ -1,4 +0,0 @@ - -jQuery(document).ready(function() { - PF('userInfoListWidget').filter(); -}); \ No newline at end of file diff --git a/src/java/DmWebPortal/web/templates/homeViewTemplate.xhtml b/src/java/DmWebPortal/web/templates/homeViewTemplate.xhtml deleted file mode 100644 index 83cb4d25..00000000 --- a/src/java/DmWebPortal/web/templates/homeViewTemplate.xhtml +++ /dev/null @@ -1,119 +0,0 @@ -<!--<?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"> -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:ui="http://java.sun.com/jsf/facelets" - xmlns:p="http://primefaces.org/ui" - xmlns:h="http://java.sun.com/jsf/html" - xmlns:f="http://xmlns.jcp.org/jsf/core"> - - - <h:head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <link href="../resources/css/portal.css" rel="stylesheet" type="text/css" /> - <title>Data Management System Portal</title> - </h:head> - - <h:body> - - <div id="top" class="topContent"> - <div id="topLeft" class="topLeftContent"> - <ui:insert name="topLeft"> - <h:graphicImage alt="ANL Logo" url="/resources/images/AnlLogo167x75.png"/> - </ui:insert> - </div> - <div> - <div id="topRight" class="topRightContent"> - <ui:insert name="topRight"> - <h:outputText value="Username: #{loginController.displayUsername()}"/> - <br/> - - <h:outputText value="Role: #{loginController.displayRole()}"/> - - </ui:insert> - </div> - <div id="topCenter" class="topCenterContent"> - <ui:insert name="topCenter"> - <h1>Data Management System Portal</h1> - </ui:insert> - </div> - </div> - </div> - - <ui:fragment> - <div id="menu" class="menuContent"> - <div id="menuLeft" class="menuLeftContent"> - <ui:insert name="menuLeft"> - <p:menubar/> - </ui:insert> - </div> - <div> - <div id="menuRight" class="menuRightContent"> - <ui:insert name="menuRight"> - </ui:insert> - </div> - <div id="menuCenter" class="menuCenterContent"> - <ui:insert name="menuCenter"> - <h:form prependId="false"> - <p:menubar> - <p:menuitem value="Home" url="/views/home.xhtml" icon="ui-icon-home"/> - <p:menuitem value="Experiment Types" url="/views/experimentType/list.xhtml"/> - <p:menuitem value="Role Types" url="/views/roleType/list.xhtml"/> - <p:menuitem value="Users" url="/views/userInfo/list.xhtml"/> - <p:menuitem value="Login" onclick="PF('loginDialog').show();" rendered="#{!loginController.loggedIn}" icon="ui-icon-person"/> - <p:menuitem value="Logout" action="#{loginController.logout()}" rendered="#{loginController.loggedIn}" icon="ui-icon-close"/> </p:menubar> - </h:form> - </ui:insert> - </div> - </div> - </div> - - <div id="middle" class="middleContent"> - <div id="middleLeft" class="middleLeftContent"> - <ui:insert name="middleLeft"> - </ui:insert> - </div> - <div> - <div id="middleRight" class="middleRightContent"> - <ui:insert name="middleRight"> - </ui:insert> - </div> - <div id="middleCenter" class="middleCenterContent"> - <ui:insert name="middleCenter"> - </ui:insert> - </div> - </div> - </div> - </ui:fragment> - - <ui:fragment> - <div id="bottom" class="bottomContent"> - <ui:insert name="bottom"> - <h:form prependId="false"> - <p:growl id="messages" showDetail="true" autoUpdate="true"/> - </h:form> - </ui:insert> - </div> - </ui:fragment> - - <h:form id="loginForm"> - <p:dialog id="loginDialog" styleClass="dialog" header="Login" widgetVar="loginDialog"> - <h:panelGrid styleClass="loginInput"> - <div class="dialog"> - <div> - <p:inputText id="username" value="#{loginController.username}" title="Username"/> - <p:watermark for="username" value="Username"/> - <p:password id="password" value="#{loginController.password}" title="Password"/> - <p:watermark for="password" value="Password"/> - </div> - - <f:facet name="footer"> - <p:commandButton id="loginButton" value="Login" action="#{loginController.login}" oncomplete="loginDialog.hide()"/> - </f:facet> - </div> - </h:panelGrid> - </p:dialog> - </h:form> - </h:body> - -</html> \ No newline at end of file diff --git a/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml b/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml deleted file mode 100644 index 5e15b835..00000000 --- a/src/java/DmWebPortal/web/templates/loginViewTemplate.xhtml +++ /dev/null @@ -1,41 +0,0 @@ -<?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"> -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:ui="http://java.sun.com/jsf/facelets" - xmlns:h="http://java.sun.com/jsf/html"> - - <h:head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - <link href="../resources/css/login.css" rel="stylesheet" type="text/css" /> - <title>Data Management System Login</title> - - </h:head> - - <h:body> - <div id="top" class="topContent"> - <div id="topLeft" class="topLeftContent"> - <ui:insert name="topLeft"> - <h:graphicImage alt="ANL Logo" url="../resources/images/AnlLogo167x75.png"/> - </ui:insert> - </div> - <div> - <div id="topRight" class="topRightContent"> - <ui:insert name="topRight"/> - </div> - <div id="topCenter" class="topCenterContent"> - <ui:insert name="topCenter"> - <h1>Data Management System Portal</h1> - </ui:insert> - </div> - </div> - </div> - - <div id="bottom" class="bottomContent"> - <ui:insert name="bottom"> - </ui:insert> - </div> - - - </h:body> - -</html> diff --git a/src/java/DmWebPortal/web/views/experiment/edit.xhtml b/src/java/DmWebPortal/web/views/experiment/edit.xhtml index 63a6f528..b7a4180c 100644 --- a/src/java/DmWebPortal/web/views/experiment/edit.xhtml +++ b/src/java/DmWebPortal/web/views/experiment/edit.xhtml @@ -20,7 +20,6 @@ <p/> <div class="actionButton"> <p:commandButton action="#{experimentController.update()}" value="Save" alt="Save" icon="ui-icon-check" update="@form"/> -<!-- <p:commandButton action="list.xhtml?faces-redirect=true" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/>--> <p:commandButton action="#{experimentController.prepareList()}" immediate="true" value="Done" alt="Done" icon="ui-icon-arrowreturnthick-1-w"/> </div> </div> diff --git a/src/java/DmWebPortal/web/views/login.xhtml b/src/java/DmWebPortal/web/views/login.xhtml index 44bca8f1..fa5ac1ee 100644 --- a/src/java/DmWebPortal/web/views/login.xhtml +++ b/src/java/DmWebPortal/web/views/login.xhtml @@ -34,7 +34,6 @@ <div id="middle" class="middleContent"> <div id="middleLeft" class="middleLeftContent"> <h:form id="loginForm"> -<!-- <p:growl id="messages" showDetail="true" autoUpdate="true"/>--> <div class="login"> <div> <p:inputText id="username" value="#{loginController.username}" title="Username"/> diff --git a/src/java/DmWebPortal/web/views/roleType/roleTypeListDataTable.xhtml b/src/java/DmWebPortal/web/views/roleType/roleTypeListDataTable.xhtml index 35f1a09c..d674ec73 100644 --- a/src/java/DmWebPortal/web/views/roleType/roleTypeListDataTable.xhtml +++ b/src/java/DmWebPortal/web/views/roleType/roleTypeListDataTable.xhtml @@ -16,7 +16,7 @@ rows="25" binding="#{roleTypeController.listDataTable}" widgetVar="roleTypeListWidget" - emptyMessage="No role types found."> + emptyMessage="No role types found." > <p:column sortBy="#{roleTypeObject.id}" headerText="Id" width="40"> @@ -34,15 +34,21 @@ </p:column> <c:set var="isEntityWriteable" value="#{loginController.loggedIn}"/> + + <p:column headerText="Actions" width="80"> <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}"/> + <f:setPropertyActionListener value="#{roleTypeObject}" target="#{roleTypeController.current}"/> </p:commandLink> - </div> + + <p:commandLink action="#{userSystemRoleController.prepareSystemRoleView()}" rendered="#{roleTypeController.isRoleSystemType(roleTypeObject.name)}" styleClass="ui-icon ui-icon-person" title="List All" > + <f:setPropertyActionListener value="#{roleTypeObject.id}" target="#{userSystemRoleController.systemRoleId}"/> + </p:commandLink> + </div> </p:column> </p:dataTable> - + </ui:composition> diff --git a/src/java/DmWebPortal/web/views/userInfo/list.xhtml b/src/java/DmWebPortal/web/views/userInfo/list.xhtml index 6c44f9b1..833bd481 100644 --- a/src/java/DmWebPortal/web/views/userInfo/list.xhtml +++ b/src/java/DmWebPortal/web/views/userInfo/list.xhtml @@ -23,8 +23,6 @@ <ui:include src="userInfoDestroyDialog.xhtml"/> - <h:outputScript library="js/userInfo" name="list.filter.js" rendered="#{loginController.loggedIn}"/> - </h:form> </ui:define> diff --git a/src/java/DmWebPortal/web/views/userSystemRole/list.xhtml b/src/java/DmWebPortal/web/views/userSystemRole/list.xhtml new file mode 100644 index 00000000..edbc2cf5 --- /dev/null +++ b/src/java/DmWebPortal/web/views/userSystemRole/list.xhtml @@ -0,0 +1,38 @@ +<?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>Administrators</h1> + </div> + + <h:form id="adminListForm"> + <div class="actionButton"> + + <p:commandButton id="systemRoleAddButton" onclick="PF('systemRoleAddDialogWidget').show();" rendered="#{userSystemRoleController.hasSystemRole(loginController.username)}" icon="ui-icon-plus"> + <p:tooltip for="systemRoleAddButton" value="Add new Administrators."/> + </p:commandButton> + + <p:commandButton id="#{UserInfo}ResetFiltersButton" action="#{userSystemRoleController.resetSystemRoleUserList()}" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight"> + <p:tooltip for="#{UserInfo}ResetFiltersButton" value="Reset list filters."/> + </p:commandButton> + </div> + + <h:panelGroup> + <ui:include src="systemRoleListDataTable.xhtml"/> + </h:panelGroup> + + <ui:include src="systemRoleRemoveDialog.xhtml" /> + <ui:include src="systemRoleAddDialog.xhtml"/> + </h:form> + + </ui:define> +</ui:composition> + diff --git a/src/java/DmWebPortal/web/views/userSystemRole/systemRoleAddDialog.xhtml b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleAddDialog.xhtml new file mode 100644 index 00000000..40d2669b --- /dev/null +++ b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleAddDialog.xhtml @@ -0,0 +1,68 @@ +<?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" + xmlns:h="http://xmlns.jcp.org/jsf/html" + xmlns:f="http://xmlns.jcp.org/jsf/core" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> + + + + + <p:dialog id="adminAddDialog" + header="Add Administrators" widgetVar="systemRoleAddDialogWidget" > + + <div class="actionButton"> + <p:commandButton id="ResetFilters" action="#{userSystemRoleController.resetNoSystemRoleUserList()}" update="adminAddDialog" onsuccess="systemRoleAddTableWidgetVar.show()" alt="Clear Filters" icon="ui-icon-refresh" styleClass="actionButtonRight"> + <p:tooltip for="ResetFilters" value="Reset list filters."/> + </p:commandButton> + </div> + + <div> + <p:dataTable id="addSystemRoleList" + var="adminUser" + value="#{userSystemRoleController.noSystemRoleTable.listDataModel}" + filteredValue="#{userSystemRoleController.noSystemRoleTable.filteredObjectList}" + paginator="true" + paginatorAlwaysVisible="false" + rows="25" + binding="#{userSystemRoleController.noSystemRoleTable.listDataTable}" + selection="#{userSystemRoleController.noSystemRoleTable.selectedObjectList}" + rowKey="#{adminUser.username}" + widgetVar="systemRoleAddTableWidgetVar" + emptyMessage="No users to add." + tableStyleClass="systemRoleTable" + rowSelectMode="true" + selectionMode="multiple" > + + <p:column sortBy="#{adminUser.username}" headerText="Username" + filterBy="#{adminUser.username}" filterMatchMode="contains" > + <h:outputText value="#{adminUser.username}"/> + </p:column> + + <p:column sortBy="#{adminUser.lastName}" headerText="Last Name" + filterBy="#{adminUser.lastName}" filterMatchMode="contains" > + <h:outputText value="#{adminUser.lastName}"/> + </p:column> + + <p:column sortBy="#{adminUser.firstName}" headerText="First Name" + filterBy="#{adminUser.firstName}" filterMatchMode="contains" > + <h:outputText value="#{adminUser.firstName}"/> + </p:column> + + <p:column sortBy="#{adminUser.email}" headerText="Email" + filterBy="#{adminUser.email}" filterMatchMode="contains" > + <h:outputText value="#{adminUser.email}"/> + </p:column> + + <f:facet name="footer"> + <p:commandButton value="Add Adminstrators" actionListener="#{userSystemRoleController.addSystemRole()}" oncomplete="PF('systemRoleAddDialogWidget').hide()" /> + <p:commandButton value="Clear Selection" onclick="PF('systemRoleAddTableWidgetVar').unselectAllRows()" /> + </f:facet> + </p:dataTable> + </div> + </p:dialog> +</ui:composition> + + diff --git a/src/java/DmWebPortal/web/views/userSystemRole/systemRoleListDataTable.xhtml b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleListDataTable.xhtml new file mode 100644 index 00000000..b1317e25 --- /dev/null +++ b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleListDataTable.xhtml @@ -0,0 +1,58 @@ +<?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"> + + <p:dataTable id="systemRoleListDataTable" + var="systemUserObject" + value="#{userSystemRoleController.systemRoleTable.listDataModel}" + filteredValue="#{userSystemRoleController.systemRoleTable.filteredObjectList}" + paginator="true" + paginatorAlwaysVisible="false" + rows="25" + binding="#{userSystemRoleController.systemRoleTable.listDataTable}" + widgetVar="systemRoleListWidget" + emptyMessage="No users found." + tableStyleClass="systemRoleTable"> + + <p:column sortBy="#{systemUserObject.id}" headerText="Id" width="40"> + <h:outputText value="#{systemUserObject.id}"/> + </p:column> + + <p:column sortBy="#{systemUserObject.username}" headerText="Username" + filterBy="#{systemUserObject.username}" filterMatchMode="contains" width="100"> + <h:outputText value="#{systemUserObject.username}"/> + </p:column> + + <p:column sortBy="#{systemUserObject.lastName}" headerText="Last Name" + filterBy="#{systemUserObject.lastName}" filterMatchMode="contains" width="120"> + <h:outputText value="#{systemUserObject.lastName}"/> + </p:column> + + <p:column sortBy="#{systemUserObject.firstName}" headerText="First Name" + filterBy="#{systemUserObject.firstName}" filterMatchMode="contains" width="120"> + <h:outputText value="#{systemUserObject.firstName}"/> + </p:column> + + <p:column sortBy="#{systemUserObject.email}" headerText="Email" + filterBy="#{systemUserObject.email}" filterMatchMode="contains" width="200"> + <h:outputText value="#{systemUserObject.email}"/> + </p:column> + + + <p:column headerText="Actions" width="70"> + <div class="actionLink" > + <p:commandLink oncomplete="PF('systemRoleRemoveDialogWidget').show()" rendered="#{userSystemRoleController.hasSystemRole(loginController.username) and (loginController.username != systemUserObject.username)}" styleClass="ui-icon ui-icon-trash" title="Remove" update="@form" > + <f:setPropertyActionListener value="#{systemUserObject}" target="#{userSystemRoleController.systemRoleTable.current}" /> + </p:commandLink> + </div> + </p:column> + + </p:dataTable> + +</ui:composition> + diff --git a/src/java/DmWebPortal/web/views/userSystemRole/systemRoleRemoveDialog.xhtml b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleRemoveDialog.xhtml new file mode 100644 index 00000000..53d57921 --- /dev/null +++ b/src/java/DmWebPortal/web/views/userSystemRole/systemRoleRemoveDialog.xhtml @@ -0,0 +1,15 @@ +<?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" + xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> + + + <p:confirmDialog id="systemRoleRemoveDialog" message="Remove #{userSystemRoleController.getSystemRoleName()} Role for user #{userSystemRoleController.systemRoleTable.current.username}?" + header="Remove System Role" severity="alert" widgetVar="systemRoleRemoveDialogWidget" + styleClass="dialog"> + <p:commandButton value="Yes" oncomplete="systemRoleRemoveDialogWidget.hide()" action="#{userSystemRoleController.removeSystemRole()}"/> + <p:commandButton value="No" onclick="PF('systemRoleRemoveDialogWidget').hide()" type="button" /> + </p:confirmDialog> +</ui:composition> -- GitLab