From 9984b53070df56b27a7436d744b67858b060ea50 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 26 Aug 2022 15:21:30 +1200 Subject: [PATCH] Refactor move BasicTypeConverter to ebean-core-type module Doing this in preparation for moving the joda-type ScalarTypes into their own module --- .../ebean/core/type}/BasicTypeConverter.java | 136 ++++-------------- .../io/ebean/core/type/ScalarTypeUtils.java | 89 ++++++++++++ .../type/ScalarTypeUtilsUuidBytesTest.java | 33 +++++ .../generatedproperty/GeneratedCounter.java | 2 +- .../server/query/DefaultSqlRow.java | 2 +- .../server/type/ArrayElementConverter.java | 2 +- .../server/type/DefaultTypeFactory.java | 2 +- .../server/type/ScalarTypeBigDecimal.java | 2 +- .../server/type/ScalarTypeBoolean.java | 2 +- .../server/type/ScalarTypeByte.java | 2 +- .../server/type/ScalarTypeCalendar.java | 2 +- .../server/type/ScalarTypeChar.java | 2 +- .../server/type/ScalarTypeCharArray.java | 2 +- .../server/type/ScalarTypeDate.java | 2 +- .../server/type/ScalarTypeDouble.java | 2 +- .../server/type/ScalarTypeDuration.java | 2 +- .../type/ScalarTypeDurationWithNanos.java | 2 +- .../server/type/ScalarTypeFloat.java | 2 +- .../server/type/ScalarTypeInteger.java | 2 +- .../type/ScalarTypeJodaDateMidnight.java | 2 +- .../server/type/ScalarTypeJodaDateTime.java | 2 +- .../server/type/ScalarTypeJodaLocalDate.java | 2 +- .../type/ScalarTypeJodaLocalDateTime.java | 2 +- .../server/type/ScalarTypeJodaLocalTime.java | 2 +- .../type/ScalarTypeJodaLocalTimeUTC.java | 2 +- .../server/type/ScalarTypeLocalDate.java | 2 +- .../server/type/ScalarTypeLocalTime.java | 3 +- .../type/ScalarTypeLocalTimeWithNanos.java | 2 +- .../server/type/ScalarTypeLong.java | 2 +- .../server/type/ScalarTypeMathBigInteger.java | 4 +- .../server/type/ScalarTypeShort.java | 2 +- .../server/type/ScalarTypeStringBase.java | 2 +- .../server/type/ScalarTypeTime.java | 2 +- .../server/type/ScalarTypeTimestamp.java | 2 +- .../server/type/ScalarTypeUUIDBase.java | 2 +- .../server/type/ScalarTypeUUIDBinary.java | 97 ++----------- .../server/type/ScalarTypeUtilDate.java | 2 +- .../server/type/ScalarTypeYear.java | 2 +- .../server/type/ScalarTypeYearMonthDate.java | 2 +- .../server/core/BasicTypeConverterTest.java | 1 + 40 files changed, 195 insertions(+), 234 deletions(-) rename {ebean-core/src/main/java/io/ebeaninternal/server/core => ebean-core-type/src/main/java/io/ebean/core/type}/BasicTypeConverter.java (77%) create mode 100644 ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/BasicTypeConverter.java b/ebean-core-type/src/main/java/io/ebean/core/type/BasicTypeConverter.java similarity index 77% rename from ebean-core/src/main/java/io/ebeaninternal/server/core/BasicTypeConverter.java rename to ebean-core-type/src/main/java/io/ebean/core/type/BasicTypeConverter.java index dbdf6b110..36a58b2de 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/BasicTypeConverter.java +++ b/ebean-core-type/src/main/java/io/ebean/core/type/BasicTypeConverter.java @@ -1,8 +1,5 @@ -package io.ebeaninternal.server.core; +package io.ebean.core.type; -import io.ebeaninternal.server.type.ScalarTypeUUIDBinary; - -import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Timestamp; @@ -14,14 +11,9 @@ import java.util.Calendar; import java.util.UUID; /** - * Default implementation of TypeConverter. - *

- * Converts objects to the required type if required. - *

+ * Helper to converts objects to the basic types if required. */ -public final class BasicTypeConverter implements Serializable { - - private static final long serialVersionUID = 7691463236204070311L; +public final class BasicTypeConverter { /** * Type code for java.util.Calendar. @@ -43,7 +35,6 @@ public final class BasicTypeConverter implements Serializable { * @param toDataType the dataType as per java.sql.Types. */ public static Object convert(Object value, int toDataType) { - try { switch (toDataType) { case UTIL_DATE: { @@ -58,7 +49,8 @@ public final class BasicTypeConverter implements Serializable { case Types.INTEGER: { return toInteger(value); } - case Types.BIT: { + case Types.BIT: + case Types.BOOLEAN: { return toBoolean(value); } case Types.TINYINT: { @@ -67,59 +59,42 @@ public final class BasicTypeConverter implements Serializable { case Types.SMALLINT: { return toShort(value); } - case Types.NUMERIC: { - return toBigDecimal(value); - } + case Types.NUMERIC: case Types.DECIMAL: { return toBigDecimal(value); } case Types.REAL: { return toFloat(value); } - case Types.DOUBLE: { - return toDouble(value); - } + case Types.DOUBLE: case Types.FLOAT: { return toDouble(value); } - case Types.BOOLEAN: { - return toBoolean(value); - } case Types.TIMESTAMP: { return toTimestamp(value); } case Types.DATE: { return toDate(value); } - case Types.VARCHAR: { - return toString(value); - } + case Types.VARCHAR: case Types.CHAR: { return toString(value); } - case Types.OTHER: { - return value; - } - case Types.JAVA_OBJECT: { - return value; - } + case Types.OTHER: case Types.BINARY: case Types.LONGVARBINARY: - case Types.BLOB: { - return value; - } + case Types.BLOB: + case Types.JAVA_OBJECT: case Types.LONGVARCHAR: case Types.CLOB: { return value; } default: { - String msg = "Unhandled data type [" + toDataType + "] converting [" + value + "]"; - throw new RuntimeException(msg); + throw new RuntimeException("Unhandled data type - " + toDataType); } } } catch (ClassCastException e) { - String m = "ClassCastException converting to data type [" + toDataType + "] value [" + value + "]"; - throw new RuntimeException(m); + throw new RuntimeException("ClassCastException converting to data type: " + toDataType + " value: " + value); } } @@ -127,7 +102,6 @@ public final class BasicTypeConverter implements Serializable { * Convert the value to a String. */ public static String toString(Object value) { - if (value == null) { return null; } @@ -137,7 +111,6 @@ public final class BasicTypeConverter implements Serializable { if (value instanceof char[]) { return String.valueOf((char[]) value); } - return value.toString(); } @@ -145,8 +118,7 @@ public final class BasicTypeConverter implements Serializable { /** * Convert the value to a Boolean with an explicit String true value. */ - public static Boolean toBoolean(Object value, String dbTrueValue) { - + public static Boolean toBoolean(Object value, String trueValue) { if (value == null) { return null; } @@ -156,8 +128,7 @@ public final class BasicTypeConverter implements Serializable { if (value instanceof Number) { return ((Number) value).intValue() == 1; } - String s = value.toString(); - return s.equalsIgnoreCase(dbTrueValue); + return value.toString().equalsIgnoreCase(trueValue); } /** @@ -165,14 +136,12 @@ public final class BasicTypeConverter implements Serializable { * "true" or "false". */ public static Boolean toBoolean(Object value) { - if (value == null) { return null; } if (value instanceof Boolean) { return (Boolean) value; } - return Boolean.valueOf(value.toString()); } @@ -180,7 +149,6 @@ public final class BasicTypeConverter implements Serializable { * Convert the value to a UUID. */ public static UUID toUUID(Object value, boolean optimizedBinary) { - if (value == null) { return null; } @@ -191,17 +159,15 @@ public final class BasicTypeConverter implements Serializable { return UUID.fromString((String) value); } if (value instanceof byte[]) { - return ScalarTypeUUIDBinary.convertFromBytes((byte[]) value, optimizedBinary); + return ScalarTypeUtils.uuidFromBytes((byte[]) value, optimizedBinary); } return UUID.fromString(value.toString()); } /** - * convert the passed in object to a BigDecimal. It should be another - * numeric type. + * convert the passed in object to a BigDecimal. It should be another numeric type. */ public static BigDecimal toBigDecimal(Object value) { - if (value == null) { return null; } @@ -212,7 +178,6 @@ public final class BasicTypeConverter implements Serializable { } public static Float toFloat(Object value) { - if (value == null) { return null; } @@ -226,7 +191,6 @@ public final class BasicTypeConverter implements Serializable { } public static Short toShort(Object value) { - if (value == null) { return null; } @@ -240,7 +204,6 @@ public final class BasicTypeConverter implements Serializable { } public static Byte toByte(Object value) { - if (value == null) { return null; } @@ -251,11 +214,9 @@ public final class BasicTypeConverter implements Serializable { } /** - * convert the passed in object to a Integer. It should be another numeric - * type. + * convert the passed in object to an Integer. */ public static Integer toInteger(Object value) { - if (value == null) { return null; } @@ -269,10 +230,9 @@ public final class BasicTypeConverter implements Serializable { } /** - * Convert the object to a Long. It should be another numeric type. + * Convert the object to a Long. */ public static Long toLong(Object value) { - if (value == null) { return null; } @@ -294,8 +254,7 @@ public final class BasicTypeConverter implements Serializable { return Long.valueOf(value.toString()); } - public static BigInteger toMathBigInteger(Object value) { - + public static BigInteger toBigInteger(Object value) { if (value == null) { return null; } @@ -306,10 +265,9 @@ public final class BasicTypeConverter implements Serializable { } /** - * Convert the object to a Double. It should be another numberic type. + * Convert the object to a Double. */ public static Double toDouble(Object value) { - if (value == null) { return null; } @@ -323,56 +281,42 @@ public final class BasicTypeConverter implements Serializable { } /** - * convert the passed in object to a Timestamp. It is expected to be a - * java.sql.Date really. + * convert the passed in object to a Timestamp. */ public static Timestamp toTimestamp(Object value) { - if (value == null) { return null; } if (value instanceof Timestamp) { return (Timestamp) value; - } else if (value instanceof java.util.Date) { // no nanos here... so hopefully ok return new Timestamp(((java.util.Date) value).getTime()); - } else if (value instanceof Calendar) { return new Timestamp(((Calendar) value).getTime().getTime()); - } else if (value instanceof String) { return Timestamp.valueOf((String) value); - } else if (value instanceof LocalDateTime) { return Timestamp.valueOf((LocalDateTime) value); - } else if (value instanceof Number) { return new Timestamp(((Number) value).longValue()); - } else { - String msg = "Unable to convert [" + value.getClass().getName() + "] into a Timestamp."; - throw new RuntimeException(msg); + throw new RuntimeException("Unable to convert " + value); } } public static java.sql.Time toTime(Object value) { - if (value == null) { return null; } if (value instanceof java.sql.Time) { return (java.sql.Time) value; - } else if (value instanceof String) { return java.sql.Time.valueOf((String) value); - } else if (value instanceof LocalTime) { return java.sql.Time.valueOf((LocalTime) value); - } else { - String m = "Unable to convert [" + value.getClass().getName() + "] into a java.sql.Date."; - throw new RuntimeException(m); + throw new RuntimeException("Unable to convert " + value); } } @@ -380,31 +324,23 @@ public final class BasicTypeConverter implements Serializable { * convert the passed in object to a java sql Date. */ public static java.sql.Date toDate(Object value) { - if (value == null) { return null; } if (value instanceof java.sql.Date) { return (java.sql.Date) value; - } else if (value instanceof java.util.Date) { return new java.sql.Date(((java.util.Date) value).getTime()); - } else if (value instanceof Calendar) { return new java.sql.Date(((Calendar) value).getTime().getTime()); - } else if (value instanceof String) { return java.sql.Date.valueOf((String) value); - } else if (value instanceof Number) { return new java.sql.Date(((Number) value).longValue()); - } else if (value instanceof LocalDate) { - return java.sql.Date.valueOf((LocalDate)value); - + return java.sql.Date.valueOf((LocalDate) value); } else { - String m = "Unable to convert [" + value.getClass().getName() + "] into a java.sql.Date."; - throw new RuntimeException(m); + throw new RuntimeException("Unable to convert " + value); } } @@ -412,7 +348,6 @@ public final class BasicTypeConverter implements Serializable { * convert the passed in object to a java sql Date. */ public static java.util.Date toUtilDate(Object value) { - if (value == null) { return null; } @@ -420,26 +355,19 @@ public final class BasicTypeConverter implements Serializable { // loss of nanos precision return new java.util.Date(((java.sql.Timestamp) value).getTime()); } - // DEVNOTE: strictly speaking do I need to convert a java.sql.Date to - // java.util.Date? equals() is symmetrical so perhaps this is not - // really required? if (value instanceof java.sql.Date) { return new java.util.Date(((java.sql.Date) value).getTime()); } if (value instanceof java.util.Date) { return (java.util.Date) value; - } else if (value instanceof Calendar) { return ((Calendar) value).getTime(); - } else if (value instanceof String) { return new java.util.Date(Timestamp.valueOf((String) value).getTime()); - } else if (value instanceof Number) { return new java.util.Date(((Number) value).longValue()); - } else { - throw new RuntimeException("Unable to convert [" + value.getClass().getName() + "] into a java.util.Date"); + throw new RuntimeException("Unable to convert " + value); } } @@ -447,37 +375,29 @@ public final class BasicTypeConverter implements Serializable { * convert the passed in object to a java sql Date. */ public static Calendar toCalendar(Object value) { - if (value == null) { return null; } if (value instanceof Calendar) { return (Calendar) value; - } else if (value instanceof java.util.Date) { java.util.Date date = ((java.util.Date) value); return toCalendarFromDate(date); - } else if (value instanceof String) { java.util.Date date = toUtilDate(value); return toCalendarFromDate(date); - } else if (value instanceof Number) { long timeMillis = ((Number) value).longValue(); java.util.Date date = new java.util.Date(timeMillis); return toCalendarFromDate(date); - } else { - String m = "Unable to convert [" + value.getClass().getName() + "] into a java.util.Date"; - throw new RuntimeException(m); + throw new RuntimeException("Unable to convert " + value); } } private static Calendar toCalendarFromDate(java.util.Date date) { - Calendar cal = Calendar.getInstance(); cal.setTime(date); - return cal; } diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java index 1e7915316..efd4b6780 100644 --- a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java +++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarTypeUtils.java @@ -6,6 +6,7 @@ import java.time.Duration; import java.time.Instant; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; +import java.util.UUID; /** * Utilities to aid in the translation of decimal types to/from multiple parts. @@ -87,4 +88,92 @@ public final class ScalarTypeUtils { private static int extractNanosecondDecimal(BigDecimal value, long integer) { return value.subtract(new BigDecimal(integer)).multiply(ONE_BILLION).intValue(); } + + + /** + * Convert from byte[] to UUID. + */ + public static UUID uuidFromBytes(byte[] bytes, boolean optimized) { + int usableBytes = Math.min(bytes.length, 16); + + // Need exactly 16 bytes - pad the input if not enough bytes are provided + // Use provided bytes in the least significant position; if more than 16 bytes are given, + // then use the first 16 bytes from the array; + byte[] barr = new byte[16]; + for (int i = 15, j = usableBytes - 1; j >= 0; i--, j--) { + barr[i] = bytes[j]; + } + + long msb; + if (optimized) { + msb = ((long)barr[4] << 56) + // XXXXXXXX-____-____-... + ((long)(barr[5] & 255) << 48) + // -> put at end 4..7 of buf + ((long)(barr[6] & 255) << 40) + + ((long)(barr[7] & 255) << 32) + + ((long)(barr[2] & 255) << 24) + // ________-XXXX-____-... + ((barr[3] & 255) << 16) + // put at 2..3 in buf + ((barr[0] & 255) << 8) + // ________-____-XXXX-... + ((barr[1] & 255) << 0); // put at 0..1 in buf + } else { + msb = ((long)barr[0] << 56) + // XXXXXXXX-____-____-... + ((long)(barr[1] & 255) << 48) + + ((long)(barr[2] & 255) << 40) + + ((long)(barr[3] & 255) << 32) + + ((long)(barr[4] & 255) << 24) + // ________-XXXX-____-... + ((barr[5] & 255) << 16) + + ((barr[6] & 255) << 8) + // ________-____-XXXX-... + ((barr[7] & 255) << 0); + } + long lsb = ((long)barr[8] << 56) + + ((long)(barr[9] & 255) << 48) + + ((long)(barr[10] & 255) << 40) + + ((long)(barr[11] & 255) << 32) + + ((long)(barr[12] & 255) << 24) + + ((barr[13] & 255) << 16) + + ((barr[14] & 255) << 8) + + ((barr[15] & 255) << 0); + + return new UUID(msb, lsb); + } + + /** + * Convert from UUID to byte[]. + */ + public static byte[] uuidToBytes(UUID uuid, boolean optimized) { + byte[] ret = new byte[16]; + long l = uuid.getMostSignificantBits(); + + if (optimized) { + ret[0] = (byte) (l >>> 8); // was 6/7 + ret[1] = (byte) (l >>> 0); + + ret[2] = (byte) (l >>> 24); // was 4/5 + ret[3] = (byte) (l >>> 16); + + ret[4] = (byte) (l >>> 56); // was 0..3 + ret[5] = (byte) (l >>> 48); + ret[6] = (byte) (l >>> 40); + ret[7] = (byte) (l >>> 32); + } else { + ret[0] = (byte) (l >>> 56); + ret[1] = (byte) (l >>> 48); + ret[2] = (byte) (l >>> 40); + ret[3] = (byte) (l >>> 32); + ret[4] = (byte) (l >>> 24); + ret[5] = (byte) (l >>> 16); + ret[6] = (byte) (l >>> 8); + ret[7] = (byte) (l >>> 0); + } + l = uuid.getLeastSignificantBits(); + ret[8] = (byte) (l >>> 56); + ret[9] = (byte) (l >>> 48); + ret[10] = (byte) (l >>> 40); + ret[11] = (byte) (l >>> 32); + ret[12] = (byte) (l >>> 24); + ret[13] = (byte) (l >>> 16); + ret[14] = (byte) (l >>> 8); + ret[15] = (byte) (l >>> 0); + + return ret; + } } diff --git a/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java b/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java new file mode 100644 index 000000000..851aa9900 --- /dev/null +++ b/ebean-core-type/src/test/java/io/ebean/core/type/ScalarTypeUtilsUuidBytesTest.java @@ -0,0 +1,33 @@ +package io.ebean.core.type; + +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ScalarTypeUtilsUuidBytesTest { + + @Test + void testConversion() { + UUID id = UUID.randomUUID(); + + byte[] bytes = ScalarTypeUtils.uuidToBytes(id, false); + assertEquals(16, bytes.length); + + UUID id2 = ScalarTypeUtils.uuidFromBytes(bytes, false); + assertEquals(id, id2); + } + + @Test + void testConversionOptimized() { + UUID id = UUID.randomUUID(); + + byte[] bytes = ScalarTypeUtils.uuidToBytes(id, true); + assertEquals(16, bytes.length); + + UUID id2 = ScalarTypeUtils.uuidFromBytes(bytes, true); + assertEquals(id, id2); + } + +} diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java index 38f0085fb..d4ee1f595 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java @@ -1,7 +1,7 @@ package io.ebeaninternal.server.deploy.generatedproperty; import io.ebean.bean.EntityBean; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import io.ebeaninternal.server.deploy.BeanProperty; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java index e38d9d7d7..ad9902a2d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.query; import io.ebean.SqlQuery; import io.ebean.SqlRow; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.math.BigDecimal; import java.sql.Date; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ArrayElementConverter.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ArrayElementConverter.java index 5617e752c..12e5e6b17 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ArrayElementConverter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ArrayElementConverter.java @@ -1,7 +1,7 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.ScalarType; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.math.BigDecimal; import java.util.UUID; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java index f0a700670..af89523ab 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.DatabaseConfig; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarType; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.math.BigInteger; import java.sql.Types; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBigDecimal.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBigDecimal.java index 9dedf97e7..223e26d05 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBigDecimal.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBigDecimal.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java index 24c6b074a..62aa6c553 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java @@ -7,7 +7,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java index d0e9e6c96..e01bc625e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java @@ -7,7 +7,7 @@ import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; import io.ebean.text.TextException; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.ByteArrayOutputStream; import java.io.DataInput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java index 50ee64539..8ac56e517 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import io.ebean.core.type.DataBinder; import io.ebean.core.type.ScalarTypeBaseDateTime; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.Date; import java.sql.SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java index c7d9760b7..bf181dd2e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarTypeBaseVarchar; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.SQLException; import java.sql.Types; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java index 13a06d931..ff74e0cfe 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.core.JsonParser; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarTypeBaseVarchar; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.IOException; import java.sql.SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java index eaf883cff..bc4ac8aad 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java @@ -4,7 +4,7 @@ import io.ebean.config.JsonConfig; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarTypeBaseDate; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.Date; import java.sql.SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java index 97cd742dd..3fe5deba0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java index 2e5a29996..c73347add 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.type; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import io.ebean.core.type.*; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java index 9ba27cc6c..f298debd8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.math.BigDecimal; import java.sql.SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java index 61ba766f0..facea6618 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java index b9d621679..aea3b8d16 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java index 03c4e5897..78a625327 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarTypeBaseDate; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import org.joda.time.DateMidnight; import java.sql.Date; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java index 0eea396f9..c9d61bd1e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarTypeBaseDateTime; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import org.joda.time.DateTime; import java.sql.Timestamp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java index 92a17a8f7..163775fb0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java @@ -8,7 +8,7 @@ import org.joda.time.DateTimeZone; import org.joda.time.LocalDate; import io.ebean.config.JsonConfig; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; /** * ScalarType for Joda LocalDate. This maps to a JDBC Date. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java index 07d289c4d..348ce28d6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarTypeBaseDateTime; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import org.joda.time.LocalDateTime; import java.sql.Timestamp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java index 94134db9f..072046b0f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java @@ -7,7 +7,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import org.joda.time.DateTimeZone; import org.joda.time.LocalTime; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java index e19af274e..81edfe24a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import org.joda.time.DateTimeZone; import org.joda.time.LocalTime; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java index 0461faddc..3176a1886 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java @@ -9,7 +9,7 @@ import java.time.ZonedDateTime; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarTypeBaseDate; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; /** * ScalarType for java.time.LocalDate. This maps to a JDBC Date. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTime.java index 6711de132..d43f0e6cb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTime.java @@ -6,8 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebean.text.TextException; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java index 237c2f633..aa6adb996 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.SQLException; import java.sql.Types; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java index daff9db26..b04a0a936 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java index ce8a87dbe..29ee7316c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; @@ -49,7 +49,7 @@ final class ScalarTypeMathBigInteger extends ScalarTypeBase { @Override public BigInteger toBeanType(Object value) { - return BasicTypeConverter.toMathBigInteger(value); + return BasicTypeConverter.toBigInteger(value); } @Override diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java index 75619af5f..059b68a1a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java index 6fffec61e..4b260e096 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java index eb017211d..a301da7ed 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTimestamp.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTimestamp.java index 0f2a45402..1efa9ad6e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTimestamp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTimestamp.java @@ -4,7 +4,7 @@ import io.ebean.config.JsonConfig; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarTypeBaseDateTime; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.SQLException; import java.sql.Timestamp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java index dda89c9cc..0e41ddfc7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.core.JsonParser; import io.ebean.config.dbplatform.DbPlatformType; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBinary.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBinary.java index e379ddc2c..a2658dbf5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBinary.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBinary.java @@ -2,7 +2,8 @@ package io.ebeaninternal.server.type; import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; +import io.ebean.core.type.ScalarTypeUtils; import java.sql.SQLException; import java.sql.Types; @@ -24,7 +25,7 @@ public final class ScalarTypeUUIDBinary extends ScalarTypeUUIDBase { @Override public Object toJdbcType(Object value) { - return convertToBytes(value, optimized); + return convertToBytes((UUID)value, optimized); } @Override @@ -51,98 +52,16 @@ public final class ScalarTypeUUIDBinary extends ScalarTypeUUIDBase { if (bytes == null) { return null; } else { - return convertFromBytes(bytes, optimized); + return ScalarTypeUtils.uuidFromBytes(bytes, optimized); } } - /** - * Convert from byte[] to UUID. - */ - public static UUID convertFromBytes(byte[] bytes, boolean optimized) { - - int usableBytes = Math.min(bytes.length, 16); - - // Need exactly 16 bytes - pad the input if not enough bytes are provided - // Use provided bytes in the least significant position; if more than 16 bytes are given, - // then use the first 16 bytes from the array; - byte[] barr = new byte[16]; - for (int i = 15, j = usableBytes - 1; j >= 0; i--, j--) { - barr[i] = bytes[j]; - } - - long msb; - if (optimized) { - msb = ((long)barr[4] << 56) + // XXXXXXXX-____-____-... - ((long)(barr[5] & 255) << 48) + // -> put at end 4..7 of buf - ((long)(barr[6] & 255) << 40) + - ((long)(barr[7] & 255) << 32) + - ((long)(barr[2] & 255) << 24) + // ________-XXXX-____-... - ((barr[3] & 255) << 16) + // put at 2..3 in buf - ((barr[0] & 255) << 8) + // ________-____-XXXX-... - ((barr[1] & 255) << 0); // put at 0..1 in buf - } else { - msb = ((long)barr[0] << 56) + // XXXXXXXX-____-____-... - ((long)(barr[1] & 255) << 48) + - ((long)(barr[2] & 255) << 40) + - ((long)(barr[3] & 255) << 32) + - ((long)(barr[4] & 255) << 24) + // ________-XXXX-____-... - ((barr[5] & 255) << 16) + - ((barr[6] & 255) << 8) + // ________-____-XXXX-... - ((barr[7] & 255) << 0); - } - long lsb = ((long)barr[8] << 56) + - ((long)(barr[9] & 255) << 48) + - ((long)(barr[10] & 255) << 40) + - ((long)(barr[11] & 255) << 32) + - ((long)(barr[12] & 255) << 24) + - ((barr[13] & 255) << 16) + - ((barr[14] & 255) << 8) + - ((barr[15] & 255) << 0); - - return new UUID(msb, lsb); + static UUID convertFromBytes(byte[] bytes, boolean optimized) { + return ScalarTypeUtils.uuidFromBytes(bytes, optimized); } - /** - * Convert from UUID to byte[]. - */ - public static byte[] convertToBytes(Object value, boolean optimized) { - - UUID uuid = (UUID) value; - byte[] ret = new byte[16]; - long l = uuid.getMostSignificantBits(); - - if (optimized) { - ret[0] = (byte) (l >>> 8); // was 6/7 - ret[1] = (byte) (l >>> 0); - - ret[2] = (byte) (l >>> 24); // was 4/5 - ret[3] = (byte) (l >>> 16); - - ret[4] = (byte) (l >>> 56); // was 0..3 - ret[5] = (byte) (l >>> 48); - ret[6] = (byte) (l >>> 40); - ret[7] = (byte) (l >>> 32); - } else { - ret[0] = (byte) (l >>> 56); - ret[1] = (byte) (l >>> 48); - ret[2] = (byte) (l >>> 40); - ret[3] = (byte) (l >>> 32); - ret[4] = (byte) (l >>> 24); - ret[5] = (byte) (l >>> 16); - ret[6] = (byte) (l >>> 8); - ret[7] = (byte) (l >>> 0); - } - l = uuid.getLeastSignificantBits(); - ret[8] = (byte) (l >>> 56); - ret[9] = (byte) (l >>> 48); - ret[10] = (byte) (l >>> 40); - ret[11] = (byte) (l >>> 32); - ret[12] = (byte) (l >>> 24); - ret[13] = (byte) (l >>> 16); - ret[14] = (byte) (l >>> 8); - ret[15] = (byte) (l >>> 0); - - return ret; + static byte[] convertToBytes(UUID value, boolean optimized) { + return ScalarTypeUtils.uuidToBytes(value, optimized); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUtilDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUtilDate.java index ae8d670d5..fabac9bae 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUtilDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUtilDate.java @@ -5,7 +5,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarTypeBaseDate; import io.ebean.core.type.ScalarTypeBaseDateTime; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.SQLException; import java.sql.Timestamp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java index a001ebe08..9c60047f5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java @@ -6,7 +6,7 @@ import io.ebean.core.type.DataBinder; import io.ebean.core.type.DataReader; import io.ebean.core.type.DocPropertyType; import io.ebean.core.type.ScalarTypeBase; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.io.DataInput; import java.io.DataOutput; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDate.java index c662c8ca0..c0b81452c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYearMonthDate.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.type; import io.ebean.config.JsonConfig; import io.ebean.core.type.ScalarTypeBaseDate; -import io.ebeaninternal.server.core.BasicTypeConverter; +import io.ebean.core.type.BasicTypeConverter; import java.sql.Date; import java.sql.Timestamp; diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/core/BasicTypeConverterTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/BasicTypeConverterTest.java index c2f2c91b2..56bbeb9f7 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/core/BasicTypeConverterTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/BasicTypeConverterTest.java @@ -1,5 +1,6 @@ package io.ebeaninternal.server.core; +import io.ebean.core.type.BasicTypeConverter; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test;