Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -34,6 +35,7 @@
* {@link #find}, and {@link #delete}. The following are provided automatically:</p>
* <ul>
* <li>{@link #getResourceClass()} — returns the class passed to the constructor</li>
* <li>{@link #getExtensionList()} — returns the extension classes passed to the constructor</li>
* <li>{@link #patch(String, List, ScimRequestContext)} — fetches the current resource
* via {@link #get}, applies patch operations via {@link PatchHandler}, and persists
* via {@link #update}</li>
Expand All @@ -46,7 +48,7 @@
* public class MyUserRepository extends BaseRepository&lt;ScimUser&gt; {
* &#64;Inject
* public MyUserRepository(PatchHandler patchHandler) {
* super(ScimUser.class, patchHandler);
* super(ScimUser.class, patchHandler, MyExtension.class);
* }
* // implement create, update, get, find, delete
* }
Expand All @@ -58,16 +60,21 @@ public abstract class BaseRepository<T extends ScimResource> implements Reposito

private final Class<T> resourceClass;
private final PatchHandler patchHandler;
private final List<Class<? extends ScimExtension>> 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<T> resourceClass, PatchHandler patchHandler) {
@SafeVarargs
protected BaseRepository(Class<T> resourceClass, PatchHandler patchHandler,
Class<? extends ScimExtension>... extensions) {
this.resourceClass = resourceClass;
this.patchHandler = patchHandler;
this.extensionList = extensions != null ? List.of(extensions) : List.of();
}

/**
Expand All @@ -77,13 +84,19 @@ protected BaseRepository(Class<T> resourceClass, PatchHandler patchHandler) {
protected BaseRepository() {
this.resourceClass = null;
this.patchHandler = null;
this.extensionList = List.of();
}

@Override
public Class<T> getResourceClass() {
return resourceClass;
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return extensionList;
}

/**
* Default PATCH implementation: fetches the current resource, applies the patch
* operations, and persists the result via {@link #update}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -48,6 +49,11 @@ static class TestRepository extends BaseRepository<ScimUser> {
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();
Expand Down Expand Up @@ -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 {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -123,9 +121,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository<ScimUser> {

@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
super(ScimUser.class, patchHandler);
super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}

Expand Down Expand Up @@ -156,8 +155,4 @@ public FilterResponse<ScimUser> find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -123,9 +121,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository<ScimUser> {

@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
super(ScimUser.class, patchHandler);
super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}

Expand Down Expand Up @@ -156,8 +155,4 @@ public FilterResponse<ScimUser> find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -123,9 +121,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository<ScimUser> {

@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
super(ScimUser.class, patchHandler);
super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}

Expand Down Expand Up @@ -156,8 +155,4 @@ public FilterResponse<ScimUser> find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -123,9 +121,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -70,7 +69,7 @@ public class InMemoryUserService extends BaseRepository<ScimUser> {

@Inject
public InMemoryUserService(SchemaRegistry schemaRegistry, PatchHandler patchHandler) {
super(ScimUser.class, patchHandler);
super(ScimUser.class, patchHandler, LuckyNumberExtension.class, EnterpriseExtension.class);
this.schemaRegistry = schemaRegistry;
}

Expand Down Expand Up @@ -156,8 +155,4 @@ public FilterResponse<ScimUser> find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -117,9 +115,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -66,7 +65,7 @@ public class InMemoryUserService extends BaseRepository<ScimUser> {
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;
}

Expand Down Expand Up @@ -150,8 +149,4 @@ public FilterResponse<ScimUser> find(Filter filter, ScimRequestContext requestCo
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return List.of(LuckyNumberExtension.class, EnterpriseExtension.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -117,9 +115,4 @@ public FilterResponse<ScimGroup> find(Filter filter, ScimRequestContext requestC
return new FilterResponse<>(pageRequest.paginate(filtered), filtered.size());
}

@Override
public List<Class<? extends ScimExtension>> getExtensionList() {
return Collections.emptyList();
}

}
Loading