Repository: marmotta
Updated Branches:
  refs/heads/develop 42f5db058 -> 1ee27b878


Keep stable order when selecting recursive in ldpath


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/1ee27b87
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/1ee27b87
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/1ee27b87

Branch: refs/heads/develop
Commit: 1ee27b8780c8e1590a1578f1be8b262e22719293
Parents: 42f5db0
Author: Jakob Frank <[email protected]>
Authored: Thu Jul 10 14:33:33 2014 +0200
Committer: Jakob Frank <[email protected]>
Committed: Thu Jul 10 14:35:24 2014 +0200

----------------------------------------------------------------------
 .../model/selectors/RecursivePathSelector.java     | 17 ++++++++++-------
 .../marmotta/ldpath/parser/SelectorsTest.java      | 10 ++++++++++
 2 files changed, 20 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/1ee27b87/libraries/ldpath/ldpath-core/src/main/java/org/apache/marmotta/ldpath/model/selectors/RecursivePathSelector.java
----------------------------------------------------------------------
diff --git 
a/libraries/ldpath/ldpath-core/src/main/java/org/apache/marmotta/ldpath/model/selectors/RecursivePathSelector.java
 
b/libraries/ldpath/ldpath-core/src/main/java/org/apache/marmotta/ldpath/model/selectors/RecursivePathSelector.java
index e97b2e5..2f84c66 100644
--- 
a/libraries/ldpath/ldpath-core/src/main/java/org/apache/marmotta/ldpath/model/selectors/RecursivePathSelector.java
+++ 
b/libraries/ldpath/ldpath-core/src/main/java/org/apache/marmotta/ldpath/model/selectors/RecursivePathSelector.java
@@ -50,7 +50,7 @@ public class RecursivePathSelector<Node> implements 
NodeSelector<Node> {
      */
     @Override
     public Collection<Node> select(RDFBackend<Node> rdfBackend, Node context, 
List<Node> path, Map<Node, List<Node>> resultPaths) {
-               Set<Node> result = new HashSet<Node>();
+               List<Node> result = new LinkedList<>();
 
                if (minRecursions <= 0) {
                        result.add(context);
@@ -60,19 +60,19 @@ public class RecursivePathSelector<Node> implements 
NodeSelector<Node> {
                return result;
        }
 
-       private void subSelect(Node currentContext, int depth, RDFBackend<Node> 
rdfBackend, Set<Node> resultSet, List<Node> path, Map<Node, List<Node>> 
resultPaths) {
+       private void subSelect(Node currentContext, int depth, RDFBackend<Node> 
rdfBackend, List<Node> resultList, List<Node> path, Map<Node, List<Node>> 
resultPaths) {
                Collection<Node> nextNodes = delegate.select(rdfBackend, 
currentContext,path,resultPaths);
                depth++;
                for (Node n : nextNodes) {
-                       if (!resultSet.contains(n)) {
+                       if (!resultList.contains(n)) {
                                if (depth >= minRecursions){
-                                       resultSet.add(n);
+                                       resultList.add(n);
                                }
                                if (depth < maxRecursions) {
                     if(path != null && resultPaths != null) {
-                                           subSelect(n, depth, rdfBackend, 
resultSet, new 
ImmutableList.Builder<Node>().addAll(path).add(currentContext).build(),resultPaths);
+                                           subSelect(n, depth, rdfBackend, 
resultList, new 
ImmutableList.Builder<Node>().addAll(path).add(currentContext).build(),resultPaths);
                     } else {
-                        subSelect(n, depth, rdfBackend, resultSet, 
null,resultPaths);
+                        subSelect(n, depth, rdfBackend, resultList, 
null,resultPaths);
                     }
                                }
                        }
@@ -168,12 +168,15 @@ public class RecursivePathSelector<Node> implements 
NodeSelector<Node> {
                RecursivePathSelector<Node> that = 
(RecursivePathSelector<Node>) o;
 
         if (delegate != null ? !delegate.equals(that.delegate) : that.delegate 
!= null) return false;
+        if (minRecursions != that.minRecursions || maxRecursions != 
that.maxRecursions) return false;
 
         return true;
     }
 
     @Override
     public int hashCode() {
-        return delegate != null ? delegate.hashCode() : 0;
+        int hash = delegate != null ? delegate.hashCode() : 0;
+        hash = hash * 31 * 31 + minRecursions * 31 + maxRecursions;
+        return hash;
     }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/1ee27b87/libraries/ldpath/ldpath-core/src/test/java/org/apache/marmotta/ldpath/parser/SelectorsTest.java
----------------------------------------------------------------------
diff --git 
a/libraries/ldpath/ldpath-core/src/test/java/org/apache/marmotta/ldpath/parser/SelectorsTest.java
 
b/libraries/ldpath/ldpath-core/src/test/java/org/apache/marmotta/ldpath/parser/SelectorsTest.java
index f2a0327..fa46454 100644
--- 
a/libraries/ldpath/ldpath-core/src/test/java/org/apache/marmotta/ldpath/parser/SelectorsTest.java
+++ 
b/libraries/ldpath/ldpath-core/src/test/java/org/apache/marmotta/ldpath/parser/SelectorsTest.java
@@ -50,6 +50,16 @@ public class SelectorsTest {
                 {"(<http://www.example.com/>[@en])", "Grouped"},
                 {"(<http://www.example.com/>)*", "RecursivePath"},
                 {"(<http://www.example.com/>)+", "RecursivePath"},
+/* TODO - these should also work in the future...
+                {"(<http://www.example.com/>){5,}", "RecursivePath"},
+                {"(<http://www.example.com/>){5,7}", "RecursivePath"},
+                {"(<http://www.example.com/>){,7}", "RecursivePath"},
+                {"<http://www.example.com/>*", "RecursivePath"},
+                {"<http://www.example.com/>+", "RecursivePath"},
+                {"<http://www.example.com/>{5,}", "RecursivePath"},
+                {"<http://www.example.com/>{5,7}", "RecursivePath"},
+                {"<http://www.example.com/>{,7}", "RecursivePath"},
+*/
                 {"^<http://www.example.com/>", "ReverseProperty"},
                 {"fn:count(\"foo\")", "Function"},
                 // Not implemented yet: {"^*", "ReverseProperty"},

Reply via email to