keycloak-uncached

Add id to partial import results.

12/9/2015 3:38:14 PM

Details

diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/partial-import.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/partial-import.html
index 4005b0d..4a82f41 100644
--- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/partial-import.html
+++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/partial-import.html
@@ -92,6 +92,7 @@
                         <th>Action</th>
                         <th>Type</th>
                         <th>Name</th>
+                        <th>Id</th>
                     </tr>
                 </thead>
                 <tbody>
@@ -99,6 +100,7 @@
                         <td>{{result.action}}</td>
                         <td>{{result.resourceType}}</td>
                         <td>{{result.resourceName}}</td>
+                        <td>{{result.id}}</td>
                     </tr>
                 </tbody>
             </table>
diff --git a/services/src/main/java/org/keycloak/partialimport/AbstractPartialImport.java b/services/src/main/java/org/keycloak/partialimport/AbstractPartialImport.java
index a85a574..74392a2 100644
--- a/services/src/main/java/org/keycloak/partialimport/AbstractPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/AbstractPartialImport.java
@@ -34,6 +34,7 @@ public abstract class AbstractPartialImport<T> implements PartialImport {
 
     public abstract List<T> getRepList(PartialImportRepresentation partialImportRep);
     public abstract String getName(T resourceRep);
+    public abstract String getModelId(RealmModel realm, KeycloakSession session, T resourceRep);
     public abstract boolean exists(RealmModel realm, KeycloakSession session, T resourceRep);
     public abstract String existsMessage(T resourceRep);
     public abstract ResourceType getResourceType();
@@ -61,16 +62,16 @@ public abstract class AbstractPartialImport<T> implements PartialImport {
         return new ErrorResponseException(error);
     }
 
-    protected PartialImportResult overwritten(T resourceRep){
-        return PartialImportResult.overwritten(getResourceType(), getName(resourceRep), resourceRep);
+    protected PartialImportResult overwritten(String modelId, T resourceRep){
+        return PartialImportResult.overwritten(getResourceType(), getName(resourceRep), modelId, resourceRep);
     }
 
-    protected PartialImportResult skipped(T resourceRep) {
-        return PartialImportResult.skipped(getResourceType(), getName(resourceRep), resourceRep);
+    protected PartialImportResult skipped(String modelId, T resourceRep) {
+        return PartialImportResult.skipped(getResourceType(), getName(resourceRep), modelId, resourceRep);
     }
 
-    protected PartialImportResult added(T resourceRep) {
-        return PartialImportResult.added(getResourceType(), getName(resourceRep), resourceRep);
+    protected PartialImportResult added(String modelId, T resourceRep) {
+        return PartialImportResult.added(getResourceType(), getName(resourceRep), modelId, resourceRep);
     }
 
     @Override
@@ -91,12 +92,14 @@ public abstract class AbstractPartialImport<T> implements PartialImport {
                 throw new ErrorResponseException(ErrorResponse.error(e.getMessage(), Response.Status.INTERNAL_SERVER_ERROR));
             }
 
-            results.addResult(overwritten(resourceRep));
+            String modelId = getModelId(realm, session, resourceRep);
+            results.addResult(overwritten(modelId, resourceRep));
         }
 
         for (T resourceRep : toSkip) {
             System.out.println("skipping " + getResourceType() + " " + getName(resourceRep));
-            results.addResult(skipped(resourceRep));
+            String modelId = getModelId(realm, session, resourceRep);
+            results.addResult(skipped(modelId, resourceRep));
         }
 
         for (T resourceRep : repList) {
@@ -106,7 +109,8 @@ public abstract class AbstractPartialImport<T> implements PartialImport {
             try {
                 System.out.println("adding " + getResourceType() + " " + getName(resourceRep));
                 create(realm, session, resourceRep);
-                results.addResult(added(resourceRep));
+                String modelId = getModelId(realm, session, resourceRep);
+                results.addResult(added(modelId, resourceRep));
             } catch (Exception e) {
                 //e.printStackTrace();
                 throw new ErrorResponseException(ErrorResponse.error(e.getMessage(), Response.Status.INTERNAL_SERVER_ERROR));
diff --git a/services/src/main/java/org/keycloak/partialimport/ClientRolesPartialImport.java b/services/src/main/java/org/keycloak/partialimport/ClientRolesPartialImport.java
index f772d84..fc524f2 100644
--- a/services/src/main/java/org/keycloak/partialimport/ClientRolesPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/ClientRolesPartialImport.java
@@ -135,16 +135,16 @@ public class ClientRolesPartialImport implements PartialImport {
         return new ErrorResponseException(error);
     }
 
-    protected PartialImportResult overwritten(String clientId, RoleRepresentation roleRep) {
-        return PartialImportResult.overwritten(getResourceType(), getCombinedName(clientId, roleRep), roleRep);
+    protected PartialImportResult overwritten(String clientId, String modelId, RoleRepresentation roleRep) {
+        return PartialImportResult.overwritten(getResourceType(), getCombinedName(clientId, roleRep), modelId, roleRep);
     }
 
-    protected PartialImportResult skipped(String clientId, RoleRepresentation roleRep) {
-        return PartialImportResult.skipped(getResourceType(), getCombinedName(clientId, roleRep), roleRep);
+    protected PartialImportResult skipped(String clientId, String modelId, RoleRepresentation roleRep) {
+        return PartialImportResult.skipped(getResourceType(), getCombinedName(clientId, roleRep), modelId, roleRep);
     }
 
-    protected PartialImportResult added(String clientId, RoleRepresentation roleRep) {
-        return PartialImportResult.added(getResourceType(), getCombinedName(clientId, roleRep), roleRep);
+    protected PartialImportResult added(String clientId, String modelId, RoleRepresentation roleRep) {
+        return PartialImportResult.added(getResourceType(), getCombinedName(clientId, roleRep), modelId, roleRep);
     }
 
     @Override
@@ -166,14 +166,16 @@ public class ClientRolesPartialImport implements PartialImport {
                     throw new ErrorResponseException(ErrorResponse.error(e.getMessage(), Response.Status.INTERNAL_SERVER_ERROR));
                 }
 
-                results.addResult(overwritten(clientId, roleRep));
+                String modelId = getModelId(realm, clientId);
+                results.addResult(overwritten(clientId, modelId, roleRep));
             }
         }
 
         for (String clientId : toSkip.keySet()) {
             for (RoleRepresentation roleRep : toSkip.get(clientId)) {
                 System.out.println("skipping " + getResourceType() + " " + getCombinedName(clientId, roleRep));
-                results.addResult(skipped(clientId, roleRep));
+                String modelId = getModelId(realm, clientId);
+                results.addResult(skipped(clientId, modelId, roleRep));
             }
         }
 
@@ -185,7 +187,8 @@ public class ClientRolesPartialImport implements PartialImport {
                 try {
                     System.out.println("adding " + getResourceType() + " " + getCombinedName(clientId, roleRep));
                     create(realm, session, clientId, roleRep);
-                    results.addResult(added(clientId, roleRep));
+                    String modelId = getModelId(realm, clientId);
+                    results.addResult(added(clientId, modelId, roleRep));
                 } catch (Exception e) {
                     //e.printStackTrace();
                     throw new ErrorResponseException(ErrorResponse.error(e.getMessage(), Response.Status.INTERNAL_SERVER_ERROR));
@@ -196,4 +199,7 @@ public class ClientRolesPartialImport implements PartialImport {
         return results;
     }
 
+    private String getModelId(RealmModel realm, String clientId) {
+        return realm.getClientByClientId(clientId).getId();
+    }
 }
diff --git a/services/src/main/java/org/keycloak/partialimport/ClientsPartialImport.java b/services/src/main/java/org/keycloak/partialimport/ClientsPartialImport.java
index 860c0ff..ad633cc 100644
--- a/services/src/main/java/org/keycloak/partialimport/ClientsPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/ClientsPartialImport.java
@@ -43,6 +43,11 @@ public class ClientsPartialImport extends AbstractPartialImport<ClientRepresenta
     }
 
     @Override
+    public String getModelId(RealmModel realm, KeycloakSession session, ClientRepresentation clientRep) {
+        return realm.getClientByClientId(getName(clientRep)).getId();
+    }
+
+    @Override
     public boolean exists(RealmModel realm, KeycloakSession session, ClientRepresentation clientRep) {
         return realm.getClientByClientId(getName(clientRep)) != null;
     }
diff --git a/services/src/main/java/org/keycloak/partialimport/IdentityProvidersPartialImport.java b/services/src/main/java/org/keycloak/partialimport/IdentityProvidersPartialImport.java
index a05d2b8..d1abdb7 100644
--- a/services/src/main/java/org/keycloak/partialimport/IdentityProvidersPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/IdentityProvidersPartialImport.java
@@ -43,6 +43,11 @@ public class IdentityProvidersPartialImport extends AbstractPartialImport<Identi
     }
 
     @Override
+    public String getModelId(RealmModel realm, KeycloakSession session, IdentityProviderRepresentation idpRep) {
+        return realm.getIdentityProviderByAlias(getName(idpRep)).getInternalId();
+    }
+
+    @Override
     public boolean exists(RealmModel realm, KeycloakSession session, IdentityProviderRepresentation idpRep) {
         return realm.getIdentityProviderByAlias(getName(idpRep)) != null;
     }
diff --git a/services/src/main/java/org/keycloak/partialimport/PartialImportResult.java b/services/src/main/java/org/keycloak/partialimport/PartialImportResult.java
index 9603d9a..d5651e5 100644
--- a/services/src/main/java/org/keycloak/partialimport/PartialImportResult.java
+++ b/services/src/main/java/org/keycloak/partialimport/PartialImportResult.java
@@ -28,25 +28,27 @@ public class PartialImportResult {
     private final Action action;
     private final String resourceType;
     private final String resourceName;
+    private final String id;
     private final Object representation;
 
-    private PartialImportResult(Action action, ResourceType resourceType, String resourceName, Object representation) {
+    private PartialImportResult(Action action, ResourceType resourceType, String resourceName, String id, Object representation) {
         this.action = action;
         this.resourceType = resourceType.toString();
         this.resourceName = resourceName;
+        this.id = id;
         this.representation = representation;
     };
 
-    public static PartialImportResult skipped(ResourceType resourceType, String resourceName, Object representation) {
-        return new PartialImportResult(Action.SKIPPED, resourceType, resourceName, representation);
+    public static PartialImportResult skipped(ResourceType resourceType, String resourceName, String id, Object representation) {
+        return new PartialImportResult(Action.SKIPPED, resourceType, resourceName, id, representation);
     }
 
-    public static PartialImportResult added(ResourceType resourceType, String resourceName, Object representation) {
-        return new PartialImportResult(Action.ADDED, resourceType, resourceName, representation);
+    public static PartialImportResult added(ResourceType resourceType, String resourceName, String id, Object representation) {
+        return new PartialImportResult(Action.ADDED, resourceType, resourceName, id, representation);
     }
 
-    public static PartialImportResult overwritten(ResourceType resourceType, String resourceName, Object representation) {
-        return new PartialImportResult(Action.OVERWRITTEN, resourceType, resourceName, representation);
+    public static PartialImportResult overwritten(ResourceType resourceType, String resourceName, String id, Object representation) {
+        return new PartialImportResult(Action.OVERWRITTEN, resourceType, resourceName, id, representation);
     }
 
     public Action getAction() {
@@ -61,6 +63,10 @@ public class PartialImportResult {
         return resourceName;
     }
 
+    public String getId() {
+        return id;
+    }
+
     @JsonIgnore
     public Object getRepresentation() {
         return representation;
diff --git a/services/src/main/java/org/keycloak/partialimport/RealmRolesPartialImport.java b/services/src/main/java/org/keycloak/partialimport/RealmRolesPartialImport.java
index 473df84..b2213e4 100644
--- a/services/src/main/java/org/keycloak/partialimport/RealmRolesPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/RealmRolesPartialImport.java
@@ -44,6 +44,15 @@ public class RealmRolesPartialImport extends AbstractPartialImport<RoleRepresent
     }
 
     @Override
+    public String getModelId(RealmModel realm, KeycloakSession session, RoleRepresentation roleRep) {
+        for (RoleModel role : realm.getRoles()) {
+            if (getName(roleRep).equals(role.getName())) return role.getId();
+        }
+
+        return null;
+    }
+
+    @Override
     public boolean exists(RealmModel realm, KeycloakSession session, RoleRepresentation roleRep) {
         for (RoleModel role : realm.getRoles()) {
             if (getName(roleRep).equals(role.getName())) return true;
diff --git a/services/src/main/java/org/keycloak/partialimport/UsersPartialImport.java b/services/src/main/java/org/keycloak/partialimport/UsersPartialImport.java
index 7080d6a..49df8a5 100644
--- a/services/src/main/java/org/keycloak/partialimport/UsersPartialImport.java
+++ b/services/src/main/java/org/keycloak/partialimport/UsersPartialImport.java
@@ -45,6 +45,17 @@ public class UsersPartialImport extends AbstractPartialImport<UserRepresentation
     }
 
     @Override
+    public String getModelId(RealmModel realm, KeycloakSession session, UserRepresentation user) {
+        String userName = user.getUsername();
+        if (userName != null) {
+            return session.users().getUserByUsername(userName, realm).getId();
+        } else {
+            String email = user.getEmail();
+            return session.users().getUserByEmail(email, realm).getId();
+        }
+    }
+
+    @Override
     public boolean exists(RealmModel realm, KeycloakSession session, UserRepresentation user) {
         return userNameExists(realm, session, user) || userEmailExists(realm, session, user);
     }