keycloak-uncached

Merge pull request #492 from patriot1burke/master model

6/30/2014 2:13:16 PM

Details

diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
index 11ee6f0..0ebe017 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ApplicationAdapter.java
@@ -130,15 +130,14 @@ public class ApplicationAdapter extends ClientAdapter implements ApplicationMode
 
     @Override
     public boolean removeRole(RoleModel roleModel) {
-        RoleAdapter roleAdapter = (RoleAdapter)roleModel;
         if (roleModel == null) {
             return false;
         }
-        if (!roleAdapter.getContainer().equals(this)) return false;
+        if (!roleModel.getContainer().equals(this)) return false;
 
-        if (!roleAdapter.getRole().isApplicationRole()) return false;
+        RoleEntity role = RoleAdapter.toRoleEntity(roleModel, em);
+        if (!role.isApplicationRole()) return false;
 
-        RoleEntity role = roleAdapter.getRole();
 
         applicationEntity.getRoles().remove(role);
         applicationEntity.getDefaultRoles().remove(role);
@@ -209,7 +208,8 @@ public class ApplicationAdapter extends ClientAdapter implements ApplicationMode
                 return;
             }
         }
-        entities.add(((RoleAdapter) role).getRole());
+        RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em);
+        entities.add(roleEntity);
         em.flush();
     }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
index 4360882..2e99658 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/ClientAdapter.java
@@ -7,6 +7,7 @@ import org.keycloak.models.RoleModel;
 import org.keycloak.models.UserSessionModel;
 import org.keycloak.models.jpa.entities.ClientEntity;
 import org.keycloak.models.jpa.entities.ClientUserSessionAssociationEntity;
+import org.keycloak.models.jpa.entities.RoleEntity;
 import org.keycloak.models.jpa.entities.ScopeMappingEntity;
 
 import javax.persistence.EntityManager;
@@ -215,7 +216,8 @@ public abstract class ClientAdapter implements ClientModel {
         if (hasScope(role)) return;
         ScopeMappingEntity entity = new ScopeMappingEntity();
         entity.setClient(getEntity());
-        entity.setRole(((RoleAdapter) role).getRole());
+        RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em);
+        entity.setRole(roleEntity);
         em.persist(entity);
         em.flush();
         em.detach(entity);
@@ -223,7 +225,7 @@ public abstract class ClientAdapter implements ClientModel {
 
     @Override
     public void deleteScopeMapping(RoleModel role) {
-        TypedQuery<ScopeMappingEntity> query = getRealmScopeMappingQuery((RoleAdapter) role);
+        TypedQuery<ScopeMappingEntity> query = getRealmScopeMappingQuery(role);
         List<ScopeMappingEntity> results = query.getResultList();
         if (results.size() == 0) return;
         for (ScopeMappingEntity entity : results) {
@@ -231,10 +233,11 @@ public abstract class ClientAdapter implements ClientModel {
         }
     }
 
-    protected TypedQuery<ScopeMappingEntity> getRealmScopeMappingQuery(RoleAdapter role) {
+    protected TypedQuery<ScopeMappingEntity> getRealmScopeMappingQuery(RoleModel role) {
         TypedQuery<ScopeMappingEntity> query = em.createNamedQuery("hasScope", ScopeMappingEntity.class);
         query.setParameter("client", getEntity());
-        query.setParameter("role", ((RoleAdapter) role).getRole());
+        RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em);
+        query.setParameter("role", roleEntity);
         return query;
     }
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index 18fc1db..4ac868d 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -527,7 +527,8 @@ public class RealmAdapter implements RealmModel {
                 return;
             }
         }
-        entities.add(((RoleAdapter) role).getRole());
+        RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em);
+        entities.add(roleEntity);
         em.flush();
     }
 
@@ -924,7 +925,7 @@ public class RealmAdapter implements RealmModel {
         }
         if (!role.getContainer().equals(this)) return false;
 
-        RoleEntity roleEntity = ((RoleAdapter) role).getRole();
+        RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em);
         realm.getRoles().remove(role);
         realm.getDefaultRoles().remove(role);
 
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
index 2b12a1b..28a1f47 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RoleAdapter.java
@@ -66,7 +66,7 @@ public class RoleAdapter implements RoleModel {
 
     @Override
     public void addCompositeRole(RoleModel role) {
-        RoleEntity entity = ((RoleAdapter)role).getRole();
+        RoleEntity entity = RoleAdapter.toRoleEntity(role, em);
         for (RoleEntity composite : getRole().getCompositeRoles()) {
             if (composite.equals(entity)) return;
         }
@@ -76,7 +76,7 @@ public class RoleAdapter implements RoleModel {
 
     @Override
     public void removeCompositeRole(RoleModel role) {
-        RoleEntity entity = ((RoleAdapter)role).getRole();
+        RoleEntity entity = RoleAdapter.toRoleEntity(role, em);
         Iterator<RoleEntity> it = getRole().getCompositeRoles().iterator();
         while (it.hasNext()) {
             if (it.next().equals(entity)) it.remove();
@@ -125,4 +125,11 @@ public class RoleAdapter implements RoleModel {
     public int hashCode() {
         return getId().hashCode();
     }
+
+    public static RoleEntity toRoleEntity(RoleModel model, EntityManager em) {
+        if (model instanceof RoleAdapter) {
+            return ((RoleAdapter)model).getRole();
+        }
+        return em.getReference(RoleEntity.class, model.getId());
+    }
 }