Skip to content

Commit

Permalink
Added more Converter tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
jdereg committed Mar 18, 2024
1 parent 3a7e5b0 commit b2f1770
Show file tree
Hide file tree
Showing 8 changed files with 503 additions and 355 deletions.
11 changes: 11 additions & 0 deletions src/main/java/com/cedarsoftware/util/MapUtilities.java
Original file line number Diff line number Diff line change
Expand Up @@ -192,4 +192,15 @@ public static <K, V> Map<K, V> mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V
map.put(k4, v4);
return Collections.unmodifiableMap(map);
}

public static <K, V> Map<K, V> mapOf(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
{
Map<K, V> map = new LinkedHashMap<>();
map.put(k1, v1);
map.put(k2, v2);
map.put(k3, v3);
map.put(k4, v4);
map.put(k5, v5);
return Collections.unmodifiableMap(map);
}
}
4 changes: 2 additions & 2 deletions src/main/java/com/cedarsoftware/util/convert/Converter.java
Original file line number Diff line number Diff line change
Expand Up @@ -558,7 +558,7 @@ private static void buildFactoryConversions() {
CONVERSION_DB.put(pair(AtomicInteger.class, LocalDateTime.class), UNSUPPORTED);
CONVERSION_DB.put(pair(AtomicLong.class, LocalDateTime.class), NumberConversions::toLocalDateTime);
CONVERSION_DB.put(pair(java.sql.Date.class, LocalDateTime.class), DateConversions::toLocalDateTime);
CONVERSION_DB.put(pair(Timestamp.class, LocalDateTime.class), DateConversions::toLocalDateTime);
CONVERSION_DB.put(pair(Timestamp.class, LocalDateTime.class), TimestampConversions::toLocalDateTime);
CONVERSION_DB.put(pair(Date.class, LocalDateTime.class), DateConversions::toLocalDateTime);
CONVERSION_DB.put(pair(Instant.class, LocalDateTime.class), InstantConversions::toLocalDateTime);
CONVERSION_DB.put(pair(LocalDateTime.class, LocalDateTime.class), LocalDateTimeConversions::toLocalDateTime);
Expand Down Expand Up @@ -894,7 +894,7 @@ private static void buildFactoryConversions() {
CONVERSION_DB.put(pair(AtomicLong.class, Map.class), MapConversions::initMap);
CONVERSION_DB.put(pair(Date.class, Map.class), DateConversions::toMap);
CONVERSION_DB.put(pair(java.sql.Date.class, Map.class), DateConversions::toMap);
CONVERSION_DB.put(pair(Timestamp.class, Map.class), MapConversions::initMap);
CONVERSION_DB.put(pair(Timestamp.class, Map.class), TimestampConversions::toMap);
CONVERSION_DB.put(pair(LocalDate.class, Map.class), LocalDateConversions::toMap);
CONVERSION_DB.put(pair(LocalDateTime.class, Map.class), LocalDateTimeConversions::toMap);
CONVERSION_DB.put(pair(ZonedDateTime.class, Map.class), MapConversions::initMap);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ final class LocalDateTimeConversions {
private LocalDateTimeConversions() {}

static ZonedDateTime toZonedDateTime(Object from, Converter converter) {
return ((LocalDateTime)from).atZone(converter.getOptions().getZoneId());
LocalDateTime ldt = (LocalDateTime) from;
return ZonedDateTime.of(ldt, converter.getOptions().getZoneId());
}

static Instant toInstant(Object from, Converter converter) {
Expand Down Expand Up @@ -71,7 +72,8 @@ static AtomicLong toAtomicLong(Object from, Converter converter) {
}

static Timestamp toTimestamp(Object from, Converter converter) {
return new Timestamp(toLong(from, converter));
LocalDateTime ldt = (LocalDateTime) from;
return Timestamp.from(ldt.atZone(converter.getOptions().getZoneId()).toInstant());
}

static Calendar toCalendar(Object from, Converter converter) {
Expand Down Expand Up @@ -104,7 +106,7 @@ static String toString(Object from, Converter converter) {
return localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}

static Map toMap(Object from, Converter converter) {
static Map<?, ?> toMap(Object from, Converter converter) {
LocalDateTime localDateTime = (LocalDateTime) from;
Map<String, Object> target = new CompactLinkedMap<>();
target.put(MapConversions.DATE, localDateTime.toLocalDate().toString());
Expand Down
12 changes: 5 additions & 7 deletions src/main/java/com/cedarsoftware/util/convert/MapConversions.java
Original file line number Diff line number Diff line change
Expand Up @@ -180,15 +180,15 @@ static Date toDate(Object from, Converter converter) {

static Timestamp toTimestamp(Object from, Converter converter) {
Map<?, ?> map = (Map<?, ?>) from;
if (map.containsKey(TIME)) {
long time = converter.convert(map.get(TIME), long.class);
if (map.containsKey(EPOCH_MILLIS)) {
long time = converter.convert(map.get(EPOCH_MILLIS), long.class);
int ns = converter.convert(map.get(NANOS), int.class);
Timestamp timeStamp = new Timestamp(time);
timeStamp.setNanos(ns);
return timeStamp;
}

return fromMap(map, converter, Timestamp.class, TIME, NANOS);
return fromMap(map, converter, Timestamp.class, EPOCH_MILLIS, NANOS);
}

static TimeZone toTimeZone(Object from, Converter converter) {
Expand Down Expand Up @@ -364,11 +364,9 @@ static Period toPeriod(Object from, Converter converter) {
static ZoneId toZoneId(Object from, Converter converter) {
Map<String, Object> map = (Map<String, Object>) from;
if (map.containsKey(ZONE)) {
ZoneId zoneId = converter.convert(map.get(ZONE), ZoneId.class);
return zoneId;
return converter.convert(map.get(ZONE), ZoneId.class);
} else if (map.containsKey(ID)) {
ZoneId zoneId = converter.convert(map.get(ID), ZoneId.class);
return zoneId;
return converter.convert(map.get(ID), ZoneId.class);
}
return fromMap(from, converter, ZoneId.class, ZONE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@
import java.sql.Timestamp;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import com.cedarsoftware.util.CompactLinkedMap;

/**
* @author John DeRegnaucourt ([email protected])
Expand Down Expand Up @@ -46,6 +51,11 @@ static BigInteger toBigInteger(Object from, Converter converter) {
return DurationConversions.toBigInteger(duration, converter);
}

static LocalDateTime toLocalDateTime(Object from, Converter converter) {
Timestamp timestamp = (Timestamp) from;
return timestamp.toInstant().atZone(converter.getOptions().getZoneId()).toLocalDateTime();
}

static Duration toDuration(Object from, Converter converter) {
Timestamp timestamp = (Timestamp) from;
Instant timestampInstant = timestamp.toInstant();
Expand All @@ -70,4 +80,16 @@ static Calendar toCalendar(Object from, Converter converter) {
cal.setTimeInMillis(timestamp.getTime());
return cal;
}

static Map<String, Object> toMap(Object from, Converter converter) {
Date date = (Date) from;
Map<String, Object> map = new CompactLinkedMap<>();
OffsetDateTime odt = toOffsetDateTime(date, converter);
map.put(MapConversions.DATE, odt.toLocalDate().toString());
map.put(MapConversions.TIME, odt.toLocalTime().toString());
map.put(MapConversions.ZONE, converter.getOptions().getZoneId().toString());
map.put(MapConversions.EPOCH_MILLIS, date.getTime());
map.put(MapConversions.NANOS, odt.getNano());
return map;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ private static ZonedDateTime toDifferentZone(Object from, Converter converter) {
}

static LocalDateTime toLocalDateTime(Object from, Converter converter) {
return toDifferentZone(from, converter).toLocalDateTime(); // shorter code over speed
ZonedDateTime zdt = (ZonedDateTime) from;
ZonedDateTime adjustedZonedDateTime = zdt.withZoneSameInstant(converter.getOptions().getZoneId());
return adjustedZonedDateTime.toLocalDateTime();
}

static LocalDate toLocalDate(Object from, Converter converter) {
Expand Down
Loading

0 comments on commit b2f1770

Please sign in to comment.