From 4e794b5ed03e5020770becb068d11e6838feec64 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Fri, 2 Aug 2013 21:57:54 +0200 Subject: wip --- .../trygvis/container/compiler/EntityHandler.java | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java') diff --git a/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java new file mode 100644 index 0000000..df7a673 --- /dev/null +++ b/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java @@ -0,0 +1,83 @@ +package io.trygvis.container.compiler; + +import io.trygvis.container.compiler.entity.EntityMirror; +import io.trygvis.container.compiler.model.ClassG; +import io.trygvis.container.compiler.model.Parameters; + +import javax.annotation.processing.ProcessingEnvironment; +import javax.lang.model.element.TypeElement; +import javax.lang.model.element.VariableElement; +import javax.tools.JavaFileObject; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; + +import static io.trygvis.container.compiler.entity.EntityMirror.FieldMirror; +import static java.lang.Character.isUpperCase; +import static javax.lang.model.util.ElementFilter.fieldsIn; +import static org.springframework.util.StringUtils.collectionToDelimitedString; + +public class EntityHandler extends AbstractHandler { + public EntityHandler(ProcessingEnvironment processingEnv) { + super(processingEnv); + } + + public void processEntity(TypeElement element) throws Exception { + EntityMirror entityMirror = new EntityMirror(sqlName(element.getSimpleName().toString())); + + for (VariableElement f : fieldsIn(elements.getAllMembers(element))) { + entityMirror.add(fromElement(f)); + } + + String p = elements.getPackageOf(element).getQualifiedName().toString(); + String className = element.getSimpleName() + "_Sql"; + + ClassG g = new ClassG(p, className, null); + g.addPublicFinalField(String.class, "insertInto"); + String insertInto = insertInto(entityMirror); + List body = new ArrayList<>(); + body.add("this.insertInto = \"" + insertInto + "\";"); + g.addConstructor(new Parameters(), body); + + String fileName = (p.length() == 0 ? "" : p + ".") + className; + JavaFileObject sourceFile = processingEnv.getFiler().createSourceFile(fileName, element); + try (PrintWriter w = new PrintWriter(sourceFile.openWriter())) { + g.write(w); + } + } + + public static String insertInto(EntityMirror entityMirror) { + List names = new ArrayList<>(); + List placeholders = new ArrayList<>(); + for (FieldMirror field : entityMirror.fields) { + names.add(field.sqlName); + placeholders.add("?"); + } + return "INSERT INTO " + entityMirror.tableName + "(" + collectionToDelimitedString(names, ", ") + ") " + + "VALUES(" + collectionToDelimitedString(placeholders, ", ") + ");"; + } + + public FieldMirror fromElement(VariableElement var) { + System.out.println("io.trygvis.container.compiler.entity.EntityMirror.FieldMirror.fromElement"); + System.out.print("element = "); + elements.printElements(new PrintWriter(System.out), var); + String javaName = var.getSimpleName().toString(); + String sqlName = sqlName(javaName); + boolean notNull = false; + FieldMirror field = new FieldMirror(javaName, sqlName, notNull); + System.out.println("field = " + field); + return field; + } + + public static String sqlName(String javaName) { + StringBuilder builder = new StringBuilder(); + for (char c : javaName.toCharArray()) { + char lower = Character.toLowerCase(c); + if(isUpperCase(c) && builder.length() > 0) { + builder.append("_"); + } + builder.append(lower); + } + return builder.toString(); + } +} -- cgit v1.2.3