diff --git a/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java b/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
index 440886f..b899e0d 100755
--- a/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
+++ b/model/mongo/src/main/java/org/keycloak/connections/mongo/DefaultMongoConnectionFactoryProvider.java
@@ -78,7 +78,7 @@ public class DefaultMongoConnectionFactoryProvider implements MongoConnectionPro
"org.keycloak.models.entities.RequiredActionProviderEntity",
"org.keycloak.models.entities.PersistentUserSessionEntity",
"org.keycloak.models.entities.PersistentClientSessionEntity",
- "org.keycloak.models.entities.StorageProviderEntity",
+ "org.keycloak.models.entities.ComponentEntity",
"org.keycloak.authorization.mongo.entities.PolicyEntity",
"org.keycloak.authorization.mongo.entities.ResourceEntity",
"org.keycloak.authorization.mongo.entities.ResourceServerEntity",
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 8b945ef..551f6fd 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
@@ -1841,6 +1841,7 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
RequiredActionProviderEntity entity = getRequiredActionProviderEntity(model.getId());
if (entity == null) return;
entity.setAlias(model.getAlias());
+ entity.setName(model.getName());
entity.setProviderId(model.getProviderId());
entity.setEnabled(model.isEnabled());
entity.setDefaultAction(model.isDefaultAction());
@@ -2066,7 +2067,6 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
entity.setId(model.getId());
}
entity.setConfig(model.getConfig());
- entity.setId(model.getId());
entity.setParentId(model.getParentId());
entity.setProviderType(model.getProviderType());
entity.setProviderId(model.getProviderId());
@@ -2083,7 +2083,6 @@ public class RealmAdapter extends AbstractMongoAdapter<MongoRealmEntity> impleme
for (ComponentEntity entity : realm.getComponentEntities()) {
if (entity.getId().equals(model.getId())) {
entity.setConfig(model.getConfig());
- entity.setId(model.getId());
entity.setParentId(model.getParentId());
entity.setProviderType(model.getProviderType());
entity.setProviderId(model.getProviderId());
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
index eecf8c9..42d190c 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/model/AdapterTest.java
@@ -22,6 +22,7 @@ import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.keycloak.Config;
+import org.keycloak.component.ComponentModel;
import org.keycloak.models.ClientModel;
import org.keycloak.models.FederatedIdentityModel;
import org.keycloak.models.ModelDuplicateException;
@@ -36,6 +37,9 @@ import org.keycloak.models.UserModel;
import org.keycloak.models.UserProvider;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.services.managers.RealmManager;
+import org.keycloak.storage.UserStorageProvider;
+import org.keycloak.storage.UserStorageProviderModel;
+import org.keycloak.testsuite.federation.storage.UserMapStorageFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
@@ -831,6 +835,61 @@ public class AdapterTest extends AbstractModelTest {
realmManager.removeRealm(realmModel);
}
+ @Test
+ public void testComponentModelCRUD() {
+ // Add
+ realmModel = realmManager.createRealm("foo-realm");
+ UserStorageProviderModel model = new UserStorageProviderModel();
+ model.setName("memory");
+ model.setPriority(0);
+ model.setProviderId(UserMapStorageFactory.PROVIDER_ID);
+ model.setParentId(realmModel.getId());
+ ComponentModel createdModel = realmModel.addComponentModel(model);
+ String id = createdModel.getId();
+ Assert.assertNotNull(id);
+
+ commit();
+
+ realmModel = realmManager.getRealmByName("foo-realm");
+ ComponentModel foundModel = realmModel.getComponent(id);
+ assertComponentModel(foundModel, id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+ List<ComponentModel> components = realmModel.getComponents();
+ Assert.assertEquals(components.size(), 1);
+ assertComponentModel(components.get(0), id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+ components = realmModel.getComponents(realmModel.getId(), UserStorageProvider.class.getName());
+ Assert.assertEquals(components.size(), 1);
+ assertComponentModel(components.get(0), id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+
+ // Update
+ foundModel.getConfig().putSingle("foo", "bar");
+ realmModel.updateComponent(foundModel);
+
+ commit();
+
+ realmModel = realmManager.getRealmByName("foo-realm");
+ foundModel = realmModel.getComponent(id);
+ assertComponentModel(foundModel, id, UserMapStorageFactory.PROVIDER_ID, realmModel.getId(), "memory");
+ Assert.assertEquals("bar", foundModel.getConfig().getFirst("foo"));
+
+ // Remove
+ realmModel.removeComponent(foundModel);
+
+ commit();
+
+ realmModel = realmManager.getRealmByName("foo-realm");
+ foundModel = realmModel.getComponent(id);
+ Assert.assertNull(foundModel);
+ }
+
+ private void assertComponentModel(ComponentModel componentModel, String expectedId, String expectedProviderId, String expectedParentId, String expectedName) {
+ Assert.assertEquals(expectedId, componentModel.getId());
+ Assert.assertEquals(expectedProviderId, componentModel.getProviderId());
+ Assert.assertEquals(expectedParentId, componentModel.getParentId());
+ Assert.assertEquals(expectedName, componentModel.getName());
+ }
+
private KeyPair generateKeypair() throws NoSuchAlgorithmException {
return KeyPairGenerator.getInstance("RSA").generateKeyPair();
}