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.java49
1 files changed, 41 insertions, 8 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 41ae1d4..2a4952f 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
@@ -4,32 +4,56 @@ import io.trygvis.container.compiler.model.ClassG;
import io.trygvis.container.compiler.model.ParameterRef;
import io.trygvis.container.compiler.model.TypeRef;
-import javax.lang.model.type.DeclaredType;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
+import static java.lang.String.format;
import static org.apache.commons.lang.StringUtils.join;
public class EntityMirror {
public final GeneratorSupport generatorSupport;
public final List<FieldMirror> fields = new ArrayList<>();
- public final DeclaredType javaName;
+ public final List<FieldMirror> idFields = new ArrayList<>();
+ public final TypeRef type;
public final String tableName;
- public final String daoName;
+ public final TypeRef daoType;
- public EntityMirror(GeneratorSupport generatorSupport, DeclaredType javaName, String tableName) {
+ public EntityMirror(GeneratorSupport generatorSupport, TypeRef type, String tableName) {
this.generatorSupport = generatorSupport;
- this.javaName = javaName;
+ this.type = type;
this.tableName = tableName;
- this.daoName = javaName.asElement().getSimpleName() + "Dao";
+ this.daoType = new TypeRef(type.name + "Dao");
}
public void add(FieldMirror field) {
fields.add(field);
+ if(field.id) {
+ idFields.add(field);
+ }
+ }
+
+ public String createTableSql() {
+ List<String> columns = new ArrayList<>();
+ for (FieldMirror field : fields) {
+ TypeHandler typeHandler = generatorSupport.typeHandler(field.type);
+ String s = " " + field.sqlName + " " + typeHandler.sqlType(field);
+ if(field.id) {
+ s += " PRIMARY KEY";
+ }
+ columns.add(s);
+ }
+
+ return format("CREATE TABLE " + tableName + "(%n" +
+ join(columns, ",%n") +
+ "%n);");
+ }
+
+ public String dropTableSql() {
+ return "DROP TABLE " + tableName + ";";
}
public String insertIntoSql() {
@@ -44,10 +68,19 @@ public class EntityMirror {
"VALUES(" + join(placeholders, ", ") + ");";
}
+ 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 void insertInto(ClassG g) {
TypeRef conType = g.addImport(Connection.class);
TypeRef psType = g.addImport(PreparedStatement.class);
- TypeRef objectType = g.addImport(javaName);
+ TypeRef objectType = g.addImport(type);
ParameterRef con = new ParameterRef(conType, "con");
ParameterRef object = new ParameterRef(objectType, "o");
@@ -56,7 +89,7 @@ public class EntityMirror {
body.add("try(" + psType.name + " stmt = " + con.name + ".prepareStatement(insertIntoSql)) {");
for (int i = 0; i < fields.size(); i++) {
FieldMirror field = fields.get(i);
- TypeHandler typeHandler = generatorSupport.typeHandler(field.element);
+ TypeHandler typeHandler = generatorSupport.typeHandler(field.type);
body.add(" stmt." + typeHandler.resultSetSetter(i + 1, "o", field) + ";");
}
body.add(" stmt.executeUpdate();");