From 0d9b4b674d7afdf0fce5243b0de6b211979915ab Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 23 Nov 2017 07:18:31 +0000
Subject: [PATCH] SSDM-5724: handle UserIdsMatcher in SearchPersonExecutor

SVN: 38941
---
 .../executor/person/SearchPersonExecutor.java | 35 +++++++++++++++++--
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/SearchPersonExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/SearchPersonExecutor.java
index 1d72fa631b5..b346ce66982 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/SearchPersonExecutor.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/SearchPersonExecutor.java
@@ -16,6 +16,7 @@
 
 package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.person;
 
+import java.util.Collection;
 import java.util.List;
 
 import org.springframework.stereotype.Component;
@@ -26,8 +27,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.search.FirstNameSearchCri
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.search.LastNameSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.search.PersonSearchCriteria;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.search.UserIdSearchCriteria;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.search.UserIdsSearchCriteria;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext;
 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.Matcher;
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.SimpleFieldMatcher;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.search.StringFieldMatcher;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 
@@ -51,6 +55,9 @@ public class SearchPersonExecutor extends AbstractSearchObjectManuallyExecutor<P
         if (criteria instanceof UserIdSearchCriteria)
         {
             return new UserIdMatcher();
+        } else if (criteria instanceof UserIdsSearchCriteria)
+        {
+            return new UserIdsMatcher();
         } else if (criteria instanceof FirstNameSearchCriteria)
         {
             return new FirstNameMatcher();
@@ -65,16 +72,38 @@ public class SearchPersonExecutor extends AbstractSearchObjectManuallyExecutor<P
             throw new IllegalArgumentException("Unknown search criteria: " + criteria.getClass());
         }
     }
-
+    
     private class UserIdMatcher extends StringFieldMatcher<PersonPE>
     {
-
+        
         @Override
         protected String getFieldValue(PersonPE object)
         {
             return object.getUserId();
         }
-
+        
+    }
+    
+    private class UserIdsMatcher extends SimpleFieldMatcher<PersonPE>
+    {
+        @Override
+        protected boolean isMatching(IOperationContext context, PersonPE person, ISearchCriteria criteria)
+        {
+            Collection<String> userIds = ((UserIdsSearchCriteria) criteria).getFieldValue();
+            if (userIds == null || userIds.isEmpty())
+            {
+                return true;
+            }
+            
+            for (String userId : userIds)
+            {
+                if (person.getUserId().equals(userId))
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
     }
 
     private class FirstNameMatcher extends StringFieldMatcher<PersonPE>
-- 
GitLab