You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2016/02/22 10:55:14 UTC

olingo-odata2 git commit: [OLINGO-883] Make URI literal prefix case insensitive

Repository: olingo-odata2
Updated Branches:
  refs/heads/master f582a80bc -> 891d3ddd4


[OLINGO-883] Make URI literal prefix case insensitive


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

Branch: refs/heads/master
Commit: 891d3ddd4011bebf36443d398d45b0fffbeb7795
Parents: f582a80
Author: Christian Amend <ch...@sap.com>
Authored: Mon Feb 22 10:54:13 2016 +0100
Committer: Christian Amend <ch...@sap.com>
Committed: Mon Feb 22 10:54:13 2016 +0100

----------------------------------------------------------------------
 .../olingo/odata2/core/edm/EdmDateTime.java     |  3 ++-
 .../odata2/core/edm/EdmDateTimeOffset.java      |  3 ++-
 .../apache/olingo/odata2/core/edm/EdmGuid.java  | 27 +++++++++++++++-----
 .../apache/olingo/odata2/core/edm/EdmTime.java  |  3 ++-
 .../odata2/core/edm/EdmSimpleTypeTest.java      | 22 +++++++++++++---
 5 files changed, 46 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/891d3ddd/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTime.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTime.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTime.java
index 38b213d..dddb0a2 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTime.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTime.java
@@ -84,7 +84,8 @@ public class EdmDateTime extends AbstractSimpleType {
 
     String valueString;
     if (literalKind == EdmLiteralKind.URI) {
-      if (value.length() > 10 && value.startsWith("datetime'") && value.endsWith("'")) {
+      //OLINGO-883 prefix is case insensitve so we need to check with lower case if we want to use startsWith()
+      if (value.length() > 10 && value.toLowerCase().startsWith("datetime'") && value.endsWith("'")) {
         valueString = value.substring(9, value.length() - 1);
       } else {
         throw new EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/891d3ddd/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTimeOffset.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTimeOffset.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTimeOffset.java
index 16f867f..cfc1a67 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTimeOffset.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmDateTimeOffset.java
@@ -58,7 +58,8 @@ public class EdmDateTimeOffset extends AbstractSimpleType {
   protected <T> T internalValueOfString(final String value, final EdmLiteralKind literalKind, final EdmFacets facets,
       final Class<T> returnType) throws EdmSimpleTypeException {
     if (literalKind == EdmLiteralKind.URI) {
-      if (value.length() > 16 && value.startsWith("datetimeoffset'") && value.endsWith("'")) {
+      //OLINGO-883 prefix is case insensitve so we need to check with lower case if we want to use startsWith()
+      if (value.length() > 16 && value.toLowerCase().startsWith("datetimeoffset'") && value.endsWith("'")) {
         return internalValueOfString(value.substring(15, value.length() - 1), EdmLiteralKind.DEFAULT, facets,
             returnType);
       } else {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/891d3ddd/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmGuid.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmGuid.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmGuid.java
index dadd3b6..70594b3 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmGuid.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmGuid.java
@@ -46,20 +46,35 @@ public class EdmGuid extends AbstractSimpleType {
   public boolean validate(final String value, final EdmLiteralKind literalKind, final EdmFacets facets) {
     return value == null ?
         facets == null || facets.isNullable() == null || facets.isNullable() :
-        validateLiteral(value, literalKind);
+        validateLiteralInternal(value, literalKind);
   }
 
-  private boolean validateLiteral(final String value, final EdmLiteralKind literalKind) {
-    return value.matches(literalKind == EdmLiteralKind.URI ? toUriLiteral(PATTERN) : PATTERN);
+  private boolean validateLiteralInternal(String value, EdmLiteralKind literalKind) {
+    String cleanValue = null;
+    if (literalKind == EdmLiteralKind.URI && value.toLowerCase().startsWith("guid'") && value.endsWith("'")) {
+      cleanValue = value.substring(5, value.length() - 1);
+    } else {
+      cleanValue = value;
+    }
+    return validateLiteral(cleanValue);
+  }
+
+  private boolean validateLiteral(final String value) {
+    return value.matches(PATTERN);
   }
 
   @Override
   protected <T> T internalValueOfString(final String value, final EdmLiteralKind literalKind, final EdmFacets facets,
       final Class<T> returnType) throws EdmSimpleTypeException {
     UUID result;
-    if (validateLiteral(value, literalKind)) {
-      result = UUID.fromString(
-          literalKind == EdmLiteralKind.URI ? value.substring(5, value.length() - 1) : value);
+    String cleanValue = null;
+    if (literalKind == EdmLiteralKind.URI && value.toLowerCase().startsWith("guid'") && value.endsWith("'")) {
+      cleanValue = value.substring(5, value.length() - 1);
+    } else {
+      cleanValue = value;
+    }
+    if (validateLiteral(cleanValue)) {
+      result = UUID.fromString(cleanValue);
     } else {
       throw new EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/891d3ddd/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmTime.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmTime.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmTime.java
index fb80227..fc99d6a 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmTime.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/edm/EdmTime.java
@@ -57,8 +57,9 @@ public class EdmTime extends AbstractSimpleType {
   protected <T> T internalValueOfString(final String value, final EdmLiteralKind literalKind, final EdmFacets facets,
       final Class<T> returnType) throws EdmSimpleTypeException {
 
+    //OLINGO-883 prefix is case insensitve so we need to check with lower case if we want to use startsWith()
     if (literalKind == EdmLiteralKind.URI
-        && (value.length() <= 6 || !value.startsWith("time'") || !value.endsWith("'"))) {
+        && (value.length() <= 6 || !value.toLowerCase().startsWith("time'") || !value.endsWith("'"))) {
       throw new EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/891d3ddd/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
index 5b1b50b..ebe6211 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/edm/EdmSimpleTypeTest.java
@@ -1139,6 +1139,10 @@ public class EdmSimpleTypeTest extends BaseTest {
         Date.class));
     assertEquals(dateTime, instance.valueOfString("datetime'2012-02-29T23:32:03.001'", EdmLiteralKind.URI, null,
         Calendar.class));
+    
+    //OLINGO-883 prefix is case insensitive
+    assertEquals(dateTime, instance.valueOfString("DaTeTiMe'2012-02-29T23:32:03.001'", EdmLiteralKind.URI, null,
+        Calendar.class));
 
     dateTime.add(Calendar.MILLISECOND, 9);
     assertEquals(dateTime, instance.valueOfString("2012-02-29T23:32:03.01", EdmLiteralKind.DEFAULT,
@@ -1235,7 +1239,12 @@ public class EdmSimpleTypeTest extends BaseTest {
         Calendar.class));
     assertEquals(dateTime, instance.valueOfString("datetimeoffset'2012-02-29T01:02:03-01:30'", EdmLiteralKind.URI,
         null, Calendar.class));
-
+    
+    //OLINGO-883 prefix is case insensitive
+    assertEquals(dateTime, instance.valueOfString("DaTeTiMeoFFset'2012-02-29T01:02:03-01:30'", EdmLiteralKind.URI,
+        null, Calendar.class));
+    
+    
     dateTime.clear();
     dateTime.setTimeZone(TimeZone.getTimeZone("GMT+11:00"));
     dateTime.set(2012, 1, 29, 1, 2, 3);
@@ -1438,7 +1447,11 @@ public class EdmSimpleTypeTest extends BaseTest {
         UUID.class));
     assertEquals(uuid, instance.valueOfString("guid'AABBCCDD-aabb-ccdd-eeff-AABBCCDDEEFF'", EdmLiteralKind.URI, null,
         UUID.class));
-
+    
+    //OLINGO-883 prefix is case insensitive
+    assertEquals(uuid, instance.valueOfString("GuId'AABBCCDD-aabb-ccdd-eeff-AABBCCDDEEFF'", EdmLiteralKind.URI, null,
+        UUID.class));
+    
     expectErrorInValueOfString(instance, "AABBCCDDAABBCCDDEEFFAABBCCDDEEFF", EdmLiteralKind.DEFAULT, null,
         EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
     expectErrorInValueOfString(instance, "uid'AABBCCDD-aabb-ccdd-eeff-AABBCCDDEEFF'", EdmLiteralKind.URI, null,
@@ -1652,7 +1665,10 @@ public class EdmSimpleTypeTest extends BaseTest {
     assertEquals(dateTime, instance.valueOfString("PT23H32M3.001S", EdmLiteralKind.DEFAULT, null, Calendar.class));
     assertEquals(dateTime, instance.valueOfString("PT23H32M3.001S", EdmLiteralKind.JSON, null, Calendar.class));
     assertEquals(dateTime, instance.valueOfString("time'PT23H32M3.001S'", EdmLiteralKind.URI, null, Calendar.class));
-
+    
+    //OLINGO-883 prefix is case insensitive
+    assertEquals(dateTime, instance.valueOfString("TiMe'PT23H32M3.001S'", EdmLiteralKind.URI, null, Calendar.class));
+    
     dateTime.add(Calendar.MILLISECOND, -1);
     assertEquals(dateTime, instance.valueOfString("PT23H32M3S", EdmLiteralKind.DEFAULT,
         getPrecisionScaleFacets(0, null), Calendar.class));