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

jeb pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git


The following commit(s) were added to refs/heads/master by this push:
     new 913c8b0  Separated ResourceStream and ResourceFilter and corrected bug
913c8b0 is described below

commit 913c8b07aa92f0d2c8ceca805259d0f9faf308a0
Author: JE Bailey <[email protected]>
AuthorDate: Tue Aug 7 09:28:14 2018 -0400

    Separated ResourceStream and ResourceFilter and corrected bug
    
    bug is where the Null object was being used when a variable was being
    assigned and resulted in true in conditions where the property was
    absent.
---
 pom.xml                                            | 158 ++++++++++-----------
 .../sling/resource/filter/ResourceFilter.java      |  19 ++-
 .../resource/filter/ResourceFilterStream.java      |  53 +++----
 .../resource/filter/impl/ComparisonVisitor.java    |   7 +-
 .../apache/sling/resource/filter/impl/Visitor.java |   2 +
 .../resource/filter/ResourceFilterArgTest.java     |  10 +-
 6 files changed, 128 insertions(+), 121 deletions(-)

diff --git a/pom.xml b/pom.xml
index 872f2c1..513a9aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,87 +1,87 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!--Licensed 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. -->
+    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.sling</groupId>
-               <artifactId>sling</artifactId>
-               <version>32</version>
-       </parent>
+    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.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>32</version>
+    </parent>
 
-       <artifactId>org.apache.sling.resource.filter</artifactId>
-       <version>1.0.0-SNAPSHOT</version>
-       <packaging>bundle</packaging>
+    <artifactId>org.apache.sling.resource.filter</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
 
-       <name>Apache Sling Resource Filter</name>
+    <name>Apache Sling Resource Filter</name>
 
