keycloak-uncached

Fix testsuite with Mongo. Added ClientAdapter and ClientEntity

3/6/2014 4:28:41 PM

Changes

model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ScopedEntity.java 16(+0 -16)

Details

diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/api/MongoEntity.java b/model/mongo/src/main/java/org/keycloak/models/mongo/api/MongoEntity.java
index 8b91583..f80f2e3 100644
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/api/MongoEntity.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/api/MongoEntity.java
@@ -1,7 +1,5 @@
 package org.keycloak.models.mongo.api;
 
-import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
-
 /**
  * Base interface for object, which is persisted in Mongo
  *
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ApplicationAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ApplicationAdapter.java
index 1c73a19..d3c2075 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ApplicationAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ApplicationAdapter.java
@@ -7,11 +7,9 @@ import org.keycloak.models.ClientModel;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RoleModel;
 import org.keycloak.models.UserModel;
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.keycloak.entities.ApplicationEntity;
 import org.keycloak.models.mongo.keycloak.entities.RoleEntity;
-import org.keycloak.models.mongo.keycloak.entities.UserEntity;
 import org.keycloak.models.mongo.utils.MongoModelUtils;
 
 import java.util.ArrayList;
@@ -22,125 +20,81 @@ import java.util.Set;
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-public class ApplicationAdapter extends AbstractAdapter implements ApplicationModel {
-
-    private final ApplicationEntity application;
-    private final RealmModel realm;
+public class ApplicationAdapter extends ClientAdapter<ApplicationEntity> implements ApplicationModel {
 
     public ApplicationAdapter(RealmModel realm, ApplicationEntity applicationEntity, MongoStoreInvocationContext invContext) {
-        super(invContext);
-        this.application = applicationEntity;
-        this.realm = realm;
+        super(realm, applicationEntity, invContext);
     }
 
     @Override
     public void updateApplication() {
-        getMongoStore().updateEntity(application, invocationContext);
-    }
-
-    @Override
-    public String getId() {
-        return application.getId();
-    }
-
-    @Override
-    public String getClientId() {
-        return getName();
+        updateMongoEntity();
     }
 
     @Override
     public String getName() {
-        return application.getName();
+        return getMongoEntity().getName();
     }
 
     @Override
     public void setName(String name) {
-        application.setName(name);
-    }
-
-    @Override
-    public RealmModel getRealm() {
-        return realm;
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return application.isEnabled();
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        application.setEnabled(enabled);
+        getMongoEntity().setName(name);
+        updateMongoEntity();
     }
 
     @Override
     public boolean isSurrogateAuthRequired() {
-        return application.isSurrogateAuthRequired();
+        return getMongoEntity().isSurrogateAuthRequired();
     }
 
     @Override
     public void setSurrogateAuthRequired(boolean surrogateAuthRequired) {
-        application.setSurrogateAuthRequired(surrogateAuthRequired);
+        getMongoEntity().setSurrogateAuthRequired(surrogateAuthRequired);
+        updateMongoEntity();
     }
 
     @Override
     public String getManagementUrl() {
-        return application.getManagementUrl();
+        return getMongoEntity().getManagementUrl();
     }
 
     @Override
     public void setManagementUrl(String url) {
-        application.setManagementUrl(url);
+        getMongoEntity().setManagementUrl(url);
+        updateMongoEntity();
     }
 
     @Override
     public void setBaseUrl(String url) {
-        application.setBaseUrl(url);
+        getMongoEntity().setBaseUrl(url);
+        updateMongoEntity();
     }
 
     @Override
     public String getBaseUrl() {
-        return application.getBaseUrl();
-    }
-
-    @Override
-    public long getAllowedClaimsMask() {
-        return application.getAllowedClaimsMask();
-    }
-
-    @Override
-    public void setAllowedClaimsMask(long mask) {
-        application.setAllowedClaimsMask(mask);
-    }
-
-    @Override
-    public int getNotBefore() {
-        return application.getNotBefore();
-    }
-
-    @Override
-    public void setNotBefore(int notBefore) {
-        application.setNotBefore(notBefore);
+        return getMongoEntity().getBaseUrl();
     }
 
     @Override
     public boolean isBearerOnly() {
-        return application.isBearerOnly();
+        return getMongoEntity().isBearerOnly();
     }
 
     @Override
     public void setBearerOnly(boolean only) {
-        application.setBearerOnly(only);
+        getMongoEntity().setBearerOnly(only);
+        updateMongoEntity();
     }
 
     @Override
     public boolean isPublicClient() {
-        return application.isPublicClient();
+        return getMongoEntity().isPublicClient();
     }
 
     @Override
     public void setPublicClient(boolean flag) {
-        application.setPublicClient(flag);
+        getMongoEntity().setPublicClient(flag);
+        updateMongoEntity();
     }
 
     @Override
@@ -207,7 +161,7 @@ public class ApplicationAdapter extends AbstractAdapter implements ApplicationMo
 
     @Override
     public void addScope(RoleModel role) {
-        getMongoStore().pushItemToList(application, "scopeIds", role.getId(), true, invocationContext);
+        getMongoStore().pushItemToList(getMongoEntity(), "scopeIds", role.getId(), true, invocationContext);
     }
 
     @Override
@@ -225,7 +179,7 @@ public class ApplicationAdapter extends AbstractAdapter implements ApplicationMo
 
     @Override
     public List<String> getDefaultRoles() {
-        return application.getDefaultRoles();
+        return getMongoEntity().getDefaultRoles();
     }
 
     @Override
@@ -235,7 +189,7 @@ public class ApplicationAdapter extends AbstractAdapter implements ApplicationMo
             addRole(name);
         }
 
-        getMongoStore().pushItemToList(application, "defaultRoles", name, true, invocationContext);
+        getMongoStore().pushItemToList(getMongoEntity(), "defaultRoles", name, true, invocationContext);
     }
 
     @Override
@@ -250,97 +204,7 @@ public class ApplicationAdapter extends AbstractAdapter implements ApplicationMo
             roleNames.add(roleName);
         }
 
-        application.setDefaultRoles(roleNames);
-    }
-
-    @Override
-    public AbstractMongoIdentifiableEntity getMongoEntity() {
-        return application;
-    }
-
-    @Override
-    public Set<String> getWebOrigins() {
-        Set<String> result = new HashSet<String>();
-        if (application.getWebOrigins() != null) {
-            result.addAll(application.getWebOrigins());
-        }
-        return result;
-    }
-
-    @Override
-    public void setWebOrigins(Set<String> webOrigins) {
-        List<String> result = new ArrayList<String>();
-        result.addAll(webOrigins);
-        application.setWebOrigins(result);
-    }
-
-    @Override
-    public void addWebOrigin(String webOrigin) {
-        getMongoStore().pushItemToList(application, "webOrigins", webOrigin, true, invocationContext);
-    }
-
-    @Override
-    public void removeWebOrigin(String webOrigin) {
-        getMongoStore().pullItemFromList(application, "webOrigins", webOrigin, invocationContext);
-    }
-
-    @Override
-    public Set<String> getRedirectUris() {
-        Set<String> result = new HashSet<String>();
-        if (application.getRedirectUris() != null) {
-            result.addAll(application.getRedirectUris());
-        }
-        return result;
-    }
-
-    @Override
-    public void setRedirectUris(Set<String> redirectUris) {
-        List<String> result = new ArrayList<String>();
-        result.addAll(redirectUris);
-        application.setRedirectUris(result);
-    }
-
-    @Override
-    public void addRedirectUri(String redirectUri) {
-        getMongoStore().pushItemToList(application, "redirectUris", redirectUri, true, invocationContext);
-    }
-
-    @Override
-    public void removeRedirectUri(String redirectUri) {
-        getMongoStore().pullItemFromList(application, "redirectUris", redirectUri, invocationContext);
-    }
-
-    @Override
-    public String getSecret() {
-        return application.getSecret();
-    }
-
-    @Override
-    public void setSecret(String secret) {
-        application.setSecret(secret);
-    }
-
-
-    @Override
-    public boolean validateSecret(String secret) {
-        return secret.equals(application.getSecret());
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof ApplicationAdapter)) return false;
-        if (!super.equals(o)) return false;
-
-        ApplicationAdapter that = (ApplicationAdapter) o;
-
-        if (!application.getId().equals(that.application.getId())) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return application.getId().hashCode();
+        getMongoEntity().setDefaultRoles(roleNames);
+        updateMongoEntity();
     }
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ClientAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ClientAdapter.java
new file mode 100644
index 0000000..8c6fb48
--- /dev/null
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/ClientAdapter.java
@@ -0,0 +1,160 @@
+package org.keycloak.models.mongo.keycloak.adapters;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.keycloak.models.ClientModel;
+import org.keycloak.models.RealmModel;
+import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
+import org.keycloak.models.mongo.keycloak.entities.ClientEntity;
+
+/**
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class ClientAdapter<T extends ClientEntity> extends AbstractMongoAdapter<T> implements ClientModel {
+
+    private final T clientEntity;
+    private final RealmModel realm;
+
+    public ClientAdapter(RealmModel realm, T clientEntity, MongoStoreInvocationContext invContext) {
+        super(invContext);
+        this.clientEntity = clientEntity;
+        this.realm = realm;
+    }
+
+    @Override
+    public T getMongoEntity() {
+        return clientEntity;
+    }
+
+    @Override
+    public String getId() {
+        return getMongoEntity().getId();
+    }
+
+    @Override
+    public String getClientId() {
+        return getMongoEntity().getName();
+    }
+
+    @Override
+    public long getAllowedClaimsMask() {
+        return getMongoEntity().getAllowedClaimsMask();
+    }
+
+    @Override
+    public void setAllowedClaimsMask(long mask) {
+        getMongoEntity().setAllowedClaimsMask(mask);
+        updateMongoEntity();
+    }
+
+    @Override
+    public Set<String> getWebOrigins() {
+        Set<String> result = new HashSet<String>();
+        if (getMongoEntity().getWebOrigins() != null) {
+            result.addAll(clientEntity.getWebOrigins());
+        }
+        return result;
+    }
+
+    @Override
+    public void setWebOrigins(Set<String> webOrigins) {
+        List<String> result = new ArrayList<String>();
+        result.addAll(webOrigins);
+        clientEntity.setWebOrigins(result);
+        updateMongoEntity();
+    }
+
+    @Override
+    public void addWebOrigin(String webOrigin) {
+        getMongoStore().pushItemToList(clientEntity, "webOrigins", webOrigin, true, invocationContext);
+    }
+
+    @Override
+    public void removeWebOrigin(String webOrigin) {
+        getMongoStore().pullItemFromList(clientEntity, "webOrigins", webOrigin, invocationContext);
+    }
+
+    @Override
+    public Set<String> getRedirectUris() {
+        Set<String> result = new HashSet<String>();
+        if (clientEntity.getRedirectUris() != null) {
+            result.addAll(clientEntity.getRedirectUris());
+        }
+        return result;
+    }
+
+    @Override
+    public void setRedirectUris(Set<String> redirectUris) {
+        List<String> result = new ArrayList<String>();
+        result.addAll(redirectUris);
+        clientEntity.setRedirectUris(result);
+        updateMongoEntity();
+    }
+
+    @Override
+    public void addRedirectUri(String redirectUri) {
+        getMongoStore().pushItemToList(clientEntity, "redirectUris", redirectUri, true, invocationContext);
+    }
+
+    @Override
+    public void removeRedirectUri(String redirectUri) {
+        getMongoStore().pullItemFromList(clientEntity, "redirectUris", redirectUri, invocationContext);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return clientEntity.isEnabled();
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        clientEntity.setEnabled(enabled);
+        updateMongoEntity();
+    }
+
+    @Override
+    public boolean validateSecret(String secret) {
+        return secret.equals(clientEntity.getSecret());
+    }
+
+    @Override
+    public String getSecret() {
+        return clientEntity.getSecret();
+    }
+
+    @Override
+    public void setSecret(String secret) {
+        clientEntity.setSecret(secret);
+        updateMongoEntity();
+    }
+
+    @Override
+    public boolean isPublicClient() {
+        return clientEntity.isPublicClient();
+    }
+
+    @Override
+    public void setPublicClient(boolean flag) {
+        clientEntity.setPublicClient(flag);
+        updateMongoEntity();
+    }
+
+    @Override
+    public RealmModel getRealm() {
+        return realm;
+    }
+
+    @Override
+    public int getNotBefore() {
+        return clientEntity.getNotBefore();
+    }
+
+    @Override
+    public void setNotBefore(int notBefore) {
+        clientEntity.setNotBefore(notBefore);
+        updateMongoEntity();
+    }
+}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSession.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSession.java
index c90fe01..f02221d 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSession.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/MongoKeycloakSession.java
@@ -6,7 +6,6 @@ import com.mongodb.QueryBuilder;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.KeycloakTransaction;
 import org.keycloak.models.RealmModel;
-import org.keycloak.models.UserModel;
 import org.keycloak.models.mongo.api.MongoStore;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.impl.context.TransactionMongoStoreInvocationContext;
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/OAuthClientAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/OAuthClientAdapter.java
index d7e1142..b9b5e04 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/OAuthClientAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/OAuthClientAdapter.java
@@ -2,163 +2,21 @@ package org.keycloak.models.mongo.keycloak.adapters;
 
 import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.RealmModel;
-import org.keycloak.models.UserModel;
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.keycloak.entities.OAuthClientEntity;
-import org.keycloak.models.mongo.keycloak.entities.UserEntity;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-public class OAuthClientAdapter extends AbstractAdapter implements OAuthClientModel {
-
-    private final OAuthClientEntity delegate;
-    private final RealmModel realm;
+public class OAuthClientAdapter extends ClientAdapter<OAuthClientEntity> implements OAuthClientModel {
 
     public OAuthClientAdapter(RealmModel realm, OAuthClientEntity oauthClientEntity, MongoStoreInvocationContext invContext) {
-        super(invContext);
-        this.delegate = oauthClientEntity;
-        this.realm = realm;
-    }
-
-    @Override
-    public String getId() {
-        return delegate.getId();
-    }
-
-    @Override
-    public String getClientId() {
-        return delegate.getName();
+        super(realm, oauthClientEntity, invContext);
     }
 
     @Override
     public void setClientId(String id) {
-        delegate.setName(id);
-    }
-
-    @Override
-    public RealmModel getRealm() {
-        return realm;
-    }
-
-    @Override
-    public long getAllowedClaimsMask() {
-        return delegate.getAllowedClaimsMask();
-    }
-
-    @Override
-    public void setAllowedClaimsMask(long mask) {
-        delegate.setAllowedClaimsMask(mask);
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return delegate.isEnabled();
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        delegate.setEnabled(enabled);
-    }
-
-    @Override
-    public AbstractMongoIdentifiableEntity getMongoEntity() {
-        return delegate;
-    }
-
-    @Override
-    public int getNotBefore() {
-        return delegate.getNotBefore();
-    }
-
-    @Override
-    public void setNotBefore(int notBefore) {
-        delegate.setNotBefore(notBefore);
-    }
-
-    @Override
-    public boolean isPublicClient() {
-        return delegate.isPublicClient();
-    }
-
-    @Override
-    public void setPublicClient(boolean flag) {
-        delegate.setPublicClient(flag);
-    }
-
-    @Override
-    public Set<String> getWebOrigins() {
-        Set<String> result = new HashSet<String>();
-        if (delegate.getWebOrigins() != null) {
-            result.addAll(delegate.getWebOrigins());
-        }
-        return result;
-    }
-
-    @Override
-    public void setWebOrigins(Set<String> webOrigins) {
-        List<String> result = new ArrayList<String>();
-        result.addAll(webOrigins);
-        delegate.setWebOrigins(result);
-    }
-
-    @Override
-    public void addWebOrigin(String webOrigin) {
-        getMongoStore().pushItemToList(delegate, "webOrigins", webOrigin, true, invocationContext);
-    }
-
-    @Override
-    public void removeWebOrigin(String webOrigin) {
-        getMongoStore().pullItemFromList(delegate, "webOrigins", webOrigin, invocationContext);
-    }
-
-    @Override
-    public Set<String> getRedirectUris() {
-        Set<String> result = new HashSet<String>();
-        if (delegate.getRedirectUris() != null) {
-            result.addAll(delegate.getRedirectUris());
-        }
-        return result;
-    }
-
-    @Override
-    public void setRedirectUris(Set<String> redirectUris) {
-        List<String> result = new ArrayList<String>();
-        result.addAll(redirectUris);
-        delegate.setRedirectUris(result);
+        getMongoEntity().setName(id);
+        updateMongoEntity();
     }
-
-    @Override
-    public void addRedirectUri(String redirectUri) {
-        getMongoStore().pushItemToList(delegate, "redirectUris", redirectUri, true, invocationContext);
-    }
-
-    @Override
-    public void removeRedirectUri(String redirectUri) {
-        getMongoStore().pullItemFromList(delegate, "redirectUris", redirectUri, invocationContext);
-    }
-
-    @Override
-    public String getSecret() {
-        return delegate.getSecret();
-    }
-
-    @Override
-    public void setSecret(String secret) {
-        delegate.setSecret(secret);
-    }
-
-
-    @Override
-    public boolean validateSecret(String secret) {
-        return secret.equals(delegate.getSecret());
-    }
-
-
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
index 22acd3f..7672c3e 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RealmAdapter.java
@@ -13,7 +13,6 @@ import org.keycloak.models.RoleModel;
 import org.keycloak.models.SocialLinkModel;
 import org.keycloak.models.UserCredentialModel;
 import org.keycloak.models.UserModel;
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.keycloak.entities.ApplicationEntity;
 import org.keycloak.models.mongo.keycloak.entities.CredentialEntity;
@@ -43,7 +42,7 @@ import java.util.regex.Pattern;
 /**
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-public class RealmAdapter extends AbstractAdapter implements RealmModel {
+public class RealmAdapter extends AbstractMongoAdapter<RealmEntity> implements RealmModel {
 
     private static final Logger logger = Logger.getLogger(RealmAdapter.class);
 
@@ -187,6 +186,7 @@ public class RealmAdapter extends AbstractAdapter implements RealmModel {
     @Override
     public void setNotBefore(int notBefore) {
         realm.setNotBefore(notBefore);
+        updateRealm();
     }
 
 
@@ -677,12 +677,12 @@ public class RealmAdapter extends AbstractAdapter implements RealmModel {
 
     @Override
     public void addScopeMapping(ClientModel client, RoleModel role) {
-        getMongoStore().pushItemToList(((AbstractAdapter)client).getMongoEntity(), "scopeIds", role.getId(), true, invocationContext);
+        getMongoStore().pushItemToList(((AbstractMongoAdapter)client).getMongoEntity(), "scopeIds", role.getId(), true, invocationContext);
     }
 
     @Override
     public void deleteScopeMapping(ClientModel client, RoleModel role) {
-        getMongoStore().pullItemFromList(((AbstractAdapter)client).getMongoEntity(), "scopeIds", role.getId(), invocationContext);
+        getMongoStore().pullItemFromList(((AbstractMongoAdapter)client).getMongoEntity(), "scopeIds", role.getId(), invocationContext);
     }
 
     @Override
@@ -776,6 +776,7 @@ public class RealmAdapter extends AbstractAdapter implements RealmModel {
                 addRequiredCredential(credentialModel, credsEntities);
             }
         }
+        updateRealm();
     }
 
     @Override
@@ -897,7 +898,7 @@ public class RealmAdapter extends AbstractAdapter implements RealmModel {
     }
 
     protected void updateRealm() {
-        getMongoStore().updateEntity(realm, invocationContext);
+        super.updateMongoEntity();
     }
 
     protected RequiredCredentialModel initRequiredCredentialModel(String type) {
@@ -1010,7 +1011,7 @@ public class RealmAdapter extends AbstractAdapter implements RealmModel {
     }
 
     @Override
-    public AbstractMongoIdentifiableEntity getMongoEntity() {
+    public RealmEntity getMongoEntity() {
         return realm;
     }
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RoleAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RoleAdapter.java
index 1165da3..57ecc66 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RoleAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/RoleAdapter.java
@@ -15,7 +15,6 @@ import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.keycloak.entities.ApplicationEntity;
 import org.keycloak.models.mongo.keycloak.entities.RealmEntity;
 import org.keycloak.models.mongo.keycloak.entities.RoleEntity;
-import org.keycloak.models.mongo.utils.MongoModelUtils;
 import org.keycloak.models.utils.KeycloakModelUtils;
 
 /**
@@ -23,7 +22,7 @@ import org.keycloak.models.utils.KeycloakModelUtils;
  *
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-public class RoleAdapter extends AbstractAdapter implements RoleModel {
+public class RoleAdapter extends AbstractMongoAdapter<RoleEntity> implements RoleModel {
 
     private final RoleEntity role;
     private RoleContainerModel roleContainer;
@@ -73,7 +72,7 @@ public class RoleAdapter extends AbstractAdapter implements RoleModel {
     }
 
     protected void updateRole() {
-        getMongoStore().updateEntity(role, invocationContext);
+        super.updateMongoEntity();
     }
 
     @Override
@@ -141,25 +140,7 @@ public class RoleAdapter extends AbstractAdapter implements RoleModel {
     }
 
     @Override
-    public AbstractMongoIdentifiableEntity getMongoEntity() {
+    public RoleEntity getMongoEntity() {
         return role;
     }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        RoleAdapter that = (RoleAdapter) o;
-
-        if (!role.getId().equals(that.role.getId())) return false;
-
-        return true;
-    }
-
-    @Override
-    public int hashCode() {
-        return role.getId().hashCode();
-    }
-
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/UserAdapter.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/UserAdapter.java
index d3d4d6a..abcdffc 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/UserAdapter.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/adapters/UserAdapter.java
@@ -1,15 +1,12 @@
 package org.keycloak.models.mongo.keycloak.adapters;
 
 import org.keycloak.models.UserModel;
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 import org.keycloak.models.mongo.keycloak.entities.UserEntity;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -18,7 +15,7 @@ import java.util.Set;
  *
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
-public class UserAdapter extends AbstractAdapter implements UserModel {
+public class UserAdapter extends AbstractMongoAdapter<UserEntity> implements UserModel {
 
     private final UserEntity user;
 
@@ -156,11 +153,11 @@ public class UserAdapter extends AbstractAdapter implements UserModel {
     }
 
     protected void updateUser() {
-        getMongoStore().updateEntity(user, invocationContext);
+        super.updateMongoEntity();
     }
 
     @Override
-    public AbstractMongoIdentifiableEntity getMongoEntity() {
+    public UserEntity getMongoEntity() {
         return user;
     }
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ApplicationEntity.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ApplicationEntity.java
index ee9f170..be086d9 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ApplicationEntity.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ApplicationEntity.java
@@ -5,9 +5,7 @@ import java.util.List;
 
 import com.mongodb.DBObject;
 import com.mongodb.QueryBuilder;
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.MongoCollection;
-import org.keycloak.models.mongo.api.MongoEntity;
 import org.keycloak.models.mongo.api.MongoField;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 
@@ -15,47 +13,17 @@ import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
 @MongoCollection(collectionName = "applications")
-public class ApplicationEntity extends AbstractMongoIdentifiableEntity implements MongoEntity, ScopedEntity {
+public class ApplicationEntity extends ClientEntity {
 
-    private String name;
-    private boolean enabled;
     private boolean surrogateAuthRequired;
     private String managementUrl;
     private String baseUrl;
-    private String secret;
-    private int notBefore;
     private boolean bearerOnly;
-    private boolean publicClient;
-
-    private String realmId;
-    private long allowedClaimsMask;
-    private List<String> scopeIds;
-    private List<String> webOrigins;
-    private List<String> redirectUris;
-
 
     // We are using names of defaultRoles (not ids)
     private List<String> defaultRoles = new ArrayList<String>();
 
     @MongoField
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @MongoField
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.enabled = enabled;
-    }
-
-    @MongoField
     public boolean isSurrogateAuthRequired() {
         return surrogateAuthRequired;
     }
@@ -82,64 +50,6 @@ public class ApplicationEntity extends AbstractMongoIdentifiableEntity implement
         this.baseUrl = baseUrl;
     }
 
-    @Override
-    @MongoField
-    public List<String> getScopeIds() {
-        return scopeIds;
-    }
-
-    @Override
-    public void setScopeIds(List<String> scopeIds) {
-        this.scopeIds = scopeIds;
-    }
-
-    @MongoField
-    public List<String> getWebOrigins() {
-        return webOrigins;
-    }
-
-    public void setWebOrigins(List<String> webOrigins) {
-        this.webOrigins = webOrigins;
-    }
-
-    @MongoField
-    public List<String> getRedirectUris() {
-        return redirectUris;
-    }
-
-    public void setRedirectUris(List<String> redirectUris) {
-        this.redirectUris = redirectUris;
-    }
-
-
-
-    @MongoField
-    public long getAllowedClaimsMask() {
-        return allowedClaimsMask;
-    }
-
-    public void setAllowedClaimsMask(long allowedClaimsMask) {
-        this.allowedClaimsMask = allowedClaimsMask;
-    }
-
-    @MongoField
-    public String getRealmId() {
-        return realmId;
-    }
-
-    public void setRealmId(String realmId) {
-        this.realmId = realmId;
-    }
-
-    @MongoField
-    public String getSecret() {
-        return secret;
-    }
-
-    public void setSecret(String secret) {
-        this.secret = secret;
-    }
-
     @MongoField
     public List<String> getDefaultRoles() {
         return defaultRoles;
@@ -150,15 +60,6 @@ public class ApplicationEntity extends AbstractMongoIdentifiableEntity implement
     }
 
     @MongoField
-    public int getNotBefore() {
-        return notBefore;
-    }
-
-    public void setNotBefore(int notBefore) {
-        this.notBefore = notBefore;
-    }
-
-    @MongoField
     public boolean isBearerOnly() {
         return bearerOnly;
     }
@@ -167,15 +68,6 @@ public class ApplicationEntity extends AbstractMongoIdentifiableEntity implement
         this.bearerOnly = bearerOnly;
     }
 
-    @MongoField
-    public boolean isPublicClient() {
-        return publicClient;
-    }
-
-    public void setPublicClient(boolean publicClient) {
-        this.publicClient = publicClient;
-    }
-
     @Override
     public void afterRemove(MongoStoreInvocationContext context) {
         // Remove all roles, which belongs to this application
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ClientEntity.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ClientEntity.java
new file mode 100644
index 0000000..9b4e019
--- /dev/null
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/ClientEntity.java
@@ -0,0 +1,117 @@
+package org.keycloak.models.mongo.keycloak.entities;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
+import org.keycloak.models.mongo.api.MongoEntity;
+import org.keycloak.models.mongo.api.MongoField;
+
+/**
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class ClientEntity extends AbstractMongoIdentifiableEntity implements MongoEntity {
+
+    private String name;
+    private boolean enabled;
+    private String secret;
+    private long allowedClaimsMask;
+    private int notBefore;
+    private boolean publicClient;
+
+    private String realmId;
+
+    private List<String> webOrigins = new ArrayList<String>();
+    private List<String> redirectUris = new ArrayList<String>();
+    private List<String> scopeIds = new ArrayList<String>();
+
+    @MongoField
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @MongoField
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    @MongoField
+    public String getSecret() {
+        return secret;
+    }
+
+    public void setSecret(String secret) {
+        this.secret = secret;
+    }
+
+    @MongoField
+    public long getAllowedClaimsMask() {
+        return allowedClaimsMask;
+    }
+
+    public void setAllowedClaimsMask(long allowedClaimsMask) {
+        this.allowedClaimsMask = allowedClaimsMask;
+    }
+
+    @MongoField
+    public int getNotBefore() {
+        return notBefore;
+    }
+
+    public void setNotBefore(int notBefore) {
+        this.notBefore = notBefore;
+    }
+
+    @MongoField
+    public boolean isPublicClient() {
+        return publicClient;
+    }
+
+    public void setPublicClient(boolean publicClient) {
+        this.publicClient = publicClient;
+    }
+
+    @MongoField
+    public String getRealmId() {
+        return realmId;
+    }
+
+    public void setRealmId(String realmId) {
+        this.realmId = realmId;
+    }
+
+    @MongoField
+    public List<String> getWebOrigins() {
+        return webOrigins;
+    }
+
+    public void setWebOrigins(List<String> webOrigins) {
+        this.webOrigins = webOrigins;
+    }
+
+    @MongoField
+    public List<String> getRedirectUris() {
+        return redirectUris;
+    }
+
+    public void setRedirectUris(List<String> redirectUris) {
+        this.redirectUris = redirectUris;
+    }
+
+    @MongoField
+    public List<String> getScopeIds() {
+        return scopeIds;
+    }
+
+    public void setScopeIds(List<String> scopeIds) {
+        this.scopeIds = scopeIds;
+    }
+}
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/OAuthClientEntity.java b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/OAuthClientEntity.java
index 7188cd2..7c6ea58 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/OAuthClientEntity.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/keycloak/entities/OAuthClientEntity.java
@@ -1,10 +1,6 @@
 package org.keycloak.models.mongo.keycloak.entities;
 
-import org.keycloak.models.mongo.api.AbstractMongoIdentifiableEntity;
 import org.keycloak.models.mongo.api.MongoCollection;
-import org.keycloak.models.mongo.api.MongoEntity;
-import org.keycloak.models.mongo.api.MongoField;
-import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
 
 import java.util.List;
 
@@ -12,112 +8,6 @@ import java.util.List;
  * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
  */
 @MongoCollection(collectionName = "oauthClients")
