package io.ebeaninternal.server.type; import java.util.UUID; /** * Type conversion for use with ScalarTypeArrayList. */ interface ArrayElementConverter<T> { /** * Convert the array element to the logical type. */ T toElement(Object rawValue); /** * The UUID converter implementation. */ ArrayElementConverter<UUID> UUID = new UuidConverter(); /** * The String converter implementation. */ ArrayElementConverter<String> STRING = new StringConverter(); /** * The Long converter implementation. */ ArrayElementConverter<Long> LONG = new LongConverter(); /** * The Integer converter implementation. */ ArrayElementConverter<Integer> INTEGER = new IntegerConverter(); /** * The Double converter implementation. */ ArrayElementConverter<Double> DOUBLE = new DoubleConverter(); class LongConverter implements ArrayElementConverter<Long> { @Override public Long toElement(Object rawValue) { if (rawValue instanceof Long) { return (Long) rawValue; } else { return ((Number) rawValue).longValue(); } } } class IntegerConverter implements ArrayElementConverter<Integer> { @Override public Integer toElement(Object rawValue) { if (rawValue instanceof Integer) { return (Integer) rawValue; } else { return ((Number) rawValue).intValue(); } } } class DoubleConverter implements ArrayElementConverter<Double> { @Override public Double toElement(Object rawValue) { if (rawValue instanceof Double) { return (Double) rawValue; } else { return ((Number) rawValue).doubleValue(); } } } /** * String converter (noop based). */ class StringConverter extends NoopConverter<String> { } /** * UUID converter (noop based). */ class UuidConverter extends NoopConverter<UUID> { } class NoopConverter<T> implements ArrayElementConverter<T> { @SuppressWarnings("unchecked") @Override public T toElement(Object rawValue) { return (T) rawValue; } } }