From b8a612f56602233b8096e21a1b761641796e4af3 Mon Sep 17 00:00:00 2001
From: "Barbara B. Frosik" <bfrosik@aps.anl.gov>
Date: Mon, 8 Dec 2014 20:58:55 +0000
Subject: [PATCH]

---
 .../controllers/CrudEntityController.java     |  8 ++++-
 .../controllers/ExperimentController.java     | 29 ++++++++++++-------
 .../controllers/ExperimentTypeController.java | 12 ++++----
 .../portal/controllers/LoginController.java   |  4 ---
 .../controllers/RoleTypeController.java       | 13 +++++----
 .../controllers/UserInfoController.java       | 17 +++++------
 .../controllers/UserSystemRoleController.java | 14 +++++++++
 .../templates/contentViewTemplate4x3.xhtml    |  2 +-
 8 files changed, 63 insertions(+), 36 deletions(-)

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 ccf292ef..cf0d0a28 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
@@ -195,11 +195,17 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
             current = updatedEntity;
             return view();
         }
-        catch (DmPortalException | RuntimeException ex) {
+        catch (DmPortalException ex) {
             SessionUtility.addErrorMessage("Error", "Could not update " + getDisplayEntityTypeName() + ": " + ex.getMessage());
             return null;
         }
+        catch (RuntimeException ex) {
+            SessionUtility.addErrorMessage("Error", "Could not update " + getDisplayEntityTypeName() + ": " + getObjectAlreadyExistMessage(current));
+            return null;
+        }
     }