-       <properties>
-               <sling.java.version>8</sling.java.version>
-       </properties>
+    <properties>
+        <sling.java.version>8</sling.java.version>
+    </properties>
 
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.felix</groupId>
-                               <artifactId>maven-bundle-plugin</artifactId>
-                               <extensions>true</extensions>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.apache.sling</groupId>
-                               <artifactId>maven-sling-plugin</artifactId>
-                       </plugin>
-                       <plugin>
-                               <groupId>org.codehaus.mojo</groupId>
-                               <artifactId>javacc-maven-plugin</artifactId>
-                               <version>2.6</version>
-                               <executions>
-                                       <execution>
-                                               <id>javacc</id>
-                                               <goals>
-                                                       <goal>javacc</goal>
-                                               </goals>
-                                               <configuration>
-                                                       
<jdkVersion>1.8</jdkVersion>
-                                                       
<javadocFriendlyComments>true</javadocFriendlyComments>
-                                                       
<outputDirectory>${basedir}/src/main/java</outputDirectory>
-                                               </configuration>
-                                       </execution>
-                               </executions>
-                       </plugin>
-               </plugins>
-       </build>
-       <dependencies>
-               <dependency>
-                       <groupId>org.apache.commons</groupId>
-                       <artifactId>commons-lang3</artifactId>
-                       <version>3.4</version>
-                       <scope>provided</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.sling</groupId>
-                       
<artifactId>org.apache.sling.testing.sling-mock</artifactId>
-                       <version>2.2.10</version>
-                       <scope>test</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.apache.sling</groupId>
-                       <artifactId>org.apache.sling.api</artifactId>
-                       <version>2.16.4</version>
-                       <scope>provided</scope>
-               </dependency>
-       </dependencies>
-       <description>provides a set of utilities to create and handle 
streams</description>
-       <scm>
-           
<url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-resource-filter.git</url>
-           
<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</connection>
-           
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</developerConnection>
-           <tag>HEAD</tag>
-       </scm>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>maven-sling-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>javacc-maven-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>javacc</id>
+                        <goals>
+                            <goal>javacc</goal>
+                        </goals>
+                        <configuration>
+                            <jdkVersion>1.8</jdkVersion>
+                            
<javadocFriendlyComments>true</javadocFriendlyComments>
+                            
<outputDirectory>${basedir}/src/main/java</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock</artifactId>
+            <version>2.2.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.api</artifactId>
+            <version>2.16.4</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+    <description>provides a set of utilities to create and handle 
streams</description>
+    <scm>
+        
<url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-resource-filter.git</url>
+        
<connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</connection>
+        
<developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</developerConnection>
+        <tag>HEAD</tag>
+    </scm>
 </project>
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java 
b/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
index a204ec5..795f94f 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
@@ -25,8 +25,23 @@ import org.apache.sling.api.resource.Resource;
 
 public interface ResourceFilter {
 
+    /**
+     * Creates a Predicate<Resource> based on the scripted matching
+     * 
+     * @param filter
+     * @return
+     * @throws ResourceFilterException
+     */
     public Predicate<Resource> parse(String filter) throws 
ResourceFilterException;
 
+    /**
+     * Creates a Predicate<Resource> based on the scripted matching
+     * 
+     * @param filter
+     * @param charEncoding
+     * @return
+     * @throws ResourceFilterException
+     */
     public Predicate<Resource> parse(String filter, String charEncoding) 
throws ResourceFilterException;
 
     /**
@@ -34,7 +49,7 @@ public interface ResourceFilter {
      * filter creation
      * 
      * @param params
-     * @return
+     * @return this
      */
     public abstract ResourceFilter addParams(Map<String, Object> params);
 
@@ -43,7 +58,7 @@ public interface ResourceFilter {
      * creation
      * 
      * @param params
-     * @return
+     * @return this
      */
     public abstract ResourceFilter addParam(String key, Object value);
 }
diff --git 
a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java 
b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
index ae86dd4..6bf389b 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
@@ -19,19 +19,25 @@ import java.util.stream.Stream;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.resource.filter.ResourceFilterStream;
-import org.apache.sling.resource.filter.impl.script.ParseException;
+
 
 /**
  * Creates a {@link Predicate} of type {@link Resource} to identify matching
  * Resource objects
  *
  */
-public class ResourceFilterStream extends ResourceStream {
+public class ResourceFilterStream {
+
+    private ResourceStream resources;
 
     private ResourceFilter resourceFilter;
 
+    private Predicate<Resource> branchSelector = resource -> true;
+
+    private Predicate<Resource> childSelector = resource -> true;
+
     public ResourceFilterStream(Resource resource, ResourceFilter filter) {
-        super(resource);
+        resources = new ResourceStream(resource);
         this.resourceFilter = filter;
     }
 
@@ -44,8 +50,9 @@ public class ResourceFilterStream extends ResourceStream {
      * @return ResourceStream
      * @throws ParseException
      */
-    public Stream<Resource> stream(String branchSelector) throws 
ResourceFilterException {
-        return stream(resourceFilter.parse(branchSelector));
+    public ResourceFilterStream setBranchSelector(String branchSelector) 
throws ResourceFilterException {
+        this.branchSelector = resourceFilter.parse(branchSelector);
+        return this;
     }
 
     /**
@@ -59,35 +66,9 @@ public class ResourceFilterStream extends ResourceStream {
      * @return ResourceStream
      * @throws ParseException
      */
-    public Stream<Resource> stream(String branchSelector, String charEncoding) 
throws ResourceFilterException {
-        return stream(resourceFilter.parse(branchSelector, charEncoding));
-    }
-
-    /**
-     * Provides a stream of the child resources filtered by the child selector
-     * 
-     * @param childSelector
-     * @return
-     * @throws ResourceFilterException
-     * @throws ParseException
-     */
-    public Stream<Resource> listChildren(String childSelector) throws 
ResourceFilterException {
-        return listChildren(resourceFilter.parse(childSelector));
-    }
-
-    /**
-     * Provides a stream of the child resources filtered by the child selector
-     * 
-     * @param childSelector
-     *            text based definition of the Predicate to use
-     * @param charEncoding
-     *            char encoding of the branch selector String
-     * @return
-     * @throws ResourceFilterException
-     * @throws ParseException
-     */
-    public Stream<Resource> listChildren(String childSelector, String 
charEncoding) throws ResourceFilterException {
-        return listChildren(resourceFilter.parse(childSelector, charEncoding));
+    public ResourceFilterStream setChildSelector(String childSelector) throws 
ResourceFilterException {
+        this.childSelector = resourceFilter.parse(childSelector);
+        return this;
     }
 
     /**
@@ -112,4 +93,8 @@ public class ResourceFilterStream extends ResourceStream {
         resourceFilter.addParams(params);
         return this;
     }
+
+    public Stream<Resource> stream() {
+        return resources.stream(branchSelector).filter(childSelector);
+    }
 }
diff --git 
a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java 
b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
index fce1870..ee71126 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
@@ -24,6 +24,7 @@ import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.function.BiFunction;
 import java.util.function.Function;
@@ -73,7 +74,11 @@ public class ComparisonVisitor implements 
Visitor<Function<Resource, Object>> {
         case FilterParserConstants.DYNAMIC_ARG:
             return resource -> {
                 String argument = node.text;
-                return context.getArgument(argument).orElse(new Null());
+                Optional<Object> arg = context.getArgument(argument);
+                if (!arg.isPresent()) {
+                    throw new NoSuchElementException(String.format("No value 
present for '%s'",argument));
+                }
+                return arg.get();
             };
         default:
             return resource -> node.text;
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java 
b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
index b9c234d..de9ec58 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
@@ -13,6 +13,8 @@
  */
 package org.apache.sling.resource.filter.impl;
 
+import java.text.ParseException;
+
 import org.apache.sling.resource.filter.impl.node.Node;
 
 /**
diff --git 
a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java 
b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
index 3d7efee..b91723b 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
@@ -53,8 +53,8 @@ public class ResourceFilterArgTest {
         Map<String,Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
-        Predicate<Resource> filter = 
resourceFilter.addParams(params).parse("[jcr:content/jcr:title] == $lang");
-        List<Resource> found = handle(new ResourceStream(resource), filter);
+        ResourceFilterStream rfs = 
resource.adaptTo(ResourceFilterStream.class);
+        List<Resource> found = 
rfs.addParams(params).setChildSelector("[jcr:content/jcr:title] == 
$lang").stream().collect(Collectors.toList());
         assertEquals(1, found.size());
     }
 
@@ -63,9 +63,9 @@ public class ResourceFilterArgTest {
         Map<String,Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
-        Predicate<Resource> filter = 
resourceFilter.addParams(params).parse("[jcr:content/created] > $date and 
[jcr:content/jcr:title] == $lang");
-        List<Resource> found = handle(new ResourceStream(resource), filter);
-        assertEquals(1, found.size());
+        ResourceFilterStream rfs = 
resource.adaptTo(ResourceFilterStream.class);
+        long size = 
rfs.addParams(params).setChildSelector("[jcr:content/created] > $date and 
[jcr:content/jcr:title] == $lang").stream().count();
+        assertEquals(1, size);
     }
 
     @Test

Reply via email to