diff --git a/src/main/java/com/avaje/ebean/json/EJson.java b/src/main/java/com/avaje/ebean/json/EJson.java index ca1dabc4a..75ca67566 100644 --- a/src/main/java/com/avaje/ebean/json/EJson.java +++ b/src/main/java/com/avaje/ebean/json/EJson.java @@ -2,6 +2,7 @@ package com.avaje.ebean.json; import java.io.IOException; import java.io.Reader; +import java.io.Writer; import java.util.List; import java.util.Map; @@ -13,19 +14,19 @@ import com.fasterxml.jackson.core.JsonParser; */ public class EJson { -// /** -// * Write the nested Map/List as json. -// */ -// public static String write(Object object) { -// return EJsonWriter.write(object); -// } -// -// /** -// * Write the nested Map/List as json to the writer. -// */ -// public static void write(Object object, Writer writer) { -// EJsonWriter.write(object, writer); -// } + /** + * Write the nested Map/List as json. + */ + public static String write(Object object) throws IOException { + return EJsonWriter.write(object); + } + + /** + * Write the nested Map/List as json to the writer. + */ + public static void write(Object object, Writer writer) throws IOException { + EJsonWriter.write(object, writer); + } /** * Write the nested Map/List as json to the jsonGenerator. diff --git a/src/main/java/com/avaje/ebean/json/EJsonWriter.java b/src/main/java/com/avaje/ebean/json/EJsonWriter.java index 64e0c63bd..fad1281f8 100644 --- a/src/main/java/com/avaje/ebean/json/EJsonWriter.java +++ b/src/main/java/com/avaje/ebean/json/EJsonWriter.java @@ -1,6 +1,8 @@ package com.avaje.ebean.json; import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Collection; @@ -9,21 +11,27 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; class EJsonWriter { -// static String write(Object object) { -// StringWriter writer = new StringWriter(200); -// write(object, writer); -// return writer.toString(); -// } -// -// static void write(Object object, Writer writer) { -// JsonGenerator generator = Json.createGenerator(writer); -// write(object, generator); -// generator.close(); -// } + /** + * Base jsonFactory implementation used when it is not passed in. + */ + static JsonFactory jsonFactory = new JsonFactory(); + + static String write(Object object) throws IOException { + StringWriter writer = new StringWriter(200); + write(object, writer); + return writer.toString(); + } + + static void write(Object object, Writer writer) throws IOException { + JsonGenerator generator = jsonFactory.createGenerator(writer); + write(object, generator); + generator.close(); + } static void write(Object object, JsonGenerator jsonGenerator) { new EJsonWriter(jsonGenerator).writeJson(object); diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/DateTimeJsonParser.java b/src/main/java/com/avaje/ebeaninternal/server/type/DateTimeJsonParser.java new file mode 100644 index 000000000..decc9ccbd --- /dev/null +++ b/src/main/java/com/avaje/ebeaninternal/server/type/DateTimeJsonParser.java @@ -0,0 +1,34 @@ +package com.avaje.ebeaninternal.server.type; + +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.TimeZone; + +public class DateTimeJsonParser { + + private final SimpleDateFormat dateTimeProto; + + public DateTimeJsonParser() { + this("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + } + + public DateTimeJsonParser(String dateTimeFormat) { + this.dateTimeProto = new SimpleDateFormat(dateTimeFormat); + this.dateTimeProto.setTimeZone(TimeZone.getTimeZone("UTC")); + } + + private SimpleDateFormat dtFormat() { + return (SimpleDateFormat) dateTimeProto.clone(); + } + + public Timestamp parse(String jsonDateTime) { + try { + java.util.Date d = dtFormat().parse(jsonDateTime); + return new Timestamp(d.getTime()); + } catch (ParseException e) { + throw new RuntimeException("Error parsing Datetime[" + jsonDateTime + "]", e); + } + } + +} diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/EscapeJson.java b/src/main/java/com/avaje/ebeaninternal/server/type/EscapeJson.java deleted file mode 100644 index c173e606a..000000000 --- a/src/main/java/com/avaje/ebeaninternal/server/type/EscapeJson.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.avaje.ebeaninternal.server.type; - -import java.io.IOException; - -import com.avaje.ebean.text.TextException; -import com.avaje.ebean.util.StringHelper; - -public class EscapeJson { - - /** - * Unescape the JSON escaped slash character. - */ - public static String unescapeSlash(String value) { - return StringHelper.replaceString(value, "\\/","/"); - } - - /** - * Escape and quote the string value. - */ - public static String escapeQuote(String value) { - if (value == null) { - return "null"; - } - - StringBuilder sb = new StringBuilder(value.length() + 2); - sb.append("\""); - escapeAppend(value, sb); - sb.append("\""); - return sb.toString(); - } - - /** - * Escape quotes, \, /, \r, \n, \b, \f, \t and characters (U+0000 through - * U+001F). - */ - public static String escape(String s) { - if (s == null) { - return null; - } - - StringBuilder sb = new StringBuilder(); - escapeAppend(s, sb); - return sb.toString(); - - } - - /** - * Escape quotes, \, /, \r, \n, \b, \f, \t and characters (U+0000 through - * U+001F). - */ - public static void escapeAppend(String s, Appendable sb) { - - try { - for (int i = 0; i < s.length(); i++) { - char ch = s.charAt(i); - switch (ch) { - case '"': - sb.append("\\\""); - break; - case '\\': - sb.append("\\\\"); - break; - case '\b': - sb.append("\\b"); - break; - case '\f': - sb.append("\\f"); - break; - case '\n': - sb.append("\\n"); - break; - case '\r': - sb.append("\\r"); - break; - case '\t': - sb.append("\\t"); - break; - case '/': - sb.append("\\/"); - break; - default: - if ((ch >= '\u0000' && ch <= '\u001F') || (ch >= '\u007F' && ch <= '\u009F') - || (ch >= '\u2000' && ch <= '\u20FF')) { - - String hs = Integer.toHexString(ch); - sb.append("\\u"); - for (int j = 0; j < 4 - hs.length(); j++) { - sb.append('0'); - } - sb.append(hs.toUpperCase()); - } else { - sb.append(ch); - } - } - } - } catch (IOException e) { - throw new TextException(e); - } - } -} diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarDataReader.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarDataReader.java index a0af4aed8..ab0c1a12d 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarDataReader.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarDataReader.java @@ -4,8 +4,6 @@ import java.sql.SQLException; /** * Reads from and binds to database columns. - * - * @author rbygrave */ public interface ScalarDataReader { diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarType.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarType.java index da37c315f..c49cfcb00 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarType.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarType.java @@ -184,12 +184,24 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData */ public boolean isDateTimeCapable(); + /** + * Read the value from binary input. + */ public Object readData(DataInput dataInput) throws IOException; + /** + * Write the value to binary output. + */ public void writeData(DataOutput dataOutput, Object v) throws IOException; + /** + * Read the value from JsonParser. + */ public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException; + /** + * Write the value to the JsonGenerator. + */ public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException; } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBase.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBase.java index c553dcad0..fddfc4d25 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBase.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBase.java @@ -1,76 +1,75 @@ package com.avaje.ebeaninternal.server.type; - - - /** * Base ScalarType object. */ public abstract class ScalarTypeBase implements ScalarType { - protected final Class type; - protected final boolean jdbcNative; - protected final int jdbcType; - - public ScalarTypeBase(Class type, boolean jdbcNative, int jdbcType) { - this.type = type; - this.jdbcNative = jdbcNative; - this.jdbcType = jdbcType; - } - - /** - * Default implementation of mutable false. - */ - @Override + protected final Class type; + + protected final boolean jdbcNative; + + protected final int jdbcType; + + public ScalarTypeBase(Class type, boolean jdbcNative, int jdbcType) { + this.type = type; + this.jdbcNative = jdbcNative; + this.jdbcType = jdbcType; + } + + /** + * Default implementation of mutable false. + */ + @Override public boolean isMutable() { return false; } - /** - * Default to true. - */ + /** + * Default to true. + */ @Override public boolean isDirty(Object value) { return true; } /** - * Just return 0. - */ - public int getLength() { - return 0; - } + * Just return 0. + */ + public int getLength() { + return 0; + } - public boolean isJdbcNative() { - return jdbcNative; - } - - public int getJdbcType() { - return jdbcType; - } - - public Class getType() { - return type; - } + public boolean isJdbcNative() { + return jdbcNative; + } - @SuppressWarnings("unchecked") - public String format(Object v) { - return formatValue((T)v); - } + public int getJdbcType() { + return jdbcType; + } - /** - * Return true if the value is null. - */ - public boolean isDbNull(Object value) { - return value == null; - } + public Class getType() { + return type; + } - /** - * Returns the value that was passed in. - */ - public Object getDbNullValue(Object value) { - return value; - } + @SuppressWarnings("unchecked") + public String format(Object v) { + return formatValue((T) v); + } + + /** + * Return true if the value is null. + */ + public boolean isDbNull(Object value) { + return value == null; + } + + /** + * Returns the value that was passed in. + */ + public Object getDbNullValue(Object value) { + return value; + } public void loadIgnore(DataReader dataReader) { dataReader.incrementPos(1); @@ -79,5 +78,5 @@ public abstract class ScalarTypeBase implements ScalarType { public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { list.addScalarType(propName, this); } - + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDate.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDate.java index d2b8cacc4..5d18df075 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDate.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDate.java @@ -16,91 +16,98 @@ import com.fasterxml.jackson.core.JsonToken; */ public abstract class ScalarTypeBaseDate extends ScalarTypeBase { - public ScalarTypeBaseDate(Class type, boolean jdbcNative, int jdbcType) { - super(type, jdbcNative, jdbcType); - } - - public abstract java.sql.Date convertToDate(T t); - - public abstract T convertFromDate(java.sql.Date ts); - - public void bind(DataBind b, T value) throws SQLException { - if (value == null){ - b.setNull(Types.DATE); - } else { - Date date = convertToDate(value); - b.setDate(date); - } - } + public ScalarTypeBaseDate(Class type, boolean jdbcNative, int jdbcType) { + super(type, jdbcNative, jdbcType); + } - public T read(DataReader dataReader) throws SQLException { - - Date ts = dataReader.getDate(); - if (ts == null){ - return null; - } else { - return convertFromDate(ts); - } - } - - public String formatValue(T t) { - Date date = convertToDate(t); - return date.toString(); - } + /** + * Convert the target value to millis. + */ + public abstract long convertToMillis(Object value); - public T parse(String value) { - Date date = Date.valueOf(value); - return convertFromDate(date); - } - - public T parseDateTime(long systemTimeMillis) { - Date ts = new Date(systemTimeMillis); - return convertFromDate(ts); - } + /** + * Convert to java.sql.Date from the target Date type. + */ + public abstract java.sql.Date convertToDate(T t); - public boolean isDateTimeCapable() { - return true; - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - if (JsonToken.VALUE_NUMBER_INT == event) { - return parseDateTime(ctx.getLongValue()); - } else { - String string = ctx.getText(); - throw new RuntimeException("convert " + string); - } - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - long millis = convertToMillis(value); - ctx.writeNumberField(name, millis); - } - - public abstract long convertToMillis(Object value); + /** + * Convert from java.sql.Date to the target Date type. + */ + public abstract T convertFromDate(java.sql.Date ts); - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - long val = dataInput.readLong(); - Date date = new Date(val); - return convertFromDate(date); - } + public void bind(DataBind b, T value) throws SQLException { + if (value == null) { + b.setNull(Types.DATE); + } else { + Date date = convertToDate(value); + b.setDate(date); } + } - @SuppressWarnings("unchecked") - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - T value = (T)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - Date date = convertToDate(value); - dataOutput.writeLong(date.getTime()); - } + public T read(DataReader dataReader) throws SQLException { + + Date ts = dataReader.getDate(); + if (ts == null) { + return null; + } else { + return convertFromDate(ts); } - + } + + public String formatValue(T t) { + Date date = convertToDate(t); + return date.toString(); + } + + public T parse(String value) { + Date date = Date.valueOf(value); + return convertFromDate(date); + } + + public T parseDateTime(long systemTimeMillis) { + Date ts = new Date(systemTimeMillis); + return convertFromDate(ts); + } + + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + if (JsonToken.VALUE_NUMBER_INT == event) { + return parseDateTime(ctx.getLongValue()); + } else { + return convertFromDate(Date.valueOf(ctx.getText())); + } + } + + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + long millis = convertToMillis(value); + ctx.writeNumberField(name, millis); + } + + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + long val = dataInput.readLong(); + Date date = new Date(val); + return convertFromDate(date); + } + } + + @SuppressWarnings("unchecked") + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + T value = (T) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + Date date = convertToDate(value); + dataOutput.writeLong(date.getTime()); + } + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java index 35443da5f..f3f53de1f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseDateTime.java @@ -16,94 +16,96 @@ import com.fasterxml.jackson.core.JsonToken; */ public abstract class ScalarTypeBaseDateTime extends ScalarTypeBase { - public ScalarTypeBaseDateTime(Class type, boolean jdbcNative, int jdbcType) { - super(type, jdbcNative, jdbcType); - } - - public abstract long convertToMillis(Object value); - - public abstract Timestamp convertToTimestamp(T t); - - public abstract T convertFromTimestamp(Timestamp ts); - - public void bind(DataBind b, T value) throws SQLException { - if (value == null){ - b.setNull(Types.TIMESTAMP); - } else { - Timestamp ts = convertToTimestamp(value); - b.setTimestamp(ts); - } - } + protected DateTimeJsonParser dateTimeParser = new DateTimeJsonParser(); + + public ScalarTypeBaseDateTime(Class type, boolean jdbcNative, int jdbcType) { + super(type, jdbcNative, jdbcType); + } - public T read(DataReader dataReader) throws SQLException { - - Timestamp ts = dataReader.getTimestamp(); - if (ts == null){ - return null; - } else { - return convertFromTimestamp(ts); - } + public abstract long convertToMillis(Object value); + + public abstract Timestamp convertToTimestamp(T t); + + public abstract T convertFromTimestamp(Timestamp ts); + + public void bind(DataBind b, T value) throws SQLException { + if (value == null) { + b.setNull(Types.TIMESTAMP); + } else { + Timestamp ts = convertToTimestamp(value); + b.setTimestamp(ts); } - + } + + public T read(DataReader dataReader) throws SQLException { + + Timestamp ts = dataReader.getTimestamp(); + if (ts == null) { + return null; + } else { + return convertFromTimestamp(ts); + } + } + @Override public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - + if (JsonToken.VALUE_NUMBER_INT == event) { long millis = ctx.getLongValue(); return parseDateTime(millis); - + } else { - String string = ctx.getText(); - throw new RuntimeException("convert " + string); + String jsonDateTime = ctx.getText(); + return convertFromTimestamp(dateTimeParser.parse(jsonDateTime)); } } - - @Override - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - long millis = convertToMillis(value); - ctx.writeNumberField(name, millis); - } - public String formatValue(T t) { - Timestamp ts = convertToTimestamp(t); - return ts.toString(); - } + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + long millis = convertToMillis(value); + ctx.writeNumberField(name, millis); + } - public T parse(String value) { - Timestamp ts = Timestamp.valueOf(value); - return convertFromTimestamp(ts); - } - - public T parseDateTime(long systemTimeMillis) { - Timestamp ts = new Timestamp(systemTimeMillis); - return convertFromTimestamp(ts); - } + public String formatValue(T t) { + Timestamp ts = convertToTimestamp(t); + return ts.toString(); + } - public boolean isDateTimeCapable() { - return true; - } + public T parse(String value) { + Timestamp ts = Timestamp.valueOf(value); + return convertFromTimestamp(ts); + } - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - long val = dataInput.readLong(); - Timestamp ts = new Timestamp(val); - return convertFromTimestamp(ts); - } - } + public T parseDateTime(long systemTimeMillis) { + Timestamp ts = new Timestamp(systemTimeMillis); + return convertFromTimestamp(ts); + } - @SuppressWarnings("unchecked") - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - T value = (T)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - Timestamp ts = convertToTimestamp(value); - dataOutput.writeLong(ts.getTime()); - } + public boolean isDateTimeCapable() { + return true; + } + + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + long val = dataInput.readLong(); + Timestamp ts = new Timestamp(val); + return convertFromTimestamp(ts); } - + } + + @SuppressWarnings("unchecked") + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + T value = (T) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + Timestamp ts = convertToTimestamp(value); + dataOutput.writeLong(ts.getTime()); + } + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java index cfa79e7f2..0df4a1b06 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBaseVarchar.java @@ -25,14 +25,27 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { super(type, jdbcNative, jdbcType); } + /** + * Format the target type to a string. + */ public abstract String formatValue(T v); + /** + * Parse from a formatted string value. + */ public abstract T parse(String value); + /** + * Convert from DB string value to the target type. + */ public abstract T convertFromDbString(String dbValue); + /** + * Convert to DB string from the target type. + */ public abstract String convertToDbString(T beanValue); + @Override public void bind(DataBind b, T value) throws SQLException { if (value == null) { b.setNull(Types.VARCHAR); @@ -42,6 +55,7 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { } } + @Override public T read(DataReader dataReader) throws SQLException { String s = dataReader.getString(); if (s == null) { @@ -51,6 +65,7 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { } } + @Override @SuppressWarnings("unchecked") public T toBeanType(Object value) { if (value == null) { @@ -62,6 +77,7 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { return (T) value; } + @Override public Object toJdbcType(Object value) { if (value instanceof String) { return parse((String) value); @@ -69,19 +85,23 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { return value; } + @Override public T parseDateTime(long systemTimeMillis) { throw new TextException("Not Supported"); } - + + @Override public boolean isDateTimeCapable() { return false; } + @Override @SuppressWarnings("unchecked") public String format(Object v) { return formatValue((T) v); } + @Override public Object readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { return null; @@ -109,6 +129,7 @@ public abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { return parse(ctx.getValueAsString()); } + @Override public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { ctx.writeStringField(name, format(value)); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBoolean.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBoolean.java index 1d78f0364..5a9db4c98 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBoolean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBoolean.java @@ -15,289 +15,288 @@ import com.fasterxml.jackson.core.JsonToken; /** * ScalarType for Boolean and boolean. *

- * This may or may not be a native jdbc type depending on the database and jdbc - * driver. + * This may or may not be a native jdbc type depending on the database and jdbc driver. *

*/ public class ScalarTypeBoolean { - public static class Native extends BooleanBase { + public static class Native extends BooleanBase { - /** - * Native Boolean database type. - */ - public Native() { - super(true, Types.BOOLEAN); - } - - public Boolean toBeanType(Object value) { - return BasicTypeConverter.toBoolean(value); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.convert(value, jdbcType); - } - - public void bind(DataBind b, Boolean value) throws SQLException { - if (value == null) { - b.setNull(Types.BOOLEAN); - } else { - b.setBoolean(value); - } - - } - - public Boolean read(DataReader dataReader) throws SQLException { - return dataReader.getBoolean(); - } - } - - /** - * The Class BitBoolean converts a JDBC type BIT to a java boolean - * - *

- * Sometimes booleans may be mapped to the JDBC type BIT. To use - * the BitBoolean specify type.boolean.dbtype="bit" in the ebean configuration - *

- */ - public static class BitBoolean extends BooleanBase { - - /** - * Native Boolean database type. - */ - public BitBoolean() { - super(true, Types.BIT); - } - - public Boolean toBeanType(Object value) { - return BasicTypeConverter.toBoolean(value); - } - - public Object toJdbcType(Object value) { - // use JDBC driver to convert boolean to bit - return BasicTypeConverter.toBoolean(value); - } - - public void bind(DataBind b, Boolean value) throws SQLException { - if (value == null) { - b.setNull(Types.BIT); - } else { - // use JDBC driver to convert boolean to bit - b.setBoolean(value); - } - } - - public Boolean read(DataReader dataReader) throws SQLException { - return dataReader.getBoolean(); - } - - } - - /** - * Converted to/from an Integer in the Database. - */ - public static class IntBoolean extends BooleanBase { - - private final Integer trueValue; - private final Integer falseValue; - - public IntBoolean(Integer trueValue, Integer falseValue) { - super(false, Types.INTEGER); - this.trueValue = trueValue; - this.falseValue = falseValue; - } - - @Override - public int getLength() { - return 1; - } - - public void bind(DataBind b, Boolean value) throws SQLException { - if (value == null) { - b.setNull(Types.INTEGER); - } else { - b.setInt(toInteger(value)); - } - } - - public Boolean read(DataReader dataReader) throws SQLException { - Integer i = dataReader.getInt(); - if (i == null){ - return null; - } - if (i.equals(trueValue)){ - return Boolean.TRUE; - } else { - return Boolean.FALSE; - } - } - - public Object toJdbcType(Object value) { - return toInteger(value); - } - - /** - * Convert the Boolean value to the db value. - */ - public Integer toInteger(Object value) { - if (value == null) { - return null; - } - Boolean b = (Boolean) value; - if (b.booleanValue()) { - return trueValue; - } else { - return falseValue; - } - } - - /** - * Convert the db value to the Boolean value. - */ - public Boolean toBeanType(Object value) { - if (value == null) { - return null; - } - if (value instanceof Boolean){ - return (Boolean)value; - } - if (trueValue.equals(value)) { - return Boolean.TRUE; - } else { - return Boolean.FALSE; - } - } - - } - - /** - * Converted to/from an Integer in the Database. - */ - public static class StringBoolean extends BooleanBase { - - private final String trueValue; - private final String falseValue; - - public StringBoolean(String trueValue, String falseValue) { - super(false, Types.VARCHAR); - this.trueValue = trueValue; - this.falseValue = falseValue; - } - - @Override - public int getLength() { - // typically this will return 1 - return Math.max(trueValue.length(), falseValue.length()); - } - - public void bind(DataBind b, Boolean value) throws SQLException { - if (value == null) { - b.setNull(Types.VARCHAR); - } else { - b.setString(toString(value)); - } - } - - public Boolean read(DataReader dataReader) throws SQLException { - String string = dataReader.getString(); - if (string == null) { - return null; - } - - if (string.equals(trueValue)){ - return Boolean.TRUE; - } else { - return Boolean.FALSE; - } - } - - public Object toJdbcType(Object value) { - return toString(value); - } - - /** - * Convert the Boolean value to the db value. - */ - public String toString(Object value) { - if (value == null) { - return null; - } - Boolean b = (Boolean) value; - if (b.booleanValue()) { - return trueValue; - } else { - return falseValue; - } - } - - /** - * Convert the db value to the Boolean value. - */ - public Boolean toBeanType(Object value) { - if (value == null) { - return null; - } - if (value instanceof Boolean){ - return (Boolean)value; - } - if (trueValue.equals(value)) { - return Boolean.TRUE; - } else { - return Boolean.FALSE; - } - } - } - - public static abstract class BooleanBase extends ScalarTypeBase { - - public BooleanBase(boolean jdbcNative, int jdbcType) { - super(Boolean.class, jdbcNative, jdbcType); - } - - public String formatValue(Boolean t) { - return t.toString(); - } - - public Boolean parse(String value) { - return Boolean.valueOf(value); - } - - public Boolean parseDateTime(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - public boolean isDateTimeCapable() { - return false; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - boolean val = dataInput.readBoolean(); - return Boolean.valueOf(val); - } - } - - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Boolean val = (Boolean) v; - if (val == null) { - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeBoolean(val.booleanValue()); - } - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) { - return JsonToken.VALUE_TRUE == event ? Boolean.TRUE : Boolean.FALSE; - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeBooleanField(name, (Boolean)value); - } + /** + * Native Boolean database type. + */ + public Native() { + super(true, Types.BOOLEAN); } - + + public Boolean toBeanType(Object value) { + return BasicTypeConverter.toBoolean(value); + } + + public Object toJdbcType(Object value) { + return BasicTypeConverter.convert(value, jdbcType); + } + + public void bind(DataBind b, Boolean value) throws SQLException { + if (value == null) { + b.setNull(Types.BOOLEAN); + } else { + b.setBoolean(value); + } + + } + + public Boolean read(DataReader dataReader) throws SQLException { + return dataReader.getBoolean(); + } + } + + /** + * The Class BitBoolean converts a JDBC type BIT to a java boolean + * + *

+ * Sometimes booleans may be mapped to the JDBC type BIT. To use the BitBoolean specify + * type.boolean.dbtype="bit" in the ebean configuration + *

+ */ + public static class BitBoolean extends BooleanBase { + + /** + * Native Boolean database type. + */ + public BitBoolean() { + super(true, Types.BIT); + } + + public Boolean toBeanType(Object value) { + return BasicTypeConverter.toBoolean(value); + } + + public Object toJdbcType(Object value) { + // use JDBC driver to convert boolean to bit + return BasicTypeConverter.toBoolean(value); + } + + public void bind(DataBind b, Boolean value) throws SQLException { + if (value == null) { + b.setNull(Types.BIT); + } else { + // use JDBC driver to convert boolean to bit + b.setBoolean(value); + } + } + + public Boolean read(DataReader dataReader) throws SQLException { + return dataReader.getBoolean(); + } + + } + + /** + * Converted to/from an Integer in the Database. + */ + public static class IntBoolean extends BooleanBase { + + private final Integer trueValue; + private final Integer falseValue; + + public IntBoolean(Integer trueValue, Integer falseValue) { + super(false, Types.INTEGER); + this.trueValue = trueValue; + this.falseValue = falseValue; + } + + @Override + public int getLength() { + return 1; + } + + public void bind(DataBind b, Boolean value) throws SQLException { + if (value == null) { + b.setNull(Types.INTEGER); + } else { + b.setInt(toInteger(value)); + } + } + + public Boolean read(DataReader dataReader) throws SQLException { + Integer i = dataReader.getInt(); + if (i == null) { + return null; + } + if (i.equals(trueValue)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + + public Object toJdbcType(Object value) { + return toInteger(value); + } + + /** + * Convert the Boolean value to the db value. + */ + public Integer toInteger(Object value) { + if (value == null) { + return null; + } + Boolean b = (Boolean) value; + if (b.booleanValue()) { + return trueValue; + } else { + return falseValue; + } + } + + /** + * Convert the db value to the Boolean value. + */ + public Boolean toBeanType(Object value) { + if (value == null) { + return null; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + if (trueValue.equals(value)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + + } + + /** + * Converted to/from an Integer in the Database. + */ + public static class StringBoolean extends BooleanBase { + + private final String trueValue; + private final String falseValue; + + public StringBoolean(String trueValue, String falseValue) { + super(false, Types.VARCHAR); + this.trueValue = trueValue; + this.falseValue = falseValue; + } + + @Override + public int getLength() { + // typically this will return 1 + return Math.max(trueValue.length(), falseValue.length()); + } + + public void bind(DataBind b, Boolean value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + b.setString(toString(value)); + } + } + + public Boolean read(DataReader dataReader) throws SQLException { + String string = dataReader.getString(); + if (string == null) { + return null; + } + + if (string.equals(trueValue)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + + public Object toJdbcType(Object value) { + return toString(value); + } + + /** + * Convert the Boolean value to the db value. + */ + public String toString(Object value) { + if (value == null) { + return null; + } + Boolean b = (Boolean) value; + if (b.booleanValue()) { + return trueValue; + } else { + return falseValue; + } + } + + /** + * Convert the db value to the Boolean value. + */ + public Boolean toBeanType(Object value) { + if (value == null) { + return null; + } + if (value instanceof Boolean) { + return (Boolean) value; + } + if (trueValue.equals(value)) { + return Boolean.TRUE; + } else { + return Boolean.FALSE; + } + } + } + + public static abstract class BooleanBase extends ScalarTypeBase { + + public BooleanBase(boolean jdbcNative, int jdbcType) { + super(Boolean.class, jdbcNative, jdbcType); + } + + public String formatValue(Boolean t) { + return t.toString(); + } + + public Boolean parse(String value) { + return Boolean.valueOf(value); + } + + public Boolean parseDateTime(long systemTimeMillis) { + throw new TextException("Not Supported"); + } + + public boolean isDateTimeCapable() { + return false; + } + + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + boolean val = dataInput.readBoolean(); + return Boolean.valueOf(val); + } + } + + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Boolean val = (Boolean) v; + if (val == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeBoolean(val.booleanValue()); + } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) { + return JsonToken.VALUE_TRUE == event ? Boolean.TRUE : Boolean.FALSE; + } + + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeBooleanField(name, (Boolean) value); + } + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeByte.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeByte.java index e0ad23496..c6aba32a3 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeByte.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeByte.java @@ -17,74 +17,74 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeByte extends ScalarTypeBase { - public ScalarTypeByte() { - super(Byte.class, true,Types.TINYINT ); - } - - public void bind(DataBind b, Byte value) throws SQLException { - if (value == null){ - b.setNull(Types.TINYINT); - } else { - b.setByte(value); - } - } + public ScalarTypeByte() { + super(Byte.class, true, Types.TINYINT); + } - public Byte read(DataReader dataReader) throws SQLException { - return dataReader.getByte(); - } + public void bind(DataBind b, Byte value) throws SQLException { + if (value == null) { + b.setNull(Types.TINYINT); + } else { + b.setByte(value); + } + } - public Object toJdbcType(Object value) { - return BasicTypeConverter.toByte(value); - } + public Byte read(DataReader dataReader) throws SQLException { + return dataReader.getByte(); + } + + public Object toJdbcType(Object value) { + return BasicTypeConverter.toByte(value); + } + + public Byte toBeanType(Object value) { + return BasicTypeConverter.toByte(value); + } - public Byte toBeanType(Object value) { - return BasicTypeConverter.toByte(value); - } - @Override public void jsonWrite(JsonGenerator ctx, String name, Object value) { throw new TextException("Not supported"); } - - @Override + + @Override public Object jsonRead(JsonParser ctx, JsonToken event) { throw new TextException("Not supported"); } public String formatValue(Byte t) { - return t.toString(); - } + return t.toString(); + } - public Byte parse(String value) { - throw new TextException("Not supported"); - } - - public Byte parseDateTime(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - public boolean isDateTimeCapable() { - return false; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - byte val = dataInput.readByte(); - return Byte.valueOf(val); - } - } + public Byte parse(String value) { + throw new TextException("Not supported"); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { + public Byte parseDateTime(long systemTimeMillis) { + throw new TextException("Not Supported"); + } - Byte val = (Byte) v; - if (val == null) { - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeByte(val); - } + public boolean isDateTimeCapable() { + return false; + } + + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + byte val = dataInput.readByte(); + return Byte.valueOf(val); } - + } + + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Byte val = (Byte) v; + if (val == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeByte(val); + } + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBase.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBase.java index 2f3b3fb94..73d198fbc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBase.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBase.java @@ -1,5 +1,6 @@ package com.avaje.ebeaninternal.server.type; +import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; @@ -14,83 +15,82 @@ import com.fasterxml.jackson.core.JsonToken; * Base type for binary types. */ public abstract class ScalarTypeBytesBase extends ScalarTypeBase { - - protected ScalarTypeBytesBase(boolean jdbcNative, int jdbcType) { - super(byte[].class, jdbcNative, jdbcType); - } - public Object convertFromBytes(byte[] bytes) { - return bytes; + protected ScalarTypeBytesBase(boolean jdbcNative, int jdbcType) { + super(byte[].class, jdbcNative, jdbcType); + } + + public Object convertFromBytes(byte[] bytes) { + return bytes; + } + + public byte[] convertToBytes(Object value) { + return (byte[]) value; + } + + public void bind(DataBind b, byte[] value) throws SQLException { + if (value == null) { + b.setNull(jdbcType); + } else { + b.setBytes(value); } + } - public byte[] convertToBytes(Object value) { - return (byte[]) value; - } - - public void bind(DataBind b, byte[] value) throws SQLException { - if (value == null) { - b.setNull(jdbcType); - } else { - b.setBytes(value); - } - } + public Object toJdbcType(Object value) { + return value; + } - public Object toJdbcType(Object value) { - return value; - } - - public byte[] toBeanType(Object value) { - return (byte[])value; - } - - - @Override - public void jsonWrite(JsonGenerator ctx, String name, Object value) { - throw new TextException("Not supported"); + public byte[] toBeanType(Object value) { + return (byte[]) value; } @Override - public Object jsonRead(JsonParser ctx, JsonToken event) { - throw new TextException("Not supported"); + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeBinaryField(name, (byte[]) value); + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(500); + ctx.readBinaryValue(out); + return out.toByteArray(); } public String formatValue(byte[] t) { - throw new TextException("Not supported"); + throw new TextException("Not supported"); + } + + public byte[] parse(String value) { + throw new TextException("Not supported"); + } + + public byte[] parseDateTime(long systemTimeMillis) { + throw new TextException("Not supported"); + } + + public boolean isDateTimeCapable() { + return false; + } + + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + int len = dataInput.readInt(); + byte[] buf = new byte[len]; + dataInput.readFully(buf, 0, buf.length); + return buf; } + } - public byte[] parse(String value) { - throw new TextException("Not supported"); - } - - public byte[] parseDateTime(long systemTimeMillis) { - throw new TextException("Not supported"); - } - - public boolean isDateTimeCapable() { - return false; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - int len = dataInput.readInt(); - byte[] buf = new byte[len]; - dataInput.readFully(buf, 0, buf.length); - return buf; - } + public void writeData(DataOutput dataOutput, Object v) throws IOException { + if (v == null) { + dataOutput.writeBoolean(false); + } else { + byte[] bytes = convertToBytes(v); + dataOutput.writeInt(bytes.length); + dataOutput.write(bytes); } + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - if (v == null){ - dataOutput.writeBoolean(false); - } else { - byte[] bytes = convertToBytes(v); - dataOutput.writeInt(bytes.length); - dataOutput.write(bytes); - } - } - - - } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBinary.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBinary.java index 254361a38..b83cf3c05 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBinary.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBinary.java @@ -8,12 +8,12 @@ import java.sql.Types; */ public class ScalarTypeBytesBinary extends ScalarTypeBytesBase { - public ScalarTypeBytesBinary() { - super(true, Types.BINARY); - } - - public byte[] read(DataReader dataReader) throws SQLException { - return dataReader.getBytes(); - } - + public ScalarTypeBytesBinary() { + super(true, Types.BINARY); + } + + public byte[] read(DataReader dataReader) throws SQLException { + return dataReader.getBytes(); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBlob.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBlob.java index b6454babf..11ff9f465 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBlob.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesBlob.java @@ -7,14 +7,14 @@ import java.sql.Types; * ScalarType for BLOB. */ public class ScalarTypeBytesBlob extends ScalarTypeBytesBase { - - public ScalarTypeBytesBlob() { - super(true, Types.BLOB); - } - - public byte[] read(DataReader dataReader) throws SQLException { - return dataReader.getBlobBytes(); - } - + public ScalarTypeBytesBlob() { + super(true, Types.BLOB); + } + + public byte[] read(DataReader dataReader) throws SQLException { + + return dataReader.getBlobBytes(); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java index bd9f66180..e2fe6aa48 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java @@ -1,11 +1,11 @@ package com.avaje.ebeaninternal.server.type; +import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.sql.SQLException; -import com.avaje.ebean.text.TextException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; @@ -14,115 +14,116 @@ import com.fasterxml.jackson.core.JsonToken; * Encrypted ScalarType that wraps a byte[] types. * * @author rbygrave - * + * */ public class ScalarTypeBytesEncrypted implements ScalarType { - private final ScalarTypeBytesBase baseType; - - private final DataEncryptSupport dataEncryptSupport; - - - public ScalarTypeBytesEncrypted(ScalarTypeBytesBase baseType, DataEncryptSupport dataEncryptSupport) { - this.baseType = baseType; - this.dataEncryptSupport = dataEncryptSupport; - } - - @Override - public boolean isMutable() { - return false; - } + private final ScalarTypeBytesBase baseType; - @Override - public boolean isDirty(Object value) { - return false; - } - - public void bind(DataBind b, byte[] value) throws SQLException { - value = dataEncryptSupport.encrypt(value); - baseType.bind(b, value); - } + private final DataEncryptSupport dataEncryptSupport; - public int getJdbcType() { - return baseType.getJdbcType(); - } + public ScalarTypeBytesEncrypted(ScalarTypeBytesBase baseType, DataEncryptSupport dataEncryptSupport) { + this.baseType = baseType; + this.dataEncryptSupport = dataEncryptSupport; + } - public int getLength() { - return baseType.getLength(); - } + @Override + public boolean isMutable() { + return false; + } - public Class getType() { - return byte[].class; - } + @Override + public boolean isDirty(Object value) { + return false; + } - public boolean isDateTimeCapable() { - return baseType.isDateTimeCapable(); - } + public void bind(DataBind b, byte[] value) throws SQLException { + value = dataEncryptSupport.encrypt(value); + baseType.bind(b, value); + } - public boolean isJdbcNative() { - return baseType.isJdbcNative(); - } + public int getJdbcType() { + return baseType.getJdbcType(); + } - public void loadIgnore(DataReader dataReader) { - baseType.loadIgnore(dataReader); - } + public int getLength() { + return baseType.getLength(); + } - @Override - public void jsonWrite(JsonGenerator ctx, String name, Object value) { - throw new TextException("Not supported"); - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) { - throw new TextException("Not supported"); - } - - public String format(Object v) { - throw new RuntimeException("Not used"); - } - - public String formatValue(byte[] v) { - throw new RuntimeException("Not used"); - } + public Class getType() { + return byte[].class; + } - public byte[] parse(String value) { - return baseType.parse(value); - } + public boolean isDateTimeCapable() { + return baseType.isDateTimeCapable(); + } - public byte[] parseDateTime(long systemTimeMillis) { - return baseType.parseDateTime(systemTimeMillis); - } + public boolean isJdbcNative() { + return baseType.isJdbcNative(); + } - public byte[] read(DataReader dataReader) throws SQLException { - - byte[] data = baseType.read(dataReader); - data = dataEncryptSupport.decrypt(data); - return data; - } + public void loadIgnore(DataReader dataReader) { + baseType.loadIgnore(dataReader); + } - public byte[] toBeanType(Object value) { - return baseType.toBeanType(value); - } + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeBinaryField(name, (byte[]) value); + } - public Object toJdbcType(Object value) { - return baseType.toJdbcType(value); - } + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(500); + ctx.readBinaryValue(out); + return out.toByteArray(); + } - public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { - baseType.accumulateScalarTypes(propName, list); - } + public String format(Object v) { + throw new RuntimeException("Not used"); + } - public Object readData(DataInput dataInput) throws IOException { - int len = dataInput.readInt(); - byte[] value = new byte[len]; - dataInput.readFully(value); - return value; - } + public String formatValue(byte[] v) { + throw new RuntimeException("Not used"); + } + + public byte[] parse(String value) { + return baseType.parse(value); + } + + public byte[] parseDateTime(long systemTimeMillis) { + return baseType.parseDateTime(systemTimeMillis); + } + + public byte[] read(DataReader dataReader) throws SQLException { + + byte[] data = baseType.read(dataReader); + data = dataEncryptSupport.decrypt(data); + return data; + } + + public byte[] toBeanType(Object value) { + return baseType.toBeanType(value); + } + + public Object toJdbcType(Object value) { + return baseType.toJdbcType(value); + } + + public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { + baseType.accumulateScalarTypes(propName, list); + } + + public Object readData(DataInput dataInput) throws IOException { + int len = dataInput.readInt(); + byte[] value = new byte[len]; + dataInput.readFully(value); + return value; + } + + public void writeData(DataOutput dataOutput, Object v) throws IOException { + byte[] value = (byte[]) v; + dataOutput.writeInt(value.length); + dataOutput.write(value); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - byte[] value = (byte[])v; - dataOutput.writeInt(value.length); - dataOutput.write(value); - } - } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java index ce529a7f8..3a40e3ee9 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java @@ -7,12 +7,12 @@ import java.sql.Types; * ScalarType for Longvarbinary. */ public class ScalarTypeBytesLongVarbinary extends ScalarTypeBytesBase { - - public ScalarTypeBytesLongVarbinary() { - super(true, Types.LONGVARBINARY); - } - - public byte[] read(DataReader dataReader) throws SQLException { - return dataReader.getBinaryBytes(); - } + + public ScalarTypeBytesLongVarbinary() { + super(true, Types.LONGVARBINARY); + } + + public byte[] read(DataReader dataReader) throws SQLException { + return dataReader.getBinaryBytes(); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java index 40c9db80c..7ea8f4a5f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java @@ -8,12 +8,12 @@ import java.sql.Types; */ public class ScalarTypeBytesVarbinary extends ScalarTypeBytesBase { - public ScalarTypeBytesVarbinary() { - super(true, Types.VARBINARY); - } - - public byte[] read(DataReader dataReader) throws SQLException { - return dataReader.getBytes(); - } - + public ScalarTypeBytesVarbinary() { + super(true, Types.VARBINARY); + } + + public byte[] read(DataReader dataReader) throws SQLException { + return dataReader.getBytes(); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCalendar.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCalendar.java index c21e95600..ed214945d 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCalendar.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCalendar.java @@ -12,49 +12,49 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; * ScalarType for java.util.Calendar. */ public class ScalarTypeCalendar extends ScalarTypeBaseDateTime { - - public ScalarTypeCalendar(int jdbcType) { - super(Calendar.class, false, jdbcType); - } - - public void bind(DataBind b, Calendar value) throws SQLException { - if (value == null){ - b.setNull(Types.TIMESTAMP); - } else { - Calendar date = (Calendar)value; - if (jdbcType == Types.TIMESTAMP){ - Timestamp timestamp = new Timestamp(date.getTimeInMillis()); - b.setTimestamp(timestamp); - } else { - Date d = new Date(date.getTimeInMillis()); - b.setDate(d); - } - } - } - - @Override - public Calendar convertFromTimestamp(Timestamp ts) { - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(ts.getTime()); - return calendar; + + public ScalarTypeCalendar(int jdbcType) { + super(Calendar.class, false, jdbcType); + } + + public void bind(DataBind b, Calendar value) throws SQLException { + if (value == null) { + b.setNull(Types.TIMESTAMP); + } else { + Calendar date = (Calendar) value; + if (jdbcType == Types.TIMESTAMP) { + Timestamp timestamp = new Timestamp(date.getTimeInMillis()); + b.setTimestamp(timestamp); + } else { + Date d = new Date(date.getTimeInMillis()); + b.setDate(d); + } } + } + + @Override + public Calendar convertFromTimestamp(Timestamp ts) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(ts.getTime()); + return calendar; + } @Override public long convertToMillis(Object value) { return ((Calendar) value).getTimeInMillis(); } - @Override - public Timestamp convertToTimestamp(Calendar t) { - return new Timestamp(t.getTimeInMillis()); - } + @Override + public Timestamp convertToTimestamp(Calendar t) { + return new Timestamp(t.getTimeInMillis()); + } - public Object toJdbcType(Object value) { - return BasicTypeConverter.convert(value, jdbcType); - } + public Object toJdbcType(Object value) { + return BasicTypeConverter.convert(value, jdbcType); + } + + public Calendar toBeanType(Object value) { + return BasicTypeConverter.toCalendar(value); + } - public Calendar toBeanType(Object value) { - return BasicTypeConverter.toCalendar(value); - } - } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeChar.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeChar.java index d1f37206c..7abe7c09c 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeChar.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeChar.java @@ -1,70 +1,62 @@ package com.avaje.ebeaninternal.server.type; -import java.io.IOException; import java.sql.SQLException; import java.sql.Types; import com.avaje.ebeaninternal.server.core.BasicTypeConverter; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; /** * ScalarType for char. */ public class ScalarTypeChar extends ScalarTypeBaseVarchar { - - public ScalarTypeChar() { - super(char.class, false, Types.VARCHAR); - } - - @Override - public Character convertFromDbString(String dbValue) { - return dbValue.charAt(0); - } - @Override - public String convertToDbString(Character beanValue) { - return beanValue.toString(); - } - - public void bind(DataBind b, Character value) throws SQLException { - if (value == null){ - b.setNull(Types.VARCHAR); - } else { - String s = BasicTypeConverter.toString(value); - b.setString(s); - } - } - - public Character read(DataReader dataReader) throws SQLException { - String string = dataReader.getString(); - if (string == null || string.length()==0){ - return null; - } else { - return string.charAt(0); - } - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toString(value); - } - - public Character toBeanType(Object value) { - String s = BasicTypeConverter.toString(value); - return s.charAt(0); - } - - public String formatValue(Character t) { - return t.toString(); - } - - public Character parse(String value) { - return value.charAt(0); - } + public ScalarTypeChar() { + super(char.class, false, Types.VARCHAR); + } @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getValueAsString(); + public Character convertFromDbString(String dbValue) { + return dbValue.charAt(0); } - + + @Override + public String convertToDbString(Character beanValue) { + return beanValue.toString(); + } + + public void bind(DataBind b, Character value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + String s = BasicTypeConverter.toString(value); + b.setString(s); + } + } + + public Character read(DataReader dataReader) throws SQLException { + String string = dataReader.getString(); + if (string == null || string.length() == 0) { + return null; + } else { + return string.charAt(0); + } + } + + public Object toJdbcType(Object value) { + return BasicTypeConverter.toString(value); + } + + public Character toBeanType(Object value) { + String s = BasicTypeConverter.toString(value); + return s.charAt(0); + } + + public String formatValue(Character t) { + return t.toString(); + } + + public Character parse(String value) { + return value.charAt(0); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCharArray.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCharArray.java index 6ea69b70f..f9e96f15c 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCharArray.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCharArray.java @@ -12,63 +12,63 @@ import com.fasterxml.jackson.core.JsonToken; /** * ScalarType for char[]. */ -public class ScalarTypeCharArray extends ScalarTypeBaseVarchar{ +public class ScalarTypeCharArray extends ScalarTypeBaseVarchar { - public ScalarTypeCharArray() { - super(char[].class, false, Types.VARCHAR); - } - - @Override - public char[] convertFromDbString(String dbValue) { - return dbValue.toCharArray(); + public ScalarTypeCharArray() { + super(char[].class, false, Types.VARCHAR); + } + + @Override + public char[] convertFromDbString(String dbValue) { + return dbValue.toCharArray(); + } + + @Override + public String convertToDbString(char[] beanValue) { + return new String(beanValue); + } + + public void bind(DataBind b, char[] value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + String s = BasicTypeConverter.toString(value); + b.setString(s); } + } - @Override - public String convertToDbString(char[] beanValue) { - return new String(beanValue); + public char[] read(DataReader dataReader) throws SQLException { + String string = dataReader.getString(); + if (string == null) { + return null; + } else { + return string.toCharArray(); } + } - public void bind(DataBind b, char[] value) throws SQLException { - if (value == null){ - b.setNull(Types.VARCHAR); - } else { - String s = BasicTypeConverter.toString(value); - b.setString(s); - } - } + public Object toJdbcType(Object value) { + return BasicTypeConverter.toString(value); + } - public char[] read(DataReader dataReader) throws SQLException { - String string = dataReader.getString(); - if (string == null){ - return null; - } else { - return string.toCharArray(); - } - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toString(value); - } + public char[] toBeanType(Object value) { + String s = BasicTypeConverter.toString(value); + return s.toCharArray(); + } - public char[] toBeanType(Object value) { - String s = BasicTypeConverter.toString(value); - return s.toCharArray(); - } - - public String formatValue(char[] t) { - return String.valueOf(t); - } + public String formatValue(char[] t) { + return String.valueOf(t); + } - public char[] parse(String value) { - return value.toCharArray(); - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getValueAsString().toCharArray(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeStringField(name, String.valueOf(value)); - } + public char[] parse(String value) { + return value.toCharArray(); + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getValueAsString().toCharArray(); + } + + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeStringField(name, String.valueOf(value)); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClass.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClass.java index 67086bd74..1a2a6683b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClass.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClass.java @@ -1,11 +1,7 @@ package com.avaje.ebeaninternal.server.type; -import java.io.IOException; - import javax.persistence.PersistenceException; -import com.fasterxml.jackson.core.JsonGenerator; - /** * ScalarType for Class that persists it to VARCHAR column. * @@ -14,42 +10,36 @@ import com.fasterxml.jackson.core.JsonGenerator; */ @SuppressWarnings({ "rawtypes" }) public class ScalarTypeClass extends ScalarTypeBaseVarchar { - - public ScalarTypeClass() { - super(Class.class); - } - - @Override - public int getLength() { - return 255; - } - @Override - public Class convertFromDbString(String dbValue) { - return parse(dbValue); - } - - @Override - public String convertToDbString(Class beanValue) { - return beanValue.getCanonicalName(); - } + public ScalarTypeClass() { + super(Class.class); + } - public String formatValue(Class v) { - return v.getCanonicalName(); - } + @Override + public int getLength() { + return 255; + } - public Class parse(String value) { - try { - return Class.forName(value); - } catch (Exception e) { - String msg = "Unable to find Class "+value; - throw new PersistenceException(msg, e); - } + @Override + public Class convertFromDbString(String dbValue) { + return parse(dbValue); + } + + @Override + public String convertToDbString(Class beanValue) { + return beanValue.getCanonicalName(); + } + + public String formatValue(Class v) { + return v.getCanonicalName(); + } + + public Class parse(String value) { + try { + return Class.forName(value); + } catch (Exception e) { + throw new PersistenceException("Unable to find Class " + value, e); } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeStringField(name, formatValue((Class)value)); - } - - + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClob.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClob.java index bf4edbeb7..c81469c66 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClob.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeClob.java @@ -32,6 +32,7 @@ public class ScalarTypeClob extends ScalarTypeBaseVarchar { return beanValue; } + @Override public void bind(DataBind b, String value) throws SQLException { if (value == null) { b.setNull(Types.VARCHAR); @@ -40,23 +41,28 @@ public class ScalarTypeClob extends ScalarTypeBaseVarchar { } } + @Override public String read(DataReader dataReader) throws SQLException { return dataReader.getStringClob(); } + @Override public Object toJdbcType(Object value) { return BasicTypeConverter.toString(value); } + @Override public String toBeanType(Object value) { return BasicTypeConverter.toString(value); } + @Override public String formatValue(String t) { return t; } + @Override public String parse(String value) { return value; } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCurrency.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCurrency.java index 02679ccaf..e70d11d87 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCurrency.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeCurrency.java @@ -1,50 +1,39 @@ package com.avaje.ebeaninternal.server.type; -import java.io.IOException; import java.util.Currency; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; - /** * ScalarType for java.util.Currency which converts to and from a VARCHAR database column. */ public class ScalarTypeCurrency extends ScalarTypeBaseVarchar { - public ScalarTypeCurrency() { - super(Currency.class); - } - - @Override - public int getLength() { - return 3; - } + public ScalarTypeCurrency() { + super(Currency.class); + } - @Override - public Currency convertFromDbString(String dbValue) { - return Currency.getInstance(dbValue); - } - - @Override - public String convertToDbString(Currency beanValue) { - return ((Currency)beanValue).getCurrencyCode(); - } - - public String formatValue(Currency v) { - return v.toString(); - } - - public Currency parse(String value) { - return Currency.getInstance(value); - } - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return parse(ctx.getValueAsString()); + public int getLength() { + return 3; } - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeStringField(name, formatValue((Currency)value)); + @Override + public Currency convertFromDbString(String dbValue) { + return Currency.getInstance(dbValue); } + + @Override + public String convertToDbString(Currency beanValue) { + return ((Currency) beanValue).getCurrencyCode(); + } + + @Override + public String formatValue(Currency v) { + return v.toString(); + } + + @Override + public Currency parse(String value) { + return Currency.getInstance(value); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDate.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDate.java index f74774c1d..d9b10644f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDate.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDate.java @@ -10,44 +10,44 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; * ScalarType for java.sql.Date. */ public class ScalarTypeDate extends ScalarTypeBaseDate { - - public ScalarTypeDate() { - super(Date.class, true, Types.DATE); - } - - @Override - public long convertToMillis(Object value) { - return ((Date)value).getTime(); + + public ScalarTypeDate() { + super(Date.class, true, Types.DATE); } @Override - public Date convertFromDate(Date date) { - return date; + public long convertToMillis(Object value) { + return ((Date) value).getTime(); + } + + @Override + public Date convertFromDate(Date date) { + return date; + } + + @Override + public Date convertToDate(Date t) { + return t; + } + + public void bind(DataBind b, java.sql.Date value) throws SQLException { + if (value == null) { + b.setNull(Types.DATE); + } else { + b.setDate(value); } + } - @Override - public Date convertToDate(Date t) { - return t; - } + public java.sql.Date read(DataReader dataReader) throws SQLException { + return dataReader.getDate(); + } - public void bind(DataBind b, java.sql.Date value) throws SQLException { - if (value == null){ - b.setNull(Types.DATE); - } else { - b.setDate(value); - } - } + public Object toJdbcType(Object value) { + return BasicTypeConverter.toDate(value); + } - public java.sql.Date read(DataReader dataReader) throws SQLException { - return dataReader.getDate(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toDate(value); - } - - public java.sql.Date toBeanType(Object value) { - return BasicTypeConverter.toDate(value); - } + public java.sql.Date toBeanType(Object value) { + return BasicTypeConverter.toDate(value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDouble.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDouble.java index d33c29917..fa27077d4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDouble.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeDouble.java @@ -15,83 +15,84 @@ import com.fasterxml.jackson.core.JsonToken; * ScalarType for Double and double. */ public class ScalarTypeDouble extends ScalarTypeBase { - - public ScalarTypeDouble() { - super(Double.class, true, Types.DOUBLE); - } - - public void bind(DataBind b, Double value) throws SQLException { - if (value == null){ - b.setNull(Types.DOUBLE); - } else { - b.setDouble(value.doubleValue()); - } - } - public Double read(DataReader dataReader) throws SQLException { - - return dataReader.getDouble(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toDouble(value); - } + public ScalarTypeDouble() { + super(Double.class, true, Types.DOUBLE); + } - public Double toBeanType(Object value) { - return BasicTypeConverter.toDouble(value); - } - - - public String formatValue(Double t) { - return t.toString(); + @Override + public void bind(DataBind b, Double value) throws SQLException { + if (value == null) { + b.setNull(Types.DOUBLE); + } else { + b.setDouble(value.doubleValue()); } + } - public Double parse(String value) { - return Double.valueOf(value); - } + @Override + public Double read(DataReader dataReader) throws SQLException { + return dataReader.getDouble(); + } - public Double parseDateTime(long systemTimeMillis) { - return Double.valueOf(systemTimeMillis); - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toDouble(value); + } - public boolean isDateTimeCapable() { - return true; - } + @Override + public Double toBeanType(Object value) { + return BasicTypeConverter.toDouble(value); + } - public String toJsonString(Double value) { - if(value.isInfinite() || value.isNaN()) { - return "null"; - } else { - return value.toString(); - } - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - double val = dataInput.readDouble(); - return Double.valueOf(val); - } - } + @Override + public String formatValue(Double t) { + return t.toString(); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Double value = (Double)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeDouble(value.doubleValue()); - } + @Override + public Double parse(String value) { + return Double.valueOf(value); + } + + @Override + public Double parseDateTime(long systemTimeMillis) { + return Double.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + double val = dataInput.readDouble(); + return Double.valueOf(val); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getDoubleValue(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeNumberField(name, (Double)value); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Double value = (Double) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeDouble(value.doubleValue()); } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getDoubleValue(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeNumberField(name, (Double) value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java index 7c687152c..9c3eeccdf 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java @@ -11,115 +11,133 @@ import com.fasterxml.jackson.core.JsonToken; public class ScalarTypeEncryptedWrapper implements ScalarType { - private final ScalarType wrapped; - - private final DataEncryptSupport dataEncryptSupport; - - private final ScalarTypeBytesBase byteArrayType; - - public ScalarTypeEncryptedWrapper(ScalarType wrapped, ScalarTypeBytesBase byteArrayType, DataEncryptSupport dataEncryptSupport) { - this.wrapped = wrapped; - this.byteArrayType = byteArrayType; - this.dataEncryptSupport = dataEncryptSupport; - } + private final ScalarType wrapped; - @Override - public boolean isMutable() { - return wrapped.isMutable(); - } - - @Override - public boolean isDirty(Object value) { - return wrapped.isDirty(value); - } + private final DataEncryptSupport dataEncryptSupport; - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return wrapped.jsonRead(ctx, event); - } + private final ScalarTypeBytesBase byteArrayType; - public Object readData(DataInput dataInput) throws IOException { - return wrapped.readData(dataInput); - } + public ScalarTypeEncryptedWrapper(ScalarType wrapped, ScalarTypeBytesBase byteArrayType, DataEncryptSupport dataEncryptSupport) { + this.wrapped = wrapped; + this.byteArrayType = byteArrayType; + this.dataEncryptSupport = dataEncryptSupport; + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - wrapped.writeData(dataOutput, v); - } + @Override + public boolean isMutable() { + return wrapped.isMutable(); + } - public T read(DataReader dataReader) throws SQLException { + @Override + public boolean isDirty(Object value) { + return wrapped.isDirty(value); + } - byte[] data = dataReader.getBytes(); - String formattedValue = dataEncryptSupport.decryptObject(data); - if (formattedValue == null){ - return null; - } - return wrapped.parse(formattedValue); - } + @Override + public Object readData(DataInput dataInput) throws IOException { + return wrapped.readData(dataInput); + } - private byte[] encrypt(T value){ - String formatValue = wrapped.formatValue(value); - return dataEncryptSupport.encryptObject(formatValue); - } - - public void bind(DataBind b, T value) throws SQLException { - - byte[] encryptedValue = encrypt(value); - byteArrayType.bind(b, encryptedValue); - } + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + wrapped.writeData(dataOutput, v); + } - public int getJdbcType() { - return byteArrayType.getJdbcType(); - } + @Override + public T read(DataReader dataReader) throws SQLException { - public int getLength() { - return byteArrayType.getLength(); + byte[] data = dataReader.getBytes(); + String formattedValue = dataEncryptSupport.decryptObject(data); + if (formattedValue == null) { + return null; } + return wrapped.parse(formattedValue); + } - public Class getType() { - return wrapped.getType(); - } + private byte[] encrypt(T value) { + String formatValue = wrapped.formatValue(value); + return dataEncryptSupport.encryptObject(formatValue); + } - public boolean isDateTimeCapable() { - return wrapped.isDateTimeCapable(); - } + @Override + public void bind(DataBind b, T value) throws SQLException { - public boolean isJdbcNative() { - return false; - } + byte[] encryptedValue = encrypt(value); + byteArrayType.bind(b, encryptedValue); + } - public void loadIgnore(DataReader dataReader) { - wrapped.loadIgnore(dataReader); - } - - @SuppressWarnings("unchecked") - public String format(Object v) { - return formatValue((T)v); - } + @Override + public int getJdbcType() { + return byteArrayType.getJdbcType(); + } - public String formatValue(T v) { - return wrapped.formatValue(v); - } + @Override + public int getLength() { + return byteArrayType.getLength(); + } - public T parse(String value) { - return wrapped.parse(value); - } + @Override + public Class getType() { + return wrapped.getType(); + } - public T parseDateTime(long systemTimeMillis) { - return wrapped.parseDateTime(systemTimeMillis); - } + @Override + public boolean isDateTimeCapable() { + return wrapped.isDateTimeCapable(); + } - public T toBeanType(Object value) { - return wrapped.toBeanType(value); - } + @Override + public boolean isJdbcNative() { + return false; + } - public Object toJdbcType(Object value) { - return wrapped.toJdbcType(value); - } + @Override + public void loadIgnore(DataReader dataReader) { + wrapped.loadIgnore(dataReader); + } - public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { - wrapped.accumulateScalarTypes(propName, list); - } - + @Override + @SuppressWarnings("unchecked") + public String format(Object v) { + return formatValue((T) v); + } + + @Override + public String formatValue(T v) { + return wrapped.formatValue(v); + } + + @Override + public T parse(String value) { + return wrapped.parse(value); + } + + @Override + public T parseDateTime(long systemTimeMillis) { + return wrapped.parseDateTime(systemTimeMillis); + } + + @Override + public T toBeanType(Object value) { + return wrapped.toBeanType(value); + } + + @Override + public Object toJdbcType(Object value) { + return wrapped.toJdbcType(value); + } + + @Override + public void accumulateScalarTypes(String propName, CtCompoundTypeScalarList list) { + wrapped.accumulateScalarTypes(propName, list); + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return wrapped.jsonRead(ctx, event); + } + + @Override public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { wrapped.jsonWrite(ctx, name, value); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEnumStandard.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEnumStandard.java index f6cc6a5b7..6fdfb1e72 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEnumStandard.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeEnumStandard.java @@ -12,99 +12,98 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; - /** * JPA standard based Enum scalar type. *

* Converts between bean Enum types to database string or integer columns. *

*

- * The limitation of this class is that it converts the Enum to either the ordinal - * or string value of the Enum. If you wish to convert the Enum to some other value - * then you should look at the Ebean specific @EnumMapping. + * The limitation of this class is that it converts the Enum to either the ordinal or string value + * of the Enum. If you wish to convert the Enum to some other value then you should look at the + * Ebean specific @EnumMapping. *

*/ public class ScalarTypeEnumStandard { - - @SuppressWarnings({"rawtypes","unchecked"}) - public static class StringEnum extends EnumBase implements ScalarTypeEnum { - - private final int length; - - /** - * Create a ScalarTypeEnum. - */ - public StringEnum(Class enumType) { - super(enumType, false, Types.VARCHAR); - this.length = maxValueLength(enumType); - } - /** - * Return the IN values for DB constraint construction. - */ - public String getContraintInValues(){ + @SuppressWarnings({ "rawtypes", "unchecked" }) + public static class StringEnum extends EnumBase implements ScalarTypeEnum { - StringBuilder sb = new StringBuilder(); - - sb.append("("); - Object[] ea = enumType.getEnumConstants(); - for (int i = 0; i < ea.length; i++) { - Enum e = (Enum)ea[i]; - if (i > 0){ - sb.append(","); - } - sb.append("'").append(e.name()).append("'"); - } - sb.append(")"); - - return sb.toString(); - } - - private int maxValueLength(Class enumType){ - - int maxLen = 0; - - Object[] ea = enumType.getEnumConstants(); - for (int i = 0; i < ea.length; i++) { - Enum e = (Enum)ea[i]; - maxLen = Math.max(maxLen, e.toString().length()); - } - - return maxLen; - } - - public int getLength() { - return length; - } + private final int length; + + /** + * Create a ScalarTypeEnum. + */ + public StringEnum(Class enumType) { + super(enumType, false, Types.VARCHAR); + this.length = maxValueLength(enumType); + } + + /** + * Return the IN values for DB constraint construction. + */ + public String getContraintInValues() { + + StringBuilder sb = new StringBuilder(); + + sb.append("("); + Object[] ea = enumType.getEnumConstants(); + for (int i = 0; i < ea.length; i++) { + Enum e = (Enum) ea[i]; + if (i > 0) { + sb.append(","); + } + sb.append("'").append(e.name()).append("'"); + } + sb.append(")"); + + return sb.toString(); + } + + private int maxValueLength(Class enumType) { + + int maxLen = 0; + + Object[] ea = enumType.getEnumConstants(); + for (int i = 0; i < ea.length; i++) { + Enum e = (Enum) ea[i]; + maxLen = Math.max(maxLen, e.toString().length()); + } + + return maxLen; + } + + public int getLength() { + return length; + } + + public void bind(DataBind b, Object value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + b.setString(format(value)); + } + } + + public Object read(DataReader dataReader) throws SQLException { + + String string = dataReader.getString(); + if (string == null) { + return null; + } else { + return parse(string); + } + } + + /** + * Convert the Boolean value to the db value. + */ + public Object toJdbcType(Object beanValue) { + if (beanValue == null) { + return null; + } + return ((Enum) beanValue).toString(); + } - public void bind(DataBind b, Object value) throws SQLException { - if (value == null){ - b.setNull(Types.VARCHAR); - } else { - b.setString(format(value)); - } - } - - public Object read(DataReader dataReader) throws SQLException { - - String string = dataReader.getString(); - if (string == null){ - return null; - } else { - return parse(string); - } - } - - /** - * Convert the Boolean value to the db value. - */ - public Object toJdbcType(Object beanValue) { - if (beanValue == null) { - return null; - } - return ((Enum)beanValue).toString(); - } - public Object toBeanType(Object dbValue) { if (dbValue == null || dbValue instanceof Enum) { return dbValue; @@ -112,150 +111,155 @@ public class ScalarTypeEnumStandard { return Enum.valueOf(enumType, (String) dbValue); } - } - - @SuppressWarnings({"rawtypes","unchecked"}) + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) public static class OrdinalEnum extends EnumBase implements ScalarTypeEnum { - private final Object[] enumArray; - - /** - * Create a ScalarTypeEnum. - */ - public OrdinalEnum(Class enumType) { - super(enumType, false, Types.INTEGER); - this.enumArray = EnumSet.allOf(enumType).toArray(); - } + private final Object[] enumArray; - /** - * Return the IN values for DB constraint construction. - */ - public String getContraintInValues(){ - - StringBuilder sb = new StringBuilder(); - - sb.append("("); - for (int i = 0; i < enumArray.length; i++) { - Enum e = (Enum)enumArray[i]; - if (i > 0){ - sb.append(","); - } - sb.append(e.ordinal()); - } - sb.append(")"); - - return sb.toString(); - } - - - public void bind(DataBind b, Object value) throws SQLException { - if (value == null){ - b.setNull(Types.INTEGER); - } else { - b.setInt(((Enum)value).ordinal()); - } - } - - public Object read(DataReader dataReader) throws SQLException { - - Integer ordinal = dataReader.getInt(); - if (ordinal == null){ - return null; - } else { - if (ordinal < 0 || ordinal >= enumArray.length){ - String m = "Unexpected ordinal ["+ordinal+"] out of range ["+enumArray.length+"]"; - throw new IllegalStateException(m); - } - return enumArray[ordinal]; - } - } - - /** - * Convert the Enum value to the db value. - */ - public Object toJdbcType(Object beanValue) { - if (beanValue == null) { - return null; - } - return ((Enum)beanValue).ordinal(); - } - - /** - * Convert the db value to the Enum value. - */ - public Object toBeanType(Object dbValue) { - if (dbValue == null || dbValue instanceof Enum) { - return dbValue; - } - - int ordinal = ((Integer)dbValue).intValue(); - if (ordinal < 0 || ordinal >= enumArray.length){ - String m = "Unexpected ordinal ["+ordinal+"] out of range ["+enumArray.length+"]"; - throw new IllegalStateException(m); - } - return enumArray[ordinal]; - } - - } - - @SuppressWarnings({"rawtypes","unchecked"}) - public abstract static class EnumBase extends ScalarTypeBase { - - protected final Class enumType; - - public EnumBase(Class type, boolean jdbcNative, int jdbcType) { - super(type, jdbcNative, jdbcType); - this.enumType = type; - } - - public String format(Object t) { - return ((Enum)t).name(); - } - - public String formatValue(Object t) { - return ((Enum)t).name(); - } - - public Object parse(String value) { - return Enum.valueOf(enumType, value); - } - - public Object parseDateTime(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - public boolean isDateTimeCapable() { - return false; - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - - String val = ctx.getValueAsString(); - return parse(val); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeStringField(name, formatValue(value)); - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - String s = dataInput.readUTF(); - return parse(s); - } - } - - public void writeData(DataOutput dataOutput, Object v) throws IOException { - if (v == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeUTF(format(v)); - } - } - + /** + * Create a ScalarTypeEnum. + */ + public OrdinalEnum(Class enumType) { + super(enumType, false, Types.INTEGER); + this.enumArray = EnumSet.allOf(enumType).toArray(); } + + /** + * Return the IN values for DB constraint construction. + */ + public String getContraintInValues() { + + StringBuilder sb = new StringBuilder(); + + sb.append("("); + for (int i = 0; i < enumArray.length; i++) { + Enum e = (Enum) enumArray[i]; + if (i > 0) { + sb.append(","); + } + sb.append(e.ordinal()); + } + sb.append(")"); + + return sb.toString(); + } + + public void bind(DataBind b, Object value) throws SQLException { + if (value == null) { + b.setNull(Types.INTEGER); + } else { + b.setInt(((Enum) value).ordinal()); + } + } + + public Object read(DataReader dataReader) throws SQLException { + + Integer ordinal = dataReader.getInt(); + if (ordinal == null) { + return null; + } else { + if (ordinal < 0 || ordinal >= enumArray.length) { + String m = "Unexpected ordinal [" + ordinal + "] out of range [" + enumArray.length + "]"; + throw new IllegalStateException(m); + } + return enumArray[ordinal]; + } + } + + /** + * Convert the Enum value to the db value. + */ + public Object toJdbcType(Object beanValue) { + if (beanValue == null) { + return null; + } + return ((Enum) beanValue).ordinal(); + } + + /** + * Convert the db value to the Enum value. + */ + public Object toBeanType(Object dbValue) { + if (dbValue == null || dbValue instanceof Enum) { + return dbValue; + } + + int ordinal = ((Integer) dbValue).intValue(); + if (ordinal < 0 || ordinal >= enumArray.length) { + String m = "Unexpected ordinal [" + ordinal + "] out of range [" + enumArray.length + "]"; + throw new IllegalStateException(m); + } + return enumArray[ordinal]; + } + + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public abstract static class EnumBase extends ScalarTypeBase { + + protected final Class enumType; + + public EnumBase(Class type, boolean jdbcNative, int jdbcType) { + super(type, jdbcNative, jdbcType); + this.enumType = type; + } + + @Override + public String format(Object t) { + return ((Enum) t).name(); + } + + @Override + public String formatValue(Object t) { + return ((Enum) t).name(); + } + + @Override + public Object parse(String value) { + return Enum.valueOf(enumType, value); + } + + @Override + public Object parseDateTime(long systemTimeMillis) { + throw new TextException("Not Supported"); + } + + @Override + public boolean isDateTimeCapable() { + return false; + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return parse(ctx.getValueAsString()); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeStringField(name, formatValue(value)); + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + String s = dataInput.readUTF(); + return parse(s); + } + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + if (v == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeUTF(format(v)); + } + } + + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeFloat.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeFloat.java index d875fef89..7fee93bd7 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeFloat.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeFloat.java @@ -16,81 +16,83 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeFloat extends ScalarTypeBase { - public ScalarTypeFloat() { - super(Float.class, true, Types.REAL); - } - - public void bind(DataBind b, Float value) throws SQLException { - if (value == null){ - b.setNull(Types.REAL); - } else { - b.setFloat(value.floatValue()); - } - } + public ScalarTypeFloat() { + super(Float.class, true, Types.REAL); + } - public Float read(DataReader dataReader) throws SQLException { - - return dataReader.getFloat(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toFloat(value); - } + @Override + public void bind(DataBind b, Float value) throws SQLException { + if (value == null) { + b.setNull(Types.REAL); + } else { + b.setFloat(value.floatValue()); + } + } - public Float toBeanType(Object value) { - return BasicTypeConverter.toFloat(value); - } + @Override + public Float read(DataReader dataReader) throws SQLException { + return dataReader.getFloat(); + } - public String formatValue(Float t) { - return t.toString(); - } - - public Float parse(String value) { - return Float.valueOf(value); - } - - public Float parseDateTime(long systemTimeMillis) { - return Float.valueOf(systemTimeMillis); - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toFloat(value); + } - public boolean isDateTimeCapable() { - return true; - } + @Override + public Float toBeanType(Object value) { + return BasicTypeConverter.toFloat(value); + } - public String toJsonString(Float value) { - if(value.isInfinite() || value.isNaN()) { - return "null"; - } else { - return value.toString(); - } - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - float val = dataInput.readFloat(); - return Float.valueOf(val); - } - } + @Override + public String formatValue(Float t) { + return t.toString(); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Float value = (Float)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeFloat(value.floatValue()); - } + @Override + public Float parse(String value) { + return Float.valueOf(value); + } + + @Override + public Float parseDateTime(long systemTimeMillis) { + return Float.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + float val = dataInput.readFloat(); + return Float.valueOf(val); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getFloatValue(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeNumberField(name, (Float)value); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Float value = (Float) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeFloat(value.floatValue()); } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getFloatValue(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeNumberField(name, (Float) value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInetAddress.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInetAddress.java index 0ee19b086..3b83d3f17 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInetAddress.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInetAddress.java @@ -32,10 +32,12 @@ public class ScalarTypeInetAddress extends ScalarTypeBaseVarchar { return ConvertInetAddresses.toUriString(beanValue); } + @Override public String formatValue(InetAddress v) { return ConvertInetAddresses.toUriString(v); } + @Override public InetAddress parse(String value) { try { return ConvertInetAddresses.forUriString(value); diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInteger.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInteger.java index 4a2f8617f..101e84a6c 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInteger.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeInteger.java @@ -17,60 +17,70 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeInteger extends ScalarTypeBase { - public ScalarTypeInteger() { - super(Integer.class, true, Types.INTEGER); - } - - public void bind(DataBind b, Integer value) throws SQLException { - if (value == null){ - b.setNull(Types.INTEGER); - } else { - b.setInt(value.intValue()); - } - } + public ScalarTypeInteger() { + super(Integer.class, true, Types.INTEGER); + } - public Integer read(DataReader dataReader) throws SQLException { - - return dataReader.getInt(); - } - - public Object readData(DataInput dataInput) throws IOException { - return Integer.valueOf(dataInput.readInt()); + @Override + public void bind(DataBind b, Integer value) throws SQLException { + if (value == null) { + b.setNull(Types.INTEGER); + } else { + b.setInt(value.intValue()); } + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - dataOutput.writeInt((Integer) v); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toInteger(value); - } + @Override + public Integer read(DataReader dataReader) throws SQLException { + return dataReader.getInt(); + } - public Integer toBeanType(Object value) { - return BasicTypeConverter.toInteger(value); - } + @Override + public Object readData(DataInput dataInput) throws IOException { + return Integer.valueOf(dataInput.readInt()); + } - public String formatValue(Integer v) { - return v.toString(); - } + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + dataOutput.writeInt((Integer) v); + } - public Integer parse(String value) { - return Integer.valueOf(value); - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toInteger(value); + } - public Integer parseDateTime(long systemTimeMillis) { - throw new TextException("Not Supported"); - } + @Override + public Integer toBeanType(Object value) { + return BasicTypeConverter.toInteger(value); + } + + @Override + public String formatValue(Integer v) { + return v.toString(); + } + + @Override + public Integer parse(String value) { + return Integer.valueOf(value); + } + + @Override + public Integer parseDateTime(long systemTimeMillis) { + throw new TextException("Not Supported"); + } + + @Override + public boolean isDateTimeCapable() { + return false; + } - public boolean isDateTimeCapable() { - return false; - } - @Override public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { return ctx.getIntValue(); } + @Override public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { ctx.writeNumberField(name, (Integer) value); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java index 6d4b4146d..bc3514f4f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java @@ -12,39 +12,41 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; */ public class ScalarTypeJodaDateMidnight extends ScalarTypeBaseDate { - /** - * Instantiates a new scalar type joda date midnight. - */ - public ScalarTypeJodaDateMidnight() { - super(DateMidnight.class, false, Types.DATE); - } + /** + * Instantiates a new scalar type joda date midnight. + */ + public ScalarTypeJodaDateMidnight() { + super(DateMidnight.class, false, Types.DATE); + } @Override public long convertToMillis(Object value) { return ((DateMidnight) value).getMillis(); } - - @Override - public DateMidnight convertFromDate(Date ts) { - return new DateMidnight(ts.getTime()); - } - @Override - public Date convertToDate(DateMidnight t) { - return new Date(t.getMillis()); - } - - public Object toJdbcType(Object value) { - if (value instanceof DateMidnight){ - return new Date(((DateMidnight)value).getMillis()); - } - return BasicTypeConverter.toDate(value); - } + @Override + public DateMidnight convertFromDate(Date ts) { + return new DateMidnight(ts.getTime()); + } - public DateMidnight toBeanType(Object value) { - if (value instanceof java.util.Date){ - return new DateMidnight(((java.util.Date)value).getTime()); - } - return (DateMidnight)value; - } + @Override + public Date convertToDate(DateMidnight t) { + return new Date(t.getMillis()); + } + + @Override + public Object toJdbcType(Object value) { + if (value instanceof DateMidnight) { + return new Date(((DateMidnight) value).getMillis()); + } + return BasicTypeConverter.toDate(value); + } + + @Override + public DateMidnight toBeanType(Object value) { + if (value instanceof java.util.Date) { + return new DateMidnight(((java.util.Date) value).getTime()); + } + return (DateMidnight) value; + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateTime.java index 807e7f5df..5df0cf9b4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaDateTime.java @@ -12,37 +12,39 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; */ public class ScalarTypeJodaDateTime extends ScalarTypeBaseDateTime { - public ScalarTypeJodaDateTime() { - super(DateTime.class, false, Types.TIMESTAMP); - } - + public ScalarTypeJodaDateTime() { + super(DateTime.class, false, Types.TIMESTAMP); + } + @Override public long convertToMillis(Object value) { return ((DateTime) value).getMillis(); } - - @Override - public DateTime convertFromTimestamp(Timestamp ts) { - return new DateTime(ts.getTime()); - } - @Override - public Timestamp convertToTimestamp(DateTime t) { - return new Timestamp(t.getMillis()); + @Override + public DateTime convertFromTimestamp(Timestamp ts) { + return new DateTime(ts.getTime()); + } + + @Override + public Timestamp convertToTimestamp(DateTime t) { + return new Timestamp(t.getMillis()); + } + + @Override + public Object toJdbcType(Object value) { + if (value instanceof DateTime) { + return new Timestamp(((DateTime) value).getMillis()); } - - public Object toJdbcType(Object value) { - if (value instanceof DateTime){ - return new Timestamp(((DateTime)value).getMillis()); - } - return BasicTypeConverter.toTimestamp(value); - } + return BasicTypeConverter.toTimestamp(value); + } + + @Override + public DateTime toBeanType(Object value) { + if (value instanceof java.util.Date) { + return new DateTime(((java.util.Date) value).getTime()); + } + return (DateTime) value; + } - public DateTime toBeanType(Object value) { - if (value instanceof java.util.Date){ - return new DateTime(((java.util.Date)value).getTime()); - } - return (DateTime)value; - } - } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java index 703905fd9..1fe6822dd 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java @@ -12,41 +12,44 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; */ public class ScalarTypeJodaLocalDate extends ScalarTypeBaseDate { - public ScalarTypeJodaLocalDate() { - super(LocalDate.class, false, Types.DATE); - } - - @Override - public long convertToMillis(Object value) { - return ((LocalDate)value).toDateMidnight().getMillis(); + public ScalarTypeJodaLocalDate() { + super(LocalDate.class, false, Types.DATE); } @Override - public LocalDate convertFromDate(Date ts) { - return new LocalDate(((java.util.Date)ts).getTime()); - } + public long convertToMillis(Object value) { + return ((LocalDate) value).toDateMidnight().getMillis(); + } - @Override - public Date convertToDate(LocalDate t) { - return new java.sql.Date(t.toDateMidnight().getMillis()); + @Override + public LocalDate convertFromDate(Date ts) { + return new LocalDate(((java.util.Date) ts).getTime()); + } + + @Override + public Date convertToDate(LocalDate t) { + return new java.sql.Date(t.toDateMidnight().getMillis()); + } + + @Override + public Object toJdbcType(Object value) { + if (value instanceof LocalDate) { + return new java.sql.Date(((LocalDate) value).toDateMidnight().getMillis()); } - - public Object toJdbcType(Object value) { - if (value instanceof LocalDate){ - return new java.sql.Date(((LocalDate)value).toDateMidnight().getMillis()); - } - return BasicTypeConverter.toDate(value); - } + return BasicTypeConverter.toDate(value); + } + + @Override + public LocalDate toBeanType(Object value) { + if (value instanceof java.util.Date) { + return new LocalDate(((java.util.Date) value).getTime()); + } + return (LocalDate) value; + } + + @Override + public LocalDate parseDateTime(long systemTimeMillis) { + return new LocalDate(systemTimeMillis); + } - public LocalDate toBeanType(Object value) { - if (value instanceof java.util.Date){ - return new LocalDate(((java.util.Date)value).getTime()); - } - return (LocalDate)value; - } - - public LocalDate parseDateTime(long systemTimeMillis) { - return new LocalDate(systemTimeMillis); - } - } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java index 755f6ae51..d139a5da2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java @@ -12,43 +12,44 @@ import com.avaje.ebeaninternal.server.core.BasicTypeConverter; */ public class ScalarTypeJodaLocalDateTime extends ScalarTypeBaseDateTime { - public ScalarTypeJodaLocalDateTime() { - super(LocalDateTime.class, false, Types.TIMESTAMP); - } - - - @Override - public long convertToMillis(Object value) { - return ((LocalDateTime)value).toDateTime().getMillis(); + public ScalarTypeJodaLocalDateTime() { + super(LocalDateTime.class, false, Types.TIMESTAMP); } + @Override + public long convertToMillis(Object value) { + return ((LocalDateTime) value).toDateTime().getMillis(); + } @Override - public LocalDateTime convertFromTimestamp(Timestamp ts) { - return new LocalDateTime(ts.getTime()); + public LocalDateTime convertFromTimestamp(Timestamp ts) { + return new LocalDateTime(ts.getTime()); + } + + @Override + public Timestamp convertToTimestamp(LocalDateTime t) { + return new Timestamp(t.toDateTime().getMillis()); + } + + @Override + public Object toJdbcType(Object value) { + if (value instanceof LocalDateTime) { + return new Timestamp(((LocalDateTime) value).toDateTime().getMillis()); } + return BasicTypeConverter.toTimestamp(value); + } - @Override - public Timestamp convertToTimestamp(LocalDateTime t) { - return new Timestamp(t.toDateTime().getMillis()); + @Override + public LocalDateTime toBeanType(Object value) { + if (value instanceof java.util.Date) { + return new LocalDateTime(((java.util.Date) value).getTime()); } - - public Object toJdbcType(Object value) { - if (value instanceof LocalDateTime){ - return new Timestamp(((LocalDateTime)value).toDateTime().getMillis()); - } - return BasicTypeConverter.toTimestamp(value); - } + return (LocalDateTime) value; + } - public LocalDateTime toBeanType(Object value) { - if (value instanceof java.util.Date){ - return new LocalDateTime(((java.util.Date)value).getTime()); - } - return (LocalDateTime)value; - } - - public LocalDateTime parseDateTime(long systemTimeMillis) { - return new LocalDateTime(systemTimeMillis); - } + @Override + public LocalDateTime parseDateTime(long systemTimeMillis) { + return new LocalDateTime(systemTimeMillis); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java index 15b6aa246..7bd573b79 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeJodaLocalTime.java @@ -20,92 +20,102 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeJodaLocalTime extends ScalarTypeBase { - public ScalarTypeJodaLocalTime() { - super(LocalTime.class, false, Types.TIME); - } - - public void bind(DataBind b, LocalTime value) throws SQLException { - if (value == null){ - b.setNull(Types.TIME); - } else { - Time sqlTime = new Time(value.getMillisOfDay()); - b.setTime(sqlTime); - } - } + public ScalarTypeJodaLocalTime() { + super(LocalTime.class, false, Types.TIME); + } - public LocalTime read(DataReader dataReader) throws SQLException { - - Time sqlTime = dataReader.getTime(); - if (sqlTime == null){ - return null; - } else { - return new LocalTime(sqlTime, DateTimeZone.UTC); - } - } - - public Object toJdbcType(Object value) { - if (value instanceof LocalTime){ - return new Time(((LocalTime)value).getMillisOfDay()); - } - return BasicTypeConverter.toTime(value); - } - - public LocalTime toBeanType(Object value) { - if (value instanceof java.util.Date){ - return new LocalTime(value, DateTimeZone.UTC); - } - return (LocalTime)value; - } - - public String formatValue(LocalTime v) { - return v.toString(); + @Override + public void bind(DataBind b, LocalTime value) throws SQLException { + if (value == null) { + b.setNull(Types.TIME); + } else { + Time sqlTime = new Time(value.getMillisOfDay()); + b.setTime(sqlTime); } + } + + @Override + public LocalTime read(DataReader dataReader) throws SQLException { + + Time sqlTime = dataReader.getTime(); + if (sqlTime == null) { + return null; + } else { + return new LocalTime(sqlTime, DateTimeZone.UTC); + } + } + + @Override + public Object toJdbcType(Object value) { + if (value instanceof LocalTime) { + return new Time(((LocalTime) value).getMillisOfDay()); + } + return BasicTypeConverter.toTime(value); + } + + @Override + public LocalTime toBeanType(Object value) { + if (value instanceof java.util.Date) { + return new LocalTime(value, DateTimeZone.UTC); + } + return (LocalTime) value; + } + + @Override + public String formatValue(LocalTime v) { + return v.toString(); + } + + @Override + public LocalTime parse(String value) { + return new LocalTime(value); + } - public LocalTime parse(String value) { - return new LocalTime(value); - } - @Override public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { ctx.writeStringField(name, value.toString()); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - if (JsonToken.VALUE_NUMBER_INT == event) { - long millis = ctx.getLongValue(); - return parseDateTime(millis); - } else { - String string = ctx.getValueAsString(); - throw new RuntimeException("convert "+string); - } - } + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + if (JsonToken.VALUE_NUMBER_INT == event) { + long millis = ctx.getLongValue(); + return parseDateTime(millis); + } else { + String string = ctx.getValueAsString(); + throw new RuntimeException("convert " + string); + } + } + + @Override public LocalTime parseDateTime(long systemTimeMillis) { - return new LocalTime(systemTimeMillis); - } + return new LocalTime(systemTimeMillis); + } - public boolean isDateTimeCapable() { - return true; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - String val = dataInput.readUTF(); - return parse(val); - } - } + @Override + public boolean isDateTimeCapable() { + return true; + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Time value = (Time)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeUTF(format(value)); - } + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + String val = dataInput.readUTF(); + return parse(val); } + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Time value = (Time) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeUTF(format(value)); + } + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocale.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocale.java index 0c6d90e10..26c04c70d 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocale.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLocale.java @@ -3,62 +3,63 @@ package com.avaje.ebeaninternal.server.type; import java.util.Locale; /** - * ScalarType for java.util.Currency which converts to and from a VARCHAR - * database column. + * ScalarType for java.util.Currency which converts to and from a VARCHAR database column. */ public class ScalarTypeLocale extends ScalarTypeBaseVarchar { - public ScalarTypeLocale() { - super(Locale.class); - } + public ScalarTypeLocale() { + super(Locale.class); + } - @Override - public int getLength() { - return 20; - } - - @Override - public Locale convertFromDbString(String dbValue) { - return parse(dbValue); - } + @Override + public int getLength() { + return 20; + } - @Override - public String convertToDbString(Locale beanValue) { - return ((Locale) beanValue).toString(); - } + @Override + public Locale convertFromDbString(String dbValue) { + return parse(dbValue); + } - public String formatValue(Locale t) { - return t.toString(); - } + @Override + public String convertToDbString(Locale beanValue) { + return ((Locale) beanValue).toString(); + } - public Locale parse(String value) { + @Override + public String formatValue(Locale t) { + return t.toString(); + } - int pos1 = -1; - int pos2 = -1; + @Override + public Locale parse(String value) { - for (int i = 0; i < value.length(); i++) { - char c = value.charAt(i); - if (c == '_') { - if (pos1 > -1) { - pos2 = i; - break; - } else { - pos1 = i; - } - } - } - if (pos1 == -1) { - return new Locale(value); - } - String language = value.substring(0, pos1); - if (pos2 == -1) { - String country = value.substring(pos1 + 1); - return new Locale(language, country); + int pos1 = -1; + int pos2 = -1; + + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + if (c == '_') { + if (pos1 > -1) { + pos2 = i; + break; } else { - String country = value.substring(pos1 + 1, pos2); - String variant = value.substring(pos2 + 1); - return new Locale(language, country, variant); + pos1 = i; } + } } + if (pos1 == -1) { + return new Locale(value); + } + String language = value.substring(0, pos1); + if (pos2 == -1) { + String country = value.substring(pos1 + 1); + return new Locale(language, country); + } else { + String country = value.substring(pos1 + 1, pos2); + String variant = value.substring(pos2 + 1); + return new Locale(language, country, variant); + } + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLong.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLong.java index 2088d559f..1427553b4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLong.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLong.java @@ -16,73 +16,83 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeLong extends ScalarTypeBase { - public ScalarTypeLong() { - super(Long.class, true, Types.BIGINT); - } - - public void bind(DataBind b, Long value) throws SQLException { - if (value == null){ - b.setNull(Types.BIGINT); - } else { - b.setLong(value.longValue()); - } - } - - public Long read(DataReader dataReader) throws SQLException { - - return dataReader.getLong(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toLong(value); - } + public ScalarTypeLong() { + super(Long.class, true, Types.BIGINT); + } - public Long toBeanType(Object value) { - return BasicTypeConverter.toLong(value); - } - - public String formatValue(Long t) { - return t.toString(); + @Override + public void bind(DataBind b, Long value) throws SQLException { + if (value == null) { + b.setNull(Types.BIGINT); + } else { + b.setLong(value.longValue()); } + } - public Long parse(String value) { - return Long.valueOf(value); - } - - public Long parseDateTime(long systemTimeMillis) { - return Long.valueOf(systemTimeMillis); - } + @Override + public Long read(DataReader dataReader) throws SQLException { + return dataReader.getLong(); + } - public boolean isDateTimeCapable() { - return true; - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toLong(value); + } - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - long val = dataInput.readLong(); - return Long.valueOf(val); - } - } + @Override + public Long toBeanType(Object value) { + return BasicTypeConverter.toLong(value); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Long value = (Long)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeLong(value.longValue()); - } + @Override + public String formatValue(Long t) { + return t.toString(); + } + + @Override + public Long parse(String value) { + return Long.valueOf(value); + } + + @Override + public Long parseDateTime(long systemTimeMillis) { + return Long.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + long val = dataInput.readLong(); + return Long.valueOf(val); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getLongValue(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeNumberField(name, (Long)value); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Long value = (Long) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeLong(value.longValue()); } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getLongValue(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeNumberField(name, (Long) value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLongVarchar.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLongVarchar.java index be0462095..cfcecb7bc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLongVarchar.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeLongVarchar.java @@ -8,13 +8,12 @@ import java.sql.Types; */ public class ScalarTypeLongVarchar extends ScalarTypeClob { - public ScalarTypeLongVarchar() { - super(true, Types.LONGVARCHAR); - } + public ScalarTypeLongVarchar() { + super(true, Types.LONGVARCHAR); + } - @Override - public String read(DataReader dataReader) throws SQLException { - - return dataReader.getStringFromStream(); - } + @Override + public String read(DataReader dataReader) throws SQLException { + return dataReader.getStringFromStream(); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeMathBigInteger.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeMathBigInteger.java index 6cb53f831..1ea865e7a 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeMathBigInteger.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeMathBigInteger.java @@ -17,79 +17,89 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeMathBigInteger extends ScalarTypeBase { - public ScalarTypeMathBigInteger() { - super(BigInteger.class, false, Types.BIGINT); - } - - public void bind(DataBind b, BigInteger value) throws SQLException { - if (value == null){ - b.setNull(Types.BIGINT); - } else { - b.setLong(value.longValue()); - } - } + public ScalarTypeMathBigInteger() { + super(BigInteger.class, false, Types.BIGINT); + } - public BigInteger read(DataReader dataReader) throws SQLException { - - Long l = dataReader.getLong(); - if (l == null){ - return null; - } - return new BigInteger(String.valueOf(l)); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toLong(value); - } - - public BigInteger toBeanType(Object value) { - return BasicTypeConverter.toMathBigInteger(value); - } - - - public String formatValue(BigInteger v) { - return v.toString(); + @Override + public void bind(DataBind b, BigInteger value) throws SQLException { + if (value == null) { + b.setNull(Types.BIGINT); + } else { + b.setLong(value.longValue()); } + } - public BigInteger parse(String value) { - return new BigInteger(value); - } + @Override + public BigInteger read(DataReader dataReader) throws SQLException { - public BigInteger parseDateTime(long systemTimeMillis) { - return BigInteger.valueOf(systemTimeMillis); - } - - public boolean isDateTimeCapable() { - return true; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - long val = dataInput.readLong(); - return Long.valueOf(val); - } + Long l = dataReader.getLong(); + if (l == null) { + return null; } + return new BigInteger(String.valueOf(l)); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Long value = (Long)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeLong(value.longValue()); - } - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toLong(value); + } - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getDecimalValue().toBigInteger(); + @Override + public BigInteger toBeanType(Object value) { + return BasicTypeConverter.toMathBigInteger(value); + } + + @Override + public String formatValue(BigInteger v) { + return v.toString(); + } + + @Override + public BigInteger parse(String value) { + return new BigInteger(value); + } + + @Override + public BigInteger parseDateTime(long systemTimeMillis) { + return BigInteger.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + long val = dataInput.readLong(); + return Long.valueOf(val); } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeNumberField(name, ((BigInteger)value).longValue()); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Long value = (Long) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeLong(value.longValue()); } - + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getDecimalValue().toBigInteger(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeNumberField(name, ((BigInteger) value).longValue()); + } + } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypePostgresHstore.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypePostgresHstore.java index 46746acfa..8023a56db 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypePostgresHstore.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypePostgresHstore.java @@ -7,6 +7,8 @@ import java.sql.SQLException; import java.util.Map; import com.avaje.ebean.config.dbplatform.PostgresPlatform; +import com.avaje.ebean.json.EJson; +import com.avaje.ebean.text.TextException; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; @@ -66,28 +68,23 @@ public class ScalarTypePostgresHstore extends ScalarTypeBase { public Map toBeanType(Object value) { return (Map)value; } - - @Override - public void jsonWrite(JsonGenerator ctx, String name, Object value) { - // TODO Auto-generated method stub - } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) { - // TODO Auto-generated method stub - return null; - } @Override public String formatValue(Map v) { - // TODO format as json - return null; + try { + return EJson.write(v); + } catch (IOException e) { + throw new TextException(e); + } } @Override public Map parse(String value) { - // TODO parse json into map - return null; + try { + return EJson.parseObject(value); + } catch (IOException e) { + throw new TextException(e); + } } @Override @@ -102,13 +99,24 @@ public class ScalarTypePostgresHstore extends ScalarTypeBase { @Override public Object readData(DataInput dataInput) throws IOException { - return null; + String json = dataInput.readUTF(); + return parse(json); } @Override public void writeData(DataOutput dataOutput, Object v) throws IOException { - + String json = format(v); + dataOutput.writeUTF(json); } + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + EJson.write(value, ctx); + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return EJson.parseObject(ctx); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeShort.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeShort.java index 89a7437e2..6d6245897 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeShort.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeShort.java @@ -17,73 +17,83 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeShort extends ScalarTypeBase { - public ScalarTypeShort() { - super(Short.class, true, Types.SMALLINT); - } - - public void bind(DataBind b, Short value) throws SQLException { - if (value == null){ - b.setNull(Types.SMALLINT); - } else { - b.setShort(value.shortValue()); - } - } + public ScalarTypeShort() { + super(Short.class, true, Types.SMALLINT); + } - public Short read(DataReader dataReader) throws SQLException { - - return dataReader.getShort(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toShort(value); - } - - public Short toBeanType(Object value) { - return BasicTypeConverter.toShort(value); - } - - public String formatValue(Short v) { - return v.toString(); + @Override + public void bind(DataBind b, Short value) throws SQLException { + if (value == null) { + b.setNull(Types.SMALLINT); + } else { + b.setShort(value.shortValue()); } + } - public Short parse(String value) { - return Short.valueOf(value); - } + @Override + public Short read(DataReader dataReader) throws SQLException { + return dataReader.getShort(); + } - public Short parseDateTime(long systemTimeMillis) { - throw new TextException("Not Supported"); - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toShort(value); + } - public boolean isDateTimeCapable() { - return false; - } - - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - short val = dataInput.readShort(); - return Short.valueOf(val); - } - } + @Override + public Short toBeanType(Object value) { + return BasicTypeConverter.toShort(value); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - Short value = (Short)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeShort(value.shortValue()); - } + @Override + public String formatValue(Short v) { + return v.toString(); + } + + @Override + public Short parse(String value) { + return Short.valueOf(value); + } + + @Override + public Short parseDateTime(long systemTimeMillis) { + throw new TextException("Not Supported"); + } + + @Override + public boolean isDateTimeCapable() { + return false; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + short val = dataInput.readShort(); + return Short.valueOf(val); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getShortValue(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeNumberField(name, (Short)value); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + Short value = (Short) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeShort(value.shortValue()); } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getShortValue(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeNumberField(name, (Short) value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeString.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeString.java index 236994692..a66153e74 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeString.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeString.java @@ -16,72 +16,82 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeString extends ScalarTypeBase { - public ScalarTypeString() { - super(String.class, true, Types.VARCHAR); - } - - public void bind(DataBind b, String value) throws SQLException { - if (value == null){ - b.setNull(Types.VARCHAR); - } else { - b.setString(value); - } - } + public ScalarTypeString() { + super(String.class, true, Types.VARCHAR); + } - public String read(DataReader dataReader) throws SQLException { - - return dataReader.getString(); - } - - public Object toJdbcType(Object value) { - return BasicTypeConverter.toString(value); - } - - public String toBeanType(Object value) { - return BasicTypeConverter.toString(value); - } - - public String formatValue(String t) { - return t; + @Override + public void bind(DataBind b, String value) throws SQLException { + if (value == null) { + b.setNull(Types.VARCHAR); + } else { + b.setString(value); } + } - public String parse(String value) { - return value; - } - - public String parseDateTime(long systemTimeMillis) { - return String.valueOf(systemTimeMillis); - } + @Override + public String read(DataReader dataReader) throws SQLException { + return dataReader.getString(); + } - public boolean isDateTimeCapable() { - return true; - } + @Override + public Object toJdbcType(Object value) { + return BasicTypeConverter.toString(value); + } - public Object readData(DataInput dataInput) throws IOException { - if (!dataInput.readBoolean()) { - return null; - } else { - return dataInput.readUTF(); - } - } + @Override + public String toBeanType(Object value) { + return BasicTypeConverter.toString(value); + } - public void writeData(DataOutput dataOutput, Object v) throws IOException { - - String value = (String)v; - if (value == null){ - dataOutput.writeBoolean(false); - } else { - dataOutput.writeBoolean(true); - dataOutput.writeUTF(value); - } + @Override + public String formatValue(String t) { + return t; + } + + @Override + public String parse(String value) { + return value; + } + + @Override + public String parseDateTime(long systemTimeMillis) { + return String.valueOf(systemTimeMillis); + } + + @Override + public boolean isDateTimeCapable() { + return true; + } + + @Override + public Object readData(DataInput dataInput) throws IOException { + if (!dataInput.readBoolean()) { + return null; + } else { + return dataInput.readUTF(); } - - @Override - public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { - return ctx.getValueAsString(); - } - - public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { - ctx.writeStringField(name, (String)value); + } + + @Override + public void writeData(DataOutput dataOutput, Object v) throws IOException { + + String value = (String) v; + if (value == null) { + dataOutput.writeBoolean(false); + } else { + dataOutput.writeBoolean(true); + dataOutput.writeUTF(value); } + } + + @Override + public Object jsonRead(JsonParser ctx, JsonToken event) throws IOException { + return ctx.getValueAsString(); + } + + @Override + public void jsonWrite(JsonGenerator ctx, String name, Object value) throws IOException { + ctx.writeStringField(name, (String) value); + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeTime.java b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeTime.java index 2776a91f4..5568ff179 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeTime.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/ScalarTypeTime.java @@ -17,67 +17,75 @@ import com.fasterxml.jackson.core.JsonToken; */ public class ScalarTypeTime extends ScalarTypeBase