diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java
index 6c01811c5..af3e73493 100644
--- a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java
+++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java
@@ -16,25 +16,24 @@ import java.sql.SQLException;
*
* Scalar in the sense that the types are not compound types. Scalar types only
* map to a single database column.
- *
*
* These types fall into two categories. Types that are mapped natively to JDBC
* types and the rest. Types that map to native JDBC types do not require any
* data type conversion to be persisted to the database. These are java types
* that map via java.sql.Types.
- *
*
* Types that are not native to JDBC require some conversion. These include some
* common java types such as java.util.Date, java.util.Calendar,
* java.math.BigInteger.
- *
*
* Note that Booleans may be native for some databases and require conversion on
* other databases.
- *
*/
public interface ScalarType extends StringParser, StringFormatter, ScalarDataReader {
+ /**
+ * Return true for types that do mutation detection based on json content.
+ */
default boolean isJsonMapper() {
return false;
}
@@ -43,38 +42,40 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
* Return true if this is a binary type and can not support parse() and format() from/to string.
* This allows Ebean to optimise marshalling types to string.
*/
- boolean isBinaryType();
+ default boolean isBinaryType() {
+ return false;
+ }
/**
* Return true if this is a mutable scalar type (like hstore).
*/
- boolean isMutable();
+ default boolean isMutable() {
+ return false;
+ }
/**
* For mutable scalarType's return true if the value is dirty.
* Non-dirty properties may be excluded from updates.
*/
- boolean isDirty(Object value);
+ default boolean isDirty(Object value) {
+ return false;
+ }
/**
* Return the default DB column length for this type.
*
* If a BeanProperty has no explicit length defined then this length should
* be assigned.
- *
- *
- * This is primarily to support defining a length on Enum types (to
- * supplement defining the length on the BeanProperty directly).
- *
*/
- int getLength();
+ default int getLength() {
+ return 0;
+ }
/**
* Return true if the type is native to JDBC.
*
* If it is native to JDBC then its values/instances do not need to be
* converted to and from an associated JDBC type.
- *
*/
boolean isJdbcNative();
@@ -83,16 +84,13 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
*
* This type should be consistent with the toJdbcType() method in converting
* the type to the appropriate type for binding to preparedStatements.
- *
*/
int getJdbcType();
/**
* Return the type that matches the bean property type.
*
- * This represents the 'logical' type rather than the JDBC type this maps
- * to.
- *
+ * This represents the 'logical' type rather than the JDBC type this maps to.
*/
Class getType();
@@ -104,7 +102,7 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
T read(DataReader reader) throws SQLException;
/**
- * Ignore the reading of this value. Typically this means moving the index
+ * Ignore the reading of this value. Typically, this means moving the index
* position in the ResultSet.
*/
void loadIgnore(DataReader reader);
@@ -114,20 +112,16 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
*
* value may need to be converted from the logical bean property type to the
* JDBC type.
- *
*/
void bind(DataBinder binder, T value) throws SQLException;
/**
* Convert the value as necessary to the JDBC type.
*
- * Note that this should also match the type as per the getJdbcType()
- * method.
- *
+ * Note that this should also match the type as per the getJdbcType() method.
*
* This is typically used when the matching type is used in a where clause
* and we use this to ensure it is an appropriate jdbc type.
- *
*/
Object toJdbcType(Object value);
@@ -135,19 +129,14 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
* Convert the value as necessary to the logical Bean type.
*
* The type as per the bean property.
- *
*
* This is used to automatically convert id values (typically from a string
* to a int, long or UUID).
- *
*/
T toBeanType(Object value);
/**
* Convert the type into a string representation.
- *
- * Reciprocal of parse().
- *
*/
String formatValue(T value);
@@ -155,10 +144,8 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
* Convert the type into a string representation.
*
* This assumes the value is of the correct type.
- *
*
* This is so that ScalarType also implements the StringFormatter interface.
- *
*/
@Override
String format(Object value);
@@ -167,10 +154,6 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
* Convert the string value to the appropriate java object.
*
* Mostly used to support CSV, JSON and XML parsing.
- *
- *
- * Reciprocal of formatValue().
- *
*/
@Override
T parse(String value);
@@ -183,29 +166,32 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
/**
* Return true if the type can accept long systemTimeMillis input.
*
- * This is used to determine if is is sensible to use the
+ * This is used to determine if it is sensible to use the
* {@link #convertFromMillis(long)} method.
- *
*
* This includes the Date, Calendar, sql Date, Time, Timestamp, JODA types
* as well as Long, BigDecimal and String (although it generally is not
* expected to parse systemTimeMillis to a String or BigDecimal).
- *
*/
- boolean isDateTimeCapable();
+ default boolean isDateTimeCapable() {
+ return false;
+ }
/**
* Convert the value into a long version value.
*/
- long asVersion(T value);
+ default long asVersion(T value) {
+ throw new UnsupportedOperationException();
+ }
/**
* Convert the systemTimeMillis into the appropriate java object.
*
* For non dateTime types this will throw an exception.
- *
*/
- T convertFromMillis(long dateTime);
+ default T convertFromMillis(long dateTime) {
+ throw new UnsupportedOperationException();
+ }
/**
* Read the value from binary input.
@@ -215,7 +201,7 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData
/**
* Write the value to binary output.
*/
- void writeData(DataOutput dataOutput, T v) throws IOException;
+ void writeData(DataOutput dataOutput, T value) throws IOException;
/**
* Read the value from JsonParser.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java
index 5d2bb45e9..93ab0a6a6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java
@@ -18,41 +18,6 @@ abstract class ScalarTypeBase implements ScalarType {
this.jdbcType = jdbcType;
}
- @Override
- public long asVersion(T value) {
- throw new RuntimeException("not supported");
- }
-
- @Override
- public boolean isBinaryType() {
- // override for binary/byte based types
- return false;
- }
-
- /**
- * Default implementation of mutable false.
- */
- @Override
- public boolean isMutable() {
- return false;
- }
-
- /**
- * Default to true.
- */
- @Override
- public boolean isDirty(Object value) {
- return true;
- }
-
- /**
- * Just return 0.
- */
- @Override
- public int getLength() {
- return 0;
- }
-
@Override
public boolean isJdbcNative() {
return jdbcNative;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java
index 7fd7d974e..75eaa17b5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java
@@ -88,16 +88,6 @@ abstract class ScalarTypeBaseVarchar extends ScalarTypeBase {
return format(value);
}
- @Override
- public T convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not Supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
@SuppressWarnings("unchecked")
public String format(Object value) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java
index 56bc180a9..848b0fc2a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java
@@ -234,7 +234,6 @@ public final class ScalarTypeBoolean {
@Override
public int getLength() {
- // typically this will return 1
return Math.max(trueValue.length(), falseValue.length());
}
@@ -329,16 +328,6 @@ public final class ScalarTypeBoolean {
return Boolean.valueOf(value);
}
- @Override
- public Boolean convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not Supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public Boolean readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java
index 250bb1006..5437ecb77 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java
@@ -85,16 +85,6 @@ final class ScalarTypeByte extends ScalarTypeBase {
throw new TextException("Not supported");
}
- @Override
- public Byte convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not Supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public Byte readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java
index 437c626f8..51f811ede 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java
@@ -59,16 +59,6 @@ public abstract class ScalarTypeBytesBase extends ScalarTypeBase {
throw new TextException("Not supported");
}
- @Override
- public byte[] convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public byte[] readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java
index df8b32ba9..ec753b307 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java
@@ -26,26 +26,11 @@ public final class ScalarTypeBytesEncrypted implements ScalarType {
this.dataEncryptSupport = dataEncryptSupport;
}
- @Override
- public long asVersion(byte[] value) {
- throw new RuntimeException("not supported");
- }
-
@Override
public boolean isBinaryType() {
return true;
}
- @Override
- public boolean isMutable() {
- return false;
- }
-
- @Override
- public boolean isDirty(Object value) {
- return false;
- }
-
@Override
public void bind(DataBinder binder, byte[] value) throws SQLException {
value = dataEncryptSupport.encrypt(value);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java
index 8e34afe27..5daff6f4c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java
@@ -93,16 +93,6 @@ class ScalarTypeDuration extends ScalarTypeBase {
return Duration.parse(value);
}
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
- @Override
- public Duration convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not Supported");
- }
-
@Override
public Duration jsonRead(JsonParser parser) throws IOException {
return Duration.parse(parser.getValueAsString());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java
index 1a552d11a..392fc1b86 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java
@@ -30,11 +30,6 @@ public final class ScalarTypeEncryptedWrapper implements ScalarType, Local
return dataEncryptSupport.encryptObject(formatValue);
}
- @Override
- public long asVersion(T value) {
- throw new RuntimeException("not supported");
- }
-
@Override
public boolean isBinaryType() {
return wrapped.isBinaryType();
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java
index 969bfd016..d33b06af4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java
@@ -229,16 +229,6 @@ final class ScalarTypeEnumStandard {
return Enum.valueOf(enumType, value);
}
- @Override
- public Object convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not Supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public Object jsonRead(JsonParser parser) throws IOException {
if (parser.getCodec() != null) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java
index cafee64f7..287c11f60 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java
@@ -39,16 +39,6 @@ class ScalarTypeEnumWithMapping extends ScalarTypeEnumStandard.EnumBase implemen
return enumType == null;
}
- @Override
- public long asVersion(Object value) {
- throw new RuntimeException("not supported");
- }
-
- @Override
- public boolean isBinaryType() {
- return false;
- }
-
/**
* Return the IN values for DB constraint construction.
*/
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java
index d5f500d78..be712b659 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java
@@ -129,16 +129,6 @@ final class ScalarTypeFile extends ScalarTypeBase {
throw new TextException("Not supported");
}
- @Override
- public File convertFromMillis(long systemTimeMillis) {
- throw new TextException("Not supported");
- }
-
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
@Override
public File readData(DataInput dataInput) throws IOException {
// skip reading large file
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java
index e40e1a9ae..e78f6b02d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java
@@ -80,16 +80,6 @@ abstract class ScalarTypeJsonCollection extends ScalarTypeBase implements
return docPropertyType;
}
- @Override
- public boolean isDateTimeCapable() {
- return false;
- }
-
- @Override
- public T convertFromMillis(long dateTime) {
- return null;
- }
-
@Override
public T readData(DataInput dataInput) throws IOException {
if (!dataInput.readBoolean()) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java
index b5942289e..96030c23f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java
@@ -215,16 +215,6 @@ abstract class ScalarTypeJsonMap extends ScalarTypeBase