+    
+    abstract protected String getObjectAlreadyExistMessage(EntityType entity);
 
     public void destroy(EntityType entity) {
         current = entity;
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 abf97ffe..9e5f03be 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
@@ -65,29 +65,36 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
 
     @Override
     public void prepareEntityInsert(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
-        verifyExperiment(experiment);        
-        logger.debug("Inserting new experiment " + experiment.getName());                
+        Experiment existingExperiment = experimentFacade.findByName(experiment.getName());
+        if (existingExperiment != null) {
+            throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists.");
+        }
+
+        verifyExperiment(experiment);
+        logger.debug("Inserting new experiment " + experiment.getName());
     }
 
     @Override
-    public void prepareEntityUpdate(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
+    public void prepareEntityUpdate(Experiment experiment) throws DmPortalException {
         verifyExperiment(experiment);        
         logger.debug("Updating experiment " + experiment.getName());                
     }
 
-    private void verifyExperiment(Experiment experiment) throws ObjectAlreadyExists, InvalidDate, MissingProperty {
-        Experiment existingExperiment = experimentFacade.findByName(experiment.getName());
-        if (existingExperiment != null) {
-            throw new ObjectAlreadyExists("Experiment " + experiment.getName() + " already exists.");
+     @Override
+     protected String getObjectAlreadyExistMessage(Experiment experiment)  {
+        if (experiment == null)
+            return null;
+        return "Experiment " + experiment.getName() + " already exists."; 
+    }
+
+    private void verifyExperiment(Experiment experiment) throws InvalidDate, MissingProperty {       
+        if (experiment.getExperimentType() == null) {
+            throw new MissingProperty("Experiment Type is missing.");
         }
         
         if ((experiment.getStartDate() != null) && (experiment.getEndDate() != null) && (experiment.getEndDate().before(experiment.getStartDate()))) {
             throw new InvalidDate("Experiment end date is before start date.");
         }
-        
-        if (experiment.getExperimentType() == null) {
-            throw new MissingProperty("Experiment Type is missing.");
-        }
     }
    
 
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
index a0b3eecb..e8545915 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/ExperimentTypeController.java
@@ -72,12 +72,14 @@ public class ExperimentTypeController extends CrudEntityController<ExperimentTyp
 
     @Override
     public void prepareEntityUpdate(ExperimentType experimentType) throws DmPortalException {
-       ExperimentType existingExperimentType = experimentTypeFacade.findByName(experimentType.getName());
-        if (existingExperimentType != null) {
-            throw new ObjectAlreadyExists("Experiment type " + experimentType.getName() + " already exists.");
-        }
     }
-   
+    
+      @Override
+     protected String getObjectAlreadyExistMessage(ExperimentType experimentType)  {
+        if (experimentType == null)
+            return null;
+        return "Experiment Type " + experimentType.getName() + " already exists."; 
+    }
 
     @FacesConverter(forClass = ExperimentType.class)
     public static class ExperimentTypeControllerConverter implements Converter
diff --git a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
index df521f94..8f1c34f5 100644
--- a/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
+++ b/src/java/DmWebPortal/src/java/gov/anl/aps/dm/portal/controllers/LoginController.java
@@ -150,10 +150,6 @@ public class LoginController implements Serializable
         }
     }
 
-    public String displayRole() {
-        return "User";
-    }
-
     public boolean isUserWriteable(UserInfo user) {
         if (!isLoggedIn()) {
             return false;
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 5e29cde8..8e444f69 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
@@ -4,7 +4,6 @@ import gov.anl.aps.dm.portal.exceptions.DmPortalException;
 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;
@@ -77,12 +76,16 @@ public class RoleTypeController extends CrudEntityController<RoleType, RoleTypeF
 
     @Override
     public void prepareEntityUpdate(RoleType roleType) throws DmPortalException {
-        RoleType existingRoleType = roleTypeFacade.findByName(roleType.getName());
-        if (existingRoleType != null) {
-            throw new ObjectAlreadyExists("Role Type " + roleType.getName() + " already exists.");
-        }
     }
 
+     @Override
+     protected String getObjectAlreadyExistMessage(RoleType roleType)  {
+        if (roleType == null)
+            return null;
+        return "Role Type " + roleType.getName() + " already exists."; 
+    }
+
+
     public boolean isRoleSystemType(String name) {
         if (name == null) {
             logger.warn("Current row is not set");
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 d83fca3e..1e6b0f00 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
@@ -1,14 +1,10 @@
 package gov.anl.aps.dm.portal.controllers;
 
 import gov.anl.aps.dm.portal.exceptions.DmPortalException;
-import gov.anl.aps.dm.portal.exceptions.InvalidDate;
-import gov.anl.aps.dm.portal.exceptions.MissingProperty;
 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.model.entities.Experiment;
 import gov.anl.aps.dm.portal.utilities.SessionUtility;
-import java.util.ArrayList;
 
 import java.util.List;
 import javax.ejb.EJB;
@@ -79,18 +75,21 @@ public class UserInfoController extends CrudEntityController<UserInfo, UserInfoF
     }
 
     @Override
-    public void prepareEntityUpdate(UserInfo user) throws ObjectAlreadyExists {
+    public void prepareEntityUpdate(UserInfo user) throws DmPortalException {
         if (passwordEntry != null && !passwordEntry.isEmpty()) {
             user.setPassword(passwordEntry);
         }
         passwordEntry = null;
+    }
 
-        UserInfo existingUserInfo = userInfoFacade.findByUsername(user.getUsername());
-        if (existingUserInfo != null) {
-            throw new ObjectAlreadyExists("User " + user.getUsername() + " already exists.");
-        }
+     @Override
+     protected String getObjectAlreadyExistMessage(UserInfo user)  {
+        if (user == null)
+            return null;
+        return "User " + user.getUsername() + " already exists."; 
     }
 
+
     public String prepareSessionUserEdit(String viewPath) {
         UserInfo sessionUser = (UserInfo) SessionUtility.getUser();
         if (sessionUser == null) {
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
index 1851c94a..1f965aa8 100644
--- 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
@@ -128,6 +128,20 @@ public class UserSystemRoleController  implements Serializable
         return rt.isAdmin(user);
     }
 
+   public String displayRole(String user) {
+       // for now this method returns "Administrator" if user has this role, and "User" otherwise
+        RoleType rt = roleTypeFacade.findById(1);
+        if (rt == null) {
+            return null;
+        }
+        if (rt.isAdmin(user)) {
+            return "Administrator";
+        }
+        else {
+            return "User";            
+        }           
+    }
+
     public String prepareSystemRoleView() {
         logger.debug("Preparing system role view");
         noSystemRoleTable.resetList();
diff --git a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
index 93ea6422..b8b399bd 100644
--- a/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
+++ b/src/java/DmWebPortal/web/templates/contentViewTemplate4x3.xhtml
@@ -28,7 +28,7 @@
                         <h:outputText value="Username: #{loginController.displayUsername()}"/>
                         <br/>
 
-                        <h:outputText value="Role: #{loginController.displayRole()}"/>
+                        <h:outputText value="Role: #{userSystemRoleController.displayRole(loginController.username)}"/>
 
                     </ui:insert>
                 </div>
-- 
GitLab