Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Jörg Hälker committed Jan 17, 2019
1 parent 87b80ee commit b3fe164
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 23 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* 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.
*/
public class InstantConverterFactory extends AbstractConverterFactory {

@SuppressWarnings("rawtypes")
private final static Converter CONVERTER = new InstantConverter();

@Override
public boolean supportsType(Class<?> cls) {
return Instant.class.isAssignableFrom(cls);
}

@Override
public List<Class> getSupportedTypes() {
return Collections.singletonList(Instant.class);
}

@Override
public int getTypeIdentifier() {
return 1000;
}

@Override
public Converter getConverterForType(Class<?> cls) {
return CONVERTER;
}

private static class InstantConverter extends AbstractStringConverter<Instant> {

@Override
public Instant convertFromRemoting(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(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);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -66,9 +61,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);
Expand All @@ -82,8 +77,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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* 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.
*/
public class LocalTimeConverterFactory extends AbstractConverterFactory {

@SuppressWarnings("rawtypes")
private final static Converter CONVERTER = new LocalTimeConverter();

@Override
public boolean supportsType(Class<?> cls) {
return LocalTime.class.isAssignableFrom(cls);
}

@Override
public List<Class> getSupportedTypes() {
return Collections.singletonList(LocalTime.class);
}

@Override
public int getTypeIdentifier() {
return 1200;
}

@Override
public Converter getConverterForType(Class<?> cls) {
return CONVERTER;
}

private static class LocalTimeConverter extends AbstractStringConverter<LocalTime> {

@Override
public LocalTime convertFromRemoting(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(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);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit b3fe164

Please sign in to comment.