Skip to content

Commit

Permalink
Added Year support to short and float. Add Map support to OffsetTime …
Browse files Browse the repository at this point in the history
…and OffsetDateTime
  • Loading branch information
jdereg committed Feb 3, 2024
1 parent 7c890cc commit 376bfb8
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 10 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/cedarsoftware/util/convert/Converter.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ private static void buildFactoryConversions() {
DEFAULT_FACTORY.put(pair(Number.class, Short.class), NumberConversions::toShort);
DEFAULT_FACTORY.put(pair(Map.class, Short.class), MapConversions::toShort);
DEFAULT_FACTORY.put(pair(String.class, Short.class), StringConversions::toShort);
DEFAULT_FACTORY.put(pair(Year.class, Short.class), YearConversions::toShort);

// toInteger
DEFAULT_FACTORY.put(pair(Void.class, int.class), NumberConversions::toIntZero);
Expand Down Expand Up @@ -212,6 +213,7 @@ private static void buildFactoryConversions() {
DEFAULT_FACTORY.put(pair(Number.class, Float.class), NumberConversions::toFloat);
DEFAULT_FACTORY.put(pair(Map.class, Float.class), MapConversions::toFloat);
DEFAULT_FACTORY.put(pair(String.class, Float.class), StringConversions::toFloat);
DEFAULT_FACTORY.put(pair(Year.class, Float.class), YearConversions::toFloat);

// Double/double conversions supported
DEFAULT_FACTORY.put(pair(Void.class, double.class), NumberConversions::toDoubleZero);
Expand Down Expand Up @@ -576,12 +578,14 @@ private static void buildFactoryConversions() {
// toOffsetDateTime
DEFAULT_FACTORY.put(pair(Void.class, OffsetDateTime.class), VoidConversions::toNull);
DEFAULT_FACTORY.put(pair(OffsetDateTime.class, OffsetDateTime.class), Converter::identity);
DEFAULT_FACTORY.put(pair(Map.class, OffsetDateTime.class), MapConversions::toOffsetDateTime);
DEFAULT_FACTORY.put(pair(String.class, OffsetDateTime.class), StringConversions::toOffsetDateTime);

// toOffsetTime
DEFAULT_FACTORY.put(pair(Void.class, OffsetTime.class), VoidConversions::toNull);
DEFAULT_FACTORY.put(pair(OffsetTime.class, OffsetTime.class), Converter::identity);
DEFAULT_FACTORY.put(pair(OffsetDateTime.class, OffsetTime.class), OffsetDateTimeConversions::toOffsetTime);
DEFAULT_FACTORY.put(pair(Map.class, OffsetTime.class), MapConversions::toOffsetTime);
DEFAULT_FACTORY.put(pair(String.class, OffsetTime.class), StringConversions::toOffsetTime);

// UUID conversions supported
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/com/cedarsoftware/util/convert/MapConversions.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.MonthDay;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.Year;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
Expand Down Expand Up @@ -58,6 +61,8 @@ public final class MapConversions {
private static final String SECONDS = "seconds";
private static final String NANO = "nano";
private static final String NANOS = "nanos";
private static final String OFFSET_HOUR = "offsetHour";
private static final String OFFSET_MINUTE = "offsetMinute";
private static final String MOST_SIG_BITS = "mostSigBits";
private static final String LEAST_SIG_BITS = "leastSigBits";

Expand Down Expand Up @@ -205,6 +210,43 @@ static LocalTime toLocalTime(Object from, Converter converter, ConverterOptions
}
}

private static final String[] OFFSET_TIME_PARAMS = new String[] { HOUR, MINUTE, SECOND, NANO, OFFSET_HOUR, OFFSET_MINUTE };
static OffsetTime toOffsetTime(Object from, Converter converter, ConverterOptions options) {
Map<?, ?> map = (Map<?, ?>) from;
if (map.containsKey(HOUR) && map.containsKey(MINUTE)) {
int hour = converter.convert(map.get(HOUR), int.class, options);
int minute = converter.convert(map.get(MINUTE), int.class, options);
int second = converter.convert(map.get(SECOND), int.class, options);
int nano = converter.convert(map.get(NANO), int.class, options);
int offsetHour = converter.convert(map.get(OFFSET_HOUR), int.class, options);
int offsetMinute = converter.convert(map.get(OFFSET_MINUTE), int.class, options);
ZoneOffset zoneOffset = ZoneOffset.ofHoursMinutes(offsetHour, offsetMinute);
return OffsetTime.of(hour, minute, second, nano, zoneOffset);
} else {
return fromValueForMultiKey(map, converter, options, OffsetTime.class, OFFSET_TIME_PARAMS);
}
}

private static final String[] OFFSET_DATE_TIME_PARAMS = new String[] { YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, NANO, OFFSET_HOUR, OFFSET_MINUTE };
static OffsetDateTime toOffsetDateTime(Object from, Converter converter, ConverterOptions options) {
Map<?, ?> map = (Map<?, ?>) from;
if (map.containsKey(YEAR) && map.containsKey(OFFSET_HOUR)) {
int year = converter.convert(map.get(YEAR), int.class, options);
int month = converter.convert(map.get(MONTH), int.class, options);
int day = converter.convert(map.get(DAY), int.class, options);
int hour = converter.convert(map.get(HOUR), int.class, options);
int minute = converter.convert(map.get(MINUTE), int.class, options);
int second = converter.convert(map.get(SECOND), int.class, options);
int nano = converter.convert(map.get(NANO), int.class, options);
int offsetHour = converter.convert(map.get(OFFSET_HOUR), int.class, options);
int offsetMinute = converter.convert(map.get(OFFSET_MINUTE), int.class, options);
ZoneOffset zoneOffset = ZoneOffset.ofHoursMinutes(offsetHour, offsetMinute);
return OffsetDateTime.of(year, month, day, hour, minute, second, nano, zoneOffset);
} else {
return fromValueForMultiKey(map, converter, options, OffsetDateTime.class, OFFSET_DATE_TIME_PARAMS);
}
}

static LocalDateTime toLocalDateTime(Object from, Converter converter, ConverterOptions options) {
return fromValue(from, converter, options, LocalDateTime.class);
}
Expand Down
18 changes: 8 additions & 10 deletions src/main/java/com/cedarsoftware/util/convert/YearConversions.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,7 @@

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Year;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
Expand All @@ -28,6 +18,10 @@ static long toLong(Object from, Converter converter, ConverterOptions options) {
return toInt(from);
}

static short toShort(Object from, Converter converter, ConverterOptions options) {
return (short) toInt(from);
}

static int toInt(Object from, Converter converter, ConverterOptions options) {
return toInt(from);
}
Expand All @@ -44,6 +38,10 @@ static double toDouble(Object from, Converter converter, ConverterOptions option
return toInt(from);
}

static float toFloat(Object from, Converter converter, ConverterOptions options) {
return toInt(from);
}

static boolean toBoolean(Object from, Converter converter, ConverterOptions options) {
return toInt(from) == 0;
}
Expand Down

0 comments on commit 376bfb8

Please sign in to comment.