-public class OAuthClientEntity extends AbstractMongoIdentifiableEntity implements MongoEntity, ScopedEntity {
+public class OAuthClientEntity extends ClientEntity {
 
-    private String name;
-    private boolean enabled;
-    private String realmId;
-    private String secret;
-    private long allowedClaimsMask;
-    private int notBefore;
-    private boolean publicClient;
-    private List<String> scopeIds;
-    private List<String> webOrigins;
-    private List<String> redirectUris;
-
-    @MongoField
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    @MongoField
-    public boolean isEnabled() {
-        return enabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-        this.enabled = enabled;
-    }
-
-    @MongoField
-    public String getRealmId() {
-        return realmId;
-    }
-
-    public void setRealmId(String realmId) {
-        this.realmId = realmId;
-    }
-
-    @MongoField
-    public String getSecret() {
-        return secret;
-    }
-
-    public void setSecret(String secret) {
-        this.secret = secret;
-    }
-
-
-    @MongoField
-    public long getAllowedClaimsMask() {
-        return allowedClaimsMask;
-    }
-
-    public void setAllowedClaimsMask(long allowedClaimsMask) {
-        this.allowedClaimsMask = allowedClaimsMask;
-    }
-
-    @MongoField
-    public List<String> getWebOrigins() {
-        return webOrigins;
-    }
-
-    public void setWebOrigins(List<String> webOrigins) {
-        this.webOrigins = webOrigins;
-    }
-
-    @MongoField
-    public List<String> getRedirectUris() {
-        return redirectUris;
-    }
-
-    public void setRedirectUris(List<String> redirectUris) {
-        this.redirectUris = redirectUris;
-    }
-
-    @MongoField
-    public List<String> getScopeIds() {
-        return scopeIds;
-    }
-
-    public void setScopeIds(List<String> scopeIds) {
-        this.scopeIds = scopeIds;
-    }
-
-    @MongoField
-    public int getNotBefore() {
-        return notBefore;
-    }
-
-    public void setNotBefore(int notBefore) {
-        this.notBefore = notBefore;
-    }
-
-    @MongoField
-    public boolean isPublicClient() {
-        return publicClient;
-    }
-
-    public void setPublicClient(boolean publicClient) {
-        this.publicClient = publicClient;
-    }
-
-
-    @Override
-    public void afterRemove(MongoStoreInvocationContext context) {
-    }
 }
diff --git a/model/mongo/src/main/java/org/keycloak/models/mongo/utils/MongoModelUtils.java b/model/mongo/src/main/java/org/keycloak/models/mongo/utils/MongoModelUtils.java
index 8b1a26e..d485615 100755
--- a/model/mongo/src/main/java/org/keycloak/models/mongo/utils/MongoModelUtils.java
+++ b/model/mongo/src/main/java/org/keycloak/models/mongo/utils/MongoModelUtils.java
@@ -1,20 +1,17 @@
 package org.keycloak.models.mongo.utils;
 
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
 import com.mongodb.DBObject;
 import com.mongodb.QueryBuilder;
-import org.bson.types.ObjectId;
 import org.keycloak.models.ClientModel;
 import org.keycloak.models.UserModel;
 import org.keycloak.models.mongo.api.context.MongoStoreInvocationContext;
-import org.keycloak.models.mongo.keycloak.adapters.AbstractAdapter;
+import org.keycloak.models.mongo.keycloak.adapters.ClientAdapter;
 import org.keycloak.models.mongo.keycloak.adapters.UserAdapter;
+import org.keycloak.models.mongo.keycloak.entities.ClientEntity;
 import org.keycloak.models.mongo.keycloak.entities.RoleEntity;
-import org.keycloak.models.mongo.keycloak.entities.ScopedEntity;
 import org.keycloak.models.mongo.keycloak.entities.UserEntity;
 
 /**
@@ -39,7 +36,7 @@ public class MongoModelUtils {
 
     // Get everything including both application and realm scopes
     public static List<RoleEntity> getAllScopesOfClient(ClientModel client, MongoStoreInvocationContext invContext) {
-        ScopedEntity scopedEntity = (ScopedEntity)((AbstractAdapter)client).getMongoEntity();
+        ClientEntity scopedEntity = ((ClientAdapter)client).getMongoEntity();
         List<String> scopeIds = scopedEntity.getScopeIds();
 
         if (scopeIds == null || scopeIds.isEmpty()) {
diff --git a/model/mongo/src/test/java/org/keycloak/models/mongo/test/Address.java b/model/mongo/src/test/java/org/keycloak/models/mongo/test/Address.java
index 30aaa27..215a9fc 100755
--- a/model/mongo/src/test/java/org/keycloak/models/mongo/test/Address.java
+++ b/model/mongo/src/test/java/org/keycloak/models/mongo/test/Address.java
@@ -12,7 +12,6 @@ public class Address implements MongoEntity {
 
     private String street;
     private int number;
-    private List<String> flatNumbers;
 
     @MongoField
     public String getStreet() {
@@ -31,13 +30,4 @@ public class Address implements MongoEntity {
     public void setNumber(int number) {
         this.number = number;
     }
-
-    @MongoField
-    public List<String> getFlatNumbers() {
-        return flatNumbers;
-    }
-
-    public void setFlatNumbers(List<String> flatNumbers) {
-        this.flatNumbers = flatNumbers;
-    }
 }
diff --git a/model/mongo/src/test/java/org/keycloak/models/mongo/test/AddressWithFlats.java b/model/mongo/src/test/java/org/keycloak/models/mongo/test/AddressWithFlats.java
new file mode 100644
index 0000000..0495f43
--- /dev/null
+++ b/model/mongo/src/test/java/org/keycloak/models/mongo/test/AddressWithFlats.java
@@ -0,0 +1,24 @@
+package org.keycloak.models.mongo.test;
+
+import java.util.List;
+
+import org.keycloak.models.mongo.api.MongoField;
+
+/**
+ * Just to test inheritance
+ *
+ * @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
+ */
+public class AddressWithFlats extends Address {
+
+    private List<String> flatNumbers;
+
+    @MongoField
+    public List<String> getFlatNumbers() {
+        return flatNumbers;
+    }
+
+    public void setFlatNumbers(List<String> flatNumbers) {
+        this.flatNumbers = flatNumbers;
+    }
+}
diff --git a/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java b/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
index 219293b..8128dde 100755
--- a/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
+++ b/model/mongo/src/test/java/org/keycloak/models/mongo/test/MongoStoreTest.java
@@ -28,6 +28,7 @@ public class MongoStoreTest {
     private static final Class<? extends MongoEntity>[] MANAGED_DATA_TYPES = (Class<? extends MongoEntity>[])new Class<?>[] {
             Person.class,
             Address.class,
+            AddressWithFlats.class
     };
 
     private MongoClient mongoClient;
@@ -69,12 +70,12 @@ public class MongoStoreTest {
         mary.setFirstName("mary");
         mary.setKids(asList("Peter", "Paul", "Wendy"));
 
-        Address addr1 = new Address();
+        AddressWithFlats addr1 = new AddressWithFlats();
         addr1.setStreet("Elm");
         addr1.setNumber(5);
         addr1.setFlatNumbers(asList("flat1", "flat2"));
-        Address addr2 = new Address();
-        List<Address> addresses = new ArrayList<Address>();
+        AddressWithFlats addr2 = new AddressWithFlats();
+        List<AddressWithFlats> addresses = new ArrayList<AddressWithFlats>();
         addresses.add(addr1);
         addresses.add(addr2);
 
@@ -87,6 +88,11 @@ public class MongoStoreTest {
 
         Assert.assertEquals(2, mongoStore.loadEntities(Person.class, new QueryBuilder().get(), context).size());
 
+        // Commit this context
+        context.commit();
+
+        Assert.assertEquals(2, mongoStore.loadEntities(Person.class, new QueryBuilder().get(), context).size());
+
         DBObject query = new QueryBuilder().and("addresses.flatNumbers").is("flat1").get();
         List<Person> persons = mongoStore.loadEntities(Person.class, query, context);
         Assert.assertEquals(1, persons.size());
@@ -94,7 +100,7 @@ public class MongoStoreTest {
         Assert.assertEquals(mary.getFirstName(), "mary");
         Assert.assertTrue(mary.getKids().contains("Paul"));
         Assert.assertEquals(2, mary.getAddresses().size());
-        Assert.assertEquals(Address.class, mary.getAddresses().get(0).getClass());
+        Assert.assertEquals(AddressWithFlats.class, mary.getAddresses().get(0).getClass());
 
         // Test push/pull
         mongoStore.pushItemToList(mary, "kids", "Pauline", true, context);
diff --git a/model/mongo/src/test/java/org/keycloak/models/mongo/test/Person.java b/model/mongo/src/test/java/org/keycloak/models/mongo/test/Person.java
index 8881126..e3f8042 100755
--- a/model/mongo/src/test/java/org/keycloak/models/mongo/test/Person.java
+++ b/model/mongo/src/test/java/org/keycloak/models/mongo/test/Person.java
@@ -17,7 +17,7 @@ public class Person extends AbstractMongoIdentifiableEntity {
     private String firstName;
     private int age;
     private List<String> kids;
-    private List<Address> addresses;
+    private List<AddressWithFlats> addresses;
     private Address mainAddress;
     private Gender gender;
     private List<Gender> genders;
@@ -69,11 +69,11 @@ public class Person extends AbstractMongoIdentifiableEntity {
     }
 
     @MongoField
-    public List<Address> getAddresses() {
+    public List<AddressWithFlats> getAddresses() {
         return addresses;
     }
 
-    public void setAddresses(List<Address> addresses) {
+    public void setAddresses(List<AddressWithFlats> addresses) {
         this.addresses = addresses;
     }
 
diff --git a/model/tests/src/test/java/org/keycloak/model/test/ImportTest.java b/model/tests/src/test/java/org/keycloak/model/test/ImportTest.java
index d978bdd..16a7369 100755
--- a/model/tests/src/test/java/org/keycloak/model/test/ImportTest.java
+++ b/model/tests/src/test/java/org/keycloak/model/test/ImportTest.java
@@ -8,6 +8,7 @@ import org.keycloak.models.AccountRoles;
 import org.keycloak.models.ApplicationModel;
 import org.keycloak.models.ClientModel;
 import org.keycloak.models.Constants;
+import org.keycloak.models.OAuthClientModel;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.RequiredCredentialModel;
 import org.keycloak.models.RoleModel;
@@ -29,11 +30,14 @@ public class ImportTest extends AbstractModelTest {
 
     @Test
     public void install() throws Exception {
-        RealmManager manager = realmManager;
         RealmRepresentation rep = AbstractModelTest.loadJson("testrealm.json");
-        RealmModel realm = manager.createRealm("demo", rep.getRealm());
-        manager.importRealm(rep, realm);
+        RealmModel realm = realmManager.createRealm("demo", rep.getRealm());
+        realmManager.importRealm(rep, realm);
+
+        // Commit after import
+        commit();
 
+        realm = realmManager.getRealm("demo");
         Assert.assertTrue(realm.isVerifyEmail());
 
         Assert.assertFalse(realm.isUpdateProfileOnInitialSocialLogin());
@@ -100,10 +104,13 @@ public class ImportTest extends AbstractModelTest {
         Assert.assertEquals(1, appRoles.size());
         Assert.assertEquals("app-admin", appRoles.iterator().next().getName());
 
-
-        // Test scope relationship
+        // Test client
         ClientModel oauthClient = realm.findClient("oauthclient");
+        Assert.assertEquals("clientpassword", oauthClient.getSecret());
+        Assert.assertEquals(true, oauthClient.isEnabled());
         Assert.assertNotNull(oauthClient);
+
+        // Test scope relationship
         Set<RoleModel> allScopes = realm.getScopeMappings(oauthClient);
         Assert.assertEquals(2, allScopes.size());
         Assert.assertTrue(allScopes.contains(realm.getRole("admin")));
diff --git a/model/tests/src/test/java/org/keycloak/model/test/MultipleRealmsTest.java b/model/tests/src/test/java/org/keycloak/model/test/MultipleRealmsTest.java
index 8b33c3f..109ac0a 100755
--- a/model/tests/src/test/java/org/keycloak/model/test/MultipleRealmsTest.java
+++ b/model/tests/src/test/java/org/keycloak/model/test/MultipleRealmsTest.java
@@ -1,7 +1,5 @@
 package org.keycloak.model.test;
 
-import java.util.List;
-
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -76,6 +74,7 @@ public class MultipleRealmsTest extends AbstractModelTest {
 
         RoleModel r1App1Role = r1app1.getRole("app1Role1");
         Assert.assertEquals(r1App1Role, realm1.getRoleById(r1App1Role.getId()));
+        Assert.assertNull(realm2.getRoleById(r1App1Role.getId()));
 
         RoleModel r2Role1 = realm2.getRole("role2");
         Assert.assertNull(realm1.getRoleById(r2Role1.getId()));