From c63e9347708da340bf90ef4c0b2b6d197875faa6 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 28 Mar 2017 10:16:16 +0000
Subject: [PATCH] SSDM-4647: Search External DMS by code implemented and system
 test added to SearchExternalDmsTest

SVN: 37984
---
 .../ISearchExternalDmsExecutor.java           |  3 +-
 .../SearchExternalDmsExecutor.java            | 35 +++++++++++++------
 .../SearchExternalDmsOperationExecutor.java   |  7 ++--
 .../asapi/v3/SearchExternalDmsTest.java       | 21 +++++++++++
 4 files changed, 51 insertions(+), 15 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/ISearchExternalDmsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/ISearchExternalDmsExecutor.java
index 1ce2ad75dbb..8025a531f28 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/ISearchExternalDmsExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/ISearchExternalDmsExecutor.java
@@ -18,11 +18,12 @@ package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.externaldms;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSearchCriteria;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.ISearchObjectExecutor;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE;
 
 /**
  * @author pkupczyk
  */
-public interface ISearchExternalDmsExecutor extends ISearchObjectExecutor<ExternalDmsSearchCriteria, Long>
+public interface ISearchExternalDmsExecutor extends ISearchObjectExecutor<ExternalDmsSearchCriteria, ExternalDataManagementSystemPE>
 {
 
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsExecutor.java
index 62085f560ad..ee6ff796a8f 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsExecutor.java
@@ -16,23 +16,25 @@
 
 package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.externaldms;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.CodeSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.ISearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSearchCriteria;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
-import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.AbstractSearchObjectExecutor;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.AbstractSearchObjectManuallyExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.CodeMatcher;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.Matcher;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE;
 
 /**
  * @author pkupczyk
  */
 @Component
-public class SearchExternalDmsExecutor extends AbstractSearchObjectExecutor<ExternalDmsSearchCriteria, Long> implements
+public class SearchExternalDmsExecutor extends AbstractSearchObjectManuallyExecutor<ExternalDmsSearchCriteria, ExternalDataManagementSystemPE> implements
         ISearchExternalDmsExecutor
 {
 
@@ -40,16 +42,27 @@ public class SearchExternalDmsExecutor extends AbstractSearchObjectExecutor<Exte
     private IExternalDmsAuthorizationExecutor authorizationExecutor;
 
     @Override
-    protected List<Long> doSearch(IOperationContext context, DetailedSearchCriteria criteria)
+    public List<ExternalDataManagementSystemPE> search(IOperationContext context, ExternalDmsSearchCriteria criteria)
     {
         authorizationExecutor.canSearch(context);
-        List<ExternalDataManagementSystemPE> list =
-                daoFactory.getExternalDataManagementSystemDAO().listExternalDataManagementSystems();
-        List<Long> ids = new ArrayList<>();
-        for (ExternalDataManagementSystemPE edms : list)
+        return super.search(context, criteria);
+    }
+    
+    @Override
+    protected List<ExternalDataManagementSystemPE> listAll()
+    {
+        return daoFactory.getExternalDataManagementSystemDAO().listExternalDataManagementSystems();
+    }
+
+    @Override
+    protected Matcher<ExternalDataManagementSystemPE> getMatcher(ISearchCriteria criteria)
+    {
+        if (criteria instanceof CodeSearchCriteria)
+        {
+            return new CodeMatcher<ExternalDataManagementSystemPE>();
+        } else
         {
-            ids.add(edms.getId());
+            throw new IllegalArgumentException("Unknown search criteria: " + criteria.getClass());
         }
-        return ids;
     }
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsOperationExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsOperationExecutor.java
index c3d9241b9f3..6367d4bee7f 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsOperationExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/externaldms/SearchExternalDmsOperationExecutor.java
@@ -28,16 +28,17 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSe
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.SearchExternalDmsOperation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.SearchExternalDmsOperationResult;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.ISearchObjectExecutor;
-import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.SearchObjectsOperationExecutor;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.SearchObjectsPEOperationExecutor;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.ITranslator;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.externaldms.IExternalDmsTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataManagementSystemPE;
 
 /**
  * @author pkupczyk
  */
 @Component
 public class SearchExternalDmsOperationExecutor
-        extends SearchObjectsOperationExecutor<ExternalDms, Long, ExternalDmsSearchCriteria, ExternalDmsFetchOptions>
+        extends SearchObjectsPEOperationExecutor<ExternalDms, ExternalDataManagementSystemPE, ExternalDmsSearchCriteria, ExternalDmsFetchOptions>
         implements ISearchExternalDmsOperationExecutor
 {
 
@@ -54,7 +55,7 @@ public class SearchExternalDmsOperationExecutor
     }
 
     @Override
-    protected ISearchObjectExecutor<ExternalDmsSearchCriteria, Long> getExecutor()
+    protected ISearchObjectExecutor<ExternalDmsSearchCriteria, ExternalDataManagementSystemPE> getExecutor()
     {
         return searchExecutor;
     }
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExternalDmsTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExternalDmsTest.java
index 52e2226a96c..5afd5bbfe28 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExternalDmsTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchExternalDmsTest.java
@@ -18,7 +18,11 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3;
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.testng.Assert.assertEquals;
 
+import java.util.List;
+
+import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult;
@@ -41,4 +45,21 @@ public class SearchExternalDmsTest extends AbstractExternalDmsTest
         assertThat(result.getObjects(), hasItem(isSimilarTo(edms1)));
         assertThat(result.getObjects(), hasItem(isSimilarTo(edms2)));
     }
+    
+    @Test
+    public void searchReturnsSpecifiedExternalDataManagementSystem()
+    {
+        get(create(externalDms()));
+        ExternalDms edms2 = get(create(externalDms()));
+        
+        ExternalDmsSearchCriteria criteria = new ExternalDmsSearchCriteria();
+        criteria.withCode().thatEquals(edms2.getCode());
+        ExternalDmsFetchOptions fetchOptions = new ExternalDmsFetchOptions();
+        List<ExternalDms> result = v3api.searchExternalDataManagementSystems(session, criteria, fetchOptions).getObjects();
+        
+        assertEquals(result.size(), 1);
+        assertEquals(result.get(0).getCode(), edms2.getCode());
+        assertEquals(result.get(0).getAddress(), edms2.getAddress());
+        assertEquals(result.get(0).getAddressType(), edms2.getAddressType());
+    }
 }
-- 
GitLab