This is an automated email from the ASF dual-hosted git repository. mibo pushed a commit to branch OLINGO-1408 in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git
commit 302f991e5bc36b5ac84a63d059d049e7a2a63f76 Author: Michael Bolz <[email protected]> AuthorDate: Mon Nov 25 20:49:09 2019 +0100 [OLINGO-1408] Applied code formatter --- .../request/AsyncRequestWrapperImpl.java | 2 +- .../commons/core/edm/primitivetype/EdmDate.java | 140 +++---- .../core/edm/primitivetype/EdmDateTimeOffset.java | 278 +++++++------- .../core/edm/primitivetype/EdmTimeOfDay.java | 160 ++++---- .../core/edm/primitivetype/EdmDateTest.java | 144 ++++---- .../edm/primitivetype/EdmDateTimeOffsetTest.java | 406 ++++++++++----------- .../core/edm/primitivetype/EdmTimeOfDayTest.java | 281 +++++++------- 7 files changed, 694 insertions(+), 717 deletions(-) diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java index c82f2cf..61b2e05 100644 --- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java +++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AsyncRequestWrapperImpl.java @@ -225,7 +225,7 @@ public class AsyncRequestWrapperImpl<R extends ODataResponse> extends AbstractRe int parseReplyAfter(String value) { if (value == null || value.isEmpty()) { return DEFAULT_RETRY_AFTER; - + } try { int n = Integer.parseInt(value); if (n < 0) { diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDate.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDate.java index e658295..2abd04a 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDate.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDate.java @@ -35,80 +35,80 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; */ public final class EdmDate extends SingletonPrimitiveType { - private static final EdmDate INSTANCE = new EdmDate(); + private static final EdmDate INSTANCE = new EdmDate(); - public static EdmDate getInstance() { - return INSTANCE; - } + public static EdmDate getInstance() { + return INSTANCE; + } - @Override - public Class<?> getDefaultType() { - return Calendar.class; - } + @Override + public Class<?> getDefaultType() { + return Calendar.class; + } - @SuppressWarnings("unchecked") - @Override - protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) - throws EdmPrimitiveTypeException { - LocalDate date; - try { - date = LocalDate.parse(value); - } catch (DateTimeParseException ex) { - throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content."); - } + @SuppressWarnings("unchecked") + @Override + protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) + throws EdmPrimitiveTypeException { + LocalDate date; + try { + date = LocalDate.parse(value); + } catch (DateTimeParseException ex) { + throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content."); + } - // appropriate types - if (returnType.isAssignableFrom(LocalDate.class)) { - return (T) date; - } else if (returnType.isAssignableFrom(java.sql.Date.class)) { - return (T) java.sql.Date.valueOf(date); - } + // appropriate types + if (returnType.isAssignableFrom(LocalDate.class)) { + return (T) date; + } else if (returnType.isAssignableFrom(java.sql.Date.class)) { + return (T) java.sql.Date.valueOf(date); + } - // inappropriate types, which need to be supported for backward compatibility - ZonedDateTime zdt = LocalDateTime.of(date, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()); - if (returnType.isAssignableFrom(Calendar.class)) { - return (T) GregorianCalendar.from(zdt); - } else if (returnType.isAssignableFrom(Long.class)) { - return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); - } else if (returnType.isAssignableFrom(java.sql.Date.class)) { - throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); - } else if (returnType.isAssignableFrom(java.sql.Timestamp.class)) { - return (T) java.sql.Timestamp.from(zdt.toInstant()); - } else if (returnType.isAssignableFrom(java.util.Date.class)) { - return (T) java.util.Date.from(zdt.toInstant()); - } else { - throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); - } - } + // inappropriate types, which need to be supported for backward compatibility + ZonedDateTime zdt = LocalDateTime.of(date, LocalTime.MIDNIGHT).atZone(ZoneId.systemDefault()); + if (returnType.isAssignableFrom(Calendar.class)) { + return (T) GregorianCalendar.from(zdt); + } else if (returnType.isAssignableFrom(Long.class)) { + return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); + } else if (returnType.isAssignableFrom(java.sql.Date.class)) { + throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); + } else if (returnType.isAssignableFrom(java.sql.Timestamp.class)) { + return (T) java.sql.Timestamp.from(zdt.toInstant()); + } else if (returnType.isAssignableFrom(java.util.Date.class)) { + return (T) java.util.Date.from(zdt.toInstant()); + } else { + throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); + } + } - @Override - protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { - // appropriate types - if (value instanceof LocalDate) { - return value.toString(); - } else if(value instanceof java.sql.Date) { - return value.toString(); - } - - // inappropriate types, which need to be supported for backward compatibility - if (value instanceof GregorianCalendar) { - GregorianCalendar calendar = (GregorianCalendar) value; - return calendar.toZonedDateTime().toLocalDate().toString(); - } - - long millis; - if (value instanceof Long) { - millis = (Long)value; - } else if (value instanceof java.util.Date) { - millis = ((java.util.Date)value).getTime(); - } else { - throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); - } - - ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); - - return zdt.toLocalDate().toString(); - } + @Override + protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { + // appropriate types + if (value instanceof LocalDate) { + return value.toString(); + } else if (value instanceof java.sql.Date) { + return value.toString(); + } + + // inappropriate types, which need to be supported for backward compatibility + if (value instanceof GregorianCalendar) { + GregorianCalendar calendar = (GregorianCalendar) value; + return calendar.toZonedDateTime().toLocalDate().toString(); + } + + long millis; + if (value instanceof Long) { + millis = (Long) value; + } else if (value instanceof java.util.Date) { + millis = ((java.util.Date) value).getTime(); + } else { + throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); + } + + ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); + + return zdt.toLocalDate().toString(); + } } 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 9f8ff4c..6b63c9a 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 @@ -38,144 +38,142 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; */ public final class EdmDateTimeOffset extends SingletonPrimitiveType { - private static final ZoneId ZULU = ZoneId.of("Z"); - - private static final Pattern PATTERN = Pattern.compile("(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})" - + "T(\\p{Digit}{2}):(\\p{Digit}{2})(?::(\\p{Digit}{2})(\\.(\\p{Digit}{0,12}?)0*)?)?" - + "(Z|([-+]\\p{Digit}{2}:\\p{Digit}{2}))?"); - - private static final EdmDateTimeOffset INSTANCE = new EdmDateTimeOffset(); - - public static EdmDateTimeOffset getInstance() { - return INSTANCE; - } - - @Override - public Class<?> getDefaultType() { - return Timestamp.class; - } - - @Override - protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) - throws EdmPrimitiveTypeException { - try { - ZonedDateTime zdt = parseZonedDateTime(value); - - return convertZonedDateTime(zdt, returnType); - } catch (DateTimeParseException ex) { - throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content.", ex); - } catch (final ClassCastException e) { - throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported.", e); - } - } - - private static ZonedDateTime parseZonedDateTime(final String value) { - ZonedDateTime zdt; - try { - // ISO-8601 conform pattern - zdt = ZonedDateTime.parse(value); - } catch (DateTimeParseException ex) { - // for backward compatibility - allow patterns that don't specify a time zone - final Matcher matcher = PATTERN.matcher(value); - if (matcher.matches() && matcher.group(9) == null) { - zdt = ZonedDateTime.parse(value + "Z"); - } else { - throw ex; - } - } - return zdt; - } - - @SuppressWarnings("unchecked") - private static <T> T convertZonedDateTime(ZonedDateTime zdt, Class<T> returnType) { - if (returnType == ZonedDateTime.class) { - return (T) zdt; - } else if (returnType == Instant.class) { - return (T) zdt.toInstant(); - } else if (returnType.isAssignableFrom(Timestamp.class)) { - return (T) Timestamp.from(zdt.toInstant()); - } else if (returnType.isAssignableFrom(java.util.Date.class)) { - return (T) java.util.Date.from(zdt.toInstant()); - } else if (returnType.isAssignableFrom(java.sql.Time.class)) { - return (T) new java.sql.Time(zdt.toInstant().truncatedTo(ChronoUnit.SECONDS).toEpochMilli()); - } else if (returnType.isAssignableFrom(java.sql.Date.class)) { - return (T) new java.sql.Date(zdt.toInstant().truncatedTo(ChronoUnit.SECONDS).toEpochMilli()); - } else if (returnType.isAssignableFrom(Long.class)) { - return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); - } else if (returnType.isAssignableFrom(Calendar.class)) { - return (T) GregorianCalendar.from(zdt); - } else { - throw new ClassCastException("unsupported return type " + returnType.getSimpleName()); - } - } - - @Override - protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { - ZonedDateTime zdt = createZonedDateTime(value); - - return format(zdt.toLocalDateTime(), zdt.getOffset(), zdt.getNano()); - } - - private static <T> ZonedDateTime createZonedDateTime(final T value) throws EdmPrimitiveTypeException { - if (value instanceof ZonedDateTime) { - return (ZonedDateTime) value; - } - - if (value instanceof Instant) { - return ((Instant) value).atZone(ZULU); - } - - if (value instanceof GregorianCalendar) { - GregorianCalendar calendar = (GregorianCalendar) value; - ZonedDateTime zdt = calendar.toZonedDateTime(); - ZoneId normalizedZoneId = calendar.getTimeZone().toZoneId().normalized(); - return zdt.withZoneSameInstant(normalizedZoneId); - } - - return convertToInstant(value).atZone(ZULU); - } - - private static String format(LocalDateTime dateTime, ZoneOffset offset, int nanos) { - String str = dateTime.toString(); - if (nanos > 0) { - str = removeTrailingZeros(str); - } - str = str + offset.toString(); - - return str; - } - - private static String removeTrailingZeros(String str) { - char[] chars = str.toCharArray(); - int trailingZeros = 0; - for (int i = chars.length - 1; i >= 0 && chars[i] == '0'; i--) { - trailingZeros++; - } - return str.substring(0, chars.length - trailingZeros); - } - - /** - * Creates an {@link Instant} from the given value. - * - * @param value the value as {@link Instant}, {@link java.util.Date}, - * {@link java.sql.Timestamp}, {@link Long} or - * {@link GregorianCalendar} - * @return the value as {@link Instant} - * @throws EdmPrimitiveTypeException if the type of the value is not supported - */ - private static <T> Instant convertToInstant(final T value) throws EdmPrimitiveTypeException { - if (value instanceof java.sql.Time || value instanceof java.sql.Date) { - throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); - } else if (value instanceof java.util.Date) { - return ((java.util.Date) value).toInstant(); - } else if (value instanceof Timestamp) { - return ((Timestamp) value).toInstant(); - } else if (value instanceof Long) { - return Instant.ofEpochMilli((Long) value); - } else { - throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); - } - } + private static final ZoneId ZULU = ZoneId.of("Z"); + + private static final Pattern PATTERN = Pattern.compile("(-?\\p{Digit}{4,})-(\\p{Digit}{2})-(\\p{Digit}{2})" + + "T(\\p{Digit}{2}):(\\p{Digit}{2})(?::(\\p{Digit}{2})(\\.(\\p{Digit}{0,12}?)0*)?)?" + + "(Z|([-+]\\p{Digit}{2}:\\p{Digit}{2}))?"); + + private static final EdmDateTimeOffset INSTANCE = new EdmDateTimeOffset(); + + public static EdmDateTimeOffset getInstance() { + return INSTANCE; + } + + @Override + public Class<?> getDefaultType() { + return Timestamp.class; + } + + @Override + protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) + throws EdmPrimitiveTypeException { + try { + ZonedDateTime zdt = parseZonedDateTime(value); + + return convertZonedDateTime(zdt, returnType); + } catch (DateTimeParseException ex) { + throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content.", ex); + } catch (final ClassCastException e) { + throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported.", e); + } + } + + private static ZonedDateTime parseZonedDateTime(final String value) { + ZonedDateTime zdt; + try { + // ISO-8601 conform pattern + zdt = ZonedDateTime.parse(value); + } catch (DateTimeParseException ex) { + // for backward compatibility - allow patterns that don't specify a time zone + final Matcher matcher = PATTERN.matcher(value); + if (matcher.matches() && matcher.group(9) == null) { + zdt = ZonedDateTime.parse(value + "Z"); + } else { + throw ex; + } + } + return zdt; + } + + @SuppressWarnings("unchecked") + private static <T> T convertZonedDateTime(ZonedDateTime zdt, Class<T> returnType) { + if (returnType == ZonedDateTime.class) { + return (T) zdt; + } else if (returnType == Instant.class) { + return (T) zdt.toInstant(); + } else if (returnType.isAssignableFrom(Timestamp.class)) { + return (T) Timestamp.from(zdt.toInstant()); + } else if (returnType.isAssignableFrom(java.util.Date.class)) { + return (T) java.util.Date.from(zdt.toInstant()); + } else if (returnType.isAssignableFrom(java.sql.Time.class)) { + return (T) new java.sql.Time(zdt.toInstant().truncatedTo(ChronoUnit.SECONDS).toEpochMilli()); + } else if (returnType.isAssignableFrom(java.sql.Date.class)) { + return (T) new java.sql.Date(zdt.toInstant().truncatedTo(ChronoUnit.SECONDS).toEpochMilli()); + } else if (returnType.isAssignableFrom(Long.class)) { + return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); + } else if (returnType.isAssignableFrom(Calendar.class)) { + return (T) GregorianCalendar.from(zdt); + } else { + throw new ClassCastException("Unsupported return type " + returnType.getSimpleName()); + } + } + + @Override + protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { + ZonedDateTime zdt = createZonedDateTime(value); + + return format(zdt.toLocalDateTime(), zdt.getOffset(), zdt.getNano()); + } + + private static <T> ZonedDateTime createZonedDateTime(final T value) throws EdmPrimitiveTypeException { + if (value instanceof ZonedDateTime) { + return (ZonedDateTime) value; + } + + if (value instanceof Instant) { + return ((Instant) value).atZone(ZULU); + } + + if (value instanceof GregorianCalendar) { + GregorianCalendar calendar = (GregorianCalendar) value; + ZonedDateTime zdt = calendar.toZonedDateTime(); + ZoneId normalizedZoneId = calendar.getTimeZone().toZoneId().normalized(); + return zdt.withZoneSameInstant(normalizedZoneId); + } + + return convertToInstant(value).atZone(ZULU); + } + + private static String format(LocalDateTime dateTime, ZoneOffset offset, int nanos) { + String str = dateTime.toString(); + if (nanos > 0) { + str = removeTrailingZeros(str); + } + return str + offset.toString(); + } + + private static String removeTrailingZeros(String str) { + char[] chars = str.toCharArray(); + int trailingZeros = 0; + for (int i = chars.length - 1; i >= 0 && chars[i] == '0'; i--) { + trailingZeros++; + } + return str.substring(0, chars.length - trailingZeros); + } + + /** + * Creates an {@link Instant} from the given value. + * + * @param value the value as {@link Instant}, {@link java.util.Date}, + * {@link java.sql.Timestamp}, {@link Long} or + * {@link GregorianCalendar} + * @return the value as {@link Instant} + * @throws EdmPrimitiveTypeException if the type of the value is not supported + */ + private static <T> Instant convertToInstant(final T value) throws EdmPrimitiveTypeException { + if (value instanceof java.sql.Time || value instanceof java.sql.Date) { + throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); + } else if (value instanceof java.util.Date) { + return ((java.util.Date) value).toInstant(); + } else if (value instanceof Timestamp) { + return ((Timestamp) value).toInstant(); + } else if (value instanceof Long) { + return Instant.ofEpochMilli((Long) value); + } else { + throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); + } + } } diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDay.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDay.java index b404dbd..d0ecb26 100644 --- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDay.java +++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmTimeOfDay.java @@ -33,101 +33,81 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; public final class EdmTimeOfDay extends SingletonPrimitiveType { - private static final LocalDate EPOCH = LocalDate.ofEpochDay(0l); - private static final EdmTimeOfDay INSTANCE = new EdmTimeOfDay(); + private static final LocalDate EPOCH = LocalDate.ofEpochDay(0l); + private static final EdmTimeOfDay INSTANCE = new EdmTimeOfDay(); - public static EdmTimeOfDay getInstance() { - return INSTANCE; - } + public static EdmTimeOfDay getInstance() { + return INSTANCE; + } - @Override - public Class<?> getDefaultType() { - return Calendar.class; - } + @Override + public Class<?> getDefaultType() { + return Calendar.class; + } - @SuppressWarnings("unchecked") - @Override - protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) - throws EdmPrimitiveTypeException { - LocalTime time; - try { - time = LocalTime.parse(value); - } catch (DateTimeParseException ex) { - throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content."); - } + @SuppressWarnings("unchecked") + @Override + protected <T> T internalValueOfString(final String value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode, final Class<T> returnType) + throws EdmPrimitiveTypeException { + LocalTime time; + try { + time = LocalTime.parse(value); + } catch (DateTimeParseException ex) { + throw new EdmPrimitiveTypeException("The literal '" + value + "' has illegal content."); + } - // appropriate types - if (returnType.isAssignableFrom(LocalTime.class)) { - return (T) time; - } else if (returnType.isAssignableFrom(java.sql.Time.class)) { - return (T) java.sql.Time.valueOf(time); - } + // appropriate types + if (returnType.isAssignableFrom(LocalTime.class)) { + return (T) time; + } else if (returnType.isAssignableFrom(java.sql.Time.class)) { + return (T) java.sql.Time.valueOf(time); + } - // inappropriate types, which need to be supported for backward compatibility - ZonedDateTime zdt = LocalDateTime.of(EPOCH, time).atZone(ZoneId.systemDefault()); - if (returnType.isAssignableFrom(Calendar.class)) { - return (T) GregorianCalendar.from(zdt); - } else if (returnType.isAssignableFrom(Long.class)) { - return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); - } else if (returnType.isAssignableFrom(java.sql.Date.class)) { - throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); - } else if (returnType.isAssignableFrom(Timestamp.class)) { - return (T) Timestamp.from(zdt.toInstant()); - } else if (returnType.isAssignableFrom(java.util.Date.class)) { - return (T) java.util.Date.from(zdt.toInstant()); - } else { - throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); - } - } + // inappropriate types, which need to be supported for backward compatibility + ZonedDateTime zdt = LocalDateTime.of(EPOCH, time).atZone(ZoneId.systemDefault()); + if (returnType.isAssignableFrom(Calendar.class)) { + return (T) GregorianCalendar.from(zdt); + } else if (returnType.isAssignableFrom(Long.class)) { + return (T) Long.valueOf(zdt.toInstant().toEpochMilli()); + } else if (returnType.isAssignableFrom(java.sql.Date.class)) { + throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); + } else if (returnType.isAssignableFrom(Timestamp.class)) { + return (T) Timestamp.from(zdt.toInstant()); + } else if (returnType.isAssignableFrom(java.util.Date.class)) { + return (T) java.util.Date.from(zdt.toInstant()); + } else { + throw new EdmPrimitiveTypeException("The value type " + returnType + " is not supported."); + } + } - @Override - protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, - final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { - // appropriate types - if (value instanceof LocalTime) { - return value.toString(); - } else if(value instanceof java.sql.Time) { - return value.toString(); - } - - // inappropriate types, which need to be supported for backward compatibility - if (value instanceof GregorianCalendar) { - GregorianCalendar calendar = (GregorianCalendar) value; - return calendar.toZonedDateTime().toLocalTime().toString(); - } - - long millis; - if (value instanceof Long) { - millis = (Long)value; - } else if (value instanceof java.util.Date) { - millis = ((java.util.Date)value).getTime(); - } else { - throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); - } - - ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); - - return zdt.toLocalTime().toString(); + @Override + protected <T> String internalValueToString(final T value, final Boolean isNullable, final Integer maxLength, + final Integer precision, final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException { + // appropriate types + if (value instanceof LocalTime) { + return value.toString(); + } else if (value instanceof java.sql.Time) { + return value.toString(); + } -// -// final Calendar dateTimeValue = EdmDateTimeOffset.createDateTime(value, true); -// -// StringBuilder result = new StringBuilder(); -// EdmDateTimeOffset.appendTwoDigits(result, dateTimeValue.get(Calendar.HOUR_OF_DAY)); -// result.append(':'); -// EdmDateTimeOffset.appendTwoDigits(result, dateTimeValue.get(Calendar.MINUTE)); -// result.append(':'); -// EdmDateTimeOffset.appendTwoDigits(result, dateTimeValue.get(Calendar.SECOND)); -// -// final int fractionalSecs = value instanceof Timestamp ? ((Timestamp) value).getNanos() -// : dateTimeValue.get(Calendar.MILLISECOND); -// try { -// EdmDateTimeOffset.appendFractionalSeconds(result, fractionalSecs, value instanceof Timestamp, precision); -// } catch (final IllegalArgumentException e) { -// throw new EdmPrimitiveTypeException("The value '" + value + "' does not match the facets' constraints.", e); -// } -// -// return result.toString(); - } + // inappropriate types, which need to be supported for backward compatibility + if (value instanceof GregorianCalendar) { + GregorianCalendar calendar = (GregorianCalendar) value; + return calendar.toZonedDateTime().toLocalTime().toString(); + } + + long millis; + if (value instanceof Long) { + millis = (Long) value; + } else if (value instanceof java.util.Date) { + millis = ((java.util.Date) value).getTime(); + } else { + throw new EdmPrimitiveTypeException("The value type " + value.getClass() + " is not supported."); + } + + ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.systemDefault()); + + return zdt.toLocalTime().toString(); + } } diff --git a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTest.java b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTest.java index 197e00e..468e262 100644 --- a/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTest.java +++ b/lib/commons-core/src/test/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDateTest.java @@ -30,79 +30,79 @@ import org.junit.Test; public class EdmDateTest extends PrimitiveTypeBaseTest { - private final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Date); - - @Test - public void toUriLiteral() throws Exception { - assertEquals("2009-12-26", instance.toUriLiteral("2009-12-26")); - assertEquals("-2009-12-26", instance.toUriLiteral("-2009-12-26")); - } - - @Test - public void fromUriLiteral() throws Exception { - assertEquals("2009-12-26", instance.fromUriLiteral("2009-12-26")); - assertEquals("-2009-12-26", instance.fromUriLiteral("-2009-12-26")); - } - - @Test - public void valueToString() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - setTimeZone(dateTime, "GMT-11:30"); - dateTime.set(2012, 1, 29, 13, 0, 0); - assertEquals("2012-02-29", instance.valueToString(dateTime, null, null, null, null, null)); - - Long millis = 1330558323007L; - millis -= TimeZone.getDefault().getOffset(millis); - assertEquals("2012-02-29", instance.valueToString(millis, null, null, null, null, null)); - - assertEquals("1969-12-31", instance.valueToString(new java.util.Date(-43200000), null, null, null, null, null)); - assertEquals("1969-12-31", - instance.valueToString(java.sql.Date.valueOf("1969-12-31"), null, null, null, null, null)); - assertEquals("1969-12-31", - instance.valueToString(LocalDate.parse("1969-12-31"), null, null, null, null, null)); - - // TODO support for years beyond 9999 + private final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Date); + + @Test + public void toUriLiteral() throws Exception { + assertEquals("2009-12-26", instance.toUriLiteral("2009-12-26")); + assertEquals("-2009-12-26", instance.toUriLiteral("-2009-12-26")); + } + + @Test + public void fromUriLiteral() throws Exception { + assertEquals("2009-12-26", instance.fromUriLiteral("2009-12-26")); + assertEquals("-2009-12-26", instance.fromUriLiteral("-2009-12-26")); + } + + @Test + public void valueToString() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + setTimeZone(dateTime, "GMT-11:30"); + dateTime.set(2012, 1, 29, 13, 0, 0); + assertEquals("2012-02-29", instance.valueToString(dateTime, null, null, null, null, null)); + + Long millis = 1330558323007L; + millis -= TimeZone.getDefault().getOffset(millis); + assertEquals("2012-02-29", instance.valueToString(millis, null, null, null, null, null)); + + assertEquals("1969-12-31", instance.valueToString(new java.util.Date(-43200000), null, null, null, null, null)); + assertEquals("1969-12-31", + instance.valueToString(java.sql.Date.valueOf("1969-12-31"), null, null, null, null, null)); + assertEquals("1969-12-31", + instance.valueToString(LocalDate.parse("1969-12-31"), null, null, null, null, null)); + + // TODO support for years beyond 9999 // dateTime.set(Calendar.YEAR, 12344); // assertEquals("12344-02-29", instance.valueToString(dateTime, null, null, null, null, null)); - expectTypeErrorInValueToString(instance, 0); - } - - @Test - public void valueOfString() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - dateTime.set(2012, 1, 29); - assertEqualCalendar(dateTime, - instance.valueOfString("2012-02-29", null, null, null, null, null, Calendar.class)); - assertEquals(Long.valueOf(dateTime.getTimeInMillis()), - instance.valueOfString("2012-02-29", null, null, null, null, null, Long.class)); - assertEquals(dateTime.getTime(), - instance.valueOfString("2012-02-29", null, null, null, null, null, java.util.Date.class)); - assertEquals(java.sql.Date.valueOf("2012-02-29"), - instance.valueOfString("2012-02-29", null, null, null, null, null, java.sql.Date.class)); - assertEquals(LocalDate.parse("2012-02-29"), - instance.valueOfString("2012-02-29", null, null, null, null, null, LocalDate.class)); - - // TODO support for years beyond 9999 - // dateTime.set(Calendar.YEAR, 12344); - // Calendar result = instance.valueOfString("12344-02-29", null, null, null, - // null, null, Calendar.class); - // this.assertEqualCalendar(dateTime, result); - - // TODO: Clarify whether negative years are really needed. - // dateTime.set(-1, 1, 28); - // assertEquals(dateTime, instance.valueOfString("-0001-02-28", null, - // Calendar.class)); - - expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02"); - expectContentErrorInValueOfString(instance, "2012-02-30"); - expectContentErrorInValueOfString(instance, "20120229"); - expectContentErrorInValueOfString(instance, "2012-02-1"); - expectContentErrorInValueOfString(instance, "2012-2-12"); - expectContentErrorInValueOfString(instance, "123-02-03"); - - expectTypeErrorInValueOfString(instance, "2012-02-29"); - } + expectTypeErrorInValueToString(instance, 0); + } + + @Test + public void valueOfString() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + dateTime.set(2012, 1, 29); + assertEqualCalendar(dateTime, + instance.valueOfString("2012-02-29", null, null, null, null, null, Calendar.class)); + assertEquals(Long.valueOf(dateTime.getTimeInMillis()), + instance.valueOfString("2012-02-29", null, null, null, null, null, Long.class)); + assertEquals(dateTime.getTime(), + instance.valueOfString("2012-02-29", null, null, null, null, null, java.util.Date.class)); + assertEquals(java.sql.Date.valueOf("2012-02-29"), + instance.valueOfString("2012-02-29", null, null, null, null, null, java.sql.Date.class)); + assertEquals(LocalDate.parse("2012-02-29"), + instance.valueOfString("2012-02-29", null, null, null, null, null, LocalDate.class)); + + // TODO support for years beyond 9999 + // dateTime.set(Calendar.YEAR, 12344); + // Calendar result = instance.valueOfString("12344-02-29", null, null, null, + // null, null, Calendar.class); + // this.assertEqualCalendar(dateTime, result); + + // TODO: Clarify whether negative years are really needed. + // dateTime.set(-1, 1, 28); + // assertEquals(dateTime, instance.valueOfString("-0001-02-28", null, + // Calendar.class)); + + expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02"); + expectContentErrorInValueOfString(instance, "2012-02-30"); + expectContentErrorInValueOfString(instance, "20120229"); + expectContentErrorInValueOfString(instance, "2012-02-1"); + expectContentErrorInValueOfString(instance, "2012-2-12"); + expectContentErrorInValueOfString(instance, "123-02-03"); + + expectTypeErrorInValueOfString(instance, "2012-02-29"); + } } 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 c144ac3..3075dfd 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 @@ -35,208 +35,208 @@ import org.junit.Test; public class EdmDateTimeOffsetTest extends PrimitiveTypeBaseTest { - final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.DateTimeOffset); - - @Test - public void toUriLiteral() throws Exception { - assertEquals("2009-12-26T21:23:38Z", instance.toUriLiteral("2009-12-26T21:23:38Z")); - assertEquals("2002-10-10T12:00:00-05:00", instance.toUriLiteral("2002-10-10T12:00:00-05:00")); - } - - @Test - public void fromUriLiteral() throws Exception { - assertEquals("2009-12-26T21:23:38Z", instance.fromUriLiteral("2009-12-26T21:23:38Z")); - assertEquals("2002-10-10T12:00:00-05:00", instance.fromUriLiteral("2002-10-10T12:00:00-05:00")); - } - - @Test - public void valueToStringFromInstant() throws Exception { - Instant instant = Instant.parse("2012-02-29T01:02:03Z"); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, null, null, null)); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, 0, null, null)); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, 5, null, null)); - } - - @Test - public void valueToStringFromZonedDateTime() throws Exception { - ZonedDateTime zdt = ZonedDateTime.parse("2012-02-28T23:32:03-01:30"); - - assertEquals("2012-02-28T23:32:03-01:30", instance.valueToString(zdt, null, null, null, null, null)); - - zdt = zdt.withZoneSameInstant(ZoneId.of("GMT+11:00")); - assertEquals("2012-02-29T12:02:03+11:00", instance.valueToString(zdt, null, null, null, null, null)); - - zdt = zdt.plus(123, ChronoUnit.MILLIS); - - assertEquals("2012-02-29T12:02:03.123+11:00", instance.valueToString(zdt, null, null, null, null, null)); - assertEquals("2012-02-29T12:02:03.123+11:00", instance.valueToString(zdt, null, null, 3, null, null)); - - zdt = zdt.plus(456789, ChronoUnit.NANOS); - assertEquals("2012-02-29T12:02:03.123456789+11:00", instance.valueToString(zdt, null, null, 9, null, null)); - } - - @Test - public void valueToStringFromCalendar() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - setTimeZone(dateTime, "GMT"); - dateTime.set(2012, 1, 29, 1, 2, 3); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, null, null, null)); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, 0, null, null)); - assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, 5, null, null)); - - setTimeZone(dateTime, "GMT-1:30"); - assertEquals("2012-02-28T23:32:03-01:30", instance.valueToString(dateTime, null, null, null, null, null)); - - setTimeZone(dateTime, "GMT+11:00"); - assertEquals("2012-02-29T12:02:03+11:00", instance.valueToString(dateTime, null, null, null, null, null)); - - dateTime.set(Calendar.MILLISECOND, 503); - assertEquals("2012-02-29T12:02:03.503+11:00", instance.valueToString(dateTime, null, null, null, null, null)); - assertEquals("2012-02-29T12:02:03.503+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); - - dateTime.set(Calendar.MILLISECOND, 530); - assertEquals("2012-02-29T12:02:03.53+11:00", instance.valueToString(dateTime, null, null, null, null, null)); - assertEquals("2012-02-29T12:02:03.53+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); - - dateTime.set(Calendar.MILLISECOND, 53); - assertEquals("2012-02-29T12:02:03.053+11:00", instance.valueToString(dateTime, null, null, null, null, null)); - assertEquals("2012-02-29T12:02:03.053+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); - } - - @Test - public void valueToStringFromLong() throws Exception { - Long millis = 1330558323000L; - assertEquals("2012-02-29T23:32:03Z", instance.valueToString(millis, null, null, null, null, null)); - millis = 1330558323007L; - assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(millis, null, null, null, null, null)); - 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)); - } - - @Test - public void valueToStringFromJavaUtilDate() throws Exception { - final Long millis = 1330558323007L; - final Date date = new Date(millis); - assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(date, null, null, null, null, null)); - assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(date, null, null, 3, null, null)); - } - - @Test - public void valueToStringFromTimestamp() throws Exception { - Timestamp timestamp = new Timestamp(0); - timestamp.setNanos(120); - assertEquals("1970-01-01T00:00:00.00000012Z", instance.valueToString(timestamp, null, null, null, null, null)); - assertEquals("1970-01-01T00:00:00.00000012Z", instance.valueToString(timestamp, null, null, 8, null, null)); - - } - - @Test - public void valueToStringFromInvalidTypes() throws Exception { - expectTypeErrorInValueToString(instance, Integer.valueOf(0)); - expectTypeErrorInValueToString(instance, Time.valueOf("12:13:14")); - expectTypeErrorInValueToString(instance, java.sql.Date.valueOf("2019-10-25")); - } - - @Test - public void valueOfStringToInstant() throws Exception { - Instant instant = Instant.parse("2012-02-29T01:02:03Z"); - assertEquals(instant, - instance.valueOfString("2012-02-29T01:02:03Z", null, null, null, null, null, Instant.class)); - assertEquals(instant, - instance.valueOfString("2012-02-29T01:02:03", null, null, null, null, null, Instant.class)); - } - - @Test - public void valueOfStringToZonedDateTime() throws Exception { - ZonedDateTime zdt = ZonedDateTime.parse("2012-02-29T01:02:03-01:30"); - assertEquals(zdt, - instance.valueOfString("2012-02-29T01:02:03-01:30", null, null, null, null, null, ZonedDateTime.class)); - } - - @Test - public void valueOfStringToCalendar() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - setTimeZone(dateTime, "GMT"); - dateTime.set(2012, 1, 29, 1, 2, 3); - assertEqualCalendar(dateTime, - instance.valueOfString("2012-02-29T01:02:03Z", null, null, null, null, null, Calendar.class)); - assertEqualCalendar(dateTime, - instance.valueOfString("2012-02-29T01:02:03", null, null, null, null, null, Calendar.class)); - - dateTime.clear(); - setTimeZone(dateTime, "GMT-01:30"); - dateTime.set(2012, 1, 29, 1, 2, 3); - assertEquals(dateTime.getTime(), - instance.valueOfString("2012-02-29T01:02:03-01:30", null, null, null, null, null, Date.class)); - - dateTime.clear(); - setTimeZone(dateTime, "GMT+11:00"); - dateTime.set(2012, 1, 29, 1, 2, 3); - assertEqualCalendar(dateTime, - instance.valueOfString("2012-02-29T01:02:03+11:00", null, null, null, null, null, Calendar.class)); - dateTime.add(Calendar.MILLISECOND, 7); - assertEqualCalendar(dateTime, - instance.valueOfString("2012-02-29T01:02:03.007+11:00", null, null, 3, null, null, Calendar.class)); - } - - @Test - public void valueOfStringToTimestamp() throws Exception { - assertEquals(530000001, instance - .valueOfString("2012-02-29T01:02:03.530000001+11:00", null, null, 9, null, null, Timestamp.class) - .getNanos()); - } - - @Test - public void valueOfStringToLong() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - setTimeZone(dateTime, "GMT"); - dateTime.set(2012, 1, 29, 1, 2, 3); - assertEquals(Long.valueOf(dateTime.getTimeInMillis()), - instance.valueOfString("2012-02-29T01:02:03+00:00", null, null, null, null, null, Long.class)); - assertEquals(Long.valueOf(120000L), - instance.valueOfString("1970-01-01T00:02Z", null, null, null, null, null, Long.class)); - assertEquals(Long.valueOf(120000L), - instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, Long.class)); - assertEquals(Long.valueOf(12L), - instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, Long.class)); - assertEquals(Long.valueOf(120L), - instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, Long.class)); - } - - @Test - public void valueOfStringToJavaSqlTime() throws Exception { - assertEquals(new Time(120000L), - instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, Time.class)); - // java.sql.Time does not keep track of milliseconds. - assertEquals(new Time(0), - instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, Time.class)); - assertEquals(new Time(0), - instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, Time.class)); - } - - @Test - public void valueOfStringToJavaSqlDate() throws Exception { - assertEquals(new java.sql.Date(120000L), - instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, java.sql.Date.class)); - // java.sql.Time does not keep track of milliseconds. - assertEquals(new java.sql.Date(0), - instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, java.sql.Date.class)); - assertEquals(new java.sql.Date(0), - instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, java.sql.Date.class)); - } - - @Test - public void valueOfStringInvalidData() throws Exception { - expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02X"); - expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02+24:00"); - expectContentErrorInValueOfString(instance, "2012-02-30T01:02:03"); - expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02.0000000000000"); - - expectTypeErrorInValueOfString(instance, "2012-02-29T01:02:03Z"); - } + final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.DateTimeOffset); + + @Test + public void toUriLiteral() throws Exception { + assertEquals("2009-12-26T21:23:38Z", instance.toUriLiteral("2009-12-26T21:23:38Z")); + assertEquals("2002-10-10T12:00:00-05:00", instance.toUriLiteral("2002-10-10T12:00:00-05:00")); + } + + @Test + public void fromUriLiteral() throws Exception { + assertEquals("2009-12-26T21:23:38Z", instance.fromUriLiteral("2009-12-26T21:23:38Z")); + assertEquals("2002-10-10T12:00:00-05:00", instance.fromUriLiteral("2002-10-10T12:00:00-05:00")); + } + + @Test + public void valueToStringFromInstant() throws Exception { + Instant instant = Instant.parse("2012-02-29T01:02:03Z"); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, null, null, null)); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, 0, null, null)); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(instant, null, null, 5, null, null)); + } + + @Test + public void valueToStringFromZonedDateTime() throws Exception { + ZonedDateTime zdt = ZonedDateTime.parse("2012-02-28T23:32:03-01:30"); + + assertEquals("2012-02-28T23:32:03-01:30", instance.valueToString(zdt, null, null, null, null, null)); + + zdt = zdt.withZoneSameInstant(ZoneId.of("GMT+11:00")); + assertEquals("2012-02-29T12:02:03+11:00", instance.valueToString(zdt, null, null, null, null, null)); + + zdt = zdt.plus(123, ChronoUnit.MILLIS); + + assertEquals("2012-02-29T12:02:03.123+11:00", instance.valueToString(zdt, null, null, null, null, null)); + assertEquals("2012-02-29T12:02:03.123+11:00", instance.valueToString(zdt, null, null, 3, null, null)); + + zdt = zdt.plus(456789, ChronoUnit.NANOS); + assertEquals("2012-02-29T12:02:03.123456789+11:00", instance.valueToString(zdt, null, null, 9, null, null)); + } + + @Test + public void valueToStringFromCalendar() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + setTimeZone(dateTime, "GMT"); + dateTime.set(2012, 1, 29, 1, 2, 3); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, null, null, null)); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, 0, null, null)); + assertEquals("2012-02-29T01:02:03Z", instance.valueToString(dateTime, null, null, 5, null, null)); + + setTimeZone(dateTime, "GMT-1:30"); + assertEquals("2012-02-28T23:32:03-01:30", instance.valueToString(dateTime, null, null, null, null, null)); + + setTimeZone(dateTime, "GMT+11:00"); + assertEquals("2012-02-29T12:02:03+11:00", instance.valueToString(dateTime, null, null, null, null, null)); + + dateTime.set(Calendar.MILLISECOND, 503); + assertEquals("2012-02-29T12:02:03.503+11:00", instance.valueToString(dateTime, null, null, null, null, null)); + assertEquals("2012-02-29T12:02:03.503+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); + + dateTime.set(Calendar.MILLISECOND, 530); + assertEquals("2012-02-29T12:02:03.53+11:00", instance.valueToString(dateTime, null, null, null, null, null)); + assertEquals("2012-02-29T12:02:03.53+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); + + dateTime.set(Calendar.MILLISECOND, 53); + assertEquals("2012-02-29T12:02:03.053+11:00", instance.valueToString(dateTime, null, null, null, null, null)); + assertEquals("2012-02-29T12:02:03.053+11:00", instance.valueToString(dateTime, null, null, 3, null, null)); + } + + @Test + public void valueToStringFromLong() throws Exception { + Long millis = 1330558323000L; + assertEquals("2012-02-29T23:32:03Z", instance.valueToString(millis, null, null, null, null, null)); + millis = 1330558323007L; + assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(millis, null, null, null, null, null)); + 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)); + } + + @Test + public void valueToStringFromJavaUtilDate() throws Exception { + final Long millis = 1330558323007L; + final Date date = new Date(millis); + assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(date, null, null, null, null, null)); + assertEquals("2012-02-29T23:32:03.007Z", instance.valueToString(date, null, null, 3, null, null)); + } + + @Test + public void valueToStringFromTimestamp() throws Exception { + Timestamp timestamp = new Timestamp(0); + timestamp.setNanos(120); + assertEquals("1970-01-01T00:00:00.00000012Z", instance.valueToString(timestamp, null, null, null, null, null)); + assertEquals("1970-01-01T00:00:00.00000012Z", instance.valueToString(timestamp, null, null, 8, null, null)); + + } + + @Test + public void valueToStringFromInvalidTypes() throws Exception { + expectTypeErrorInValueToString(instance, Integer.valueOf(0)); + expectTypeErrorInValueToString(instance, Time.valueOf("12:13:14")); + expectTypeErrorInValueToString(instance, java.sql.Date.valueOf("2019-10-25")); + } + + @Test + public void valueOfStringToInstant() throws Exception { + Instant instant = Instant.parse("2012-02-29T01:02:03Z"); + assertEquals(instant, + instance.valueOfString("2012-02-29T01:02:03Z", null, null, null, null, null, Instant.class)); + assertEquals(instant, + instance.valueOfString("2012-02-29T01:02:03", null, null, null, null, null, Instant.class)); + } + + @Test + public void valueOfStringToZonedDateTime() throws Exception { + ZonedDateTime zdt = ZonedDateTime.parse("2012-02-29T01:02:03-01:30"); + assertEquals(zdt, + instance.valueOfString("2012-02-29T01:02:03-01:30", null, null, null, null, null, ZonedDateTime.class)); + } + + @Test + public void valueOfStringToCalendar() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + setTimeZone(dateTime, "GMT"); + dateTime.set(2012, 1, 29, 1, 2, 3); + assertEqualCalendar(dateTime, + instance.valueOfString("2012-02-29T01:02:03Z", null, null, null, null, null, Calendar.class)); + assertEqualCalendar(dateTime, + instance.valueOfString("2012-02-29T01:02:03", null, null, null, null, null, Calendar.class)); + + dateTime.clear(); + setTimeZone(dateTime, "GMT-01:30"); + dateTime.set(2012, 1, 29, 1, 2, 3); + assertEquals(dateTime.getTime(), + instance.valueOfString("2012-02-29T01:02:03-01:30", null, null, null, null, null, Date.class)); + + dateTime.clear(); + setTimeZone(dateTime, "GMT+11:00"); + dateTime.set(2012, 1, 29, 1, 2, 3); + assertEqualCalendar(dateTime, + instance.valueOfString("2012-02-29T01:02:03+11:00", null, null, null, null, null, Calendar.class)); + dateTime.add(Calendar.MILLISECOND, 7); + assertEqualCalendar(dateTime, + instance.valueOfString("2012-02-29T01:02:03.007+11:00", null, null, 3, null, null, Calendar.class)); + } + + @Test + public void valueOfStringToTimestamp() throws Exception { + assertEquals(530000001, instance + .valueOfString("2012-02-29T01:02:03.530000001+11:00", null, null, 9, null, null, Timestamp.class) + .getNanos()); + } + + @Test + public void valueOfStringToLong() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + setTimeZone(dateTime, "GMT"); + dateTime.set(2012, 1, 29, 1, 2, 3); + assertEquals(Long.valueOf(dateTime.getTimeInMillis()), + instance.valueOfString("2012-02-29T01:02:03+00:00", null, null, null, null, null, Long.class)); + assertEquals(Long.valueOf(120000L), + instance.valueOfString("1970-01-01T00:02Z", null, null, null, null, null, Long.class)); + assertEquals(Long.valueOf(120000L), + instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, Long.class)); + assertEquals(Long.valueOf(12L), + instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, Long.class)); + assertEquals(Long.valueOf(120L), + instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, Long.class)); + } + + @Test + public void valueOfStringToJavaSqlTime() throws Exception { + assertEquals(new Time(120000L), + instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, Time.class)); + // java.sql.Time does not keep track of milliseconds. + assertEquals(new Time(0), + instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, Time.class)); + assertEquals(new Time(0), + instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, Time.class)); + } + + @Test + public void valueOfStringToJavaSqlDate() throws Exception { + assertEquals(new java.sql.Date(120000L), + instance.valueOfString("1970-01-01T00:02", null, null, null, null, null, java.sql.Date.class)); + // java.sql.Time does not keep track of milliseconds. + assertEquals(new java.sql.Date(0), + instance.valueOfString("1970-01-01T00:00:00.012", null, null, 3, null, null, java.sql.Date.class)); + assertEquals(new java.sql.Date(0), + instance.valueOfString("1970-01-01T00:00:00.12", null, null, 2, null, null, java.sql.Date.class)); + } + + @Test + public void valueOfStringInvalidData() throws Exception { + expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02X"); + expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02+24:00"); + expectContentErrorInValueOfString(instance, "2012-02-30T01:02:03"); + expectContentErrorInValueOfString(instance, "2012-02-29T23:32:02.0000000000000"); + + expectTypeErrorInValueOfString(instance, "2012-02-29T01:02:03Z"); + } } 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 ddcbc65..f1253a4 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 @@ -23,7 +23,6 @@ import static org.junit.Assert.assertEquals; import java.sql.Time; import java.sql.Timestamp; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -37,154 +36,154 @@ import org.junit.Test; public class EdmTimeOfDayTest extends PrimitiveTypeBaseTest { - private final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.TimeOfDay); - - @Test - public void toUriLiteral() throws Exception { - assertEquals("11:12", instance.toUriLiteral("11:12")); - assertEquals("11:12:13.012", instance.toUriLiteral("11:12:13.012")); - } - - @Test - public void fromUriLiteral() throws Exception { - assertEquals("11:12", instance.fromUriLiteral("11:12")); - assertEquals("11:12:13.012", instance.fromUriLiteral("11:12:13.012")); - } - - @Test - public void valueToString() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - setTimeZone(dateTime, "GMT+11:30"); - dateTime.set(1, 2, 3, 4, 5, 6); - assertEquals("04:05:06", instance.valueToString(dateTime, null, null, null, null, null)); - - dateTime.add(Calendar.MILLISECOND, 42); - assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, null, null, null)); - assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 3, null, null)); - assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 4, null, null)); - - Calendar dateTime2 = Calendar.getInstance(); - dateTime2.clear(); - setTimeZone(dateTime, TimeZone.getDefault()); - dateTime2.set(Calendar.HOUR, 5); - dateTime2.set(Calendar.MINUTE, 59); - dateTime2.set(Calendar.SECOND, 23); - - final java.sql.Time time = new java.sql.Time(dateTime2.getTimeInMillis()); - assertEquals("05:59:23", instance.valueToString(time, null, null, null, null, null)); - - assertEquals("05:59:23", instance.valueToString(dateTime2.getTimeInMillis(), null, null, null, null, null)); + private final EdmPrimitiveType instance = EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.TimeOfDay); + + @Test + public void toUriLiteral() throws Exception { + assertEquals("11:12", instance.toUriLiteral("11:12")); + assertEquals("11:12:13.012", instance.toUriLiteral("11:12:13.012")); + } + + @Test + public void fromUriLiteral() throws Exception { + assertEquals("11:12", instance.fromUriLiteral("11:12")); + assertEquals("11:12:13.012", instance.fromUriLiteral("11:12:13.012")); + } + + @Test + public void valueToString() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + setTimeZone(dateTime, "GMT+11:30"); + dateTime.set(1, 2, 3, 4, 5, 6); + assertEquals("04:05:06", instance.valueToString(dateTime, null, null, null, null, null)); + + dateTime.add(Calendar.MILLISECOND, 42); + assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, null, null, null)); + assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 3, null, null)); + assertEquals("04:05:06.042", instance.valueToString(dateTime, null, null, 4, null, null)); + + Calendar dateTime2 = Calendar.getInstance(); + dateTime2.clear(); + setTimeZone(dateTime, TimeZone.getDefault()); + dateTime2.set(Calendar.HOUR, 5); + dateTime2.set(Calendar.MINUTE, 59); + dateTime2.set(Calendar.SECOND, 23); + + final java.sql.Time time = new java.sql.Time(dateTime2.getTimeInMillis()); + assertEquals("05:59:23", instance.valueToString(time, null, null, null, null, null)); + + assertEquals("05:59:23", instance.valueToString(dateTime2.getTimeInMillis(), null, null, null, null, null)); // Timestamp timestamp = new Timestamp(0); // timestamp.setNanos(42); - expectTypeErrorInValueToString(instance, 0); - } - - @Test - public void valueToStringFromJavaUtilDate() throws Exception { - LocalTime time = LocalTime.parse("04:05:06"); - ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault()); - long millis = zdt.toInstant().toEpochMilli(); - - java.util.Date javaUtilDate = new java.util.Date(millis); - assertEquals("04:05:06", instance.valueToString(javaUtilDate, null, null, null, null, null)); - - java.sql.Timestamp javaSqlTimestamp = new java.sql.Timestamp(millis); - assertEquals("04:05:06", instance.valueToString(javaSqlTimestamp, null, null, null, null, null)); - } - - @Test - public void valueToStringFromLocalTime() throws Exception { - LocalTime time = LocalTime.parse("04:05:06"); - assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null)); - } - - @Test - public void valueToStringFromJavaSqlTime() throws Exception { - java.sql.Time time = java.sql.Time.valueOf("04:05:06"); - assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null)); - } - - @Test - public void valueOfString() throws Exception { - Calendar dateTime = Calendar.getInstance(); - dateTime.clear(); - - assertEqualCalendar(dateTime, instance.valueOfString("00:00", null, null, null, null, null, Calendar.class)); - assertEqualCalendar(dateTime, instance.valueOfString("00:00:00", null, null, null, null, null, Calendar.class)); - assertEqualCalendar(dateTime, - instance.valueOfString("00:00:00.000000000", null, null, null, null, null, Calendar.class)); - - final Time timeValue = instance.valueOfString("00:00:00.999", null, null, 3, null, null, Time.class); - assertEquals(dateTime.getTimeInMillis(), timeValue.getTime()); - - dateTime.set(Calendar.MILLISECOND, 999); - assertEqualCalendar(dateTime, - instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class)); - assertEqualCalendar(dateTime, - instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class)); - assertEquals(Long.valueOf(dateTime.getTimeInMillis()), - instance.valueOfString("00:00:00.999", null, null, 3, null, null, Long.class)); - - final Timestamp timestamp = instance.valueOfString("00:00:00.999888777", null, null, 9, null, null, - Timestamp.class); - assertEquals(dateTime.getTimeInMillis(), timestamp.getTime()); - assertEquals(999888777, timestamp.getNanos()); + expectTypeErrorInValueToString(instance, 0); + } + + @Test + public void valueToStringFromJavaUtilDate() throws Exception { + LocalTime time = LocalTime.parse("04:05:06"); + ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault()); + long millis = zdt.toInstant().toEpochMilli(); + + java.util.Date javaUtilDate = new java.util.Date(millis); + assertEquals("04:05:06", instance.valueToString(javaUtilDate, null, null, null, null, null)); + + java.sql.Timestamp javaSqlTimestamp = new java.sql.Timestamp(millis); + assertEquals("04:05:06", instance.valueToString(javaSqlTimestamp, null, null, null, null, null)); + } + + @Test + public void valueToStringFromLocalTime() throws Exception { + LocalTime time = LocalTime.parse("04:05:06"); + assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null)); + } + + @Test + public void valueToStringFromJavaSqlTime() throws Exception { + java.sql.Time time = java.sql.Time.valueOf("04:05:06"); + assertEquals("04:05:06", instance.valueToString(time, null, null, null, null, null)); + } + + @Test + public void valueOfString() throws Exception { + Calendar dateTime = Calendar.getInstance(); + dateTime.clear(); + + assertEqualCalendar(dateTime, instance.valueOfString("00:00", null, null, null, null, null, Calendar.class)); + assertEqualCalendar(dateTime, instance.valueOfString("00:00:00", null, null, null, null, null, Calendar.class)); + assertEqualCalendar(dateTime, + instance.valueOfString("00:00:00.000000000", null, null, null, null, null, Calendar.class)); + + final Time timeValue = instance.valueOfString("00:00:00.999", null, null, 3, null, null, Time.class); + assertEquals(dateTime.getTimeInMillis(), timeValue.getTime()); + + dateTime.set(Calendar.MILLISECOND, 999); + assertEqualCalendar(dateTime, + instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class)); + assertEqualCalendar(dateTime, + instance.valueOfString("00:00:00.999", null, null, 3, null, null, Calendar.class)); + assertEquals(Long.valueOf(dateTime.getTimeInMillis()), + instance.valueOfString("00:00:00.999", null, null, 3, null, null, Long.class)); + + final Timestamp timestamp = instance.valueOfString("00:00:00.999888777", null, null, 9, null, null, + Timestamp.class); + assertEquals(dateTime.getTimeInMillis(), timestamp.getTime()); + assertEquals(999888777, timestamp.getNanos()); // expectUnconvertibleErrorInValueOfString(instance, "11:12:13.1234", Calendar.class); // expectUnconvertibleErrorInValueOfString(instance, "11:12:13.0123456789", Timestamp.class); - expectContentErrorInValueOfString(instance, "24:32:02"); - expectContentErrorInValueOfString(instance, "011:12:13"); - expectContentErrorInValueOfString(instance, "11:12:13:14"); - expectContentErrorInValueOfString(instance, "111213"); - expectContentErrorInValueOfString(instance, "1:2:3"); - expectContentErrorInValueOfString(instance, "11:12:13.0.1"); + expectContentErrorInValueOfString(instance, "24:32:02"); + expectContentErrorInValueOfString(instance, "011:12:13"); + expectContentErrorInValueOfString(instance, "11:12:13:14"); + expectContentErrorInValueOfString(instance, "111213"); + expectContentErrorInValueOfString(instance, "1:2:3"); + expectContentErrorInValueOfString(instance, "11:12:13.0.1"); // expectContentErrorInValueOfString(instance, "11:12:13."); - expectContentErrorInValueOfString(instance, "11:12:13.0000000000000"); - - expectTypeErrorInValueOfString(instance, "11:12:13"); - } - - @Test - public void valueOfStringToLocalTime() throws Exception { - LocalTime time = LocalTime.parse("04:05:06"); - assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, LocalTime.class)); - - time = time.plus(123, ChronoUnit.MILLIS); - assertEquals(time, instance.valueOfString("04:05:06.123", null, null, null, null, null, LocalTime.class)); - - time = time.plus(456789, ChronoUnit.NANOS); - assertEquals(time, instance.valueOfString("04:05:06.123456789", null, null, null, null, null, LocalTime.class)); - } - - @Test - public void valueOfStringToJavaSqlTime() throws Exception { - java.sql.Time time = java.sql.Time.valueOf("04:05:06"); - assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, java.sql.Time.class)); - } - - @Test - public void valueOfStringToJavaUtilDateTime() throws Exception { - LocalTime time = LocalTime.parse("04:05:06"); - ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault()); - long millis = zdt.toInstant().toEpochMilli(); - java.util.Date javaUtilDate = new java.util.Date(millis); - assertEquals(javaUtilDate, instance.valueOfString("04:05:06", null, null, null, null, null, java.util.Date.class)); - } - - @Test - public void testRoundTripTime() throws Exception { - java.sql.Time time = instance.valueOfString("04:05:06.002", true, 4000, 3, 0, true, java.sql.Time.class); - String val = instance.valueToString(time, true, 4000, 3, 0, true); - assertEquals("04:05:06", val); - } - - @Test - public void tests() throws Exception { - instance.validate("12:34:55", null, null, null, null, null); - } + expectContentErrorInValueOfString(instance, "11:12:13.0000000000000"); + + expectTypeErrorInValueOfString(instance, "11:12:13"); + } + + @Test + public void valueOfStringToLocalTime() throws Exception { + LocalTime time = LocalTime.parse("04:05:06"); + assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, LocalTime.class)); + + time = time.plus(123, ChronoUnit.MILLIS); + assertEquals(time, instance.valueOfString("04:05:06.123", null, null, null, null, null, LocalTime.class)); + + time = time.plus(456789, ChronoUnit.NANOS); + assertEquals(time, instance.valueOfString("04:05:06.123456789", null, null, null, null, null, LocalTime.class)); + } + + @Test + public void valueOfStringToJavaSqlTime() throws Exception { + java.sql.Time time = java.sql.Time.valueOf("04:05:06"); + assertEquals(time, instance.valueOfString("04:05:06", null, null, null, null, null, java.sql.Time.class)); + } + + @Test + public void valueOfStringToJavaUtilDateTime() throws Exception { + LocalTime time = LocalTime.parse("04:05:06"); + ZonedDateTime zdt = ZonedDateTime.of(LocalDate.ofEpochDay(0), time, ZoneId.systemDefault()); + long millis = zdt.toInstant().toEpochMilli(); + java.util.Date javaUtilDate = new java.util.Date(millis); + assertEquals(javaUtilDate, instance.valueOfString("04:05:06", null, null, null, null, null, java.util.Date.class)); + } + + @Test + public void testRoundTripTime() throws Exception { + java.sql.Time time = instance.valueOfString("04:05:06.002", true, 4000, 3, 0, true, java.sql.Time.class); + String val = instance.valueToString(time, true, 4000, 3, 0, true); + assertEquals("04:05:06", val); + } + + @Test + public void tests() throws Exception { + instance.validate("12:34:55", null, null, null, null, null); + } }
