summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/persistence/TypeHandler.java
diff options
context:
space:
mode:
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";
- }
}
}