From f253b1077f4a32397378abbf4ad7fc82389ff7c6 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Fri, 13 Jul 2012 17:05:33 +0000
Subject: [PATCH] Add methods
 IGeneralInformationService.filterXXXVisibleToUser().

SVN: 26110
---
 .../api/v1/GeneralInformationService.java     | 73 ++++++++++++++++++-
 .../v1/GeneralInformationServiceLogger.java   | 28 +++++++
 .../api/v1/IGeneralInformationService.java    | 42 ++++++++++-
 3 files changed, 141 insertions(+), 2 deletions(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
index 8de6673bd83..6307dd4fbf9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java
@@ -342,6 +342,29 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
         return samples;
     }
 
+    @Override
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
+    @Capability("SEARCH_ON_BEHALF_OF_USER")
+    public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples,
+            String userId)
+    {
+        checkSession(sessionToken);
+
+        // filter by user
+        final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId);
+        final SampleByIdentiferValidator validator = new SampleByIdentiferValidator();
+        final ArrayList<Sample> samples = new ArrayList<Sample>(allSamples.size());
+        for (Sample sample : allSamples)
+        {
+            if (validator.doValidation(person, sample))
+            {
+                samples.add(sample);
+            }
+        }
+        return samples;
+    }
+
     protected ISampleLister createSampleLister()
     {
         return new SampleLister(getDAOFactory());
@@ -480,6 +503,31 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
         return null;
     }
 
+    @Override
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
+    @Capability("SEARCH_ON_BEHALF_OF_USER")
+    public List<Experiment> filterExperimentsVisibleToUser(String sessionToken,
+            List<Experiment> allExperiments,
+            String userId)
+    {
+        checkSession(sessionToken);
+
+        // filter by user
+        final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId);
+        final ExperimentByIdentiferValidator validator = new ExperimentByIdentiferValidator();
+        final ArrayList<Experiment> experiments = new ArrayList<Experiment>(allExperiments.size());
+        for (Experiment experiment : allExperiments)
+        {
+            if (validator.doValidation(person, experiment))
+            {
+                experiments.add(experiment);
+            }
+        }
+        return experiments;
+
+    }
+
     @Override
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
@@ -715,7 +763,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
     public List<DataSet> searchForDataSetsOnBehalfOfUser(String sessionToken,
             SearchCriteria searchCriteria, String userId)
     {
-
         final List<DataSet> unfilteredDatasets = searchForDataSets(sessionToken, searchCriteria);
         // Filter for user
         final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId);
@@ -732,6 +779,30 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio
         return datasets;
     }
 
+    @Override
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER)
+    @Capability("SEARCH_ON_BEHALF_OF_USER")
+    public List<DataSet> filterDataSetsVisibleToUser(String sessionToken,
+            List<DataSet> allDataSets, String userId)
+    {
+        checkSession(sessionToken);
+
+        // filter by user
+        final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId);
+        final DataSetByExperimentIdentifierValidator validator =
+                new DataSetByExperimentIdentifierValidator();
+        final ArrayList<DataSet> dataSets = new ArrayList<DataSet>(allDataSets.size());
+        for (DataSet dataSet : allDataSets)
+        {
+            if (validator.doValidation(person, dataSet))
+            {
+                dataSets.add(dataSet);
+            }
+        }
+        return dataSets;
+    }
+
     @Override
     @Transactional(readOnly = true)
     @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
index 22515827e41..d9797a209c1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java
@@ -129,6 +129,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements
         return null;
     }
 
+    @Override
+    public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples,
+            String userId)
+    {
+        logAccess(sessionToken, "filter-samples-visible-to-user", "SAMPLES(%s)",
+                "USER(%S)", abbreviate(allSamples), userId);
+        return null;
+    }
+
     @Override
     public List<DataSet> listDataSets(String sessionToken, List<Sample> samples)
     {
@@ -239,6 +248,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements
         return null;
     }
 
