You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2022/07/28 22:23:10 UTC

[directory-scimple] branch move-client-filter-logic updated: Move FilterBuilder to scim-spec-protocol

This is an automated email from the ASF dual-hosted git repository.

bdemers pushed a commit to branch move-client-filter-logic
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git


The following commit(s) were added to refs/heads/move-client-filter-logic by this push:
     new 60e09f9  Move FilterBuilder to scim-spec-protocol
60e09f9 is described below

commit 60e09f99802ff225e3339d127fb91418d5d14fa7
Author: Brian Demers <bd...@apache.org>
AuthorDate: Thu Jul 28 18:23:04 2022 -0400

    Move FilterBuilder to scim-spec-protocol
---
 scim-spec/scim-spec-protocol/pom.xml               |  5 +++
 .../filter/ComplexLogicalFilterBuilder.java        |  9 ++----
 .../scim/spec/protocol/filter}/FilterBuilder.java  | 36 +++++++++++++++++-----
 .../filter/FilterComparisonFilterBuilder.java      |  5 ++-
 .../filter/SimpleLogicalFilterBuilder.java         |  5 ++-
 .../protocol}/filter/FilterBuilderEqualsTest.java  |  4 +--
 .../protocol}/filter/FilterBuilderGreaterTest.java |  9 +-----
 .../filter/FilterBuilderLessThanTest.java          |  6 +---
 .../filter/FilterBuilderNotEqualsTest.java         |  5 +--
 .../protocol}/filter/FilterBuilderStringTest.java  |  4 +--
 .../spec/protocol}/filter/FilterBuilderTest.java   | 27 +++++++---------
 11 files changed, 56 insertions(+), 59 deletions(-)

diff --git a/scim-spec/scim-spec-protocol/pom.xml b/scim-spec/scim-spec-protocol/pom.xml
index 49e31f3..02cc587 100644
--- a/scim-spec/scim-spec-protocol/pom.xml
+++ b/scim-spec/scim-spec-protocol/pom.xml
@@ -59,6 +59,11 @@
 		<artifactId>slf4j-simple</artifactId>
 		<scope>test</scope>
 	</dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <scope>test</scope>
+    </dependency>
 	<dependency>
 		<groupId>org.antlr</groupId>
 		<artifactId>antlr4-runtime</artifactId>
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ComplexLogicalBuilder.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java
similarity index 84%
rename from scim-client/src/main/java/org/apache/directory/scim/client/rest/ComplexLogicalBuilder.java
rename to scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java
index 7b8e333..bf015ee 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ComplexLogicalBuilder.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/ComplexLogicalFilterBuilder.java
@@ -1,11 +1,6 @@
-package org.apache.directory.scim.client.rest;
+package org.apache.directory.scim.spec.protocol.filter;
 
