diff --git a/scim-core/src/main/java/org/apache/directory/scim/core/repository/BaseRepository.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/BaseRepository.java
index 256e5406..caffb62f 100644
--- a/scim-core/src/main/java/org/apache/directory/scim/core/repository/BaseRepository.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/BaseRepository.java
@@ -22,6 +22,7 @@
import org.apache.directory.scim.spec.exception.ResourceException;
import org.apache.directory.scim.spec.exception.ResourceNotFoundException;
import org.apache.directory.scim.spec.patch.PatchOperation;
+import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimResource;
import java.util.List;
@@ -34,6 +35,7 @@
* {@link #find}, and {@link #delete}. The following are provided automatically:
*
* - {@link #getResourceClass()} — returns the class passed to the constructor
+ * - {@link #getExtensionList()} — returns the extension classes passed to the constructor
* - {@link #patch(String, List, ScimRequestContext)} — fetches the current resource
* via {@link #get}, applies patch operations via {@link PatchHandler}, and persists
* via {@link #update}
@@ -46,7 +48,7 @@
* public class MyUserRepository extends BaseRepository<ScimUser> {
* @Inject
* public MyUserRepository(PatchHandler patchHandler) {
- * super(ScimUser.class, patchHandler);
+ * super(ScimUser.class, patchHandler, MyExtension.class);
* }
* // implement create, update, get, find, delete
* }
@@ -58,16 +60,21 @@ public abstract class BaseRepository implements Reposito
private final Class resourceClass;
private final PatchHandler patchHandler;
+ private final List> extensionList;
/**
* Creates a new base repository.
*
* @param resourceClass the SCIM resource class this repository manages
* @param patchHandler the handler used to apply SCIM PATCH operations
+ * @param extensions SCIM extension classes supported by this repository (may be empty)
*/
- protected BaseRepository(Class resourceClass, PatchHandler patchHandler) {
+ @SafeVarargs
+ protected BaseRepository(Class resourceClass, PatchHandler patchHandler,
+ Class extends ScimExtension>... extensions) {
this.resourceClass = resourceClass;
this.patchHandler = patchHandler;
+ this.extensionList = extensions != null ? List.of(extensions) : List.of();
}
/**
@@ -77,6 +84,7 @@ protected BaseRepository(Class resourceClass, PatchHandler patchHandler) {
protected BaseRepository() {
this.resourceClass = null;
this.patchHandler = null;
+ this.extensionList = List.of();
}
@Override
@@ -84,6 +92,11 @@ public Class getResourceClass() {
return resourceClass;
}
+ @Override
+ public List> getExtensionList() {
+ return extensionList;
+ }
+
/**
* Default PATCH implementation: fetches the current resource, applies the patch
* operations, and persists the result via {@link #update}.
diff --git a/scim-core/src/test/java/org/apache/directory/scim/core/repository/BaseRepositoryTest.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/BaseRepositoryTest.java
index 5cb290e5..739cca6f 100644
--- a/scim-core/src/test/java/org/apache/directory/scim/core/repository/BaseRepositoryTest.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/BaseRepositoryTest.java
@@ -24,6 +24,7 @@
import org.apache.directory.scim.spec.filter.Filter;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.patch.PatchOperation;
+import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
@@ -48,6 +49,11 @@ static class TestRepository extends BaseRepository {
super(ScimUser.class, patchHandler);
}
+ @SafeVarargs
+ TestRepository(PatchHandler patchHandler, Class extends ScimExtension>... extensions) {
+ super(ScimUser.class, patchHandler, extensions);
+ }
+
/** No-arg constructor to verify CDI proxy path. */
TestRepository() {
super();
@@ -237,4 +243,32 @@ void patch_patchHandlerThrowsException_propagates() throws ResourceException {
.isInstanceOf(RuntimeException.class)
.hasMessage("patch failed");
}
+
+ @Test
+ void getExtensionList_defaultsToEmptyList() {
+ PatchHandler patchHandler = Mockito.mock(PatchHandler.class);
+ TestRepository repository = new TestRepository(patchHandler);
+
+ assertThat(repository.getExtensionList()).isEmpty();
+ }
+
+ @Test
+ void getExtensionList_returnsProvidedExtensions() {
+ PatchHandler patchHandler = Mockito.mock(PatchHandler.class);
+ TestRepository repository = new TestRepository(patchHandler, ExtensionA.class, ExtensionB.class);
+
+ assertThat(repository.getExtensionList())
+ .containsExactly(ExtensionA.class, ExtensionB.class);
+ }
+
+ @Test
+ void getExtensionList_noArgConstructor_returnsEmptyList() {
+ TestRepository repository = new TestRepository();
+
+ assertThat(repository.getExtensionList()).isEmpty();
+ }
+
+ /** Stub extension types for testing. */
+ static abstract class ExtensionA implements ScimExtension {}
+ static abstract class ExtensionB implements ScimExtension {}
}
diff --git a/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryGroupService.java b/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryGroupService.java
index b9d29fc0..7003ad61 100644
--- a/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryGroupService.java
@@ -36,10 +36,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -123,9 +121,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryUserService.java b/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryUserService.java
index 0201b7f2..c9e70eee 100644
--- a/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service/InMemoryUserService.java
@@ -39,7 +39,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import java.util.List;
@@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository {
@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -156,8 +155,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
index dccfc1a3..4a3706a9 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryGroupService.java
@@ -36,10 +36,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -123,9 +121,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
index a9101805..e4bf8ab1 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemoryUserService.java
@@ -39,7 +39,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import java.util.List;
@@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository {
@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -156,8 +155,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
index ca7b1a8b..eb04de52 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryGroupService.java
@@ -36,10 +36,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -123,9 +121,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
index 795f0eb7..483f7cdb 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemoryUserService.java
@@ -39,7 +39,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import java.util.List;
@@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository {
@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -156,8 +155,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryGroupService.java b/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryGroupService.java
index e4b4c224..66dffa8d 100644
--- a/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryGroupService.java
@@ -36,10 +36,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -123,9 +121,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryUserService.java b/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryUserService.java
index 039ce749..26ff4a4f 100644
--- a/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service/InMemoryUserService.java
@@ -39,7 +39,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import java.util.List;
@@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository {
@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -156,8 +155,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java b/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
index f017c78a..391f1bbe 100644
--- a/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
@@ -32,12 +32,10 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -117,9 +115,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java b/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
index 93592898..54882890 100644
--- a/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
@@ -36,7 +36,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.springframework.stereotype.Service;
@@ -66,7 +65,7 @@ public class InMemoryUserService extends BaseRepository {
private final SchemaRegistry schemaRegistry;
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -150,8 +149,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
index f017c78a..391f1bbe 100644
--- a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
+++ b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryGroupService.java
@@ -32,12 +32,10 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -117,9 +115,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
index 93592898..54882890 100644
--- a/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
+++ b/scim-server-examples/scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service/InMemoryUserService.java
@@ -36,7 +36,6 @@
import org.apache.directory.scim.spec.filter.PageRequest;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.springframework.stereotype.Service;
@@ -66,7 +65,7 @@ public class InMemoryUserService extends BaseRepository {
private final SchemaRegistry schemaRegistry;
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
- super(ScimUser.class, patchHandler);
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}
@@ -150,8 +149,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
- }
}
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryGroupService.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryGroupService.java
index 6deb7fc6..65d064a1 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryGroupService.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryGroupService.java
@@ -26,7 +26,7 @@
import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.scim.core.repository.PatchHandler;
-import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.BaseRepository;
import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.core.repository.ScimRequestContext;
@@ -36,11 +36,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.patch.PatchOperation;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@@ -48,18 +45,16 @@
@Named
@ApplicationScoped
-public class InMemoryGroupService implements Repository {
+public class InMemoryGroupService extends BaseRepository {
private final Map groups = new ConcurrentHashMap<>();
private SchemaRegistry schemaRegistry;
- private PatchHandler patchHandler;
-
@Inject
public InMemoryGroupService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
+ super(ScimGroup.class, patchHandler);
this.schemaRegistry = schemaRegistry;
- this.patchHandler = patchHandler;
}
protected InMemoryGroupService() {}
@@ -73,11 +68,6 @@ public void init() {
groups.put(group.getId(), group);
}
- @Override
- public Class getResourceClass() {
- return ScimGroup.class;
- }
-
@Override
public ScimGroup create(ScimGroup resource, ScimRequestContext requestContext) throws UnableToCreateResourceException {
String id = UUID.randomUUID().toString();
@@ -109,16 +99,6 @@ public ScimGroup update(String id, ScimGroup resource, ScimRequestContext reques
return resource;
}
- @Override
- public ScimGroup patch(String id, List patchOperations, ScimRequestContext requestContext) throws ResourceException {
- if (!groups.containsKey(id)) {
- throw new ResourceNotFoundException(id);
- }
- ScimGroup resource = patchHandler.apply(get(id, requestContext), patchOperations);
- groups.put(id, resource);
- return resource;
- }
-
@Override
public ScimGroup get(String id, ScimRequestContext requestContext) {
return groups.get(id);
@@ -141,9 +121,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
index 9576f436..33f654fc 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemoryUserService.java
@@ -25,7 +25,7 @@
import jakarta.inject.Named;
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.core.repository.PatchHandler;
-import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.BaseRepository;
import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.core.repository.ScimRequestContext;
@@ -35,11 +35,8 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.patch.PatchOperation;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
-import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.resources.ScimUser;
import java.util.List;
@@ -54,7 +51,7 @@
*/
@Named
@ApplicationScoped
-public class InMemoryUserService implements Repository {
+public class InMemoryUserService extends BaseRepository {
static final String DEFAULT_USER_ID = "1";
static final String DEFAULT_USER_EXTERNAL_ID = "e" + DEFAULT_USER_ID;
@@ -67,12 +64,10 @@ public class InMemoryUserService implements Repository {
private SchemaRegistry schemaRegistry;
- private PatchHandler patchHandler;
-
@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
+ super(ScimUser.class, patchHandler, LuckyNumberExtension.class);
this.schemaRegistry = schemaRegistry;
- this.patchHandler = patchHandler;
}
protected InMemoryUserService() {}
@@ -99,11 +94,6 @@ public void init() {
users.put(user.getId(), user);
}
- @Override
- public Class getResourceClass() {
- return ScimUser.class;
- }
-
@Override
public ScimUser create(ScimUser resource, ScimRequestContext requestContext) throws UnableToCreateResourceException {
String resourceId = resource.getId();
@@ -137,16 +127,6 @@ public ScimUser update(String id, ScimUser resource, ScimRequestContext requestC
return resource;
}
- @Override
- public ScimUser patch(String id, List patchOperations, ScimRequestContext requestContext) throws ResourceException {
- if (!users.containsKey(id)) {
- throw new ResourceNotFoundException(id);
- }
- ScimUser resource = patchHandler.apply(get(id, requestContext), patchOperations);
- users.put(id, resource);
- return resource;
- }
-
@Override
public ScimUser get(String id, ScimRequestContext requestContext) {
return users.get(id);
@@ -169,8 +149,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return List.of(LuckyNumberExtension.class);
- }
}
diff --git a/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryGroupService.java b/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryGroupService.java
index d6f4038e..fb3cb2b8 100644
--- a/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryGroupService.java
+++ b/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryGroupService.java
@@ -23,7 +23,7 @@
import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.scim.core.repository.PatchHandler;
-import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.BaseRepository;
import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.core.repository.ScimRequestContext;
@@ -33,29 +33,24 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.patch.PatchOperation;
-import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
import org.springframework.stereotype.Service;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@Service
-public class InMemoryGroupService implements Repository {
+public class InMemoryGroupService extends BaseRepository {
private final Map groups = new ConcurrentHashMap<>();
private final SchemaRegistry schemaRegistry;
- private final PatchHandler patchHandler;
-
public InMemoryGroupService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
+ super(ScimGroup.class, patchHandler);
this.schemaRegistry = schemaRegistry;
- this.patchHandler = patchHandler;
}
@PostConstruct
@@ -67,11 +62,6 @@ public void init() {
groups.put(group.getId(), group);
}
- @Override
- public Class getResourceClass() {
- return ScimGroup.class;
- }
-
@Override
public ScimGroup create(ScimGroup resource, ScimRequestContext requestContext) throws UnableToCreateResourceException {
String id = UUID.randomUUID().toString();
@@ -103,16 +93,6 @@ public ScimGroup update(String id, ScimGroup resource, ScimRequestContext reques
return resource;
}
- @Override
- public ScimGroup patch(String id, List patchOperations, ScimRequestContext requestContext) throws ResourceException {
- if (!groups.containsKey(id)) {
- throw new ResourceNotFoundException(id);
- }
- ScimGroup resource = patchHandler.apply(get(id, requestContext), patchOperations);
- groups.put(id, resource);
- return resource;
- }
-
@Override
public ScimGroup get(String id, ScimRequestContext requestContext) {
return groups.get(id);
@@ -135,9 +115,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
-
}
diff --git a/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryUserService.java b/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryUserService.java
index 60e99d93..9e1a3c1d 100644
--- a/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryUserService.java
+++ b/support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app/InMemoryUserService.java
@@ -22,7 +22,7 @@
import jakarta.annotation.PostConstruct;
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.core.repository.PatchHandler;
-import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.BaseRepository;
import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.core.repository.ScimRequestContext;
@@ -32,15 +32,11 @@
import org.apache.directory.scim.spec.filter.FilterExpressions;
import org.apache.directory.scim.spec.filter.FilterResponse;
import org.apache.directory.scim.spec.filter.PageRequest;
-import org.apache.directory.scim.spec.patch.PatchOperation;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
-import org.apache.directory.scim.spec.resources.ScimExtension;
-import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.springframework.stereotype.Service;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -52,7 +48,7 @@
* @author Chris Harm <crh5255@psu.edu>
*/
@Service
-public class InMemoryUserService implements Repository {
+public class InMemoryUserService extends BaseRepository {
static final String DEFAULT_USER_ID = "1";
static final String DEFAULT_USER_EXTERNAL_ID = "e" + DEFAULT_USER_ID;
@@ -65,11 +61,9 @@ public class InMemoryUserService implements Repository {
private final SchemaRegistry schemaRegistry;
- private final PatchHandler patchHandler;
-
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
+ super(ScimUser.class, patchHandler);
this.schemaRegistry = schemaRegistry;
- this.patchHandler = patchHandler;
}
@PostConstruct
@@ -97,11 +91,6 @@ public void init() {
users.put(user.getId(), user);
}
- @Override
- public Class getResourceClass() {
- return ScimUser.class;
- }
-
@Override
public ScimUser create(ScimUser resource, ScimRequestContext requestContext) throws UnableToCreateResourceException {
String resourceId = resource.getId();
@@ -135,16 +124,6 @@ public ScimUser update(String id, ScimUser resource, ScimRequestContext requestC
return resource;
}
- @Override
- public ScimUser patch(String id, List patchOperations, ScimRequestContext requestContext) throws ResourceException {
- if (!users.containsKey(id)) {
- throw new ResourceNotFoundException(id);
- }
- ScimUser resource = patchHandler.apply(get(id, requestContext), patchOperations);
- users.put(id, resource);
- return resource;
- }
-
@Override
public ScimUser get(String id, ScimRequestContext requestContext) {
return users.get(id);
@@ -167,8 +146,4 @@ public FilterResponse find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}
- @Override
- public List> getExtensionList() {
- return Collections.emptyList();
- }
}