diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java')
-rw-r--r-- | container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java | 84 |
1 files changed, 63 insertions, 21 deletions
diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java index 0454a96..72941f2 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java @@ -1,13 +1,58 @@ package io.trygvis.persistence; -public interface TypeHandler { - String setter(int i, String expr); +import io.trygvis.container.compiler.InternalErrorException; - String getter(String rs, int i); +import java.lang.reflect.Field; +import java.sql.Types; - String sqlType(FieldMirror field); +import static java.sql.Types.*; + +public abstract class TypeHandler { + private final String sqlType; + private final int type; + + protected TypeHandler(String sqlType, int type) { + this.sqlType = sqlType; + this.type = type; + } + + abstract String setter(int i, String expr); + + abstract String getter(String rs, int i); + + public String sqlType(FieldMirror field) { + return sqlType; + } + + public int type() { + return type; + } + + public final String typeName() { + try { + int type = type(); + for (Field field : Types.class.getFields()) { + Object o = field.get(null); + if (o != null && o instanceof Integer && o.equals(type)) { + return field.getName(); + } + } + } catch (IllegalAccessException e) { + throw new InternalErrorException(e); + } + + throw new InternalErrorException("Unknown java.sql.Types: " + type); + } + + // ----------------------------------------------------------------------- + // + // ----------------------------------------------------------------------- + + public static class IntTypeHandler extends TypeHandler { + public IntTypeHandler() { + super("INTEGER", INTEGER); + } - public static class IntTypeHandler implements TypeHandler { @Override public String setter(int i, String expr) { return "setInt(" + i + ", " + expr + ")"; @@ -17,14 +62,13 @@ public interface TypeHandler { public String getter(String rs, int i) { return rs + ".getInt(" + i + ")"; } + } - @Override - public String sqlType(FieldMirror field) { - return "INTEGER"; + public static class LongTypeHandler extends TypeHandler { + protected LongTypeHandler() { + super("BIGINT", BIGINT); } - } - public static class LongTypeHandler implements TypeHandler { @Override public String setter(int i, String expr) { return "setLong(" + i + ", " + expr + ")"; @@ -34,14 +78,13 @@ public interface TypeHandler { public String getter(String rs, int i) { return rs + ".getLong(" + i + ")"; } + } - @Override - public String sqlType(FieldMirror field) { - return "BIGINT"; + public static class StringTypeHandler extends TypeHandler { + protected StringTypeHandler() { + super(null, VARCHAR); } - } - public static class StringTypeHandler implements TypeHandler { @Override public String setter(int i, String expr) { return "setString(" + i + ", " + expr + ")"; @@ -58,7 +101,11 @@ public interface TypeHandler { } } - public static class DateTypeHandler implements TypeHandler { + public static class DateTypeHandler extends TypeHandler { + protected DateTypeHandler() { + super("TIMESTAMP", TIMESTAMP); + } + @Override public String setter(int i, String expr) { return "setTimestamp(" + i + ", new java.sql.Timestamp(" + expr + ".getTime()))"; @@ -68,10 +115,5 @@ public interface TypeHandler { public String getter(String rs, int i) { return "new java.util.Date(" + rs + ".getTimestamp(" + i + ").getTime())"; } - - @Override - public String sqlType(FieldMirror field) { - return "TIMESTAMP"; - } } } |