From 6d4c6960e69b53c124bd84beb3d008bd5a4bb319 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 4 Aug 2013 18:50:18 +0200 Subject: wip o Adding Joda time's DateTime and UUID. o Registering @SequenceGenerator's on fields and getters. o Skipping static methods. o Generating SQL to drop sequences. --- .../java/io/trygvis/persistence/EntityMirror.java | 11 +++++--- .../persistence/GeneratorConfiguration.java | 2 ++ .../io/trygvis/persistence/SequenceMirror.java | 30 ++++++++++++++++++-- .../java/io/trygvis/persistence/TypeHandler.java | 32 ++++++++++++++++++++++ 4 files changed, 69 insertions(+), 6 deletions(-) (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence') diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java index f1970f7..f0f4ae7 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java @@ -111,7 +111,7 @@ public class EntityMirror implements Comparable { for (FieldMirror field : fields) { columns.add(field.sqlName); if (field.id) { - values.add("nextval('" + unit.getDefaultSequence().name + "')"); + values.add("nextval('" + unit.getDefaultSequence().sequenceName + "')"); } else { values.add("?"); } @@ -162,7 +162,12 @@ public class EntityMirror implements Comparable { if (field.fieldType == PRIMITIVE) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); - String access = o.name + "." + field.javaName; + String access; + if (field.accessorType == FIELD) { + access = o.name + "." + field.javaName; + } else { + access = o.name + "." + toGetterName(field.javaName) + "()"; + } String setter = " stmt." + typeHandler.setter(i, access) + ";"; if (field.notNull) { @@ -283,7 +288,6 @@ public class EntityMirror implements Comparable { body.add(field.type + " " + field.javaName + " = null;"); } names.add(field.javaName); - i++; } body.add(type + " returnValue = new " + type + "(" + join(names, ", ") + ");"); @@ -305,7 +309,6 @@ public class EntityMirror implements Comparable { body.add("returnValue." + toSetterName(field.javaName) + "(" + null + ");"); } names.add(field.javaName); - i++; } body.add("return returnValue;"); diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/GeneratorConfiguration.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/GeneratorConfiguration.java index 37d8146..9df6c35 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/GeneratorConfiguration.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/GeneratorConfiguration.java @@ -17,6 +17,8 @@ public class GeneratorConfiguration { typeHandlers.put(new TypeRef(Long.class), new TypeHandler.LongTypeHandler()); typeHandlers.put(new TypeRef(String.class), new TypeHandler.StringTypeHandler()); typeHandlers.put(new TypeRef(Date.class), new TypeHandler.DateTypeHandler()); + typeHandlers.put(new TypeRef("org.joda.time.DateTime"), new TypeHandler.JodaDateTimeTypeHandler()); + typeHandlers.put(new TypeRef("java.util.UUID"), new TypeHandler.UuidTypeHandler()); primitiveTypeHandlers.putAll(typeHandlers); } diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/SequenceMirror.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/SequenceMirror.java index 9ae6781..6a9da6c 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/SequenceMirror.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/SequenceMirror.java @@ -1,9 +1,35 @@ package io.trygvis.persistence; -public class SequenceMirror { +public class SequenceMirror implements Comparable { public final String name; + public final String sequenceName; + public final int initialValue; + public final int allocationSize; - public SequenceMirror(String name) { + public SequenceMirror(String name, String sequenceName, int initialValue, int allocationSize) { this.name = name; + this.sequenceName = sequenceName; + this.initialValue = initialValue == 0 ? 10000 : initialValue; + this.allocationSize = allocationSize == 0 ? 1000 : allocationSize; + } + + @Override + public int compareTo(@SuppressWarnings("NullableProblems") SequenceMirror o) { + return name.compareTo(o.name); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SequenceMirror)) return false; + + SequenceMirror that = (SequenceMirror) o; + + return name.equals(that.name); + } + + @Override + public int hashCode() { + return name.hashCode(); } } 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 72941f2..31eba4b 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 @@ -116,4 +116,36 @@ public abstract class TypeHandler { return "new java.util.Date(" + rs + ".getTimestamp(" + i + ").getTime())"; } } + + public static class JodaDateTimeTypeHandler extends TypeHandler { + protected JodaDateTimeTypeHandler() { + super("TIMESTAMP", TIMESTAMP); + } + + @Override + public String setter(int i, String expr) { + return "setTimestamp(" + i + ", new java.sql.Timestamp(" + expr + ".getTime()))"; + } + + @Override + public String getter(String rs, int i) { + return "new org.joda.time.DateTime(" + rs + ".getTimestamp(" + i + ").getTime())"; + } + } + + public static class UuidTypeHandler extends TypeHandler { + protected UuidTypeHandler() { + super("CHAR(36)", CHAR); + } + + @Override + public String setter(int i, String expr) { + return "setString(" + i + ", " + expr + ".toString())"; + } + + @Override + public String getter(String rs, int i) { + return "java.util.UUID.fromString(" + rs + ".getString(" + i + "))"; + } + } } -- cgit v1.2.3