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.java65
1 files changed, 65 insertions, 0 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
new file mode 100644
index 0000000..fe50e17
--- /dev/null
+++ b/container-compiler-plugin/src/main/java/io/trygvis/persistence/EntityMirror.java
@@ -0,0 +1,65 @@
+package io.trygvis.persistence;
+
+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.TypeMirror;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.commons.lang.StringUtils.join;
+
+public class EntityMirror {
+ public final GeneratorSupport generatorSupport;
+ public final List<FieldMirror> fields = new ArrayList<>();
+ public final TypeMirror javaName;
+ public final String tableName;
+
+ public EntityMirror(GeneratorSupport generatorSupport, TypeMirror javaName, String tableName) {
+ this.generatorSupport = generatorSupport;
+ this.javaName = javaName;
+ this.tableName = tableName;
+ }
+
+ public void add(FieldMirror field) {
+ fields.add(field);
+ }
+
+ public String insertIntoSql() {
+ List<String> names = new ArrayList<>();
+ List<String> placeholders = new ArrayList<>();
+ for (FieldMirror field : fields) {
+ names.add(field.sqlName);
+ placeholders.add("?");
+ }
+
+ return "INSERT INTO " + tableName + "(" + join(names, ", ") + ") " +
+ "VALUES(" + join(placeholders, ", ") + ");";
+ }
+
+ public void insertInto(ClassG g) {
+ TypeRef conType = g.addImport(Connection.class);
+ TypeRef psType = g.addImport(PreparedStatement.class);
+ TypeRef objectType = g.addImport(javaName);
+ ParameterRef con = new ParameterRef(conType, "con");
+ ParameterRef object = new ParameterRef(objectType, "o");
+
+ List<String> body = new ArrayList<>();
+
+ 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);
+ body.add(" stmt." + typeHandler.resultSetSetter(i + 1, "o", field) + ";");
+ }
+ body.add(" stmt.executeUpdate();");
+ body.add("}");
+
+ g.addMethod(body, TypeRef.VOID, "insertInto", con, object).
+ exception(g.addImport(SQLException.class));
+ }
+}