Merge pull request #117 from apache/filter-builder-methods

Adds FilterBuilder connivance methods
diff --git a/lombok.config b/lombok.config
index 8571a69..7e0eb60 100644
--- a/lombok.config
+++ b/lombok.config
@@ -1 +1,2 @@
 lombok.accessors.chain=true
+lombok.addLombokGeneratedAnnotation = true
diff --git a/scim-server/pom.xml b/scim-server/pom.xml
index fa99682..8dbd477 100644
--- a/scim-server/pom.xml
+++ b/scim-server/pom.xml
@@ -50,6 +50,10 @@
       <artifactId>scim-spec-protocol</artifactId>
     </dependency>
     <dependency>
+      <groupId>com.fasterxml.jackson.jakarta.rs</groupId>
+      <artifactId>jackson-jakarta-rs-json-provider</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <scope>provided</scope>
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/provider/Provider.java b/scim-server/src/main/java/org/apache/directory/scim/server/provider/Provider.java
index ec4d50a..a6ab223 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/provider/Provider.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/provider/Provider.java
@@ -69,7 +69,7 @@
    * Allows the SCIM server's REST implementation to update and existing
    * resource via a PUT to a valid end-point.
    * 
-   * @param resource The ScimResource to update and persist.
+   * @param updateRequest The ScimResource to update and persist.
    * @return The newly updated ScimResource.
    * @throws UnableToUpdateResourceException When the ScimResource cannot be
    *         updated.
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
index 6844070..5cc844c 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/ScimJacksonXmlBindJsonProvider.java
@@ -19,8 +19,8 @@
 
 package org.apache.directory.scim.server.rest;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.jakarta.rs.json.JacksonXmlBindJsonProvider;
+import org.apache.directory.scim.spec.json.ObjectMapperFactory;
 import org.apache.directory.scim.spec.protocol.Constants;
 
 import jakarta.inject.Inject;
