package org.javers.core.json.typeadapter.util;
import org.javers.common.collections.Lists;
import org.javers.core.json.JsonTypeAdapter;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
/**
* @author bartosz.walacik
*/
public class UtilTypeCoreAdapters {
private static final DateTimeFormatter ISO_FORMAT = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
public static final ZoneId UTC = ZoneId.of("UTC");
public static LocalDateTime deserialize(String date) {
return LocalDateTime.parse(date, ISO_FORMAT);
}
public static Instant deserializeToInstant(String date) {
return deserialize(date).toInstant(ZoneOffset.UTC);
}
public static String serialize(LocalDateTime date) {
return date.format(ISO_FORMAT);
}
public static LocalDateTime fromUtilDate(Date date) {
if (date.getClass() == Date.class) {
return LocalDateTime.ofInstant(date.toInstant(), UTC);
}
return fromUtilDate(new Date(date.getTime())); //hack for old java.sql.Date
}
public static Date toUtilDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.toInstant(ZoneOffset.UTC));
}
public static String serialize(Date date) {
return serialize(fromUtilDate(date));
}
public static List<JsonTypeAdapter> adapters() {
return (List) Lists.immutableListOf(
new JavaUtilDateTypeAdapter(),
new JavaSqlDateTypeAdapter(),
new JavaSqlTimestampTypeAdapter(),
new JavaSqlTimeTypeAdapter(),
new FileTypeAdapter(),
new UUIDTypeAdapter()
);
}
}