diff options
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java')
-rw-r--r-- | container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java | 60 |
1 files changed, 46 insertions, 14 deletions
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 48f8adc..f1970f7 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 @@ -18,9 +18,13 @@ import java.sql.Types; import java.util.ArrayList; import java.util.List; +import static io.trygvis.container.compiler.Utils.toGetterName; +import static io.trygvis.container.compiler.Utils.toSetterName; import static io.trygvis.container.compiler.model.Parameters.ParameterRef; -import static io.trygvis.persistence.FieldMirror.PrimitiveFieldMirror; -import static io.trygvis.persistence.FieldMirror.ReferenceFieldMirror; +import static io.trygvis.persistence.FieldMirror.AccessorType.FIELD; +import static io.trygvis.persistence.FieldMirror.AccessorType.METHOD; +import static io.trygvis.persistence.FieldMirror.FieldType.PRIMITIVE; +import static io.trygvis.persistence.FieldMirror.FieldType.REFERENCE; import static java.lang.String.format; import static java.lang.reflect.Modifier.PUBLIC; import static java.lang.reflect.Modifier.STATIC; @@ -61,7 +65,7 @@ public class EntityMirror implements Comparable<EntityMirror> { List<String> columns = new ArrayList<>(); for (FieldMirror field : fields) { String s; - if (field instanceof PrimitiveFieldMirror) { + if (field.fieldType == PRIMITIVE) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); s = " " + field.sqlName + " " + typeHandler.sqlType(field); if (field.id) { @@ -71,9 +75,8 @@ public class EntityMirror implements Comparable<EntityMirror> { } else if (field.unique) { s += " UNIQUE"; } - } else if (field instanceof ReferenceFieldMirror) { - ReferenceFieldMirror ref = (ReferenceFieldMirror) field; - EntityMirror referenced = unit.get(ref.type); + } else if (field.fieldType == REFERENCE) { + EntityMirror referenced = unit.get(field.type); if (referenced.idFields.size() == 1) { FieldMirror idField = referenced.idFields.get(0); TypeHandler typeHandler = generatorConfiguration.typeHandler(idField.type); @@ -157,7 +160,7 @@ public class EntityMirror implements Comparable<EntityMirror> { i++; - if (field instanceof PrimitiveFieldMirror) { + if (field.fieldType == PRIMITIVE) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); String access = o.name + "." + field.javaName; String setter = " stmt." + typeHandler.setter(i, access) + ";"; @@ -172,9 +175,8 @@ public class EntityMirror implements Comparable<EntityMirror> { body.add(" " + setter); body.add(" }"); } - } else if (field instanceof ReferenceFieldMirror) { - ReferenceFieldMirror ref = (ReferenceFieldMirror) field; - EntityMirror referenced = unit.get(ref.type); + } else if (field.fieldType == REFERENCE) { + EntityMirror referenced = unit.get(field.type); FieldMirror idField = referenced.getIdField(); TypeHandler typeHandler = generatorConfiguration.typeHandler(idField.type); body.add(" stmt." + typeHandler.setter(i, o.name + "." + field.javaName + "." + idField.javaName) + ";"); @@ -195,7 +197,11 @@ public class EntityMirror implements Comparable<EntityMirror> { List<String> arguments = new ArrayList<>(); arguments.add(con.name); for (FieldMirror field : idFields) { - arguments.add(o.name + "." + field.javaName); + if(field.accessorType == FIELD) { + arguments.add(o.name + "." + field.javaName); + } else { + arguments.add(o.name + "." + toGetterName(field.javaName) + "()"); + } } List<String> body = new ArrayList<>(); body.add("deleteById(" + join(arguments, ", ") + ");"); @@ -262,10 +268,13 @@ public class EntityMirror implements Comparable<EntityMirror> { List<String> names = new ArrayList<>(); for (int i = 0; i < fields.size(); i++) { FieldMirror field = fields.get(i); - if (field instanceof PrimitiveFieldMirror) { + if (field.accessorType != FIELD) { + continue; + } + if (field.fieldType == PRIMITIVE) { TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); body.add(field.type + " " + field.javaName + " = " + typeHandler.getter(rs.name, i + 1) + ";"); - } else if (field instanceof ReferenceFieldMirror) { + } else if (field.fieldType == REFERENCE) { // ReferenceFieldMirror ref = (ReferenceFieldMirror) field; // EntityMirror referenced = unit.get(ref.type); // FieldMirror idField = referenced.getIdField(); @@ -274,9 +283,32 @@ public class EntityMirror implements Comparable<EntityMirror> { body.add(field.type + " " + field.javaName + " = null;"); } names.add(field.javaName); + i++; + } + + body.add(type + " returnValue = new " + type + "(" + join(names, ", ") + ");"); + + for (int i = 0; i < fields.size(); i++) { + FieldMirror field = fields.get(i); + if (field.accessorType != METHOD) { + continue; + } + if (field.fieldType == PRIMITIVE) { + TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); + body.add("returnValue." + toSetterName(field.javaName) + "(" + typeHandler.getter(rs.name, i + 1) + ");"); + } else if (field.fieldType == REFERENCE) { +// ReferenceFieldMirror ref = (ReferenceFieldMirror) field; +// EntityMirror referenced = unit.get(ref.type); +// FieldMirror idField = referenced.getIdField(); +// TypeHandler typeHandler = generatorConfiguration.typeHandler(idField.type); +// body.add(field.type + " " + field.javaName + " = " + typeHandler.getter(rs.name, i + 1) + ";"); + body.add("returnValue." + toSetterName(field.javaName) + "(" + null + ");"); + } + names.add(field.javaName); + i++; } - body.add("return new " + type + "(" + join(names, ", ") + ");"); + body.add("return returnValue;"); return new MethodRef(PUBLIC, type, "fromResultSet", p, body). exception(g.add(SQLException.class)); |