You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/01/31 16:44:44 UTC

[syncope] 03/03: [SYNCOPE-1538] Introducing realm search

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit cb72af53771e8fd909e8adfb14fc9b415916bc27
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Jan 31 16:58:29 2020 +0100

    [SYNCOPE-1538] Introducing realm search
---
 .../syncope/client/console/pages/Realms.java       |  1 +
 .../client/console/rest/RealmRestClient.java       |  3 +-
 .../client/enduser/rest/RealmRestClient.java       |  4 +-
 .../syncope/common/rest/api/beans/RealmQuery.java  | 80 ++++++++++++++++++++++
 .../common/rest/api/service/RealmService.java      | 10 ++-
 .../org/apache/syncope/core/logic/RealmLogic.java  | 18 ++++-
 .../core/rest/cxf/service/RealmServiceImpl.java    |  6 +-
 .../syncope/core/persistence/api/dao/RealmDAO.java |  2 +
 .../core/persistence/jpa/dao/JPARealmDAO.java      | 28 +++++---
 .../java/data/RealmDataBinderImpl.java             |  4 +-
 .../syncope/fit/core/MultitenancyITCase.java       |  7 +-
 .../org/apache/syncope/fit/core/RealmITCase.java   | 11 ++-
 .../org/apache/syncope/fit/core/UserITCase.java    |  3 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  |  7 +-
 14 files changed, 154 insertions(+), 30 deletions(-)

diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index 48de67d..034b9a2 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -72,6 +72,7 @@ public class Realms extends BasePage {
             @Override
             protected Serializable onApplyInternal(
                     final TemplatableTO targetObject, final String type, final AnyTO anyTO) {
+
                 targetObject.getTemplates().put(type, anyTO);
                 RealmRestClient.update(RealmTO.class.cast(targetObject));
                 return targetObject;
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
index 54ae734..486d0ba 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/RealmRestClient.java
@@ -21,6 +21,7 @@ package org.apache.syncope.client.console.rest;
 import java.util.List;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.Response;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.DynRealmTO;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
@@ -35,7 +36,7 @@ public class RealmRestClient extends BaseRestClient {
     private static final long serialVersionUID = -8549081557283519638L;
 
     public static List<RealmTO> list() {
-        return getService(RealmService.class).list();
+        return getService(RealmService.class).list(SyncopeConstants.ROOT_REALM);
     }
 
     public static List<DynRealmTO> listDynReams() {
diff --git a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
index d7b5729..def9fd0 100644
--- a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
+++ b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/rest/RealmRestClient.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.client.enduser.rest;
 
 import java.util.List;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.service.RealmService;
 
@@ -30,7 +31,6 @@ public class RealmRestClient extends BaseRestClient {
     private static final long serialVersionUID = -8549081557283519638L;
 
     public static List<RealmTO> list() {
-        return getService(RealmService.class).list();
+        return getService(RealmService.class).list(SyncopeConstants.ROOT_REALM);
     }
-
 }
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RealmQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RealmQuery.java
new file mode 100644
index 0000000..f32d6d7
--- /dev/null
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/RealmQuery.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.rest.api.beans;
+
+import java.io.Serializable;
+import javax.ws.rs.QueryParam;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+public class RealmQuery implements Serializable {
+
+    private static final long serialVersionUID = -2278419397595186866L;
+
+    public static class Builder {
+
+        private final RealmQuery instance = new RealmQuery();
+
+        public Builder keyword(final String keyword) {
+            instance.setKeyword(keyword);
+            return this;
+        }
+
+        public RealmQuery build() {
+            return instance;
+        }
+    }
+
+    private String keyword;
+
+    public String getKeyword() {
+        return keyword;
+    }
+
+    @QueryParam("keyword")
+    public void setKeyword(final String keyword) {
+        this.keyword = keyword;
+    }
+
+    @Override
+    public boolean equals(final Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        RealmQuery other = (RealmQuery) obj;
+        return new EqualsBuilder().
+                appendSuper(super.equals(obj)).
+                append(keyword, other.keyword).
+                build();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder().
+                appendSuper(super.hashCode()).
+                append(keyword).
+                build();
+    }
+}
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
index c7617a9..0790b7c 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RealmService.java
@@ -30,6 +30,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirements;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import java.util.List;
 import javax.validation.constraints.NotNull;
+import javax.ws.rs.BeanParam;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -44,6 +45,7 @@ import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 
 /**
  * REST operations for realms.
@@ -56,13 +58,15 @@ import org.apache.syncope.common.rest.api.RESTHeaders;
 public interface RealmService extends JAXRSService {
 
     /**
-     * Returns a list of all realms.
+     * Returns a paged list of existing realms matching the given query.
      *
-     * @return list of all realms.
+     * @param query query conditions
+     * @return paged list of existing realms matching the given query
      */
     @GET
+    @Path("search")
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    List<RealmTO> list();
+    List<RealmTO> search(@BeanParam RealmQuery query);
 
     /**
      * Returns realms rooted at the given path.
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 4a55cde..a1fd376 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -69,6 +70,20 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
     @Autowired
     private PropagationTaskExecutor taskExecutor;
 
+    @PreAuthorize("hasRole('" + IdRepoEntitlement.REALM_LIST + "')")
+    @Transactional(readOnly = true)
+    public List<RealmTO> search(final String keyword) {
+        Set<String> bases = AuthContextUtils.getAuthorizations().get(IdRepoEntitlement.REALM_LIST);
+
+        return realmDAO.findMatching(keyword).stream().
+                filter(realm -> bases.stream().anyMatch(base -> realm.getFullPath().startsWith(base))).
+                flatMap(realm -> realmDAO.findDescendants(realm).stream()).
+                distinct().
+                map(realm -> binder.getRealmTO(realm, true)).
+                sorted(Comparator.comparing(RealmTO::getFullPath)).
+                collect(Collectors.toList());
+    }
+
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
     public List<RealmTO> list(final String fullPath) {
@@ -79,7 +94,7 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
             throw new NotFoundException(fullPath);
         }
 
-        final boolean admin = AuthContextUtils.getAuthorizations().keySet().contains(IdRepoEntitlement.REALM_LIST);
+        boolean admin = AuthContextUtils.getAuthorizations().keySet().contains(IdRepoEntitlement.REALM_LIST);
         return realmDAO.findDescendants(realm).stream().
                 map(descendant -> binder.getRealmTO(descendant, admin)).collect(Collectors.toList());
     }
@@ -222,5 +237,4 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
 
         throw new UnresolvedReferenceException();
     }
-
 }
diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
index e937278..5767ad2 100644
--- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
+++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/RealmServiceImpl.java
@@ -26,6 +26,7 @@ import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.syncope.common.rest.api.service.RealmService;
 import org.apache.syncope.core.logic.RealmLogic;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,8 +39,9 @@ public class RealmServiceImpl extends AbstractServiceImpl implements RealmServic
     private RealmLogic logic;
 
     @Override
-    public List<RealmTO> list() {
-        return list(StringUtils.EMPTY);
+    public List<RealmTO> search(final RealmQuery query) {
+        String keyword = query.getKeyword() == null ? null : query.getKeyword().replace('*', '%');
+        return logic.search(keyword);
     }
 
     @Override
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
index 800b493..9daabb1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
@@ -41,6 +41,8 @@ public interface RealmDAO extends DAO<Realm> {
 
     List<Realm> findByResource(ExternalResource resource);
 
+    List<Realm> findMatching(String keyword);
+
     <T extends Policy> List<Realm> findByPolicy(T policy);
 
     List<Realm> findByLogicActions(Implementation logicActions);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
index 6860f96..f8a0020 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
@@ -102,16 +102,15 @@ public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
     private <T extends Policy> List<Realm> findSamePolicyChildren(final Realm realm, final T policy) {
         List<Realm> result = new ArrayList<>();
 
-        for (Realm child : findChildren(realm)) {
-            if ((policy instanceof AccountPolicy
-                    && child.getAccountPolicy() == null || policy.equals(child.getAccountPolicy()))
-                    || (policy instanceof PasswordPolicy
-                    && child.getPasswordPolicy() == null || policy.equals(child.getPasswordPolicy()))) {
-
-                result.add(child);
-                result.addAll(findSamePolicyChildren(child, policy));
-            }
-        }
+        findChildren(realm).stream().
+                filter(child -> (policy instanceof AccountPolicy
+                && child.getAccountPolicy() == null || policy.equals(child.getAccountPolicy()))
+                || (policy instanceof PasswordPolicy
+                && child.getPasswordPolicy() == null || policy.equals(child.getPasswordPolicy()))).
+                forEach(child -> {
+                    result.add(child);
+                    result.addAll(findSamePolicyChildren(child, policy));
+                });
 
         return result;
     }
@@ -135,6 +134,15 @@ public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
     }
 
     @Override
+    public List<Realm> findMatching(final String keyword) {
+        TypedQuery<Realm> query = entityManager().createQuery("SELECT e FROM " + JPARealm.class.getSimpleName() + " e "
+                + "WHERE e.name LIKE :keyword", Realm.class);
+        query.setParameter("keyword", keyword);
+
+        return query.getResultList();
+    }
+
+    @Override
     public <T extends Policy> List<Realm> findByPolicy(final T policy) {
         if (ProvisioningPolicy.class.isAssignableFrom(policy.getClass())) {
             return Collections.<Realm>emptyList();
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
index 583bc13..236027c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
@@ -231,8 +231,8 @@ public class RealmDataBinderImpl implements RealmDataBinder {
 
             realm.getActions().forEach(action -> realmTO.getActions().add(action.getKey()));
 
-            realm.getTemplates().
-                    forEach(template -> realmTO.getTemplates().put(template.getAnyType().getKey(), template.get()));
+            realm.getTemplates().forEach(
+                    template -> realmTO.getTemplates().put(template.getAnyType().getKey(), template.get()));
 
             realm.getResources().forEach(resource -> realmTO.getResources().add(resource.getKey()));
         }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
index 9181c1b..f5f16e0 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/MultitenancyITCase.java
@@ -58,6 +58,7 @@ import org.apache.syncope.common.lib.types.PullMode;
 import org.apache.syncope.common.lib.types.SchemaType;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.syncope.common.rest.api.beans.ReconQuery;
 import org.apache.syncope.common.rest.api.beans.SchemaQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
@@ -113,14 +114,16 @@ public class MultitenancyITCase extends AbstractITCase {
 
     @Test
     public void readRealm() {
-        List<RealmTO> realms = adminClient.getService(RealmService.class).list();
+        List<RealmTO> realms = adminClient.getService(RealmService.class).
+                search(new RealmQuery.Builder().keyword("*").build());
         assertEquals(1, realms.size());
         assertEquals(SyncopeConstants.ROOT_REALM, realms.get(0).getName());
     }
 
     @Test
     public void createUser() {
-        assertNull(adminClient.getService(RealmService.class).list().get(0).getPasswordPolicy());
+        assertNull(adminClient.getService(RealmService.class).
+                search(new RealmQuery.Builder().keyword("*").build()).get(0).getPasswordPolicy());
 
         UserCR userCR = new UserCR();
         userCR.setRealm(SyncopeConstants.ROOT_REALM);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
index 134e0bb..bc86a1b 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/RealmITCase.java
@@ -43,6 +43,7 @@ import org.apache.syncope.common.lib.types.PolicyType;
 import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.IdRepoImplementationType;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.syncope.common.rest.api.service.RealmService;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.fit.AbstractITCase;
@@ -56,8 +57,14 @@ public class RealmITCase extends AbstractITCase {
     }
 
     @Test
+    public void search() {
+        List<RealmTO> match = realmService.search(new RealmQuery.Builder().keyword("*o*").build());
+        assertTrue(match.stream().allMatch(realm -> realm.getName().contains("o")));
+    }
+
+    @Test
     public void list() {
-        List<RealmTO> realms = realmService.list();
+        List<RealmTO> realms = realmService.list(SyncopeConstants.ROOT_REALM);
         assertNotNull(realms);
         assertFalse(realms.isEmpty());
         realms.forEach(Assertions::assertNotNull);
@@ -105,7 +112,7 @@ public class RealmITCase extends AbstractITCase {
         assertNotNull(actual);
         assertEquals("/odd/last", actual.getFullPath());
 
-        assertEquals(1, realmService.list().stream().
+        assertEquals(1, realmService.list(SyncopeConstants.ROOT_REALM).stream().
                 filter(object -> realm.getName().equals(object.getName())).count());
 
         // 4. create under invalid path
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
index f0a2e61..f93a363 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java
@@ -85,6 +85,7 @@ import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.batch.BatchResponseItem;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.syncope.common.rest.api.beans.TaskQuery;
 import org.apache.syncope.common.rest.api.service.ResourceService;
 import org.apache.syncope.common.rest.api.service.UserSelfService;
@@ -962,7 +963,7 @@ public class UserITCase extends AbstractITCase {
         passwordPolicy = createPolicy(PolicyType.PASSWORD, passwordPolicy);
         assertNotNull(passwordPolicy);
 
-        RealmTO realm = realmService.list("/even/two").get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
         String oldAccountPolicy = realm.getAccountPolicy();
         realm.setAccountPolicy(accountPolicy.getKey());
         String oldPasswordPolicy = realm.getPasswordPolicy();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index 07125d8..a24107c 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -75,6 +75,7 @@ import org.apache.syncope.common.lib.types.ExecStatus;
 import org.apache.syncope.common.lib.types.IdMImplementationType;
 import org.apache.syncope.common.lib.types.IdRepoImplementationType;
 import org.apache.syncope.common.rest.api.RESTHeaders;
+import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.provisioning.java.propagation.DBPasswordPropagationActions;
 import org.apache.syncope.core.provisioning.java.propagation.LDAPPasswordPropagationActions;
@@ -792,7 +793,7 @@ public class UserIssuesITCase extends AbstractITCase {
         }
         assertNotNull(logicActions);
 
-        RealmTO realm = realmService.list("/even/two").get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
         assertNotNull(realm);
         realm.getActions().add(logicActions.getKey());
         realmService.update(realm);
@@ -1222,7 +1223,7 @@ public class UserIssuesITCase extends AbstractITCase {
         passwordPolicy = createPolicy(PolicyType.PASSWORD, passwordPolicy);
         assertNotNull(passwordPolicy);
 
-        RealmTO realm = realmService.list("/even/two").get(0);
+        RealmTO realm = realmService.search(new RealmQuery.Builder().keyword("two").build()).get(0);
         String oldPasswordPolicy = realm.getPasswordPolicy();
         realm.setPasswordPolicy(passwordPolicy.getKey());
         realmService.update(realm);
@@ -1548,6 +1549,6 @@ public class UserIssuesITCase extends AbstractITCase {
         UserTO userTO = userService.read("1417acbe-cbf6-4277-9372-e75e04f97000");
         assertFalse(userTO.getResources().contains(RESOURCE_NAME_TESTDB), "Should not contain removed resources");
         assertFalse(userTO.getAuxClasses().contains("csv"), "Should not contain removed auxiliary classes");
-        assertFalse(userTO.getRoles().contains("Other"),"Should not contain removed roles");
+        assertFalse(userTO.getRoles().contains("Other"), "Should not contain removed roles");
     }
 }