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