diff --git a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/InstantConverterFactory.java b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/InstantConverterFactory.java new file mode 100644 index 00000000..17dd4f1f --- /dev/null +++ b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/InstantConverterFactory.java @@ -0,0 +1,84 @@ +/* + * Copyright 2018-2019 Karakun AG. + * Copyright 2015-2016 Canoo Engineering AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package dev.rico.internal.remoting.converters; + + +import dev.rico.remoting.converter.Converter; +import dev.rico.remoting.converter.ValueConverterException; + +import java.time.Instant; +import java.time.format.DateTimeFormatter; +import java.util.Collections; +import java.util.List; + +/** + * Created by hendrikebbers on 25.10.16. + * Adopted by Jörg Hälker on 29.01.18. + */ +public class InstantConverterFactory extends AbstractConverterFactory { + + @SuppressWarnings("rawtypes") + private final static Converter CONVERTER = new InstantConverter(); + + @Override + public boolean supportsType(final Class cls) { + return Instant.class.isAssignableFrom(cls); + } + + @Override + public List getSupportedTypes() { + return Collections.singletonList(Instant.class); + } + + @Override + public int getTypeIdentifier() { + return 1000; + } + + @Override + public Converter getConverterForType(final Class cls) { + return CONVERTER; + } + + private static class InstantConverter extends AbstractStringConverter { + + @Override + public Instant convertFromRemoting(final String value) throws ValueConverterException { + if (value == null) { + return null; + } + try { + return Instant.from(DateTimeFormatter.ISO_INSTANT.parse(value)); + } catch (Exception e) { + throw new ValueConverterException("Can not convert to Instant", e); + } + } + + @Override + public String convertToRemoting(final Instant value) throws ValueConverterException { + if (value == null) { + return null; + } + try { + return value.toString(); + } catch (Exception e) { + throw new ValueConverterException("Can not convert from Instant", e); + } + } + } + +} diff --git a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateConverterFactory.java b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateConverterFactory.java index c472fbbc..22e6518f 100644 --- a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateConverterFactory.java +++ b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateConverterFactory.java @@ -20,15 +20,10 @@ import dev.rico.remoting.converter.ValueConverterException; import org.apiguardian.api.API; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.time.ZoneId; import java.time.ZoneOffset; import java.util.*; -import static dev.rico.internal.remoting.RemotingConstants.REMOTING_DATE_FORMAT_PATTERN; -import static dev.rico.internal.core.RicoConstants.TIMEZONE_UTC; import static org.apiguardian.api.API.Status.INTERNAL; @API(since = "0.x", status = INTERNAL) @@ -59,6 +54,8 @@ public int getTypeIdentifier() { private static class LocalDateConverter extends AbstractDateConverter { + private static final String UTC = "UTC"; + @Override public LocalDate convertFromRemoting(final String value) throws ValueConverterException { @@ -66,9 +63,9 @@ public LocalDate convertFromRemoting(final String value) return null; } try { - final Calendar result = Calendar.getInstance(TimeZone.getDefault()); + final Calendar result = Calendar.getInstance(TimeZone.getTimeZone(UTC)); result.setTime(getDateFormat().parse(value)); - return result.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + return result.toInstant().atZone(ZoneOffset.UTC).toLocalDate(); } catch (final Exception e) { throw new ValueConverterException( "Can not convert to LocalDate", e); @@ -82,8 +79,9 @@ public String convertToRemoting(final LocalDate value) return null; } try { - final Date date = Date.from(value.atStartOfDay().toInstant(ZoneOffset.ofHours(0))); - return getDateFormat().format(date); + final Date date = Date.from(value.atStartOfDay().toInstant(ZoneOffset.UTC)); + String format = getDateFormat().format(date); + return format; } catch (final Exception e) { throw new ValueConverterException( "Can not convert from LocalDate", e); diff --git a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateTimeConverterFactory.java b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateTimeConverterFactory.java index e8dd774d..466d5eb5 100644 --- a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateTimeConverterFactory.java +++ b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalDateTimeConverterFactory.java @@ -20,14 +20,10 @@ import dev.rico.remoting.converter.ValueConverterException; import org.apiguardian.api.API; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.*; -import static dev.rico.internal.remoting.RemotingConstants.REMOTING_DATE_FORMAT_PATTERN; import static dev.rico.internal.core.RicoConstants.TIMEZONE_UTC; import static org.apiguardian.api.API.Status.INTERNAL; @@ -66,7 +62,7 @@ public LocalDateTime convertFromRemoting(final String value) throws ValueConvert try { final Calendar result = Calendar.getInstance(TimeZone.getTimeZone(TIMEZONE_UTC)); result.setTime(getDateFormat().parse(value)); - return result.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + return result.toInstant().atZone(ZoneOffset.UTC).toLocalDateTime(); } catch (final Exception e) { throw new ValueConverterException("Can not convert to LocalDateTime", e); } @@ -78,7 +74,7 @@ public String convertToRemoting(final LocalDateTime value) throws ValueConverter return null; } try { - final Date date = Date.from(value.toInstant(OffsetDateTime.now().getOffset())); + final Date date = Date.from(value.toInstant(ZoneOffset.UTC)); return getDateFormat().format(date); } catch (final Exception e) { throw new ValueConverterException("Can not convert from LocalDateTime", e); diff --git a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalTimeConverterFactory.java b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalTimeConverterFactory.java new file mode 100644 index 00000000..8fb5a777 --- /dev/null +++ b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/LocalTimeConverterFactory.java @@ -0,0 +1,84 @@ +/* + * Copyright 2018-2019 Karakun AG. + * Copyright 2015-2016 Canoo Engineering AG. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package dev.rico.internal.remoting.converters; + + +import dev.rico.remoting.converter.Converter; +import dev.rico.remoting.converter.ValueConverterException; + +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.util.Collections; +import java.util.List; + +/** + * Created by hendrikebbers on 25.10.16. + * Adopted by Jörg Hälker on 29.01.18. + */ +public class LocalTimeConverterFactory extends AbstractConverterFactory { + + @SuppressWarnings("rawtypes") + private final static Converter CONVERTER = new LocalTimeConverter(); + + @Override + public boolean supportsType(final Class cls) { + return LocalTime.class.isAssignableFrom(cls); + } + + @Override + public List getSupportedTypes() { + return Collections.singletonList(LocalTime.class); + } + + @Override + public int getTypeIdentifier() { + return 1200; + } + + @Override + public Converter getConverterForType(final Class cls) { + return CONVERTER; + } + + private static class LocalTimeConverter extends AbstractStringConverter { + + @Override + public LocalTime convertFromRemoting(final String value) throws ValueConverterException { + if (value == null) { + return null; + } + try { + return LocalTime.from(DateTimeFormatter.ISO_TIME.parse(value)); + } catch (Exception e) { + throw new ValueConverterException("Can not convert to LocalTime", e); + } + } + + @Override + public String convertToRemoting(final LocalTime value) throws ValueConverterException { + if (value == null) { + return null; + } + try { + return value.toString(); + } catch (Exception e) { + throw new ValueConverterException("Can not convert from LocalTime", e); + } + } + } + +} diff --git a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/ZonedDateTimeConverterFactory.java b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/ZonedDateTimeConverterFactory.java index aab12f67..27760770 100644 --- a/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/ZonedDateTimeConverterFactory.java +++ b/remoting/rico-remoting-common/src/main/java/dev/rico/internal/remoting/converters/ZonedDateTimeConverterFactory.java @@ -20,14 +20,13 @@ import dev.rico.remoting.converter.ValueConverterException; import org.apiguardian.api.API; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.time.ZoneId; +import java.time.ZoneOffset; import java.time.ZonedDateTime; -import java.util.*; +import java.util.Calendar; +import java.util.Collections; +import java.util.GregorianCalendar; +import java.util.List; -import static dev.rico.internal.remoting.RemotingConstants.REMOTING_DATE_FORMAT_PATTERN; -import static dev.rico.internal.core.RicoConstants.TIMEZONE_UTC; import static org.apiguardian.api.API.Status.INTERNAL; @API(since = "0.x", status = INTERNAL) @@ -65,7 +64,7 @@ public ZonedDateTime convertFromRemoting(final String value) throws ValueConvert try { final Calendar result = Calendar.getInstance(); result.setTime(getDateFormat().parse(value)); - return result.toInstant().atZone(ZoneId.systemDefault()); + return result.toInstant().atZone(ZoneOffset.UTC); } catch (final Exception e) { throw new ValueConverterException("Can not convert to ZonedDateTime", e); }