From dd150071369e825d4b4a59e15ad3291841c7ba13 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 4 Aug 2013 23:08:37 +0200 Subject: wip o Fixing bugs. --- .../java/io/trygvis/persistence/EntityMirror.java | 46 +++++++++++----------- .../java/io/trygvis/persistence/FieldMirror.java | 19 +++++++++ 2 files changed, 42 insertions(+), 23 deletions(-) (limited to 'container-compiler-plugin') 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 f0f4ae7..5d6defb 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 @@ -160,31 +160,31 @@ public class EntityMirror implements Comparable { i++; + TypeHandler typeHandler; + String accessor; + String setter; if (field.fieldType == PRIMITIVE) { - TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type); - 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) { - body.add(setter); - } else { - body.add(" " + field.type + " " + field.javaName + " = " + access + ";"); - body.add(" if(" + field.javaName + " == null) {"); - body.add(" stmt.setNull(" + i + ", " + typesType + "." + typeHandler.typeName() + ");"); - body.add(" } else {"); - body.add(" " + setter); - body.add(" }"); - } - } else if (field.fieldType == REFERENCE) { + typeHandler = generatorConfiguration.typeHandler(field.type); + accessor = field.fieldAccessor(o); + setter = " stmt." + typeHandler.setter(i, accessor) + ";"; + } else { 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) + ";"); + typeHandler = generatorConfiguration.typeHandler(idField.type); + accessor = field.referenceAccessor(o, idField); + setter = " stmt." + typeHandler.setter(i, accessor) + ";"; + accessor = "null"; + } + + if (field.notNull) { + body.add(setter); + } else { + body.add(" " + field.type + " " + field.javaName + " = " + accessor + ";"); + body.add(" if(" + field.javaName + " == null) {"); + body.add(" stmt.setNull(" + i + ", " + typesType + "." + typeHandler.typeName() + ");"); + body.add(" } else {"); + body.add(" " + setter); + body.add(" }"); } } body.add(" stmt.executeUpdate();"); @@ -202,7 +202,7 @@ public class EntityMirror implements Comparable { List arguments = new ArrayList<>(); arguments.add(con.name); for (FieldMirror field : idFields) { - if(field.accessorType == FIELD) { + if (field.accessorType == FIELD) { arguments.add(o.name + "." + field.javaName); } else { arguments.add(o.name + "." + toGetterName(field.javaName) + "()"); diff --git a/container-compiler-plugin/src/main/java/io/trygvis/persistence/FieldMirror.java b/container-compiler-plugin/src/main/java/io/trygvis/persistence/FieldMirror.java index 07fa769..5a2d221 100644 --- a/container-compiler-plugin/src/main/java/io/trygvis/persistence/FieldMirror.java +++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/FieldMirror.java @@ -2,6 +2,10 @@ package io.trygvis.persistence; import io.trygvis.container.compiler.model.TypeRef; +import static io.trygvis.container.compiler.Utils.toGetterName; +import static io.trygvis.container.compiler.model.Parameters.ParameterRef; +import static io.trygvis.persistence.FieldMirror.AccessorType.FIELD; + /** * TODO: a single field might have to be mapped to multiple sql columns. */ @@ -37,6 +41,21 @@ public class FieldMirror { this.unique = unique; } + public String fieldAccessor(ParameterRef o) { + return fieldAccessor(o.name); + } + + public String referenceAccessor(ParameterRef o, FieldMirror f) { + return f.fieldAccessor(o.name + "." + javaName); + } + + private String fieldAccessor(String o) { + if (accessorType == FIELD) { + return o + "." + javaName; + } + return o + "." + toGetterName(javaName) + "()"; + } + @Override public String toString() { return "FieldMirror{" + -- cgit v1.2.3