summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2013-08-04 10:24:43 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2013-08-04 10:48:16 +0200
commitc0c9c358e8703c1af917d7270adbb04160ad34b3 (patch)
tree3d033cb87f8305f7d75812f869455fcedb8d5c11 /container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java
parent2b1c32590db960be2b5f62897e65bb10d434cae0 (diff)
downloadcontainer-playground-c0c9c358e8703c1af917d7270adbb04160ad34b3.tar.gz
container-playground-c0c9c358e8703c1af917d7270adbb04160ad34b3.tar.bz2
container-playground-c0c9c358e8703c1af917d7270adbb04160ad34b3.tar.xz
container-playground-c0c9c358e8703c1af917d7270adbb04160ad34b3.zip
wip
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.java84
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";
- }
}
}