Repository: olingo-odata2
Updated Branches:
  refs/heads/OLINGO-882_EnableContainerManagedPersistence 185e97f28 -> a838b6960


[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/OLINGO-882_EnableContainerManagedPersistence
Commit: 891d3ddd4011bebf36443d398d45b0fffbeb7795
Parents: f582a80
Author: Christian Amend <[email protected]>
Authored: Mon Feb 22 10:54:13 2016 +0100
Committer: Christian Amend <[email protected]>
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));

Reply via email to