Repository: olingo-odata2
Updated Branches:
  refs/heads/master 19ee43581 -> 2e26075a1


[OLINGO-686] Fix comma in string key predicate


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/2e26075a
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/2e26075a
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/2e26075a

Branch: refs/heads/master
Commit: 2e26075a11973a4bbc8e11f208a372e014e93f1d
Parents: 19ee435
Author: Michael Bolz <[email protected]>
Authored: Tue Jun 9 06:26:11 2015 +0200
Committer: Michael Bolz <[email protected]>
Committed: Tue Jun 9 06:26:11 2015 +0200

----------------------------------------------------------------------
 .../apache/olingo/odata2/core/uri/UriParserImpl.java    |  6 ++++--
 .../apache/olingo/odata2/core/uri/UriParserTest.java    | 12 ++++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2e26075a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
index 61f73dc..196375c 100644
--- 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
+++ 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
@@ -79,6 +79,7 @@ public class UriParserImpl extends UriParser {
       .compile("(?:([^.()]+)\\.)?([^.()]+)(?:\\((.+)\\)|(\\(\\)))?");
   private static final Pattern NAVIGATION_SEGMENT_PATTERN = 
Pattern.compile("([^()]+)(?:\\((.+)\\)|(\\(\\)))?");
   private static final Pattern NAMED_VALUE_PATTERN = 
Pattern.compile("(?:([^=]+)=)?([^=]+)");
+  private static final Pattern STRING_KEY_PATTERN = 
Pattern.compile("'([^']*)'");
 
   private final Edm edm;
   private final EdmSimpleTypeFacade simpleTypeFacade;
@@ -446,8 +447,9 @@ public class UriParserImpl extends UriParser {
     ArrayList<EdmProperty> parsedKeyProperties = new ArrayList<EdmProperty>();
     ArrayList<KeyPredicate> keyPredicates = new ArrayList<KeyPredicate>();
 
-    for (final String key : keyPredicate.split(",", -1)) {
-
+    Matcher keyMatcher = STRING_KEY_PATTERN.matcher(keyPredicate);
+    String[] keys = keyMatcher.matches() ? new String[]{keyPredicate} : 
keyPredicate.split(",", -1);
+    for (final String key : keys) {
       final Matcher matcher = NAMED_VALUE_PATTERN.matcher(key);
       if (!matcher.matches()) {
         throw new 
UriSyntaxException(UriSyntaxException.INVALIDKEYPREDICATE.addContent(keyPredicate));

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2e26075a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java
----------------------------------------------------------------------
diff --git 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java
 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java
index e628fc3..93002fe 100644
--- 
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java
+++ 
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/uri/UriParserTest.java
@@ -254,6 +254,18 @@ public class UriParserTest extends BaseTest {
   }
 
   @Test
+  public void parseEmployeesEntityWithKeyWithComma() throws Exception {
+    UriInfoImpl result = parse("/Employees('1,2')");
+    assertNull(result.getEntityContainer().getName());
+    assertEquals("Employees", result.getTargetEntitySet().getName());
+    assertEquals(UriType.URI2, result.getUriType());
+
+    assertEquals(1, result.getKeyPredicates().size());
+    assertEquals("1,2", result.getKeyPredicates().get(0).getLiteral());
+    assertEquals("EmployeeId", 
result.getKeyPredicates().get(0).getProperty().getName());
+  }
+
+  @Test
   public void parseEmployeesEntityWithKeyEncoded() throws Exception {
     UriInfoImpl result = parse("/%45mployees('1')");
     assertNull(result.getEntityContainer().getName());

Reply via email to