From 724ceca7b07368a201ac7f854c24712df724f49e Mon Sep 17 00:00:00 2001
From: "Barbara B. Frosik" <bfrosik@aps.anl.gov>
Date: Mon, 6 Jul 2015 14:52:53 +0000
Subject: [PATCH] Changed CrudEntityCOntroller, ExperimentContro;;er and
 experiment/view.xhtml to show only the list of experiment that the logged in
 user is part of

---
 .../controllers/CrudEntityController.java     | 53 --------------
 .../controllers/ExperimentController.java     | 73 ++++++++++++++++++-
 .../web/views/experiment/view.xhtml           |  2 +-
 3 files changed, 73 insertions(+), 55 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 f4e64d3e..cfa44ca3 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
@@ -26,13 +26,11 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
 
     private DataModel listDataModel = null;
     private DataTable listDataTable = null;
-//    private boolean listDataModelReset = true;
     private List<EntityType> filteredObjectList = null;
 
 
     private DataModel selectDataModel = null;
     private DataTable selectDataTable = null;
-//    private boolean selectDataModelReset = false;
     private List<EntityType> selectedObjectList = null;
 
     
@@ -73,7 +71,6 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
         return current;
     }
 
-
     public String resetList() {
         logger.debug("Resetting list");
         return prepareList();
@@ -106,20 +103,6 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
         this.selectDataTable = selectDataTable;
     }
 
-//    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 String prepareView(EntityType entity) {
         clear();
         logger.debug("Preparing view");
@@ -140,23 +123,6 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
         return "create?faces-redirect=true";
     }
     
-//    public EntityType cloneEntityInstance(EntityType entity) {
-//        EntityType clonedEntity;
-//        try {
-//            clonedEntity = (EntityType) (entity.clone());
-//        }
-//        catch (CloneNotSupportedException ex) {
-//            logger.error("Object cannot be cloned: " + ex);
-//            clonedEntity = createEntityInstance();
-//        }
-//        return clonedEntity;
-//    }
-//
-//    public String prepareClone(EntityType entity) {
-//        current = cloneEntityInstance(entity);
-//        return "create?faces-redirect=true";
-//    }
-//
     protected void prepareEntityInsert(EntityType entity) throws DmPortalException {
     }
 
@@ -303,7 +269,6 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
     public void resetListDataModel() {
         listDataModel = null;
         listDataTable = null;
-//        listDataModelReset = true;
         filteredObjectList = null;
         current = null;
     }
@@ -312,7 +277,6 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
         selectDataModel = null;
         selectDataTable = null;
         selectedObjectList = null;
- //       selectDataModelReset = true;
     }
 
     public List<EntityType> getAvailableItems() {
@@ -340,21 +304,4 @@ public abstract class CrudEntityController<EntityType extends CloneableEntity, F
         return CollectionUtility.displayItemListWithoutOutsideDelimiters(entityList, itemDelimiter);
     }
 
-
-//    public boolean isListDataModelReset() {
-//        if (listDataModelReset) {
-//            listDataModelReset = false;
-//            return true;
-//        }
-//        return false;
-//    }
-//
-//    public boolean isSelectDataModelReset() {
-//        if (selectDataModelReset) {
-//            selectDataModelReset = false;
-//            return true;
-//        }
-//        return false;
-//    }
-
 }
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 059c0352..873bebb9 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
@@ -22,6 +22,7 @@ import gov.anl.aps.dm.portal.model.entities.PolicyType;
 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.CollectionUtility;
 import gov.anl.aps.dm.portal.utilities.SessionUtility;
 import java.util.ArrayList;
 import java.util.Date;
@@ -37,6 +38,9 @@ import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
 import javax.faces.convert.FacesConverter;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+import javax.faces.model.SelectItem;
 import org.apache.log4j.Logger;
 
 @Named("experimentController")
@@ -391,9 +395,76 @@ public class ExperimentController extends CrudEntityController<Experiment, Exper
         return "";
     }
 
+    private boolean isAdmin(String username) {
+        return roleTypeFacade.findByName(RoleTypeName.ADMIN).isAdmin(username);
+    }
+    
+    @Override
+    public DataModel createListDataModel() {
+        UserInfo logged = (UserInfo) SessionUtility.getUser();
+        if (logged == null) {
+            return null;
+        }
+        if (isAdmin(logged.getUsername())) {
+            return new ListDataModel(getFacade().findAll());
+        } else {
+            return new ListDataModel(userInfoFacade.findExperimentsInUser(logged.getId()));
+        }
+    }
+
     @Override
     public List<Experiment> getAvailableItems() {
-        return super.getAvailableItems();
+        UserInfo logged = (UserInfo) SessionUtility.getUser();
+        if (logged == null) {
+            return null;
+        }
+        if (isAdmin(logged.getUsername())) {
+            return getFacade().findAll();
+        } else {
+            return userInfoFacade.findExperimentsInUser(logged.getId());
+        }
+    }
+
+    @Override
+    public DataModel createSelectDataModel() {
+        UserInfo logged = (UserInfo) SessionUtility.getUser();
+        if (logged == null) {
+            return null;
+        }
+        List<Experiment> selectEntityList;
+        if (isAdmin(logged.getUsername())) {
+            selectEntityList = getFacade().findAll();
+        } else {
+            selectEntityList = userInfoFacade.findExperimentsInUser(logged.getId());
+        }
+        prepareEntityListForSelection(selectEntityList);
+        return new ListDataModel(selectEntityList);
+    }
+
+    @Override
+    public SelectItem[] getAvailableItemsForSelectMany() {
+        UserInfo logged = (UserInfo) SessionUtility.getUser();
+        if (logged == null) {
+            return null;
+        }
+        if (isAdmin(logged.getUsername())) {
+            return CollectionUtility.getSelectItems(getFacade().findAll(), false);
+        } else {
+            return CollectionUtility.getSelectItems(userInfoFacade.findExperimentsInUser(logged.getId()), false);
+        }
+    }
+
+    @Override
+    public SelectItem[] getAvailableItemsForSelectOne() {
+        UserInfo logged = (UserInfo) SessionUtility.getUser();
+        if (logged == null) {
+            return null;
+        }
+        if (isAdmin(logged.getUsername())) {
+            return CollectionUtility.getSelectItems(getFacade().findAll(), true);
+        } else {
+            return CollectionUtility.getSelectItems(userInfoFacade.findExperimentsInUser(logged.getId()), true);
+        }
     }
 
     @Override
diff --git a/src/java/DmWebPortal/web/views/experiment/view.xhtml b/src/java/DmWebPortal/web/views/experiment/view.xhtml
index 7840f741..1ab42ea6 100644
--- a/src/java/DmWebPortal/web/views/experiment/view.xhtml
+++ b/src/java/DmWebPortal/web/views/experiment/view.xhtml
@@ -37,7 +37,7 @@
             <p/>
 
             <div class="actionButton">
-                <p:commandButton action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{loginController.admin or experimentController.canEditExperiment(experimentObject.id)}" value="Edit" alt="Edit" icon="ui-icon-pencil"/>
+                <p:commandButton action="#{experimentController.prepareEdit(experimentObject)}" rendered="#{loginController.admin or experimentController.canEditExperiment(experimentObject)}" value="Edit" alt="Edit" icon="ui-icon-pencil"/>
                 <p:commandButton action="#{experimentController.prepareList()}" value="Return" alt="Return" icon="ui-icon-arrowreturnthick-1-w"/>
             </div>
 
-- 
GitLab