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));
