Repository: olingo-odata4
Updated Branches:
  refs/heads/master 04baf388e -> 7062aff86


[OLINGO-659] Fix for filter parsing of $count resources

Change-Id: I3359c25f233b6c18360a280b45355cf8ddd9a851

Signed-off-by: Christian Amend <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/7062aff8
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/7062aff8
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/7062aff8

Branch: refs/heads/master
Commit: 7062aff86701571385d4283e011b7bc7c24ae7ed
Parents: 04baf38
Author: Klaus Straubinger <[email protected]>
Authored: Tue May 12 15:23:00 2015 +0200
Committer: Christian Amend <[email protected]>
Committed: Tue May 12 15:37:47 2015 +0200

----------------------------------------------------------------------
 .../apache/olingo/server/core/uri/parser/Parser.java   |  9 +++++++++
 .../server/core/uri/antlr/TestFullResourcePath.java    | 13 +++++++++++++
 2 files changed, 22 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7062aff8/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
index cc788da..6391212 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
@@ -36,7 +36,10 @@ import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.server.api.uri.UriInfo;
 import org.apache.olingo.server.api.uri.UriInfoKind;
 import org.apache.olingo.server.api.uri.UriResource;
+import org.apache.olingo.server.api.uri.UriResourceCount;
 import org.apache.olingo.server.api.uri.UriResourcePartTyped;
+import org.apache.olingo.server.api.uri.UriResourceRef;
+import org.apache.olingo.server.api.uri.UriResourceValue;
 import org.apache.olingo.server.api.uri.queryoption.SystemQueryOption;
 import org.apache.olingo.server.api.uri.queryoption.SystemQueryOptionKind;
 import org.apache.olingo.server.core.uri.UriInfoImpl;
@@ -144,6 +147,12 @@ public class Parser {
         }
 
         UriResource lastSegment = context.contextUriInfo.getLastResourcePart();
+        if (lastSegment instanceof UriResourceCount
+            || lastSegment instanceof UriResourceRef
+            || lastSegment instanceof UriResourceValue) {
+          final List<UriResource> parts = 
context.contextUriInfo.getUriResourceParts();
+          lastSegment = parts.get(parts.size() - 2);
+        }
         if (lastSegment instanceof UriResourcePartTyped) {
           UriResourcePartTyped typed = (UriResourcePartTyped) lastSegment;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7062aff8/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
index e46bca7..989b058 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/antlr/TestFullResourcePath.java
@@ -4756,7 +4756,20 @@ public class TestFullResourcePath {
             .root().right().goPath()
             .first().isComplex("PropertyCompMixedEnumDef")
             
.n().isComplex("PropertyEnumString").isType(EnumTypeProvider.nameENString).goUpFilterValidator();
+  }
 
+  @Test
+  public void filterOnCountAndRef() throws Exception {
+    testUri.run("ESKeyNav/$count", "$filter=PropertyInt16 ge 0")
+        .goPath().isCount()
+        .goUpUriValidator().goFilter().isBinary(BinaryOperatorKind.GE)
+        .left().goPath().first().isPrimitiveProperty("PropertyInt16", 
PropertyProvider.nameInt16, false)
+        .goUpFilterValidator().root().right().isLiteral("0");
+    testUri.run("ESKeyNav/$ref", "$filter=PropertyInt16 ge 0")
+        .goPath().isRef()
+        .goUpUriValidator().goFilter().isBinary(BinaryOperatorKind.GE)
+        .left().goPath().first().isPrimitiveProperty("PropertyInt16", 
PropertyProvider.nameInt16, false)
+        .goUpFilterValidator().root().right().isLiteral("0");
   }
 
   @Test

Reply via email to