@@ -37,7 +37,7 @@
 public class ScimJacksonXmlBindJsonProvider extends JacksonXmlBindJsonProvider {
 
   @Inject
-  public ScimJacksonXmlBindJsonProvider(ObjectMapper objectMapper) {
-    super(objectMapper, DEFAULT_ANNOTATIONS);
+  public ScimJacksonXmlBindJsonProvider() {
+    super(ObjectMapperFactory.getObjectMapper(), DEFAULT_ANNOTATIONS);
   }
 }
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-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java
index 59150c6..47cccea 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/CompareOperator.java
@@ -21,14 +21,14 @@
 
 public enum CompareOperator {
   
-  EQ,
-  NE,
-  CO,
-  SW,
-  EW,
-  GT,
-  GE,
-  LT,
-  LE;
-  
+  EQ, // equal
+  NE, // not equal
+  CO, // contains
+  SW, // starts with
+  EW, // ends with
+  PR, // present (has value)
+  GT, // greater than
+  GE, // greater than or equal
+  LT, // greater than
+  LE; // greater than or equal
 }
diff --git a/scim-spec/scim-spec-schema/pom.xml b/scim-spec/scim-spec-schema/pom.xml
index a87cb2c..2b5c799 100644
--- a/scim-spec/scim-spec-schema/pom.xml
+++ b/scim-spec/scim-spec-schema/pom.xml
@@ -32,10 +32,6 @@
       <groupId>jakarta.xml.bind</groupId>
       <artifactId>jakarta.xml.bind-api</artifactId>
 		</dependency>
-		<dependency>
-      <groupId>jakarta.ws.rs</groupId>
-      <artifactId>jakarta.ws.rs-api</artifactId>
-    </dependency>
     <dependency>
       <groupId>jakarta.validation</groupId>
       <artifactId>jakarta.validation-api</artifactId>
@@ -52,10 +48,6 @@
       <scope>test</scope>
     </dependency>
   <dependency>
-    <groupId>com.fasterxml.jackson.jakarta.rs</groupId>
-    <artifactId>jackson-jakarta-rs-json-provider</artifactId>
-  </dependency>
-  <dependency>
     <groupId>org.hibernate.validator</groupId>
     <artifactId>hibernate-validator</artifactId>
     <scope>test</scope>
@@ -74,6 +66,14 @@
 		<groupId>org.slf4j</groupId>
 		<artifactId>slf4j-api</artifactId>
 	</dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.module</groupId>
+      <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
+    </dependency>
 	<dependency>
 		<!-- TODO Remove this dependency -->
 		<groupId>com.fasterxml.jackson.core</groupId>
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
index e73307b..e9fc7eb 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/ServiceProviderConfiguration.java
@@ -47,12 +47,48 @@
   public static class AuthenticationSchema {
 
     public enum Type {
-      @XmlEnumValue("oauth")
-      OAUTH, @XmlEnumValue("oauth2")
-      OAUTH2, @XmlEnumValue("oauthbearertoken")
-      OAUTH_BEARER, @XmlEnumValue("httpbasic")
-      HTTP_BASIC, @XmlEnumValue("httpdigest")
-      HTTP_DIGEST;
+      @XmlEnumValue("oauth") OAUTH(
+        "oauth",
+        "OAuth 1.0",
+        "Authentication scheme using the OAuth 1.0 Standard",
+        "https://www.rfc-editor.org/rfc/rfc5849.html"),
+      @XmlEnumValue("oauth2") OAUTH2(
+        "oauth2",
+        "OAuth 2.0",
+        "Authentication scheme using the OAuth 2.0 Standard",
+        "https://www.rfc-editor.org/rfc/rfc6749.html"),
+      @XmlEnumValue("oauthbearertoken") OAUTH_BEARER(
+        "oauthbearertoken",
+        "OAuth Bearer Token",
+        "Authentication scheme using the OAuth Bearer Token Standard",
+        "http://www.rfc-editor.org/info/rfc6750"),
+      @XmlEnumValue("httpbasic") HTTP_BASIC(
+        "httpbasic",
+        "HTTP Basic",
+        "Authentication scheme using the HTTP Basic Standard",
+        "http://www.rfc-editor.org/info/rfc2617"),
+      @XmlEnumValue("httpdigest") HTTP_DIGEST(
+        "httpdigest",
+        "HTTP Digest",
+        "Authentication scheme using the HTTP Digest Standard",
+        "https://www.rfc-editor.org/rfc/rfc7616.html");
+
+      private final String type;
+      private final String specUri;
+      private final String defaultName;
+      private final String defaultDescription;
+
+      Type(String type, String defaultName, String defaultDescription, String specUri) {
+        this.type = type;
+        this.defaultName = defaultName;
+        this.defaultDescription = defaultDescription;
+        this.specUri = specUri;
+      }
+
+      @Override
+      public String toString() {
+        return type;
+      }
     }
 
     @XmlElement
@@ -70,6 +106,30 @@
     @XmlElement
     String documentationUri;
 
+    public static AuthenticationSchema oauth() {
+      return fromType(Type.OAUTH);
+    }
+
+    public static AuthenticationSchema oauth2() {
+      return fromType(Type.OAUTH2);
+    }
+    public static AuthenticationSchema oauthBearer() {
+      return fromType(Type.OAUTH_BEARER);
+    }
+    public static AuthenticationSchema httpBasic() {
+      return fromType(Type.HTTP_BASIC);
+    }
+    public static AuthenticationSchema httpDigest() {
+      return fromType(Type.HTTP_DIGEST);
+    }
+
+    private static AuthenticationSchema fromType(Type type) {
+      return new ServiceProviderConfiguration.AuthenticationSchema()
+        .setType(type)
+        .setName(type.defaultName)
+        .setDescription(type.defaultDescription)
+        .setSpecUri(type.specUri);
+    }
   }
 
   @Data