-import org.apache.directory.scim.spec.protocol.filter.AttributeComparisonExpression;
-import org.apache.directory.scim.spec.protocol.filter.FilterExpression;
-import org.apache.directory.scim.spec.protocol.filter.LogicalExpression;
-import org.apache.directory.scim.spec.protocol.filter.LogicalOperator;
-
-abstract class ComplexLogicalBuilder extends SimpleLogicalBuilder {
+abstract class ComplexLogicalFilterBuilder extends SimpleLogicalFilterBuilder {
 
     @Override
     public FilterBuilder or(FilterExpression fe1) {
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/FilterBuilder.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java
similarity index 71%
rename from scim-client/src/main/java/org/apache/directory/scim/client/rest/FilterBuilder.java
rename to scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java
index e25e6f7..6fe338f 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/FilterBuilder.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilder.java
@@ -1,7 +1,5 @@
-package org.apache.directory.scim.client.rest;
+package org.apache.directory.scim.spec.protocol.filter;
 
-import org.apache.directory.scim.spec.protocol.filter.FilterExpression;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 
 import java.time.LocalDate;
@@ -14,13 +12,29 @@ public interface FilterBuilder {
 
   FilterBuilder and(FilterExpression fe1);
 
-  FilterBuilder and(FilterExpression fe1, FilterExpression fe2);
+  default FilterBuilder and(Filter filter) {
+    return and(filter.getExpression());
+  }
+
+  FilterBuilder and(FilterExpression left, FilterExpression right);
+
+  default FilterBuilder and(Filter left, Filter right) {
+    return and(left.getExpression(), right.getExpression());
+  }
 
   FilterBuilder or();
 
   FilterBuilder or(FilterExpression fe1);
 
-  FilterBuilder or(FilterExpression fe1, FilterExpression fe2);
+  default FilterBuilder or(Filter filter) {
+    return or(filter.getExpression());
+  }
+
+  FilterBuilder or(FilterExpression left, FilterExpression right);
+
+  default FilterBuilder or(Filter left, Filter right) {
+    return or(left.getExpression(), right.getExpression());
+  }
 
   FilterBuilder equalTo(String key, String value);
 
@@ -88,15 +102,23 @@ public interface FilterBuilder {
 
   FilterBuilder contains(String key, String value);
 
-  FilterBuilder not(FilterExpression filter);
+  FilterBuilder not(FilterExpression fe);
+
+  default FilterBuilder not(Filter filter) {
+    return not(filter.getExpression());
+  }
 
   FilterBuilder attributeHas(String attribute, FilterExpression filter) throws FilterParseException;
 
+  default FilterBuilder attributeHas(String attribute, Filter filter) throws FilterParseException {
+    return attributeHas(attribute, filter.getExpression());
+  }
+
   FilterExpression filter();
 
   Filter build();
 
   static FilterBuilder create() {
-    return new ComparisonBuilder();
+    return new FilterComparisonFilterBuilder();
   }
 }
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ComparisonBuilder.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java
similarity index 98%
rename from scim-client/src/main/java/org/apache/directory/scim/client/rest/ComparisonBuilder.java
rename to scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java
index 8f08bdc..39484cb 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/ComparisonBuilder.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/FilterComparisonFilterBuilder.java
@@ -1,13 +1,12 @@
-package org.apache.directory.scim.client.rest;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import org.apache.directory.scim.spec.protocol.attribute.AttributeReference;
-import org.apache.directory.scim.spec.protocol.filter.*;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.Date;
 
-class ComparisonBuilder extends ComplexLogicalBuilder {
+class FilterComparisonFilterBuilder extends ComplexLogicalFilterBuilder {
 
     @Override
     public FilterBuilder equalTo(String key, String value) {
diff --git a/scim-client/src/main/java/org/apache/directory/scim/client/rest/SimpleLogicalBuilder.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java
similarity index 95%
rename from scim-client/src/main/java/org/apache/directory/scim/client/rest/SimpleLogicalBuilder.java
rename to scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java
index 8656089..4f9d2a2 100644
--- a/scim-client/src/main/java/org/apache/directory/scim/client/rest/SimpleLogicalBuilder.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/spec/protocol/filter/SimpleLogicalFilterBuilder.java
@@ -1,11 +1,10 @@
-package org.apache.directory.scim.client.rest;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.spec.protocol.filter.*;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 
 @Slf4j
-abstract class SimpleLogicalBuilder implements FilterBuilder {
+abstract class SimpleLogicalFilterBuilder implements FilterBuilder {
 
   protected FilterExpression filterExpression;
 
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderEqualsTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java
similarity index 96%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderEqualsTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java
index bf1aef6..c354b4e 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderEqualsTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderEqualsTest.java
@@ -17,11 +17,9 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 import org.junit.jupiter.api.Test;
 
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderGreaterTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java
similarity index 95%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderGreaterTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java
index 545c524..d312e9f 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderGreaterTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderGreaterTest.java
@@ -17,27 +17,20 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Date;
 
-import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.assertj.core.api.Assertions.assertThat;
 
 @Slf4j
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderLessThanTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java
similarity index 96%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderLessThanTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java
index 20bc3d4..cc9e958 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderLessThanTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderLessThanTest.java
@@ -17,18 +17,14 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderNotEqualsTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java
similarity index 95%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderNotEqualsTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java
index c540130..61e4215 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderNotEqualsTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderNotEqualsTest.java
@@ -17,15 +17,12 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 import org.junit.jupiter.api.Test;
 
-import java.io.UnsupportedEncodingException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderStringTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java
similarity index 91%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderStringTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java
index 6b6d27d..1f3dc1d 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderStringTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderStringTest.java
@@ -17,11 +17,9 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
 import org.junit.jupiter.api.Test;
 
diff --git a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderTest.java b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java
similarity index 91%
rename from scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderTest.java
rename to scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java
index 0dd3eec..95d1d82 100644
--- a/scim-client/src/test/java/org/apache/directory/scim/client/filter/FilterBuilderTest.java
+++ b/scim-spec/scim-spec-protocol/src/test/java/org/apache/directory/scim/spec/protocol/filter/FilterBuilderTest.java
@@ -17,19 +17,14 @@
 * under the License.
 */
 
-package org.apache.directory.scim.client.filter;
+package org.apache.directory.scim.spec.protocol.filter;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.directory.scim.client.rest.FilterBuilder;
-import org.apache.directory.scim.spec.protocol.filter.FilterParseException;
 import org.apache.directory.scim.spec.protocol.search.Filter;
-import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import java.beans.XMLEncoder;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -84,7 +79,7 @@ public class FilterBuilderTest {
         .equalTo("name.givenName", "Frodo")
         .and()
         .equalTo("name.familyName", "Baggins")
-        .filter())
+        .build())
       .build();
 
     decode(filter.getFilter());
@@ -102,7 +97,7 @@ public class FilterBuilderTest {
         .equalTo("name.givenName", "Frodo")
         .and()
         .equalTo("name.familyName", "Baggins")
-        .filter())
+        .build())
       .build();
 
     Filter expected = new Filter("name.givenName EQ \"Bilbo\" OR (name.givenName EQ \"Frodo\" AND name.familyName EQ \"Baggins\")");
@@ -126,7 +121,7 @@ public class FilterBuilderTest {
       .and()
       .equalTo("address.postalCode", "16803");
     
-    Filter filter = FilterBuilder.create().and(b1.filter(), b2.filter()).build();
+    Filter filter = FilterBuilder.create().and(b1.build(), b2.build()).build();
 
     Filter expected = new Filter("((name.givenName EQ \"Bilbo\" OR name.givenName EQ \"Frodo\") AND name.familyName EQ \"Baggins\") AND ((address.streetAddress EQ \"Underhill\" OR address.streetAddress EQ \"Overhill\") AND address.postalCode EQ \"16803\")");
     
@@ -142,7 +137,7 @@ public class FilterBuilderTest {
       .and()
       .equalTo("name.familyName", "Baggins");
 
-    Filter filter = FilterBuilder.create().not(b1.filter()).build();
+    Filter filter = FilterBuilder.create().not(b1.build()).build();
     Filter expected = new Filter("NOT((name.givenName EQ \"Bilbo\" OR name.givenName EQ \"Frodo\") AND name.familyName EQ \"Baggins\")");
     assertThat(filter).isEqualTo(expected);
   }
@@ -153,7 +148,7 @@ public class FilterBuilderTest {
     FilterBuilder b1 = FilterBuilder.create()
       .equalTo("address.type", "work");
     FilterBuilder b2 = FilterBuilder.create()
-      .attributeHas("address", b1.filter());
+      .attributeHas("address", b1.build());
     
     Filter filter = b2.build();
     Filter expected = new Filter("address[type EQ \"work\"]");
@@ -171,9 +166,9 @@ public class FilterBuilderTest {
       .and()
       .equalTo("name.familyName", "Baggins");
 
-    FilterBuilder b2 = FilterBuilder.create().attributeHas("address", b1.filter());
+    FilterBuilder b2 = FilterBuilder.create().attributeHas("address", b1.build());
     
-    FilterBuilder b3 = FilterBuilder.create().attributeHas("address", b2.filter());
+    FilterBuilder b3 = FilterBuilder.create().attributeHas("address", b2.build());
 
     // TODO: I'm not sure why this test exists in the Client
     // This should probably be a parsing test, and maybe the FilterBuilder should be smarter and throw an
@@ -186,9 +181,9 @@ public class FilterBuilderTest {
   public void testAttributeContainsDeeplyEmbedded() throws FilterParseException {
 
       FilterBuilder b1 = FilterBuilder.create().equalTo("name.givenName", "Bilbo").or().equalTo("name.givenName", "Frodo").and().equalTo("name.familyName", "Baggins");
-      FilterBuilder b2 = FilterBuilder.create().attributeHas("address", b1.filter());
-      FilterBuilder b3 = FilterBuilder.create().equalTo("name.giveName", "Gandalf").and(b2.filter());
-      FilterBuilder b4 = FilterBuilder.create().attributeHas("address", b3.filter());
+      FilterBuilder b2 = FilterBuilder.create().attributeHas("address", b1.build());
+      FilterBuilder b3 = FilterBuilder.create().equalTo("name.giveName", "Gandalf").and(b2.build());
+      FilterBuilder b4 = FilterBuilder.create().attributeHas("address", b3.build());
 
       String encoded = b4.toString();