Merge pull request #133 from apache/new-scim-core-module
new scim core module
diff --git a/pom.xml b/pom.xml
index eee0a73..73dc88e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,7 @@
<modules>
<module>scim-client</module>
+ <module>scim-core</module>
<module>scim-server</module>
<module>scim-server-examples/scim-server-memory</module>
<module>scim-server-examples/scim-server-jersey</module>
@@ -125,6 +126,11 @@
</dependency>
<dependency>
<groupId>org.apache.directory.scim</groupId>
+ <artifactId>scim-core</artifactId>
+ <version>2.23-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.scim</groupId>
<artifactId>scim-tools-common</artifactId>
<version>2.23-SNAPSHOT</version>
</dependency>
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/BaseScimClient.java b/scim-client/src/main/java/org/apache/directory/scim/client/rest/BaseScimClient.java
index 523b662..ddcf0c3 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/BaseScimClient.java
+++ b/scim-client/src/main/java/org/apache/directory/scim/client/rest/BaseScimClient.java
@@ -36,15 +36,15 @@
import org.apache.directory.scim.spec.annotation.ScimResourceType;
import org.apache.directory.scim.spec.protocol.BaseResourceTypeResource;
import org.apache.directory.scim.spec.protocol.Constants;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
import org.apache.directory.scim.spec.protocol.data.ListResponse;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.data.SearchRequest;
import org.apache.directory.scim.spec.protocol.exception.ScimException;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.SortOrder;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.SortOrder;
import org.apache.directory.scim.spec.resources.ScimResource;
public abstract class BaseScimClient<T extends ScimResource> implements AutoCloseable {
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ScimSelfClient.java b/scim-client/src/main/java/org/apache/directory/scim/client/rest/ScimSelfClient.java
index 8580f12..746ce15 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ScimSelfClient.java
+++ b/scim-client/src/main/java/org/apache/directory/scim/client/rest/ScimSelfClient.java
@@ -27,7 +27,7 @@
import org.apache.directory.scim.spec.protocol.Constants;
import org.apache.directory.scim.spec.protocol.SelfResource;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.exception.ScimException;
import org.apache.directory.scim.spec.resources.ScimUser;
diff --git a/scim-core/pom.xml b/scim-core/pom.xml
new file mode 100644
index 0000000..1ab5ba6
--- /dev/null
+++ b/scim-core/pom.xml
@@ -0,0 +1,90 @@
+<!-- Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License. -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.directory.scim</groupId>
+ <artifactId>scim-parent</artifactId>
+ <version>2.23-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>scim-core</artifactId>
+ <name>SCIM - Core</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>jakarta.inject</groupId>
+ <artifactId>jakarta.inject-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.enterprise</groupId>
+ <artifactId>jakarta.enterprise.cdi-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>jakarta.annotation</groupId>
+ <artifactId>jakarta.annotation-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.scim</groupId>
+ <artifactId>scim-spec-schema</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.flipkart.zjsonpatch</groupId>
+ <artifactId>zjsonpatch</artifactId>
+ <version>0.4.12</version>
+ </dependency>
+ <dependency>
+ <groupId>org.projectlombok</groupId>
+ <artifactId>lombok</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-junit-jupiter</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/ScimConfiguration.java b/scim-core/src/main/java/org/apache/directory/scim/core/Initializable.java
similarity index 90%
rename from scim-server/src/main/java/org/apache/directory/scim/server/ScimConfiguration.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/Initializable.java
index 25d7b19..cd47f1b 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/ScimConfiguration.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/Initializable.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server;
+package org.apache.directory.scim.core;
/**
* Classes implementing ScimConfiguration will be eagerly initialized.
@@ -25,7 +25,7 @@
* CDI does not have a way to eagerly initialize beans at startup. This is a workaround using a spi extension, for
* non-EJB based deployments.
*/
-public interface ScimConfiguration {
+public interface Initializable {
- void configure();
+ void initialize();
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/InvalidRepositoryException.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/InvalidRepositoryException.java
similarity index 86%
rename from scim-server/src/main/java/org/apache/directory/scim/server/exception/InvalidRepositoryException.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/InvalidRepositoryException.java
index 08014f3..6b18ff8 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/InvalidRepositoryException.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/InvalidRepositoryException.java
@@ -17,10 +17,10 @@
* under the License.
*/
-package org.apache.directory.scim.server.exception;
+package org.apache.directory.scim.core.repository;
public class InvalidRepositoryException extends Exception {
- public InvalidRepositoryException(String what) {
- super(what);
+ public InvalidRepositoryException(String message) {
+ super(message);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/PrioritySortingComparator.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
similarity index 96%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/PrioritySortingComparator.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
index 222ec15..9f56ea8 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/PrioritySortingComparator.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/PrioritySortingComparator.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import java.util.Comparator;
import java.util.Set;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/ReflectionUtils.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/ReflectionUtils.java
similarity index 96%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/ReflectionUtils.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/ReflectionUtils.java
index ae9ce8c..e7c6ce9 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/ReflectionUtils.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/ReflectionUtils.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import java.lang.reflect.Field;
import java.util.ArrayList;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/Repository.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/Repository.java
similarity index 70%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/Repository.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/Repository.java
index 212e56b..646886f 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/Repository.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/Repository.java
@@ -17,19 +17,14 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import java.util.List;
-import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
-import org.apache.directory.scim.server.exception.UnableToDeleteResourceException;
-import org.apache.directory.scim.server.exception.UnableToRetrieveExtensionsResourceException;
-import org.apache.directory.scim.server.exception.UnableToRetrieveResourceException;
-import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimResource;
@@ -55,10 +50,10 @@
*
* @param resource The ScimResource to create and persist.
* @return The newly created ScimResource.
- * @throws UnableToCreateResourceException When the ScimResource cannot be
+ * @throws ResourceException When the ScimResource cannot be
* created.
*/
- T create(T resource) throws UnableToCreateResourceException;
+ T create(T resource) throws ResourceException;
/**
* Allows the SCIM server's REST implementation to update and existing
@@ -66,19 +61,19 @@
*
* @param updateRequest The ScimResource to update and persist.
* @return The newly updated ScimResource.
- * @throws UnableToUpdateResourceException When the ScimResource cannot be
+ * @throws ResourceException When the ScimResource cannot be
* updated.
*/
- T update(UpdateRequest<T> updateRequest) throws UnableToUpdateResourceException;
+ T update(UpdateRequest<T> updateRequest) throws ResourceException;
/**
* Retrieves the ScimResource associated with the provided identifier.
* @param id The identifier of the target ScimResource.
* @return The requested ScimResource.
- * @throws UnableToRetrieveResourceException When the ScimResource cannot be
+ * @throws ResourceException When the ScimResource cannot be
* retrieved.
*/
- T get(String id) throws UnableToRetrieveResourceException;
+ T get(String id) throws ResourceException;
/**
* Finds and retrieves all ScimResource objects known to the persistence
@@ -97,10 +92,10 @@
* @return A list of the ScimResources that pass the filter criteria,
* truncated to match the requested "page" and sorted according
* to the provided requirements.
- * @throws UnableToRetrieveResourceException If one or more ScimResouces
+ * @throws ResourceException If one or more ScimResources
* cannot be retrieved.
*/
- FilterResponse<T> find(Filter filter, PageRequest pageRequest, SortRequest sortRequest) throws UnableToRetrieveResourceException;
+ FilterResponse<T> find(Filter filter, PageRequest pageRequest, SortRequest sortRequest) throws ResourceException;
/**
* Deletes the ScimResource with the provided identifier (if it exists).
@@ -108,18 +103,18 @@
* rather leaves that to the designer of the persistence layer.
*
* @param id The ScimResource's identifier.
- * @throws UnableToDeleteResourceException When the specified ScimResource
+ * @throws ResourceException When the specified ScimResource
* cannot be deleted.
*/
- void delete(String id) throws UnableToDeleteResourceException;
+ void delete(String id) throws ResourceException;
/**
* Returns a list of the SCIM Extensions that this repository considers to be
* associated with the ScimResource of type T.
*
* @return A list of ScimExtension classes.
- * @throws UnableToRetrieveExtensionsResourceException If the repository cannot return
+ * @throws ResourceException If the repository cannot return
* the appropriate list.
*/
- List<Class<? extends ScimExtension>> getExtensionList() throws UnableToRetrieveExtensionsResourceException;
+ List<Class<? extends ScimExtension>> getExtensionList() throws ResourceException;
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/RepositoryRegistry.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/RepositoryRegistry.java
similarity index 89%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/RepositoryRegistry.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/RepositoryRegistry.java
index f94ac5b..21e4702 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/RepositoryRegistry.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/RepositoryRegistry.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.enterprise.context.ApplicationScoped;
@@ -25,10 +25,7 @@
import jakarta.inject.Inject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.server.ScimConfiguration;
-import org.apache.directory.scim.server.exception.InvalidRepositoryException;
-import org.apache.directory.scim.server.exception.UnableToRetrieveExtensionsResourceException;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.Initializable;
import org.apache.directory.scim.spec.annotation.ScimExtensionType;
import org.apache.directory.scim.spec.annotation.ScimResourceType;
import org.apache.directory.scim.spec.exception.ScimResourceInvalidException;
@@ -36,6 +33,7 @@
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.schema.ResourceType;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.spec.schema.Schemas;
import java.util.ArrayList;
@@ -46,7 +44,7 @@
@Data
@Slf4j
@ApplicationScoped
-public class RepositoryRegistry implements ScimConfiguration {
+public class RepositoryRegistry implements Initializable {
private SchemaRegistry schemaRegistry;
@@ -69,19 +67,19 @@
@Override
@SuppressWarnings("unchecked")
- public void configure() {
+ public void initialize() {
scimRepositoryInstances.stream()
.map(repository -> (Repository<ScimResource>) repository)
.forEach(repository -> {
try {
registerRepository(repository.getResourceClass(), repository);
- } catch (InvalidRepositoryException | JsonProcessingException | UnableToRetrieveExtensionsResourceException e) {
+ } catch (InvalidRepositoryException | JsonProcessingException | ResourceException e) {
throw new ScimResourceInvalidException("Failed to register repository " + repository.getClass() + " for ScimResource type " + repository.getResourceClass(), e);
}
});
}
- public synchronized <T extends ScimResource> void registerRepository(Class<T> clazz, Repository<T> repository) throws InvalidRepositoryException, JsonProcessingException, UnableToRetrieveExtensionsResourceException {
+ public synchronized <T extends ScimResource> void registerRepository(Class<T> clazz, Repository<T> repository) throws InvalidRepositoryException, JsonProcessingException, ResourceException {
ResourceType resourceType = generateResourceType(clazz, repository);
@@ -115,7 +113,7 @@
return (Repository<T>) repositoryMap.get(clazz);
}
- private ResourceType generateResourceType(Class<? extends ScimResource> base, Repository<? extends ScimResource> repository) throws InvalidRepositoryException, UnableToRetrieveExtensionsResourceException {
+ private ResourceType generateResourceType(Class<? extends ScimResource> base, Repository<? extends ScimResource> repository) throws InvalidRepositoryException, ResourceException {
ScimResourceType scimResourceType = base.getAnnotation(ScimResourceType.class);
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/ResourceException.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/ResourceException.java
similarity index 72%
rename from scim-server/src/main/java/org/apache/directory/scim/server/exception/ResourceException.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/ResourceException.java
index c8e21ef..0a98763 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/ResourceException.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/ResourceException.java
@@ -17,9 +17,8 @@
* under the License.
*/
-package org.apache.directory.scim.server.exception;
+package org.apache.directory.scim.core.repository;
-import jakarta.ws.rs.core.Response.Status;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -27,18 +26,15 @@
@EqualsAndHashCode(callSuper=true)
public class ResourceException extends Exception {
- private static final long serialVersionUID = -3872700870424005641L;
+ private final int status;
- private Status status;
-
- public ResourceException(Status status, String message) {
+ public ResourceException(int statusCode, String message) {
super(message);
-
- this.status = status;
+ this.status = statusCode;
}
- public ResourceException(Status status, String message, Throwable cause) {
+ public ResourceException(int statusCode, String message, Throwable cause) {
super(message, cause);
- this.status = status;
+ this.status = statusCode;
}
}
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/SelfIdResolver.java
similarity index 79%
copy from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java
copy to scim-core/src/main/java/org/apache/directory/scim/core/repository/SelfIdResolver.java
index 04e97a7..6245994 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/SelfIdResolver.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.core.repository;
-public interface ValueFilterExpression {
+import java.security.Principal;
- public String toFilter();
+public interface SelfIdResolver {
+ String resolveToInternalId(Principal principal) throws ResourceException;
+
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/UpdateRequest.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
similarity index 96%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/UpdateRequest.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
index d5b0f17..a2b99c1 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/UpdateRequest.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -37,22 +37,22 @@
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.json.ObjectMapperFactory;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.data.PatchOperation;
-import org.apache.directory.scim.spec.protocol.data.PatchOperation.Type;
-import org.apache.directory.scim.spec.protocol.data.PatchOperationPath;
-import org.apache.directory.scim.spec.protocol.filter.AttributeComparisonExpression;
-import org.apache.directory.scim.spec.protocol.filter.CompareOperator;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpression;
-import org.apache.directory.scim.spec.protocol.filter.ValuePathExpression;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.patch.PatchOperation;
+import org.apache.directory.scim.spec.patch.PatchOperation.Type;
+import org.apache.directory.scim.spec.patch.PatchOperationPath;
+import org.apache.directory.scim.spec.filter.AttributeComparisonExpression;
+import org.apache.directory.scim.spec.filter.CompareOperator;
+import org.apache.directory.scim.spec.filter.FilterExpression;
+import org.apache.directory.scim.spec.filter.ValuePathExpression;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.resources.TypedAttribute;
import org.apache.directory.scim.spec.schema.AttributeContainer;
import org.apache.directory.scim.spec.schema.Schema;
import org.apache.directory.scim.spec.schema.Schema.Attribute;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import java.util.ArrayList;
import java.util.Arrays;
@@ -146,7 +146,7 @@
return patchOperations;
}
- private void sortMultiValuedCollections(Object obj1, Object obj2, AttributeContainer ac) throws IllegalArgumentException, IllegalAccessException {
+ private void sortMultiValuedCollections(Object obj1, Object obj2, AttributeContainer ac) throws IllegalArgumentException {
for (Attribute attribute : ac.getAttributes()) {
Schema.AttributeAccessor accessor = attribute.getAccessor();
if (attribute.isMultiValued()) {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ProcessingExtensions.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ProcessingExtensions.java
similarity index 94%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ProcessingExtensions.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ProcessingExtensions.java
index 3697823..3fc0fc8 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ProcessingExtensions.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ProcessingExtensions.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.annotations;
+package org.apache.directory.scim.core.repository.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ScimProcessingExtension.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ScimProcessingExtension.java
similarity index 89%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ScimProcessingExtension.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ScimProcessingExtension.java
index 02eb465..db146db 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/annotations/ScimProcessingExtension.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/annotations/ScimProcessingExtension.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.annotations;
+package org.apache.directory.scim.core.repository.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
@@ -27,7 +27,7 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.apache.directory.scim.server.repository.extensions.ProcessingExtension;
+import org.apache.directory.scim.core.repository.extensions.ProcessingExtension;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/AttributeFilterExtension.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/AttributeFilterExtension.java
similarity index 86%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/AttributeFilterExtension.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/AttributeFilterExtension.java
index 889440f..ef63aaa 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/AttributeFilterExtension.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/AttributeFilterExtension.java
@@ -17,9 +17,9 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.extensions;
+package org.apache.directory.scim.core.repository.extensions;
-import org.apache.directory.scim.server.repository.extensions.exceptions.ClientFilterException;
+import org.apache.directory.scim.spec.filter.attribute.ScimRequestContext;
import org.apache.directory.scim.spec.resources.ScimResource;
public interface AttributeFilterExtension extends ProcessingExtension {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/exceptions/ClientFilterException.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ClientFilterException.java
similarity index 81%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/exceptions/ClientFilterException.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ClientFilterException.java
index 805aaa9..e93e7e7 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/exceptions/ClientFilterException.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ClientFilterException.java
@@ -17,9 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.extensions.exceptions;
-
-import jakarta.ws.rs.core.Response.Status;
+package org.apache.directory.scim.core.repository.extensions;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -29,12 +27,12 @@
public class ClientFilterException extends Exception {
private static final long serialVersionUID = 3308947684934769952L;
-
- Status status;
-
- public ClientFilterException(Status status, String message) {
+
+ private final int status;
+
+ public ClientFilterException(int statusCode, String message) {
super(message);
- this.status = status;
+ this.status = statusCode;
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ProcessingExtension.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ProcessingExtension.java
similarity index 92%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ProcessingExtension.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ProcessingExtension.java
index 8384c03..6ab280b 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ProcessingExtension.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ProcessingExtension.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.extensions;
+package org.apache.directory.scim.core.repository.extensions;
public interface ProcessingExtension {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/schema/ScimExtensionRegistryProducer.java b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ScimExtensionRegistryProducer.java
similarity index 94%
rename from scim-server/src/main/java/org/apache/directory/scim/server/schema/ScimExtensionRegistryProducer.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ScimExtensionRegistryProducer.java
index 5c564e9..a26f174 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/schema/ScimExtensionRegistryProducer.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/repository/extensions/ScimExtensionRegistryProducer.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.schema;
+package org.apache.directory.scim.core.repository.extensions;
import jakarta.enterprise.inject.Produces;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/schema/SchemaRegistry.java b/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
similarity index 98%
rename from scim-server/src/main/java/org/apache/directory/scim/server/schema/SchemaRegistry.java
rename to scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
index bbd6c09..bb573c0 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/schema/SchemaRegistry.java
+++ b/scim-core/src/main/java/org/apache/directory/scim/core/schema/SchemaRegistry.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.schema;
+package org.apache.directory.scim.core.schema;
import java.util.Collection;
import java.util.Collections;
diff --git a/scim-core/src/main/resources/META-INF/beans.xml b/scim-core/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..a47f43b
--- /dev/null
+++ b/scim-core/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,22 @@
+<!-- Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License. -->
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
+ version="1.1" bean-discovery-mode="all">
+
+</beans>
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/repository/PrioritySortingComparatorTest.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/PrioritySortingComparatorTest.java
similarity index 97%
rename from scim-server/src/test/java/org/apache/directory/scim/server/repository/PrioritySortingComparatorTest.java
rename to scim-core/src/test/java/org/apache/directory/scim/core/repository/PrioritySortingComparatorTest.java
index 4b32c97..22b28d0 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/repository/PrioritySortingComparatorTest.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/PrioritySortingComparatorTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import java.util.Arrays;
import java.util.Collections;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/repository/RepositorySchemaRegistryTest.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/RepositorySchemaRegistryTest.java
similarity index 93%
rename from scim-server/src/test/java/org/apache/directory/scim/server/repository/RepositorySchemaRegistryTest.java
rename to scim-core/src/test/java/org/apache/directory/scim/core/repository/RepositorySchemaRegistryTest.java
index 559d874..64bb0a6 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/repository/RepositorySchemaRegistryTest.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/RepositorySchemaRegistryTest.java
@@ -17,13 +17,13 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
import static org.assertj.core.api.Assertions.assertThat;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.apache.directory.scim.spec.schema.Schema;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/repository/UpdateRequestTest.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/UpdateRequestTest.java
similarity index 87%
rename from scim-server/src/test/java/org/apache/directory/scim/server/repository/UpdateRequestTest.java
rename to scim-core/src/test/java/org/apache/directory/scim/core/repository/UpdateRequestTest.java
index 38ba5e7..669e5f9 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/repository/UpdateRequestTest.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/UpdateRequestTest.java
@@ -17,32 +17,29 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository;
+package org.apache.directory.scim.core.repository;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.apache.directory.scim.server.rest.ObjectMapperFactory;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.server.utility.ExampleObjectExtension;
-import org.apache.directory.scim.server.utility.Subobject;
+import org.apache.directory.scim.core.repository.utility.ExampleObjectExtension;
+import org.apache.directory.scim.core.repository.utility.Subobject;
import org.apache.directory.scim.spec.extension.EnterpriseExtension;
import org.apache.directory.scim.spec.extension.EnterpriseExtension.Manager;
-import org.apache.directory.scim.spec.extension.ScimExtensionRegistry;
import org.apache.directory.scim.spec.phonenumber.PhoneNumberParseException;
-import org.apache.directory.scim.spec.protocol.data.PatchOperation;
-import org.apache.directory.scim.spec.protocol.data.PatchOperation.Type;
-import org.apache.directory.scim.spec.protocol.data.PatchOperationPath;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
+import org.apache.directory.scim.spec.patch.PatchOperation;
+import org.apache.directory.scim.spec.patch.PatchOperation.Type;
+import org.apache.directory.scim.spec.patch.PatchOperationPath;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.apache.directory.scim.spec.resources.Address;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
@@ -50,27 +47,23 @@
import org.apache.directory.scim.spec.resources.PhoneNumber.GlobalPhoneNumberBuilder;
import org.apache.directory.scim.spec.resources.Photo;
import org.apache.directory.scim.spec.resources.ScimUser;
-import org.assertj.core.api.Assertions;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
+import org.apache.directory.scim.spec.schema.Schemas;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.junit.jupiter.MockitoExtension;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import static org.assertj.core.groups.Tuple.tuple;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
@Slf4j
-@ExtendWith(MockitoExtension.class)
public class UpdateRequestTest {
private static final String FIRST = "first";
@@ -84,50 +77,42 @@
private SchemaRegistry schemaRegistry;
- @Mock
- Repository<ScimUser> repository;
-
- RepositoryRegistry repositoryRegistry;
-
@BeforeEach
public void initialize() throws Exception {
- schemaRegistry = new SchemaRegistry();
- repositoryRegistry = new RepositoryRegistry(schemaRegistry, ScimExtensionRegistry.getInstance(), null);
-
- Mockito.when(repository.getExtensionList())
- .thenReturn(Stream.of(EnterpriseExtension.class,ExampleObjectExtension.class).collect(Collectors.toList()));
-
- repositoryRegistry.registerRepository(ScimUser.class, repository);
+ schemaRegistry = mock(SchemaRegistry.class);
+ when(schemaRegistry.getSchema(ScimUser.SCHEMA_URI)).thenReturn(Schemas.schemaFor(ScimUser.class));
+ when(schemaRegistry.getSchema(EnterpriseExtension.URN)).thenReturn(Schemas.schemaForExtension(EnterpriseExtension.class));
+ when(schemaRegistry.getSchema(ExampleObjectExtension.URN)).thenReturn(Schemas.schemaForExtension(ExampleObjectExtension.class));
}
@Test
public void testResourcePassthrough() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1(), schemaRegistry);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser(), createUser(), schemaRegistry);
ScimUser result = updateRequest.getResource();
log.info("testResourcePassthrough: " + result);
- Assertions.assertThat(result)
+ assertThat(result)
.isNotNull();
}
@Test
public void testPatchPassthrough() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1PatchOps(), schemaRegistry);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser(), createUser1PatchOps(), schemaRegistry);
List<PatchOperation> result = updateRequest.getPatchOperations();
log.info("testPatchPassthrough: " + result);
- Assertions.assertThat(result)
+ assertThat(result)
.isNotNull();
}
@Test
public void testPatchToUpdate() throws Exception {
- UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser1(), createUser1PatchOps(), schemaRegistry);
+ UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", createUser(), createUser1PatchOps(), schemaRegistry);
assertThrows(UnsupportedOperationException.class, () -> updateRequest.getResource());
}
@Test
public void testAddSingleAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.setNickName("Jon");
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
List<PatchOperation> result = updateRequest.getPatchOperations();
@@ -139,9 +124,9 @@
@Test
public void testAddSingleExtension() throws Exception {
- ScimUser user1 = createUser1();
+ ScimUser user1 = createUser();
EnterpriseExtension ext = user1.removeExtension(EnterpriseExtension.class);
- ScimUser user2 = copy(user1);
+ ScimUser user2 = createUser();
user2.addExtension(ext);
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -154,8 +139,8 @@
@Test
public void testAddComplexAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.getName()
.setHonorificPrefix("Dr.");
@@ -169,8 +154,8 @@
@Test
public void testAddMultiValuedAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
mobilePhone.setType("mobile");
mobilePhone.setPrimary(false);
@@ -192,9 +177,10 @@
*/
@Test
public void testAddObjectToEmptyCollection() throws Exception {
- ScimUser user1 = createUser1();
+ ScimUser user1 = createUser();
user1.setPhoneNumbers(new ArrayList<>());
- ScimUser user2 = copy(user1);
+ ScimUser user2 = createUser();
+ user2.setPhoneNumbers(new ArrayList<>());
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
mobilePhone.setType("mobile");
@@ -204,7 +190,7 @@
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
assertNotNull(operations);
- assertEquals(1, operations.size());
+ assertThat(operations).hasSize(1);
PatchOperation operation = operations.get(0);
assertNotNull(operation.getValue());
assertEquals(Type.ADD, operation.getOperation());
@@ -213,9 +199,10 @@
@Test
public void testAddObjectsToEmptyCollection() throws Exception {
- ScimUser user1 = createUser1();
+ ScimUser user1 = createUser();
user1.setPhoneNumbers(new ArrayList<>());
- ScimUser user2 = copy(user1);
+ ScimUser user2 = createUser();
+ user2.setPhoneNumbers(new ArrayList<>());
PhoneNumber mobilePhone = new GlobalPhoneNumberBuilder().globalNumber("+1(814)867-5306").build();
mobilePhone.setType("mobile");
@@ -247,8 +234,8 @@
@Test
public void testReplaceSingleAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.setActive(false);
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -261,8 +248,8 @@
@Test
public void testReplaceExtensionSingleAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.getExtension(EnterpriseExtension.class).setDepartment("Dept XYZ.");
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -275,8 +262,8 @@
@Test
public void testReplaceComplexAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.getName()
.setFamilyName("Nobody");
@@ -290,8 +277,8 @@
@Test
public void testReplaceMultiValuedAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.getEmails()
.stream()
.filter(e -> e.getType()
@@ -308,8 +295,8 @@
@Test
public void testRemoveSingleAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.setUserName(null);
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -322,8 +309,8 @@
@Test
public void testRemoveSingleExtension() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.removeExtension(EnterpriseExtension.class);
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -336,8 +323,8 @@
@Test
public void testRemoveComplexAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.getName()
.setMiddleName(null);
@@ -352,8 +339,8 @@
@Test
public void testRemoveFullComplexAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user2.setName(null);
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
@@ -366,8 +353,8 @@
@Test
public void testRemoveMultiValuedAttribute() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
List<Email> newEmails = user2.getEmails()
.stream()
.filter(e -> e.getType()
@@ -385,8 +372,8 @@
@Test
public void testRemoveMultiValuedAttributeWithSorting() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
Address localAddress = new Address();
localAddress.setStreetAddress("123 Main Street");
@@ -407,8 +394,8 @@
@Test
public void testAddMultiValuedAttributeWithSorting() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
Address localAddress = new Address();
localAddress.setStreetAddress("123 Main Street");
@@ -430,8 +417,8 @@
@Test
public void verifyEmptyArraysDoNotCauseMove() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
user1.setPhotos(new ArrayList<>());
ExampleObjectExtension ext1 = new ExampleObjectExtension();
@@ -448,8 +435,8 @@
@Test
public void verifyEmptyArraysAreNulled() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
//Set empty list on root object and verify no differences
user1.setPhotos(new ArrayList<>());
@@ -458,7 +445,7 @@
assertTrue(operations.isEmpty(), "Empty Arrays are not being nulled out");
//Reset user 1 and empty list on Extension and verify no differences
- user1 = createUser1();
+ user1 = createUser();
ExampleObjectExtension ext = new ExampleObjectExtension();
ext.setList(new ArrayList<>());
operations = updateRequest.getPatchOperations();
@@ -478,8 +465,8 @@
*/
@Test
public void testAddArray() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
Photo photo = new Photo();
photo.setType("photo");
@@ -498,7 +485,7 @@
UpdateRequest<ScimUser> updateRequest = new UpdateRequest<>("1234", user1, user2, schemaRegistry);
List<PatchOperation> operations = updateRequest.getPatchOperations();
- Assertions.assertThat(operations)
+ assertThat(operations)
.hasSize(3)
.extracting("operation","value")
.contains(
@@ -509,8 +496,8 @@
@Test
public void testRemoveArray() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
Photo photo = new Photo();
photo.setType("photo");
@@ -539,8 +526,8 @@
@Disabled
//TODO: do asserts
public void testNonTypedAttributeListGetUseablePath() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
ExampleObjectExtension ext1 = new ExampleObjectExtension();
ext1.setList(Stream.of(FIRST,SECOND,THIRD).collect(Collectors.toList()));
@@ -562,8 +549,8 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart1() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName(nickname);
@@ -580,8 +567,8 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart2() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName(nickname);
@@ -600,8 +587,8 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart3() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName(nickname);
@@ -621,8 +608,8 @@
//TODO: do asserts
public void testMoveFormatNameToNicknamePart4() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName(nickname);
@@ -641,8 +628,8 @@
@Disabled
//TODO: do asserts
public void testMoveFormatNameToNicknamePart5() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName("");
@@ -660,8 +647,8 @@
@ParameterizedTest
@MethodSource("testListOfStringsParameters")
public void testListOfStringsParameterized(List<String> list1, List<String> list2, List<ExpectedPatchOperation> ops) throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
ExampleObjectExtension ext1 = new ExampleObjectExtension();
ext1.setList(list1);
@@ -730,8 +717,8 @@
@Test
//TODO: do parameterized test
public void offsetTest1() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
ExampleObjectExtension ext1 = new ExampleObjectExtension();
ext1.setList(Stream.of("D","M","Y","Z","Z","Z","Z","Z").collect(Collectors.toList()));
@@ -752,8 +739,8 @@
@Test
public void testMoveFormatNameToNicknamePart6() throws Exception {
- ScimUser user1 = createUser1();
- ScimUser user2 = copy(user1);
+ ScimUser user1 = createUser();
+ ScimUser user2 = createUser();
String nickname = "John Xander Anyman";
user1.setNickName(null);
@@ -781,7 +768,7 @@
// final int expectedNumberOfOperationsWithBug = 4;
//
// ScimUser user1 = createUser1();
-// ScimUser user2 = copy(user1);
+// ScimUser user2 = createUser();
// user2.getPhoneNumbers().removeIf(p -> p.getType().equals("home"));
//
// PhoneNumber workNumber = user2.getPhoneNumbers().stream().filter(p -> p.getType().equals("work")).findFirst().orElse(null);
@@ -796,21 +783,21 @@
}
private PatchOperation assertSingleResult(List<PatchOperation> result) {
- Assertions.assertThat(result)
+ assertThat(result)
.isNotNull();
- Assertions.assertThat(result)
+ assertThat(result)
.hasSize(1);
PatchOperation actual = result.get(0);
return actual;
}
private void checkAssertions(PatchOperation actual, Type op, String path, Object value) throws FilterParseException {
- Assertions.assertThat(actual.getOperation())
+ assertThat(actual.getOperation())
.isEqualTo(op);
- Assertions.assertThat(actual.getPath()
+ assertThat(actual.getPath()
.toString())
.isEqualTo(path);
- Assertions.assertThat(actual.getValue())
+ assertThat(actual.getValue())
.isEqualTo(value);
}
@@ -835,7 +822,7 @@
return homeAddress;
}
- public static ScimUser createUser1() throws PhoneNumberParseException {
+ public static ScimUser createUser() throws PhoneNumberParseException {
ScimUser user = new ScimUser();
user.setId("912345678");
user.setExternalId("912345678");
@@ -920,12 +907,6 @@
return user;
}
- private ScimUser copy(ScimUser scimUser) throws IOException {
- ObjectMapper objMapper = new ObjectMapperFactory(schemaRegistry).createObjectMapper();
- String json = objMapper.writeValueAsString(scimUser);
- return objMapper.readValue(json, ScimUser.class);
- }
-
private List<PatchOperation> createUser1PatchOps() throws FilterParseException {
List<PatchOperation> patchOperations = new ArrayList<>();
PatchOperation removePhoneNumberOp = new PatchOperation();
diff --git a/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/ExampleObjectExtension.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/ExampleObjectExtension.java
new file mode 100644
index 0000000..963d172
--- /dev/null
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/ExampleObjectExtension.java
@@ -0,0 +1,95 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+
+* http://www.apache.org/licenses/LICENSE-2.0
+
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.directory.scim.core.repository.utility;
+
+import jakarta.xml.bind.annotation.*;
+import lombok.Data;
+import org.apache.directory.scim.spec.annotation.ScimAttribute;
+import org.apache.directory.scim.spec.annotation.ScimExtensionType;
+import org.apache.directory.scim.spec.resources.ScimExtension;
+import org.apache.directory.scim.spec.schema.Schema.Attribute.Mutability;
+import org.apache.directory.scim.spec.schema.Schema.Attribute.Returned;
+
+import java.io.Serializable;
+import java.util.List;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+@ScimExtensionType(required = false, name = "ExampleObject", id = ExampleObjectExtension.URN, description = "Example Object Extensions.")
+@Data
+public class ExampleObjectExtension implements ScimExtension {
+
+ private static final long serialVersionUID = -5398090056271556423L;
+
+ public static final String URN = "urn:ietf:params:scim:schemas:extension:example:2.0:Object";
+
+ @XmlType
+ @XmlAccessorType(XmlAccessType.NONE)
+ @Data
+ public static class ComplexObject implements Serializable {
+
+ private static final long serialVersionUID = 2822581434679824690L;
+
+ @ScimAttribute(description = "The \"id\" of the complex object.")
+ @XmlElement
+ private String value;
+
+ @ScimAttribute(mutability = Mutability.READ_ONLY, description = "displayName of the object.")
+ @XmlElement
+ private String displayName;
+ }
+
+ @ScimAttribute(returned = Returned.ALWAYS)
+ @XmlElement
+ private String valueAlways;
+
+ @ScimAttribute(returned = Returned.DEFAULT)
+ @XmlElement
+ private String valueDefault;
+
+ @ScimAttribute(returned = Returned.NEVER)
+ @XmlElement
+ private String valueNever;
+
+ @ScimAttribute(returned = Returned.REQUEST)
+ @XmlElement
+ private String valueRequest;
+
+ @ScimAttribute(returned = Returned.REQUEST)
+ @XmlElement
+ private ComplexObject valueComplex;
+
+ @ScimAttribute
+ @XmlElement
+ private List<String> list;
+
+ @ScimAttribute
+ @XmlElement
+ private List<Order> enumList;
+
+ @ScimAttribute
+ @XmlElement
+ private Subobject subobject;
+
+ @Override
+ public String getUrn() {
+ return URN;
+ }
+}
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Order.java
similarity index 68%
copy from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java
copy to scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Order.java
index 2fd1b2d..c992ab8 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Order.java
@@ -17,19 +17,28 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.core.repository.utility;
-import java.util.function.Function;
-
-public interface FilterExpression {
+public enum Order {
- String toFilter();
-
- void setAttributePath(String urn, String parentAttributeName);
-
- String toUnqualifiedFilter();
-
- default <U> U map(Function<? super FilterExpression, U> mapper) {
- return mapper.apply(this);
+ FIRST("first"),
+ SECOND("second"),
+ THIRD("third"),
+ FOURTH("fourth");
+
+ Order(String value) {
+ this.value = value;
}
+
+ private final String value;
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ return value;
+ }
+
}
diff --git a/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Subobject.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Subobject.java
new file mode 100644
index 0000000..c0e087d
--- /dev/null
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/utility/Subobject.java
@@ -0,0 +1,57 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+
+* http://www.apache.org/licenses/LICENSE-2.0
+
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+package org.apache.directory.scim.core.repository.utility;
+
+import jakarta.xml.bind.annotation.XmlElement;
+import lombok.Data;
+import org.apache.directory.scim.spec.annotation.ScimAttribute;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class Subobject implements Serializable {
+
+ private static final long serialVersionUID = -8081556701833520316L;
+
+ @ScimAttribute
+ @XmlElement
+ private String string1;
+
+ @ScimAttribute
+ @XmlElement
+ private String string2;
+
+ @ScimAttribute
+ @XmlElement
+ private Boolean boolean1;
+
+ @ScimAttribute
+ @XmlElement
+ private Boolean boolean2;
+
+ @ScimAttribute
+ @XmlElement
+ private List<String> list1;
+
+ @ScimAttribute
+ @XmlElement
+ private List<String> list2;
+}
diff --git a/scim-coverage/pom.xml b/scim-coverage/pom.xml
index eb88fb2..ac369c7 100644
--- a/scim-coverage/pom.xml
+++ b/scim-coverage/pom.xml
@@ -42,6 +42,10 @@
</dependency>
<dependency>
<groupId>org.apache.directory.scim</groupId>
+ <artifactId>scim-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.scim</groupId>
<artifactId>scim-server</artifactId>
</dependency>
<dependency>
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
index 1ff38f1..a63fd67 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/JerseyApplication.java
@@ -21,7 +21,7 @@
import jakarta.inject.Inject;
import jakarta.ws.rs.core.UriBuilder;
-import org.apache.directory.scim.server.ScimConfiguration;
+import org.apache.directory.scim.core.Initializable;
import org.apache.directory.scim.server.configuration.ServerConfiguration;
import org.apache.directory.scim.server.rest.ScimResourceHelper;
@@ -54,15 +54,15 @@
}
/**
- * A {@link ScimConfiguration} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
+ * A {@link Initializable} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
*/
- public static class ServerConfigInitializer implements ScimConfiguration {
+ public static class ServerConfigInitializer implements Initializable {
@Inject
private ServerConfiguration serverConfiguration;
@Override
- public void configure() {
+ public void initialize() {
// Set any unique configuration bits
serverConfiguration
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 fca8299..2455246 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
@@ -24,14 +24,13 @@
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
@@ -43,6 +42,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@Named
@ApplicationScoped
diff --git a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemorySelfResolverImpl.java b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemorySelfResolverImpl.java
index 1d19096..2372420 100644
--- a/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemorySelfResolverImpl.java
+++ b/scim-server-examples/scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service/InMemorySelfResolverImpl.java
@@ -21,7 +21,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-import org.apache.directory.scim.server.repository.SelfIdResolver;
+import org.apache.directory.scim.core.repository.SelfIdResolver;
import java.security.Principal;
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 7dc686b..6bfcdd5 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
@@ -33,15 +33,15 @@
import org.apache.directory.scim.example.jersey.extensions.LuckyNumberExtension;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.*;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
/**
* Creates a singleton (effectively) Repository<ScimUser> with a memory-based
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/rest/RestApplication.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/rest/RestApplication.java
index 5a65c00..97f0850 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/rest/RestApplication.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/rest/RestApplication.java
@@ -20,7 +20,7 @@
package org.apache.directory.scim.example.memory.rest;
import jakarta.inject.Inject;
-import org.apache.directory.scim.server.ScimConfiguration;
+import org.apache.directory.scim.core.Initializable;
import org.apache.directory.scim.server.configuration.ServerConfiguration;
import org.apache.directory.scim.server.rest.ScimResourceHelper;
@@ -29,9 +29,6 @@
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
-import org.apache.directory.scim.spec.schema.ServiceProviderConfiguration;
-
-import static org.apache.directory.scim.spec.schema.ServiceProviderConfiguration.AuthenticationSchema.oauthBearer;
@ApplicationPath("v2")
public class RestApplication extends Application {
@@ -47,15 +44,15 @@
}
/**
- * A {@link ScimConfiguration} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
+ * A {@link Initializable} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
*/
- public static class ServerConfigInitializer implements ScimConfiguration {
+ public static class ServerConfigInitializer implements Initializable {
@Inject
private ServerConfiguration serverConfiguration;
@Override
- public void configure() {
+ public void initialize() {
// Set any unique configuration bits
serverConfiguration
.setId("scimple-in-memory-example")
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 2288eba..63ed582 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
@@ -24,14 +24,13 @@
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
@@ -43,6 +42,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Named;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@Named
@ApplicationScoped
diff --git a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemorySelfResolverImpl.java b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemorySelfResolverImpl.java
index 96019d3..711a1ea 100644
--- a/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemorySelfResolverImpl.java
+++ b/scim-server-examples/scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service/InMemorySelfResolverImpl.java
@@ -21,7 +21,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-import org.apache.directory.scim.server.repository.SelfIdResolver;
+import org.apache.directory.scim.core.repository.SelfIdResolver;
import java.security.Principal;
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 f845b9e..408d473 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
@@ -33,15 +33,15 @@
import org.apache.directory.scim.example.memory.extensions.LuckyNumberExtension;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.*;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
/**
* Creates a singleton (effectively) Repository<ScimUser> with a memory-based
diff --git a/scim-server/pom.xml b/scim-server/pom.xml
index 583617a..4fb9590 100644
--- a/scim-server/pom.xml
+++ b/scim-server/pom.xml
@@ -43,6 +43,10 @@
</dependency>
<dependency>
<groupId>org.apache.directory.scim</groupId>
+ <artifactId>scim-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.scim</groupId>
<artifactId>scim-spec-schema</artifactId>
</dependency>
<dependency>
@@ -103,11 +107,6 @@
<artifactId>catch-exception</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>com.flipkart.zjsonpatch</groupId>
- <artifactId>zjsonpatch</artifactId>
- <version>0.4.12</version>
- </dependency>
<dependency>
<groupId>org.apache.directory.scim</groupId>
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/ScimServerInitializer.java b/scim-server/src/main/java/org/apache/directory/scim/server/ScimServerInitializer.java
index 8c7bfe6..ceb7ea9 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/ScimServerInitializer.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/ScimServerInitializer.java
@@ -25,6 +25,7 @@
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.enterprise.inject.spi.Extension;
import jakarta.enterprise.inject.spi.ProcessBean;
+import org.apache.directory.scim.core.Initializable;
import java.util.ArrayList;
import java.util.List;
@@ -34,15 +35,15 @@
private List<Bean<?>> scimConfigBeans = new ArrayList<>();
public <T> void collect(@Observes ProcessBean<T> event) {
- if (ScimConfiguration.class.isAssignableFrom(event.getBean().getBeanClass())) {
+ if (Initializable.class.isAssignableFrom(event.getBean().getBeanClass())) {
scimConfigBeans.add(event.getBean());
}
}
public void load(@Observes AfterDeploymentValidation event, BeanManager beanManager) {
scimConfigBeans.forEach(bean -> {
- ScimConfiguration configBean = (ScimConfiguration) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean));
- configBean.configure();
+ Initializable configBean = (Initializable) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean));
+ configBean.initialize();
});
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/FilterParseExceptionMapper.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/FilterParseExceptionMapper.java
index c4bd212..521e36a 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/FilterParseExceptionMapper.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/FilterParseExceptionMapper.java
@@ -25,7 +25,7 @@
import org.apache.directory.scim.spec.protocol.ErrorMessageType;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
+import org.apache.directory.scim.spec.filter.FilterParseException;
public class FilterParseExceptionMapper implements ExceptionMapper<FilterParseException> {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToCreateResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToCreateResourceException.java
index 335a076..be83d53 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToCreateResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToCreateResourceException.java
@@ -23,6 +23,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -3872700870424005641L;
public UnableToCreateResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToCreateResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToDeleteResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToDeleteResourceException.java
index 64a21dd..d332fc6 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToDeleteResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToDeleteResourceException.java
@@ -23,6 +23,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -3872700870424005641L;
public UnableToDeleteResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToDeleteResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToResolveIdResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToResolveIdResourceException.java
index 21b5908..cacae1b 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToResolveIdResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToResolveIdResourceException.java
@@ -19,10 +19,11 @@
package org.apache.directory.scim.server.exception;
-import jakarta.ws.rs.core.Response.Status;
+import jakarta.ws.rs.core.Response.Status;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -7401709416973728017L;
public UnableToResolveIdResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToResolveIdResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveExtensionsResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveExtensionsResourceException.java
index 37c184e..edf646d 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveExtensionsResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveExtensionsResourceException.java
@@ -23,6 +23,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -3872700870424005641L;
public UnableToRetrieveExtensionsResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToRetrieveExtensionsResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveResourceException.java
index f407d22..3c1c8bb 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToRetrieveResourceException.java
@@ -23,6 +23,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -3872700870424005641L;
public UnableToRetrieveResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToRetrieveResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToUpdateResourceException.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToUpdateResourceException.java
index 8938a80..075d085 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToUpdateResourceException.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/UnableToUpdateResourceException.java
@@ -23,6 +23,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.core.repository.ResourceException;
@Data
@EqualsAndHashCode(callSuper=true)
@@ -31,10 +32,10 @@
private static final long serialVersionUID = -3872700870424005641L;
public UnableToUpdateResourceException(Status status, String message) {
- super(status, message);
+ super(status.getStatusCode(), message);
}
public UnableToUpdateResourceException(Status status, String message, Throwable cause) {
- super(status, message, cause);
+ super(status.getStatusCode(), message, cause);
}
}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/SelfIdResolver.java b/scim-server/src/main/java/org/apache/directory/scim/server/repository/SelfIdResolver.java
deleted file mode 100644
index ce491ba..0000000
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/SelfIdResolver.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-
-* http://www.apache.org/licenses/LICENSE-2.0
-
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-package org.apache.directory.scim.server.repository;
-
-import java.security.Principal;
-
-import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-
-public interface SelfIdResolver {
-
- String resolveToInternalId(Principal principal) throws UnableToResolveIdResourceException;
-
-}
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
index d5b0042..7a4b541 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/AttributeUtil.java
@@ -27,9 +27,8 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.directory.scim.server.exception.AttributeDoesNotExistException;
import org.apache.directory.scim.server.exception.AttributeException;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.json.ObjectMapperFactory;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
import org.apache.directory.scim.spec.resources.ScimResource;
@@ -39,6 +38,7 @@
import org.apache.directory.scim.spec.schema.Schema.Attribute;
import org.apache.directory.scim.spec.schema.Schema.Attribute.Returned;
import org.apache.directory.scim.spec.schema.Schema.Attribute.Type;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
index 6d2e860..f4489cd 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
@@ -37,34 +37,34 @@
import jakarta.ws.rs.core.Response.Status.Family;
import org.apache.directory.scim.server.exception.*;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.repository.RepositoryRegistry;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonProcessingException;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.repository.annotations.ScimProcessingExtension;
-import org.apache.directory.scim.server.repository.extensions.AttributeFilterExtension;
-import org.apache.directory.scim.server.repository.extensions.ProcessingExtension;
-import org.apache.directory.scim.server.repository.extensions.ScimRequestContext;
-import org.apache.directory.scim.server.repository.extensions.exceptions.ClientFilterException;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.core.repository.annotations.ScimProcessingExtension;
+import org.apache.directory.scim.core.repository.extensions.AttributeFilterExtension;
+import org.apache.directory.scim.core.repository.extensions.ProcessingExtension;
+import org.apache.directory.scim.spec.filter.attribute.ScimRequestContext;
+import org.apache.directory.scim.core.repository.extensions.ClientFilterException;
import org.apache.directory.scim.spec.adapter.FilterWrapper;
import org.apache.directory.scim.spec.protocol.BaseResourceTypeResource;
import org.apache.directory.scim.spec.protocol.ErrorMessageType;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
import org.apache.directory.scim.spec.protocol.data.ListResponse;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.data.SearchRequest;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortOrder;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortOrder;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.ScimResource;
import lombok.extern.slf4j.Slf4j;
@@ -120,10 +120,10 @@
try {
resource = repository.get(id);
} catch (UnableToRetrieveResourceException e2) {
- if (e2.getStatus()
- .getFamily()
+ Status status = Status.fromStatusCode(e2.getStatus());
+ if (status.getFamily()
.equals(Family.SERVER_ERROR)) {
- return createGenericExceptionResponse(e2, e2.getStatus());
+ return createGenericExceptionResponse(e2, status);
}
} catch (Exception e) {
log.error("Uncaught repository exception", e);
@@ -246,7 +246,7 @@
try {
created = repository.create(resource);
} catch (UnableToCreateResourceException e1) {
- Status status = e1.getStatus();
+ Status status = Status.fromStatusCode(e1.getStatus());
ErrorResponse er = new ErrorResponse(status, "Error");
if (status == Status.CONFLICT) {
@@ -346,8 +346,7 @@
try {
filterResp = repository.find(filter, pageRequest, sortRequest);
} catch (UnableToRetrieveResourceException e1) {
- log.info("Caught an UnableToRetrieveResourceException " + e1.getMessage() + " : " + e1.getStatus()
- .toString());
+ log.info("Caught an UnableToRetrieveResourceException " + e1.getMessage() + " : " + e1.getStatus());
return createGenericExceptionResponse(e1, e1.getStatus());
} catch (Exception e) {
log.error("Uncaught repository exception", e);
@@ -632,10 +631,7 @@
repository.delete(id);
return response;
} catch (UnableToDeleteResourceException e) {
- Status status = e.getStatus();
- response = Response.status(status)
- .build();
-
+ response = Response.status(e.getStatus()).build();
log.error("Unable to delete resource", e);
return response;
@@ -683,6 +679,10 @@
.build();
}
+ static Response createGenericExceptionResponse(Throwable e1, int statusCode) {
+ return createGenericExceptionResponse(e1, Status.fromStatusCode(statusCode));
+ }
+
public static Response createGenericExceptionResponse(Throwable e1, Status status) {
Status myStatus = status;
if (myStatus == null) {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
index 00f2a78..659cd6e 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BulkResourceImpl.java
@@ -29,14 +29,14 @@
import jakarta.ws.rs.core.UriInfo;
import org.apache.commons.lang3.StringUtils;
+import org.apache.directory.scim.core.repository.ResourceException;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToDeleteResourceException;
import org.apache.directory.scim.server.exception.UnableToRetrieveResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.RepositoryRegistry;
+import org.apache.directory.scim.core.repository.UpdateRequest;
import org.apache.directory.scim.spec.protocol.BulkResource;
import org.apache.directory.scim.spec.protocol.data.BulkOperation;
import org.apache.directory.scim.spec.protocol.data.BulkOperation.Method;
@@ -49,6 +49,7 @@
import org.apache.directory.scim.spec.schema.Schema;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@Slf4j
@ApplicationScoped
@@ -228,7 +229,7 @@
if (!errorCountExceeded && !(operationResult.getResponse() instanceof ErrorResponse)) {
try {
this.handleBulkOperationMethod(allUnresolveds, operationResult, bulkIdKeyToOperationResult, uriInfo);
- } catch (UnableToCreateResourceException | UnableToDeleteResourceException | UnableToUpdateResourceException resourceException) {
+ } catch (ResourceException resourceException) {
log.error("Failed to do bulk operation", resourceException);
errorCount += errorCountIncrement;
@@ -308,7 +309,7 @@
bulkOperationResult.setLocation(null);
createAndSetErrorResponse(bulkOperationResult, unableToUpdateResourceException.getStatus(), detail);
this.cleanup(bulkIdKey, transitiveReverseDependencies, bulkIdKeyToOperationResult);
- } catch (UnableToRetrieveResourceException e) {
+ } catch (ResourceException e) {
log.error("Could not complete final resolution pass, unresolvable bulkId", e);
String detail = e.getLocalizedMessage();
@@ -352,7 +353,7 @@
if (StringUtils.isNotBlank(scimResource.getId())) {
repository.delete(scimResource.getId());
}
- } catch (UnableToDeleteResourceException unableToDeleteResourceException) {
+ } catch (ResourceException unableToDeleteResourceException) {
log.error("Could not delete ScimResource after failure: {}", scimResource);
}
for (String dependentBulkIdKey : reverseDependencies) {
@@ -370,7 +371,7 @@
dependentOperationResult.setLocation(null);
createAndSetErrorResponse(dependentOperationResult, Status.CONFLICT, String.format(OPERATION_DEPENDS_ON_FAILED_OPERATION, bulkId, dependentBulkIdKey));
dependentResourceRepository.delete(dependentResourceId);
- } catch (UnableToDeleteResourceException unableToDeleteResourceException) {
+ } catch (ResourceException unableToDeleteResourceException) {
log.error("Could not delete depenedent ScimResource after failing to update dependee", unableToDeleteResourceException);
}
}
@@ -390,7 +391,7 @@
* @throws UnableToUpdateResourceException
* @throws UnresolvableOperationException
*/
- private void handleBulkOperationMethod(List<IWishJavaHadTuples> unresolveds, BulkOperation operationResult, Map<String, BulkOperation> bulkIdKeyToOperationResult, UriInfo uriInfo) throws UnableToCreateResourceException, UnableToDeleteResourceException, UnableToUpdateResourceException, UnresolvableOperationException {
+ private void handleBulkOperationMethod(List<IWishJavaHadTuples> unresolveds, BulkOperation operationResult, Map<String, BulkOperation> bulkIdKeyToOperationResult, UriInfo uriInfo) throws ResourceException, UnresolvableOperationException {
ScimResource scimResource = operationResult.getData();
Method bulkOperationMethod = operationResult.getMethod();
String bulkId = operationResult.getBulkId();
@@ -485,6 +486,10 @@
}
}
+ private static void createAndSetErrorResponse(BulkOperation operationResult, int statusCode, String detail) {
+ createAndSetErrorResponse(operationResult, Status.fromStatusCode(statusCode), detail);
+ }
+
private static void createAndSetErrorResponse(BulkOperation operationResult, Status status, String detail) {
ErrorResponse error = new ErrorResponse(status, detail);
operationResult.setResponse(error);
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
index c47afc7..a76d9fa 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/GroupResourceImpl.java
@@ -25,10 +25,10 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.repository.RepositoryRegistry;
import org.apache.directory.scim.spec.protocol.GroupResource;
import org.apache.directory.scim.spec.resources.ScimGroup;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@Slf4j
@ApplicationScoped
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
index 365745f..04d38fb 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ObjectMapperFactory.java
@@ -23,12 +23,12 @@
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.resources.ScimResource;
import jakarta.enterprise.inject.Produces;
import jakarta.inject.Inject;
import jakarta.ws.rs.ext.Provider;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
/**
* Creates and configures an {@link ObjectMapper} used for {@code application/scim+json} parsing.
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
index ef08366..0566901 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ResourceTypesResourceImpl.java
@@ -28,11 +28,11 @@
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.protocol.ResourceTypesResource;
import org.apache.directory.scim.spec.protocol.data.ListResponse;
import org.apache.directory.scim.spec.schema.Meta;
import org.apache.directory.scim.spec.schema.ResourceType;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@ApplicationScoped
public class ResourceTypesResourceImpl implements ResourceTypesResource {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
index 21b61b7..fb6d21c 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SchemaResourceImpl.java
@@ -29,11 +29,11 @@
import jakarta.ws.rs.core.Response.Status;
import jakarta.ws.rs.core.UriInfo;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.protocol.SchemaResource;
import org.apache.directory.scim.spec.protocol.data.ListResponse;
import org.apache.directory.scim.spec.schema.Meta;
import org.apache.directory.scim.spec.schema.Schema;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
@ApplicationScoped
public class SchemaResourceImpl implements SchemaResource {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceDeserializer.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceDeserializer.java
index 3e395c9..13280ac 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceDeserializer.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceDeserializer.java
@@ -32,8 +32,8 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.spec.resources.ScimResource;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
public class ScimResourceDeserializer extends JsonDeserializer<ScimResource> {
private final SchemaRegistry schemaRegistry;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
index 0a46544..26f52bf 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimResourceHelper.java
@@ -19,7 +19,6 @@
package org.apache.directory.scim.server.rest;
-import java.util.HashSet;
import java.util.Set;
import org.apache.directory.scim.server.exception.FilterParseExceptionMapper;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
index 6242152..afc4b12 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/SelfResourceImpl.java
@@ -27,11 +27,12 @@
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
+import org.apache.directory.scim.core.repository.ResourceException;
import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-import org.apache.directory.scim.server.repository.SelfIdResolver;
+import org.apache.directory.scim.core.repository.SelfIdResolver;
import org.apache.directory.scim.spec.protocol.SelfResource;
import org.apache.directory.scim.spec.protocol.UserResource;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.exception.ScimException;
@@ -64,7 +65,7 @@
try {
String internalId = getInternalId();
return userResource.getById(internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdResourceException e) {
+ } catch (ResourceException e) {
return createErrorResponse(e);
} catch (ScimException e) {
return createErrorResponse(e);
@@ -84,7 +85,7 @@
try {
String internalId = getInternalId();
return userResource.update(resource, internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdResourceException e) {
+ } catch (ResourceException e) {
return createErrorResponse(e);
} catch (ScimException e) {
return createErrorResponse(e);
@@ -96,7 +97,7 @@
try {
String internalId = getInternalId();
return userResource.patch(patchRequest, internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdResourceException e) {
+ } catch (ResourceException e) {
return createErrorResponse(e);
} catch (ScimException e) {
return createErrorResponse(e);
@@ -108,7 +109,7 @@
try {
String internalId = getInternalId();
return userResource.delete(internalId);
- } catch (UnableToResolveIdResourceException e) {
+ } catch (ResourceException e) {
return createErrorResponse(e);
} catch (ScimException e) {
return createErrorResponse(e);
@@ -121,13 +122,13 @@
return er.toResponse();
}
- private Response createErrorResponse(UnableToResolveIdResourceException e) {
+ private Response createErrorResponse(ResourceException e) {
ErrorResponse er = new ErrorResponse(e.getStatus(), "Error");
er.addErrorMessage(e.getMessage());
return er.toResponse();
}
- private String getInternalId() throws UnableToResolveIdResourceException {
+ private String getInternalId() throws ResourceException {
Principal callerPrincipal = requestContext.getSecurityContext().getUserPrincipal();
if (callerPrincipal != null) {
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
index 433f299..daee288 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/UserResourceImpl.java
@@ -25,10 +25,10 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.repository.RepositoryRegistry;
import org.apache.directory.scim.spec.protocol.UserResource;
import org.apache.directory.scim.spec.resources.ScimUser;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
/**
* @author shawn
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/App.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/App.java
index 0044689..1b52f5a 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/App.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/App.java
@@ -21,7 +21,7 @@
import jakarta.inject.Inject;
import jakarta.ws.rs.core.Application;
-import org.apache.directory.scim.server.ScimConfiguration;
+import org.apache.directory.scim.core.Initializable;
import org.apache.directory.scim.server.configuration.ServerConfiguration;
import org.apache.directory.scim.server.rest.ScimResourceHelper;
@@ -40,15 +40,15 @@
}
/**
- * A {@link ScimConfiguration} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
+ * A {@link Initializable} allow for eager initialization of beans, this class configures the {@link ServerConfiguration}.
*/
- public static class ServerConfigInitializer implements ScimConfiguration {
+ public static class ServerConfigInitializer implements Initializable {
@Inject
private ServerConfiguration serverConfiguration;
@Override
- public void configure() {
+ public void initialize() {
// Set any unique configuration bits
serverConfiguration
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 7551899..f5e2676 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,16 +26,16 @@
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.ScimExtension;
import org.apache.directory.scim.spec.resources.ScimGroup;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import java.util.Collections;
import java.util.HashMap;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemorySelfResolverImpl.java b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemorySelfResolverImpl.java
index 4988940..9a1468d 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemorySelfResolverImpl.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/it/testapp/InMemorySelfResolverImpl.java
@@ -22,7 +22,7 @@
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.ws.rs.core.Response.Status;
import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-import org.apache.directory.scim.server.repository.SelfIdResolver;
+import org.apache.directory.scim.core.repository.SelfIdResolver;
import java.security.Principal;
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 e597877..241b428 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
@@ -26,15 +26,15 @@
import jakarta.ws.rs.core.Response;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
import org.apache.directory.scim.server.exception.UnableToUpdateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.UpdateRequest;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpressions;
-import org.apache.directory.scim.spec.protocol.filter.FilterResponse;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.UpdateRequest;
+import org.apache.directory.scim.spec.filter.FilterExpressions;
+import org.apache.directory.scim.spec.filter.FilterResponse;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.*;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import java.util.Collections;
import java.util.HashMap;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
index 21b6ce0..0a553a4 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/AttributeUtilTest.java
@@ -24,21 +24,20 @@
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
import org.apache.directory.scim.server.utility.ExampleObjectExtension;
import org.apache.directory.scim.server.utility.ExampleObjectExtension.ComplexObject;
import org.apache.directory.scim.spec.extension.EnterpriseExtension;
import org.apache.directory.scim.spec.extension.EnterpriseExtension.Manager;
import org.apache.directory.scim.spec.json.ObjectMapperFactory;
import org.apache.directory.scim.spec.phonenumber.PhoneNumberParseException;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import org.apache.directory.scim.spec.resources.Address;
import org.apache.directory.scim.spec.resources.Name;
import org.apache.directory.scim.spec.resources.PhoneNumber;
import org.apache.directory.scim.spec.resources.PhoneNumber.LocalPhoneNumberBuilder;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.apache.directory.scim.spec.schema.Schema;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.apache.directory.scim.spec.schema.Schemas;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
index f562ca4..a44b908 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
@@ -45,13 +45,13 @@
import org.mockito.Mockito;
import org.apache.directory.scim.server.exception.ScimServerException;
-import org.apache.directory.scim.server.repository.Repository;
+import org.apache.directory.scim.core.repository.Repository;
import org.apache.directory.scim.server.utility.ExampleObjectExtension;
import org.apache.directory.scim.server.utility.ExampleObjectExtension.ComplexObject;
import org.apache.directory.scim.spec.extension.EnterpriseExtension;
import org.apache.directory.scim.spec.extension.EnterpriseExtension.Manager;
import org.apache.directory.scim.spec.phonenumber.PhoneNumberParseException;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.data.SearchRequest;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BulkResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BulkResourceImplTest.java
index 514773d..bacb3b7 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BulkResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BulkResourceImplTest.java
@@ -19,18 +19,14 @@
package org.apache.directory.scim.server.rest;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
import jakarta.enterprise.inject.Instance;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriBuilder;
import jakarta.ws.rs.core.UriInfo;
import org.apache.directory.scim.server.exception.UnableToCreateResourceException;
-import org.apache.directory.scim.server.repository.Repository;
-import org.apache.directory.scim.server.repository.RepositoryRegistry;
-import org.apache.directory.scim.server.schema.SchemaRegistry;
+import org.apache.directory.scim.core.repository.Repository;
+import org.apache.directory.scim.core.repository.RepositoryRegistry;
import org.apache.directory.scim.spec.extension.ScimExtensionRegistry;
-import org.apache.directory.scim.spec.json.ObjectMapperFactory;
import org.apache.directory.scim.spec.protocol.data.BulkOperation;
import org.apache.directory.scim.spec.protocol.data.BulkRequest;
import org.apache.directory.scim.spec.protocol.data.BulkResponse;
@@ -39,6 +35,7 @@
import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.resources.ScimUser;
import org.apache.directory.scim.spec.schema.ResourceReference;
+import org.apache.directory.scim.core.schema.SchemaRegistry;
import org.junit.jupiter.api.Test;
import org.mockito.InOrder;
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
index 9dd6f08..ebb0ace 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/SelfResourceImplTest.java
@@ -33,8 +33,8 @@
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.SecurityContext;
-import org.apache.directory.scim.server.exception.UnableToResolveIdResourceException;
-import org.apache.directory.scim.server.repository.SelfIdResolver;
+import org.apache.directory.scim.core.repository.ResourceException;
+import org.apache.directory.scim.core.repository.SelfIdResolver;
import org.apache.directory.scim.spec.protocol.UserResource;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
import org.apache.directory.scim.spec.protocol.exception.ScimException;
@@ -64,7 +64,7 @@
}
@Test
- public void withSelfIdResolverTest() throws UnableToResolveIdResourceException, ScimException {
+ public void withSelfIdResolverTest() throws ResourceException, ScimException {
String internalId = "test-user-resolved";
Principal principal = mock(Principal.class);
diff --git a/scim-spec/scim-spec-protocol/pom.xml b/scim-spec/scim-spec-protocol/pom.xml
index 02cc587..3466f9f 100644
--- a/scim-spec/scim-spec-protocol/pom.xml
+++ b/scim-spec/scim-spec-protocol/pom.xml
@@ -64,28 +64,5 @@
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.antlr</groupId>
- <artifactId>antlr4-runtime</artifactId>
- <version>${version.antlr4}</version>
- </dependency>
</dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.antlr</groupId>
- <artifactId>antlr4-maven-plugin</artifactId>
- <version>${version.antlr4}</version>
- <executions>
- <execution>
- <goals>
- <goal>antlr4</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
</project>
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/AttributeReferenceAdapter.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/AttributeReferenceAdapter.java
index 43876a6..13b5673 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/AttributeReferenceAdapter.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/AttributeReferenceAdapter.java
@@ -21,7 +21,7 @@
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
public class AttributeReferenceAdapter extends XmlAdapter<String, AttributeReference> {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterAdapter.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterAdapter.java
index 3da65ef..ccac5cf 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterAdapter.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterAdapter.java
@@ -21,7 +21,7 @@
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
import lombok.extern.slf4j.Slf4j;
@Slf4j
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterWrapper.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterWrapper.java
index 6cd2e30..04b0662 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterWrapper.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/adapter/FilterWrapper.java
@@ -25,8 +25,8 @@
import org.apache.directory.scim.spec.protocol.ErrorMessageType;
import org.apache.directory.scim.spec.protocol.data.ErrorResponse;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.FilterParseException;
+import org.apache.directory.scim.spec.filter.Filter;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/BaseResourceTypeResource.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/BaseResourceTypeResource.java
index e6c4e39..c53235e 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/BaseResourceTypeResource.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/BaseResourceTypeResource.java
@@ -43,12 +43,12 @@
import jakarta.ws.rs.core.Response.Status;
import org.apache.directory.scim.spec.adapter.FilterWrapper;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.protocol.data.SearchRequest;
import org.apache.directory.scim.spec.protocol.exception.ScimException;
-import org.apache.directory.scim.spec.protocol.search.SortOrder;
+import org.apache.directory.scim.spec.filter.SortOrder;
import org.apache.directory.scim.spec.resources.ScimResource;
import static org.apache.directory.scim.spec.protocol.Constants.SCIM_CONTENT_TYPE;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SelfResource.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SelfResource.java
index d040b41..d7d18c1 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SelfResource.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/SelfResource.java
@@ -40,7 +40,7 @@
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReferenceListWrapper;
import org.apache.directory.scim.spec.protocol.data.PatchRequest;
import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.resources.ScimUser;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/ErrorResponse.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/ErrorResponse.java
index c0665f6..38e769a 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/ErrorResponse.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/ErrorResponse.java
@@ -61,6 +61,10 @@
super(SCHEMA_URI);
}
+ public ErrorResponse(int statusCode, String detail) {
+ this(Status.fromStatusCode(statusCode), detail);
+ }
+
public ErrorResponse(Status status, String detail) {
super(SCHEMA_URI);
this.status = status;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchRequest.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchRequest.java
index 4c9db03..941bda8 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchRequest.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchRequest.java
@@ -28,6 +28,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.spec.patch.PatchOperation;
import org.apache.directory.scim.spec.resources.BaseResource;
@Data
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/SearchRequest.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/SearchRequest.java
index 5779503..89eea52 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/SearchRequest.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/SearchRequest.java
@@ -31,11 +31,11 @@
import lombok.EqualsAndHashCode;
import org.apache.directory.scim.spec.adapter.AttributeReferenceAdapter;
import org.apache.directory.scim.spec.adapter.FilterAdapter;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
-import org.apache.directory.scim.spec.protocol.search.SortOrder;
-import org.apache.directory.scim.spec.protocol.search.SortRequest;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.PageRequest;
+import org.apache.directory.scim.spec.filter.SortOrder;
+import org.apache.directory.scim.spec.filter.SortRequest;
import org.apache.directory.scim.spec.resources.BaseResource;
/**
diff --git a/scim-spec/scim-spec-schema/pom.xml b/scim-spec/scim-spec-schema/pom.xml
index 2b5c799..26dba0b 100644
--- a/scim-spec/scim-spec-schema/pom.xml
+++ b/scim-spec/scim-spec-schema/pom.xml
@@ -94,6 +94,11 @@
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
diff --git a/scim-spec/scim-spec-protocol/src/main/antlr4/imports/Json.g4 b/scim-spec/scim-spec-schema/src/main/antlr4/imports/Json.g4
similarity index 100%
rename from scim-spec/scim-spec-protocol/src/main/antlr4/imports/Json.g4
rename to scim-spec/scim-spec-schema/src/main/antlr4/imports/Json.g4
diff --git a/scim-spec/scim-spec-protocol/src/main/antlr4/imports/Urn.g4 b/scim-spec/scim-spec-schema/src/main/antlr4/imports/Urn.g4
similarity index 100%
rename from scim-spec/scim-spec-protocol/src/main/antlr4/imports/Urn.g4
rename to scim-spec/scim-spec-schema/src/main/antlr4/imports/Urn.g4
diff --git a/scim-spec/scim-spec-protocol/src/main/antlr4/org/apache/directory/scim/server/filter/Filter.g4 b/scim-spec/scim-spec-schema/src/main/antlr4/org/apache/directory/scim/spec/filter/Filter.g4
similarity index 100%
rename from scim-spec/scim-spec-protocol/src/main/antlr4/org/apache/directory/scim/server/filter/Filter.g4
rename to scim-spec/scim-spec-schema/src/main/antlr4/org/apache/directory/scim/spec/filter/Filter.g4
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathAdapter.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/adapter/PatchOperationPathAdapter.java
similarity index 91%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathAdapter.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/adapter/PatchOperationPathAdapter.java
index f35666d..f767230 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathAdapter.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/adapter/PatchOperationPathAdapter.java
@@ -17,9 +17,10 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.data;
+package org.apache.directory.scim.spec.adapter;
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
+import org.apache.directory.scim.spec.patch.PatchOperationPath;
public class PatchOperationPathAdapter extends XmlAdapter<String, PatchOperationPath>{
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributeComparisonExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributeComparisonExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
index ef134fd..50573ae 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributeComparisonExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributeComparisonExpression.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -27,7 +27,7 @@
import org.apache.commons.lang3.StringEscapeUtils;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import lombok.Value;
@Value
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributePresentExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
similarity index 92%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributePresentExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
index f7a7670..8e54245 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/AttributePresentExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/AttributePresentExpression.java
@@ -17,10 +17,10 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.Value;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
@Value
public class AttributePresentExpression implements FilterExpression, ValueFilterExpression {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/CompareOperator.java
similarity index 94%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/CompareOperator.java
index 47cccea..189e4f0 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/CompareOperator.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
public enum CompareOperator {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ComplexLogicalFilterBuilder.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ComplexLogicalFilterBuilder.java
index bf015ee..7cae6af 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ComplexLogicalFilterBuilder.java
@@ -1,4 +1,4 @@
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
abstract class ComplexLogicalFilterBuilder extends SimpleLogicalFilterBuilder {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ExpressionBuildingListener.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
similarity index 86%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ExpressionBuildingListener.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
index 186b835..fed0292 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ExpressionBuildingListener.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ExpressionBuildingListener.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import java.util.ArrayDeque;
import java.util.Deque;
@@ -26,18 +26,17 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.directory.scim.server.filter.FilterBaseListener;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeCompareExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeGroupExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeLogicExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributePresentExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterAttributeCompareExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterAttributePresentExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterGroupExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterLogicExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterValuePathExpressionContext;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeCompareExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeGroupExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeLogicExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributePresentExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterAttributeCompareExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterAttributePresentExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterGroupExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterLogicExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterValuePathExpressionContext;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
public class ExpressionBuildingListener extends FilterBaseListener {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/Filter.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
similarity index 89%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/Filter.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
index 5ab936d..df8ef65 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/Filter.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/Filter.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.search;
+package org.apache.directory.scim.spec.filter;
import lombok.AccessLevel;
import lombok.Data;
@@ -26,11 +26,6 @@
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
-import org.apache.directory.scim.server.filter.FilterLexer;
-import org.apache.directory.scim.server.filter.FilterParser;
-import org.apache.directory.scim.spec.protocol.filter.ExpressionBuildingListener;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpression;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
import java.net.URLDecoder;
import java.net.URLEncoder;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterBuilder.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterBuilder.java
index 5303aa7..3c569cc 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterBuilder.java
@@ -1,6 +1,4 @@
-package org.apache.directory.scim.spec.protocol.filter;
-
-import org.apache.directory.scim.spec.protocol.search.Filter;
+package org.apache.directory.scim.spec.filter;
import java.time.LocalDate;
import java.time.LocalDateTime;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterComparisonFilterBuilder.java
similarity index 98%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterComparisonFilterBuilder.java
index ad83323..37e61ef 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterComparisonFilterBuilder.java
@@ -1,6 +1,6 @@
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import java.time.LocalDate;
import java.time.LocalDateTime;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
similarity index 94%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
index 2fd1b2d..dfb9ce1 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpression.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import java.util.function.Function;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpressions.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpressions.java
similarity index 87%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpressions.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpressions.java
index 3356355..8d0bd20 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterExpressions.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterExpressions.java
@@ -1,6 +1,5 @@
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
-import org.apache.directory.scim.spec.protocol.search.Filter;
import org.apache.directory.scim.spec.resources.ScimResource;
import org.apache.directory.scim.spec.schema.Schema;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterParseException.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterParseException.java
similarity index 95%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterParseException.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterParseException.java
index 96dfea0..0c9e834 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterParseException.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterParseException.java
@@ -20,7 +20,7 @@
/**
*
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
/**
* @author stevemoyer
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterResponse.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterResponse.java
similarity index 91%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterResponse.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterResponse.java
index 93b2642..777d8a4 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterResponse.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/FilterResponse.java
@@ -17,14 +17,13 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import java.util.Collection;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
-import org.apache.directory.scim.spec.protocol.search.PageRequest;
@Data
@EqualsAndHashCode
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/GroupExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/GroupExpression.java
similarity index 95%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/GroupExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/GroupExpression.java
index 736e18c..9de7ae0 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/GroupExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/GroupExpression.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcher.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcher.java
similarity index 98%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcher.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcher.java
index 1802deb..8e2e707 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcher.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcher.java
@@ -17,10 +17,10 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import org.apache.directory.scim.spec.exception.ScimResourceInvalidException;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import org.apache.directory.scim.spec.schema.AttributeContainer;
import org.apache.directory.scim.spec.schema.Schema;
import org.slf4j.Logger;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalExpression.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalExpression.java
index f9b2228..1f64b3e 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalExpression.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalOperator.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalOperator.java
similarity index 93%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalOperator.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalOperator.java
index 829d284..a674683 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/LogicalOperator.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/LogicalOperator.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
public enum LogicalOperator {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/PageRequest.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/PageRequest.java
similarity index 93%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/PageRequest.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/PageRequest.java
index 73691d5..a7c389c 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/PageRequest.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/PageRequest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.search;
+package org.apache.directory.scim.spec.filter;
import lombok.Data;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SimpleLogicalFilterBuilder.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SimpleLogicalFilterBuilder.java
index 4f9d2a2..8f87136 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SimpleLogicalFilterBuilder.java
@@ -1,7 +1,6 @@
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
@Slf4j
abstract class SimpleLogicalFilterBuilder implements FilterBuilder {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortOrder.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortOrder.java
similarity index 94%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortOrder.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortOrder.java
index a0d550b..ab7bfce 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortOrder.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortOrder.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.search;
+package org.apache.directory.scim.spec.filter;
import jakarta.xml.bind.annotation.XmlEnumValue;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortRequest.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortRequest.java
similarity index 86%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortRequest.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortRequest.java
index c485d80..8913ef7 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/search/SortRequest.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/SortRequest.java
@@ -17,9 +17,9 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.search;
+package org.apache.directory.scim.spec.filter;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import lombok.Data;
@Data
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/TreePrintingListener.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/TreePrintingListener.java
similarity index 84%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/TreePrintingListener.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/TreePrintingListener.java
index 20054d3..6d1aa81 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/TreePrintingListener.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/TreePrintingListener.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
@@ -26,19 +26,19 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeCompareExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeGroupExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributeLogicExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.AttributePresentExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterAttributeCompareExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterAttributeExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterAttributePresentExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterGroupExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterLogicExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FilterValuePathExpressionContext;
-import org.apache.directory.scim.server.filter.FilterParser.FullAttributePathContext;
-import org.apache.directory.scim.server.filter.FilterParser.PartialAttributePathContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeCompareExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeGroupExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributeLogicExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.AttributePresentExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterAttributeCompareExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterAttributeExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterAttributePresentExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterGroupExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterLogicExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FilterValuePathExpressionContext;
+import org.apache.directory.scim.spec.filter.FilterParser.FullAttributePathContext;
+import org.apache.directory.scim.spec.filter.FilterParser.PartialAttributePathContext;
public class TreePrintingListener extends ExpressionBuildingListener {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValueFilterExpression.java
similarity index 93%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValueFilterExpression.java
index 04e97a7..8ce5668 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValueFilterExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValueFilterExpression.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
public interface ValueFilterExpression {
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValuePathExpression.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValuePathExpression.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
index ac44f24..a39a5aa 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ValuePathExpression.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/ValuePathExpression.java
@@ -17,9 +17,9 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReference.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReference.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReference.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReference.java
index d941d32..ffe52ad 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReference.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReference.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.attribute;
+package org.apache.directory.scim.spec.filter.attribute;
import java.io.Serializable;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceListWrapper.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceListWrapper.java
index 6d383f6..f2819a6 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceListWrapper.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.attribute;
+package org.apache.directory.scim.spec.filter.attribute;
import java.util.HashSet;
import java.util.Set;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ScimRequestContext.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/ScimRequestContext.java
similarity index 87%
rename from scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ScimRequestContext.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/ScimRequestContext.java
index 2ca929e..9ddc86c 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/repository/extensions/ScimRequestContext.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/filter/attribute/ScimRequestContext.java
@@ -17,11 +17,11 @@
* under the License.
*/
-package org.apache.directory.scim.server.repository.extensions;
+package org.apache.directory.scim.spec.filter.attribute;
import java.util.Set;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperation.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
similarity index 93%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperation.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
index 2a79318..141e91b 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperation.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperation.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.data;
+package org.apache.directory.scim.spec.patch;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
@@ -29,6 +29,7 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.apache.directory.scim.spec.adapter.PatchOperationPathAdapter;
@Data
@EqualsAndHashCode
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPath.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
similarity index 87%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPath.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
index 4190778..5191042 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPath.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchOperationPath.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.data;
+package org.apache.directory.scim.spec.patch;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.BaseErrorListener;
@@ -27,10 +27,10 @@
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
-import org.apache.directory.scim.server.filter.FilterLexer;
-import org.apache.directory.scim.server.filter.FilterParser;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
-import org.apache.directory.scim.spec.protocol.filter.ValuePathExpression;
+import org.apache.directory.scim.spec.filter.FilterLexer;
+import org.apache.directory.scim.spec.filter.FilterParser;
+import org.apache.directory.scim.spec.filter.FilterParseException;
+import org.apache.directory.scim.spec.filter.ValuePathExpression;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchPathListener.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchPathListener.java
similarity index 79%
rename from scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchPathListener.java
rename to scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchPathListener.java
index 504f15e..283d2f1 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/data/PatchPathListener.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/patch/PatchPathListener.java
@@ -17,14 +17,14 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.data;
+package org.apache.directory.scim.spec.patch;
-import org.apache.directory.scim.server.filter.FilterParser.PatchPathFullContext;
-import org.apache.directory.scim.server.filter.FilterParser.PatchPathPartialContext;
-import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.filter.ExpressionBuildingListener;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpression;
-import org.apache.directory.scim.spec.protocol.filter.ValuePathExpression;
+import org.apache.directory.scim.spec.filter.FilterParser.PatchPathFullContext;
+import org.apache.directory.scim.spec.filter.FilterParser.PatchPathPartialContext;
+import org.apache.directory.scim.spec.filter.attribute.AttributeReference;
+import org.apache.directory.scim.spec.filter.ExpressionBuildingListener;
+import org.apache.directory.scim.spec.filter.FilterExpression;
+import org.apache.directory.scim.spec.filter.ValuePathExpression;
import lombok.Getter;
@Getter
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/LuckyNumberExtension.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/LuckyNumberExtension.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/LuckyNumberExtension.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/LuckyNumberExtension.java
index 482cad8..b50c45f 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/LuckyNumberExtension.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/LuckyNumberExtension.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol;
+package org.apache.directory.scim.spec;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/AbstractLexerParserTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/AbstractLexerParserTest.java
similarity index 98%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/AbstractLexerParserTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/AbstractLexerParserTest.java
index 227e34c..0f6644d 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/AbstractLexerParserTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/AbstractLexerParserTest.java
@@ -20,7 +20,7 @@
/**
*
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import org.apache.commons.lang3.ArrayUtils;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderEqualsTest.java
similarity index 94%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderEqualsTest.java
index c354b4e..56e911f 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderEqualsTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import java.text.SimpleDateFormat;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderGreaterTest.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderGreaterTest.java
index 7cd482b..efd9fcb 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderGreaterTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderLessThanTest.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderLessThanTest.java
index 763a139..3a636ae 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderLessThanTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderNotEqualsTest.java
similarity index 94%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderNotEqualsTest.java
index 61e4215..fd55ea0 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderNotEqualsTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import java.text.SimpleDateFormat;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderPresentTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderPresentTest.java
similarity index 87%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderPresentTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderPresentTest.java
index 5e47864..f9cb497 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderPresentTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderPresentTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderStringTest.java
similarity index 88%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderStringTest.java
index 1f3dc1d..a909b59 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderStringTest.java
@@ -17,10 +17,12 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderTest.java
similarity index 96%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderTest.java
index cd26126..641fad0 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterBuilderTest.java
@@ -17,16 +17,16 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.filter.Filter;
+import org.apache.directory.scim.spec.filter.FilterBuilder;
+import org.apache.directory.scim.spec.filter.FilterParseException;
import org.junit.jupiter.api.Test;
import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import static java.nio.charset.StandardCharsets.UTF_8;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterTest.java
similarity index 92%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterTest.java
index a73e60f..dbff6ef 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/FilterTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
@@ -25,8 +25,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.directory.scim.spec.protocol.search.Filter;
-
public class FilterTest extends AbstractLexerParserTest {
private static final Logger LOG = LoggerFactory.getLogger(FilterTest.class);
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcherTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcherTest.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcherTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcherTest.java
index 87b7681..2afa04f 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/InMemoryScimFilterMatcherTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/InMemoryScimFilterMatcherTest.java
@@ -17,10 +17,9 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.filter;
+package org.apache.directory.scim.spec.filter;
-import org.apache.directory.scim.spec.protocol.LuckyNumberExtension;
-import org.apache.directory.scim.spec.protocol.search.Filter;
+import org.apache.directory.scim.spec.LuckyNumberExtension;
import org.apache.directory.scim.spec.resources.*;
import org.apache.directory.scim.spec.schema.Meta;
import org.apache.directory.scim.spec.schema.Schemas;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceTest.java
similarity index 97%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceTest.java
index 51ea100..237b775 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/attribute/AttributeReferenceTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/filter/attribute/AttributeReferenceTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.attribute;
+package org.apache.directory.scim.spec.filter.attribute;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
diff --git a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/patch/PatchOperationPathTest.java
similarity index 93%
rename from scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathTest.java
rename to scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/patch/PatchOperationPathTest.java
index 1132d8b..df1cf7b 100644
--- a/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/data/PatchOperationPathTest.java
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/patch/PatchOperationPathTest.java
@@ -17,8 +17,9 @@
* under the License.
*/
-package org.apache.directory.scim.spec.protocol.data;
+package org.apache.directory.scim.spec.patch;
+import org.apache.directory.scim.spec.patch.PatchOperationPath;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;