This is an automated email from the ASF dual-hosted git repository.
ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git
The following commit(s) were added to refs/heads/master by this push:
new ea8ea91 [OLINGO-1367]OData V2: Issue with EdmTime
ea8ea91 is described below
commit ea8ea9107d9b1177a1ff87fb5ed82e5f40d4e9be
Author: ramya vasanth <[email protected]>
AuthorDate: Mon Jun 17 11:44:00 2019 +0530
[OLINGO-1367]OData V2: Issue with EdmTime
---
.../deserializer/JsonPropertyDeserializerTest.java | 5 ++-
.../org/apache/olingo/odata2/core/edm/EdmTime.java | 29 +++++++++-------
.../olingo/odata2/core/edm/EdmSimpleTypeTest.java | 40 +++++++++++++++++++---
.../core/ep/consumer/JsonPropertyConsumerTest.java | 3 ++
4 files changed, 60 insertions(+), 17 deletions(-)
diff --git
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/deserializer/JsonPropertyDeserializerTest.java
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/deserializer/JsonPropertyDeserializerTest.java
index 3a89af0..8054475 100644
---
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/deserializer/JsonPropertyDeserializerTest.java
+++
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/deserializer/JsonPropertyDeserializerTest.java
@@ -180,7 +180,7 @@ public class JsonPropertyDeserializerTest extends BaseTest {
resultMap = execute(edmProperty, reader);
assertTrue(Arrays.equals(new byte[] { (byte) 0xAA, (byte) 0xBB, (byte)
0xCC },
(byte[]) resultMap.get("Name")));
- // Time
+ // Time
simplePropertyJson = "{\"d\":{\"Name\":\"PT23H32M3S\"}}";
reader = prepareReader(simplePropertyJson);
when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Time.getEdmSimpleTypeInstance());
@@ -190,6 +190,9 @@ public class JsonPropertyDeserializerTest extends BaseTest {
dateTime.set(Calendar.HOUR_OF_DAY, 23);
dateTime.set(Calendar.MINUTE, 32);
dateTime.set(Calendar.SECOND, 3);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 0);
assertEquals(dateTime, resultMap.get("Name"));
}
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 22f3cc8..740e1e7 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
@@ -39,9 +39,11 @@ import
org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
*
*/
public class EdmTime extends AbstractSimpleType {
-
+
private static final Pattern PATTERN = Pattern.compile(
-
"PT(?:(\\p{Digit}{1,2})H)?(?:(\\p{Digit}{1,4})M)?(?:(\\p{Digit}{1,5})(?:\\.(\\p{Digit}+?)0*)?S)?");
+ "P(?:(\\p{Digit}{1,2})Y)?(?:(\\p{Digit}{1,2})M)?(?:(\\p{Digit}{1,2})D)?"
+ +
"T(?:(\\p{Digit}{1,2})H)?(?:(\\p{Digit}{1,4})M)?(?:(\\p{Digit}{1,5})(?:\\.(\\p{Digit}+?)0*)?S)?");
+
private static final EdmTime instance = new EdmTime();
private static final TimeZone TIME_ZONE_GMT = TimeZone.getTimeZone("GMT");
@@ -67,23 +69,30 @@ public class EdmTime extends AbstractSimpleType {
final Matcher matcher = PATTERN.matcher(
literalKind == EdmLiteralKind.URI ? value.substring(5, value.length()
- 1) : value);
if (!matcher.matches()
- || (matcher.group(1) == null && matcher.group(2) == null &&
matcher.group(3) == null)) {
+ || (matcher.group(1) == null && matcher.group(2) == null &&
matcher.group(3) == null
+ && matcher.group(4) == null && matcher.group(5) == null &&
matcher.group(6) == null)) {
throw new
EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));
}
Calendar dateTimeValue = Calendar.getInstance();
dateTimeValue.clear();
- dateTimeValue.set(Calendar.HOUR_OF_DAY,
+ dateTimeValue.set(Calendar.YEAR,
matcher.group(1) == null ? 0 : Integer.parseInt(matcher.group(1)));
- dateTimeValue.set(Calendar.MINUTE,
+ dateTimeValue.set(Calendar.MONTH,
matcher.group(2) == null ? 0 : Integer.parseInt(matcher.group(2)));
- dateTimeValue.set(Calendar.SECOND,
+ dateTimeValue.set(Calendar.DAY_OF_YEAR,
matcher.group(3) == null ? 0 : Integer.parseInt(matcher.group(3)));
+ dateTimeValue.set(Calendar.HOUR_OF_DAY,
+ matcher.group(4) == null ? 0 : Integer.parseInt(matcher.group(4)));
+ dateTimeValue.set(Calendar.MINUTE,
+ matcher.group(5) == null ? 0 : Integer.parseInt(matcher.group(5)));
+ dateTimeValue.set(Calendar.SECOND,
+ matcher.group(6) == null ? 0 : Integer.parseInt(matcher.group(6)));
int nanoSeconds = 0;
- if (matcher.group(4) != null) {
- final String decimals = matcher.group(4);
+ if (matcher.group(7) != null) {
+ final String decimals = matcher.group(7);
if (facets == null || facets.getPrecision() == null ||
facets.getPrecision() >= decimals.length()) {
nanoSeconds = Integer.parseInt(decimals +
"000000000".substring(decimals.length()));
if (!(returnType.isAssignableFrom(Timestamp.class))) {
@@ -98,10 +107,6 @@ public class EdmTime extends AbstractSimpleType {
}
}
- if (dateTimeValue.get(Calendar.DAY_OF_YEAR) != 1) {
- throw new
EdmSimpleTypeException(EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT.addContent(value));
- }
-
if (returnType.isAssignableFrom(Calendar.class)) {
return returnType.cast(dateTimeValue);
} else if (returnType.isAssignableFrom(Long.class)) {
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 ebe6211..bab2d91 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
@@ -1655,6 +1655,9 @@ public class EdmSimpleTypeTest extends BaseTest {
dateTime.set(Calendar.HOUR_OF_DAY, 23);
dateTime.set(Calendar.MINUTE, 32);
dateTime.set(Calendar.SECOND, 3);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 0);
assertEquals(dateTime, instance.valueOfString("PT23H32M3S",
EdmLiteralKind.DEFAULT, null, Calendar.class));
assertEquals(Long.valueOf(dateTime.getTimeInMillis()),
instance.valueOfString("PT84723S", EdmLiteralKind.DEFAULT,
null, Long.class));
@@ -1709,12 +1712,41 @@ public class EdmSimpleTypeTest extends BaseTest {
EdmSimpleTypeException.LITERAL_FACETS_NOT_MATCHED);
expectErrorInValueOfString(instance, "P2012Y2M29DT23H32M2S",
EdmLiteralKind.DEFAULT, null,
EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
- expectErrorInValueOfString(instance, "PT24H", EdmLiteralKind.DEFAULT, null,
- EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
- expectErrorInValueOfString(instance, "PT99999S", EdmLiteralKind.JSON, null,
- EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
+ dateTime.clear();
+ dateTime.set(Calendar.MINUTE, 0);
+ dateTime.set(Calendar.SECOND, 0);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 0);
+ dateTime.set(Calendar.HOUR_OF_DAY, 24);
+ assertEquals(dateTime.getTimeInMillis(),
+ instance.valueOfString("PT24H", EdmLiteralKind.DEFAULT, null,
Time.class).getTime());
+ dateTime.clear();
+ dateTime.set(Calendar.MINUTE, 0);
+ dateTime.set(Calendar.SECOND, 99999);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 0);
+ dateTime.set(Calendar.HOUR_OF_DAY, 0);
+ assertEquals(dateTime.getTimeInMillis(),
+ instance.valueOfString("PT99999S", EdmLiteralKind.DEFAULT, null,
Time.class).getTime());
+ dateTime.clear();
+ dateTime.set(Calendar.MINUTE, 10);
+ dateTime.set(Calendar.SECOND, 10);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 10);
+ dateTime.set(Calendar.HOUR_OF_DAY, 10);
+ assertEquals(dateTime.getTimeInMillis(),
+ instance.valueOfString("P10DT10H10M10S", EdmLiteralKind.DEFAULT, null,
Time.class).getTime());
+ assertEquals(dateTime,
+ instance.valueOfString("P10DT10H10M10S", EdmLiteralKind.DEFAULT, null,
Calendar.class));
+ assertEquals(200800000,
+ instance.valueOfString("P10DT10H10M10.2008S", EdmLiteralKind.DEFAULT,
null, Timestamp.class).getNanos());
expectErrorInValueOfString(instance, "PT999H", EdmLiteralKind.DEFAULT,
null,
EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
+ expectErrorInValueOfString(instance, "P0D", EdmLiteralKind.DEFAULT, null,
+ EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
expectErrorInValueOfString(instance, "PT", EdmLiteralKind.DEFAULT, null,
EdmSimpleTypeException.LITERAL_ILLEGAL_CONTENT);
expectErrorInValueOfString(instance, "datetime'PT23H32M2S'",
EdmLiteralKind.URI, null,
diff --git
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
index 36b1cca..09dd38a 100644
---
a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
+++
b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
@@ -185,6 +185,9 @@ public class JsonPropertyConsumerTest extends BaseTest {
dateTime.set(Calendar.HOUR_OF_DAY, 23);
dateTime.set(Calendar.MINUTE, 32);
dateTime.set(Calendar.SECOND, 3);
+ dateTime.set(Calendar.YEAR, 0);
+ dateTime.set(Calendar.MONTH, 0);
+ dateTime.set(Calendar.DAY_OF_YEAR, 0);
assertEquals(dateTime, resultMap.get("Name"));
}