From 49814feeb02b09ce770fbeb55f3c121383770db2 Mon Sep 17 00:00:00 2001
From: jakubs <jakubs>
Date: Fri, 5 Sep 2014 09:13:55 +0000
Subject: [PATCH] SSDM-715 implement searchForExperiment in search service

SVN: 32417
---
 .../server/ServiceForDataStoreServer.java     | 19 ++++++++++++++++++-
 .../ServiceForDataStoreServerLogger.java      |  7 +++++++
 .../shared/IServiceForDataStoreServer.java    | 10 ++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
index c4144dbfbe7..91692468954 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServer.java
@@ -832,6 +832,11 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
                 businessObjectFactory.createExperimentTable(session);
         experimentTable.load(EntityType.ALL_TYPES_CODE, projectIdentifier);
         final List<ExperimentPE> experiments = experimentTable.getExperiments();
+        return translateExperimentsWithMetaprojectAssignments(session, experiments);
+    }
+
+    private List<Experiment> translateExperimentsWithMetaprojectAssignments(final Session session, final List<ExperimentPE> experiments)
+    {
         final Collection<MetaprojectAssignmentPE> assignmentPEs =
                 getDAOFactory().getMetaprojectDAO().listMetaprojectAssignmentsForEntities(
                         session.tryGetPerson(), experiments, EntityKind.EXPERIMENT);
@@ -1198,7 +1203,7 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
 
     @Override
     @RolesAllowed(
-            { RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
+    { RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
     public void checkDataSetAccess(String sessionToken,
             @AuthorizationGuard(guardClass = DataSetCodePredicate.class)
             String dataSetCode) throws UserFailureException
@@ -2612,6 +2617,18 @@ public class ServiceForDataStoreServer extends AbstractCommonServer<IServiceForD
         return searchHelper.searchForDataSets(session.getUserName(), detailedSearchCriteria);
     }
 
+    @Override
+    @RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
+    public List<Experiment> searchForExperiments(String sessionToken, SearchCriteria searchCriteria)
+    {
+        Session session = getSession(sessionToken);
+        DetailedSearchCriteria detailedSearchCriteria =
+                SearchCriteriaToDetailedSearchCriteriaTranslator.convert(getDAOFactory(), SearchableEntityKind.EXPERIMENT, searchCriteria);
+        SearchHelper searchHelper = new SearchHelper(session, businessObjectFactory, getDAOFactory());
+        List<ExperimentPE> experiments = searchHelper.searchForExperiments(sessionToken, detailedSearchCriteria);
+        return translateExperimentsWithMetaprojectAssignments(session, experiments);
+    }
+
     @Override
     @RolesAllowed(value =
     { RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER })
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
index c195dbe8bbd..ff65baaf4df 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ServiceForDataStoreServerLogger.java
@@ -653,6 +653,13 @@ public class ServiceForDataStoreServerLogger extends AbstractServerLogger implem
         return null;
     }
 
+    @Override
+    public List<Experiment> searchForExperiments(String sessionToken, SearchCriteria searchCriteria)
+    {
+        logAccess(sessionToken, "searchForExperiments", "%s", searchCriteria);
+        return null;
+    }
+
     @Override
     public List<AbstractExternalData> searchForDataSets(String sessionToken,
             SearchCriteria searchCriteria)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
index 52b24c6d008..0d2fcba3ae2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServiceForDataStoreServer.java
@@ -662,6 +662,16 @@ public interface IServiceForDataStoreServer extends IServer, ISessionProvider
     @Transactional(readOnly = true)
     public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria);
 
+    /**
+     * Search for experiments matching the provided criteria.
+     * 
+     * @param sessionToken The user authentication token. Must not be <code>null</code>.
+     * @param searchCriteria The criteria for experiments.
+     * @return A collection of experiments matching the search criteria.
+     */
+    @Transactional(readOnly = true)
+    public List<Experiment> searchForExperiments(String sessionToken, SearchCriteria searchCriteria);
+
     /**
      * Search for data sets matching the provided criteria.
      * 
-- 
GitLab