+    @Override
+    public List<DataSet> filterDataSetsVisibleToUser(String sessionToken,
+            List<DataSet> allDataSets, String userId)
+    {
+        logAccess(sessionToken, "filter-data-sets-visible-to-user", "DATASETS(%s)",
+                "USER(%S)", abbreviate(allDataSets), userId);
+        return null;
+    }
+
     @Override
     public List<Experiment> listExperiments(String sessionToken, List<String> experimentIdentifiers)
     {
@@ -247,6 +265,16 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements
         return null;
     }
 
+    @Override
+    public List<Experiment> filterExperimentsVisibleToUser(String sessionToken,
+            List<Experiment> allExperiments,
+            String userId)
+    {
+        logAccess(sessionToken, "filter-experiments-visible-to-user", "EXPERIMENTS(%s)",
+                "USER(%s)", abbreviate(allExperiments), userId);
+        return null;
+    }
+
     @Override
     public List<Project> listProjects(String sessionToken)
     {
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
index d9314a6f0e6..e4c27913d2c 100644
--- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java
@@ -154,7 +154,7 @@ public interface IGeneralInformationService extends IRpcService
      * possible only in one direction.
      * <p>
      * May only be called by users who are <code>INSTANCE_OBSERVER</code>.
-
+     * 
      * @param searchCriteria The sample metadata values to be matched against.
      * @param fetchOptions Options that control which parts of the samples are fetched.
      * @since 1.18
@@ -163,6 +163,19 @@ public interface IGeneralInformationService extends IRpcService
             SearchCriteria searchCriteria,
             EnumSet<SampleFetchOption> fetchOptions, String userId);
 
+    /**
+     * Returns a filtered list of <var>allSamples</var> containing those samples which are
+     * visible to <var>userId</var>.
+     * 
+     * @param allSamples The list of samples that should be filtered.
+     * @param userId The user that the samples should be visible to that survive the filtering.
+     * @return The filtered list of <var>allSamples</var> containing those samples which are
+     *         visible to <var>userId</var>.
+     * @since 1.18
+     */
+    public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples,
+            String userId);
+
     /**
      * Return all samples that belong to the supplied experiment.
      * 
@@ -218,6 +231,20 @@ public interface IGeneralInformationService extends IRpcService
     public List<Experiment> listExperimentsHavingDataSets(String sessionToken,
             List<Project> projects, String experimentType);
 
+    /**
+     * Returns a filtered list of <var>allExperiments</var> containing those experiments which are
+     * visible to <var>userId</var>.
+     * 
+     * @param allExperiments The list of experiments that should be filtered.
+     * @param userId The user that the experiments should be visible to that survive the filtering.
+     * @return The filtered list of <var>allExperiments</var> containing all experiments which are
+     *         visible to <var>userId</var>.
+     * @since 1.18
+     */
+    public List<Experiment> filterExperimentsVisibleToUser(String sessionToken,
+            List<Experiment> allExperiments,
+            String userId);
+
     /**
      * Return the data sets attached to the specified sample, optionally including child samples.
      * Note, that for returned container data sets the contained data sets have only code, type and
@@ -339,6 +366,19 @@ public interface IGeneralInformationService extends IRpcService
     public List<DataSet> searchForDataSetsOnBehalfOfUser(String sessionToken,
             SearchCriteria searchCriteria, String userId);
 
+    /**
+     * Returns a filtered list of <var>allDataSets</var> containing those data sets which are
+     * visible to <var>userId</var>.
+     * 
+     * @param allDataSets The list of data sets that should be filtered.
+     * @param userId The user that the data sets should be visible to that survive the filtering.
+     * @return The filtered list of <var>allDataSets</var> containing those data sets which are
+     *         visible to <var>userId</var>.
+     * @since 1.18
+     */
+    public List<DataSet> filterDataSetsVisibleToUser(String sessionToken,
+            List<DataSet> allDataSets, String userId);
+
     /**
      * Return all experiments matching a specified set of identifiers.
      * 
-- 
GitLab