From 4a3869039cea11608486d929b3e15e62c5c8f579 Mon Sep 17 00:00:00 2001
From: Brian Demers
Date: Thu, 2 Apr 2026 21:39:14 -0400
Subject: [PATCH] Move getExtensionList() into BaseRepository as constructor
parameter
Extension classes are now passed to the BaseRepository constructor as
varargs, removing the need for each subclass to override
getExtensionList(). Repositories with no extensions simply omit the
parameter (defaults to empty list).
Also migrates scim-server and spring-boot test InMemory services from
raw Repository to BaseRepository, removing duplicate patch() and
getResourceClass() implementations.
Co-Authored-By: Claude Opus 4.6 (1M context)
---
.../scim/core/repository/BaseRepository.java | 17 ++++++++--
.../core/repository/BaseRepositoryTest.java | 34 +++++++++++++++++++
.../jersey4/service/InMemoryGroupService.java | 7 ----
.../jersey4/service/InMemoryUserService.java | 7 +---
.../jersey/service/InMemoryGroupService.java | 7 ----
.../jersey/service/InMemoryUserService.java | 7 +---
.../memory/service/InMemoryGroupService.java | 7 ----
.../memory/service/InMemoryUserService.java | 7 +---
.../quarkus/service/InMemoryGroupService.java | 7 ----
.../quarkus/service/InMemoryUserService.java | 7 +---
.../spring/service/InMemoryGroupService.java | 7 ----
.../spring/service/InMemoryUserService.java | 7 +---
.../spring/service/InMemoryGroupService.java | 7 ----
.../spring/service/InMemoryUserService.java | 7 +---
.../it/testapp/InMemoryGroupService.java | 31 ++---------------
.../it/testapp/InMemoryUserService.java | 30 ++--------------
.../spring/it/app/InMemoryGroupService.java | 31 ++---------------
.../spring/it/app/InMemoryUserService.java | 31 ++---------------
18 files changed, 67 insertions(+), 191 deletions(-)
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();
- }
}