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.java309
1 files changed, 1 insertions, 308 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 140a910..f63c4b2 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
@@ -2,34 +2,14 @@ package io.trygvis.persistence;
import io.trygvis.container.compiler.NotImplementedException;
import io.trygvis.container.compiler.SqlUnitModel;
-import io.trygvis.container.compiler.model.ClassG;
-import io.trygvis.container.compiler.model.Constructor;
-import io.trygvis.container.compiler.model.Imports;
-import io.trygvis.container.compiler.model.MethodRef;
-import io.trygvis.container.compiler.model.Parameters;
import io.trygvis.container.compiler.model.TypeRef;
-import io.trygvis.persistence.sql.AbstractTypedQuery;
-import javax.persistence.TypedQuery;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-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.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;
-import static java.util.Collections.singletonList;
import static org.apache.commons.lang.StringUtils.join;
public class EntityMirror implements Comparable<EntityMirror> {
@@ -48,7 +28,7 @@ public class EntityMirror implements Comparable<EntityMirror> {
this.tableName = tableName;
this.daoType = new TypeRef(type.plainName + "Dao").args(type.args);
- this.utilsType = new TypeRef(type.plainName + ".Utils").args(type.args);
+ this.utilsType = new TypeRef(type.plainName + "Dao.Utils").args(type.args);
}
public void add(FieldMirror... fields) {
@@ -69,281 +49,6 @@ public class EntityMirror implements Comparable<EntityMirror> {
return idFields.get(0);
}
- public String createTableSql(SqlUnitModel unit) {
- List<String> columns = new ArrayList<>();
- for (FieldMirror field : fields) {
- String s;
- if (field.fieldType == PRIMITIVE) {
- TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type);
- s = " " + field.sqlName + " " + typeHandler.sqlType(field);
- if (field.id) {
- s += " PRIMARY KEY";
- } else if (field.notNull) {
- s += " NOT NULL";
- } else if (field.unique) {
- s += " UNIQUE";
- }
- } 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);
- s = " " + field.sqlName + " " + typeHandler.sqlType(field);
- s += " REFERENCES " + referenced.tableName + "(" + idField.sqlName + ")";
- if (field.notNull) {
- s += " NOT NULL";
- } else if (field.unique) {
- s += " UNIQUE";
- }
- } else {
- throw new NotImplementedException();
- }
- } else {
- throw new RuntimeException("Unknown field type: " + field.getClass());
- }
- columns.add(s);
- }
-
- return format("CREATE TABLE " + tableName + "(%n" +
- join(columns, ",%n") +
- "%n);");
- }
-
- public String dropTableSql() {
- return "DROP TABLE " + tableName + ";";
- }
-
- public String insertIntoSql(SqlUnitModel unit) {
- List<String> columns = new ArrayList<>();
- List<String> values = new ArrayList<>();
- for (FieldMirror field : fields) {
- columns.add(field.sqlName);
- if (field.id) {
- values.add("nextval('" + unit.getDefaultSequence().sequenceName + "')");
- } else {
- values.add("?");
- }
- }
-
- return "INSERT INTO " + tableName + "(" + join(columns, ", ") + ") " +
- "VALUES(" + join(values, ", ") + ");";
- }
-
- public String deleteFromSql() {
- List<String> ss = new ArrayList<>();
- for (FieldMirror field : idFields) {
- ss.add(field.sqlName + "=?");
- }
-
- return "DELETE FROM " + tableName + " WHERE " + join(ss, " AND ") + ";";
- }
-
- public String defaultFields() {
- List<String> names = new ArrayList<>();
- for (FieldMirror field : fields) {
- names.add(field.sqlName);
- }
-
- return join(names, ", ");
- }
-
- public MethodRef insertInto(SqlUnitModel unit, Imports imports) {
- TypeRef sqlExceptionType = imports.add(SQLException.class);
- TypeRef typesType = imports.add(Types.class);
- TypeRef conType = imports.add(Connection.class);
- TypeRef psType = imports.add(PreparedStatement.class);
- Parameters p = new Parameters();
- ParameterRef con = p.addParameter(conType, "con");
- ParameterRef o = p.addParameter(type, "o");
-
- List<String> body = new ArrayList<>();
-
- body.add("try(" + psType + " stmt = " + con.name + ".prepareStatement(insertIntoSql)) {");
- int i = 0;
- for (FieldMirror field : fields) {
- // Assume all ID fields are generated for now.
- if (field.id) {
- continue;
- }
-
- i++;
-
- TypeHandler typeHandler;
- String accessor;
- String setter;
- if (field.fieldType == PRIMITIVE) {
- 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 = 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();");
- body.add("}");
- return new MethodRef(PUBLIC | STATIC, TypeRef.VOID, "insert" + type.className, p, body).exception(sqlExceptionType);
- }
-
- public MethodRef selectById(Imports imports) {
- Parameters p = new Parameters();
- p.addParameter(imports.add(Connection.class), "c");
- p.addParameter(idType, "id");
- return new MethodRef(PUBLIC | STATIC, type, "select" + type.className + "ById", p,
- "throw new UnsupportedOperationException(\"Not implemented\");");
- }
-
- public MethodRef update(Imports imports) {
- Parameters p = new Parameters();
- p.addParameter(imports.add(Connection.class), "c");
- p.addParameter(type, "entity");
- return new MethodRef(PUBLIC | STATIC, type, "update" + type.className, p,
- "throw new UnsupportedOperationException(\"Not implemented\");");
- }
-
- public MethodRef delete(Imports imports) {
- TypeRef conType = imports.add(Connection.class);
- TypeRef objectType = imports.add(type);
- Parameters p = new Parameters();
- ParameterRef con = p.addParameter(conType, "con");
- ParameterRef o = p.addParameter(objectType, "o");
-
- List<String> arguments = new ArrayList<>();
- arguments.add(con.name);
- for (FieldMirror field : idFields) {
- if (field.accessorType == FIELD) {
- arguments.add(o.name + "." + field.javaName);
- } else {
- arguments.add(o.name + "." + toGetterName(field.javaName) + "()");
- }
- }
-
- return new MethodRef(PUBLIC | STATIC, TypeRef.VOID, "delete" + type.className, p,
- "delete" + type.className + "ById(" + join(arguments, ", ") + ");").exception(imports.add(SQLException.class));
- }
-
- public MethodRef deleteById(Imports imports) {
- TypeRef conType = imports.add(Connection.class);
- TypeRef psType = imports.add(PreparedStatement.class);
- Parameters p = new Parameters();
- ParameterRef con = p.addParameter(conType, "con");
-
- List<String> body = new ArrayList<>();
-
- body.add("try(" + psType + " stmt = " + con.name + ".prepareStatement(deleteFromSql)) {");
- for (int i = 0; i < idFields.size(); i++) {
- FieldMirror field = idFields.get(i);
- p.addParameter(field.type, field.javaName);
- TypeHandler typeHandler = generatorConfiguration.typeHandler(field.type);
- body.add(" stmt." + typeHandler.setter(i + 1, field.javaName) + ";");
- }
- body.add(" stmt.executeUpdate();");
- body.add("}");
-
- return new MethodRef(PUBLIC | STATIC, TypeRef.VOID, "delete" + type.className + "ById", p, body).
- exception(imports.add(SQLException.class));
- }
-
- public ClassG queryType(Imports imports) {
- TypeRef sqlQueryType = imports.add(AbstractTypedQuery.class).args(type);
- TypeRef conType = imports.add(Connection.class);
- TypeRef entityTypedQuery = new TypeRef(type.className + "TypedQuery");
- TypeRef sqlExceptionType = new TypeRef(SQLException.class);
-
- Parameters p = new Parameters();
- ParameterRef c = p.addParameter(conType, "c");
- Constructor constructor = new Constructor(p, singletonList("super(" + c.name + ", " + daoType.className + ".desc);"));
- ClassG g = new ClassG(PUBLIC | STATIC, entityTypedQuery).
- extendsType(sqlQueryType).
- add(constructor);
- p = new Parameters();
- ParameterRef rs = p.addParameter(new TypeRef(ResultSet.class), "rs");
- MethodRef fromResultSet = new MethodRef(PUBLIC, type, "fromResultSet", p,
- "return " + utilsType.className + ".fromResultSet" + type.className + "(" + rs.name + ");").
- exception(sqlExceptionType);
- g.add(fromResultSet);
- return g;
- }
-
- public MethodRef query(Imports imports) {
- TypeRef conType = imports.add(Connection.class);
- TypeRef typedQueryType = imports.add(TypedQuery.class).args(type);
- TypeRef entityTypedQuery = new TypeRef(type.className + "TypedQuery");
-
- Parameters p = new Parameters();
- ParameterRef c = p.addParameter(conType, "c");
- return new MethodRef(PUBLIC | STATIC, typedQueryType, "query" + type.className, p,
- "return new " + entityTypedQuery + "(" + c.name + ");");
- }
-
- public MethodRef fromResultSet(Imports g) {
- TypeRef rsType = g.add(ResultSet.class);
- Parameters p = new Parameters();
- ParameterRef rs = p.addParameter(rsType, "rs");
-
- List<String> body = new ArrayList<>();
- List<String> names = new ArrayList<>();
- for (int i = 0; i < fields.size(); i++) {
- FieldMirror field = fields.get(i);
- 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.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(field.type + " " + field.javaName + " = null;");
- }
- names.add(field.javaName);
- }
-
- 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);
- }
-
- body.add("return returnValue;");
-
- return new MethodRef(PUBLIC | STATIC, type, "fromResultSet" + type.className, p, body).
- exception(g.add(SQLException.class));
- }
-
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -363,16 +68,4 @@ public class EntityMirror implements Comparable<EntityMirror> {
public int compareTo(@SuppressWarnings("NullableProblems") EntityMirror o) {
return type.compareTo(o.type);
}
-
- public ClassG utils(SqlUnitModel unit) {
- ClassG g = new ClassG(PUBLIC | STATIC, utilsType);
- g.add(insertInto(unit, g.imports));
- g.add(selectById(g.imports));
- g.add(update(g.imports));
- g.add(delete(g.imports));
- g.add(deleteById(g.imports));
- g.add(query(g.imports));
- g.add(fromResultSet(g.imports));
- return g;
- }
}