Repository: olingo-odata4 Updated Branches: refs/heads/master 5004f4b1f -> a47e9f6ad
[OLINGO-796] Add support for java.sql.time Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/a47e9f6a Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/a47e9f6a Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/a47e9f6a Branch: refs/heads/master Commit: a47e9f6ad2571e333654d737c80cd5a810fc1fff Parents: 5004f4b Author: Christian Holzer <[email protected]> Authored: Tue Dec 8 16:01:35 2015 +0100 Committer: Christian Holzer <[email protected]> Committed: Tue Dec 8 16:01:35 2015 +0100 ---------------------------------------------------------------------- .../edm/primitivetype/EdmDateTimeOffset.java | 8 +++++- .../primitivetype/EdmDateTimeOffsetTest.java | 16 ++++++++++-- .../edm/primitivetype/EdmTimeOfDayTest.java | 26 +++++++++++++++++++- 3 files changed, 46 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a47e9f6a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java index 61344fb..a7f57d1 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffset.java @@ -18,6 +18,7 @@ */ package org.apache.olingo.commons.core.edm.primitivetype; +import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; @@ -140,6 +141,8 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { Timestamp timestamp = new Timestamp(dateTimeValue.getTimeInMillis()); timestamp.setNanos(nanoSeconds); return returnType.cast(timestamp); + } else if(returnType.isAssignableFrom(Time.class)) { + return returnType.cast(new Time(dateTimeValue.getTimeInMillis())); } else { throw new ClassCastException("unsupported return type " + returnType.getSimpleName()); } @@ -202,7 +205,10 @@ public final class EdmDateTimeOffset extends SingletonPrimitiveType { */ protected static <T> Calendar createDateTime(final T value) throws EdmPrimitiveTypeException { Calendar dateTimeValue; - if (value instanceof Date) { + if(value instanceof Time) { + dateTimeValue = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + dateTimeValue.setTimeInMillis(((Time) value).getTime()); + } else if (value instanceof Date) { // Although java.util.Date, as stated in its documentation, // "is intended to reflect coordinated universal time (UTC)", // its getName() method uses the default time zone. And so do we. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a47e9f6a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffsetTest.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffsetTest.java b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffsetTest.java index 17ea5ce..a352703 100644 --- a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffsetTest.java +++ b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTimeOffsetTest.java @@ -21,6 +21,7 @@ package org.apache.olingo.commons.core.edm.primitivetype; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.sql.Time; import java.sql.Timestamp; import java.util.Calendar; import java.util.Date; @@ -75,7 +76,11 @@ public class EdmDateTimeOffsetTest extends PrimitiveTypeBaseTest { assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(millis, null, null, 3, null, null)); assertEquals("1969-12-31T23:59:59.9Z", instance.valueToString(-100L, null, null, 1, null, null)); assertEquals("1969-12-31T23:59:59.98Z", instance.valueToString(-20L, null, null, 2, null, null)); - + + assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(new Time(millis), null, null, 3, null, null)); + assertEquals("1969-12-31T23:59:59.9Z", instance.valueToString(new Time(-100L), null, null, 1, null, null)); + assertEquals("1969-12-31T23:59:59.98Z", instance.valueToString(new Time(-20L), null, null, 2, null, null)); + final Date date = new Date(millis); final String time = date.toString().substring(11, 19); assertTrue(instance.valueToString(date, null, null, 3, null, null).contains(time)); @@ -128,7 +133,14 @@ public class EdmDateTimeOffsetTest extends PrimitiveTypeBaseTest { Long.class)); assertEquals(Long.valueOf(120L), instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, Long.class)); - + + assertEquals(new Time(120000L), instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, + Time.class)); + assertEquals(new Time(12L), instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, + Time.class)); + assertEquals(new Time(120L), instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, + Time.class)); + expectFacetsErrorInValueOfString(instance, "2012-02-29T23:32:02.9Z", null, null, null, null, null); expectFacetsErrorInValueOfString(instance, "2012-02-29T23:32:02.9Z", null, null, 0, null, null); expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02X"); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/a47e9f6a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDayTest.java ---------------------------------------------------------------------- diff --git a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDayTest.java b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDayTest.java index bdd45a2..e663724 100644 --- a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDayTest.java +++ b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDayTest.java @@ -20,6 +20,7 @@ package org.apache.olingo.commons.core.edm.primitivetype; import static org.junit.Assert.assertEquals; +import java.sql.Time; import java.util.Calendar; import java.util.TimeZone; @@ -60,7 +61,30 @@ public class EdmTimeOfDayTest extends PrimitiveTypeBaseTest { expectTypeErrorInValueToString(instance, 0); } - + + @Test + public void toTimeObject() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + dateTime.setTimeZone(TimeZone.getTimeZone("GMT")); + dateTime.set(Calendar.HOUR, 12); + + Time timeValue = instance.valueOfString("12:00:00", null, null, null, null, null, Time.class); + assertEquals(dateTime.getTimeInMillis(), timeValue.getTime()); + } + + @Test + public void fromTimeObject() throws Exception { + Calendar dateTime = Calendar.getInstance(TimeZone.getTimeZone("GMT")); + dateTime.clear(); + dateTime.set(Calendar.HOUR, 5); + dateTime.set(Calendar.MINUTE, 59); + dateTime.set(Calendar.SECOND, 23); + + Time time = new Time(dateTime.getTimeInMillis()); + assertEquals("05:59:23", instance.valueToString(time, null, null, null, null, null)); + } + @Test public void valueOfString() throws Exception { Calendar dateTime = Calendar.getInstance();
