summaryrefslogtreecommitdiff
path: root/container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java')
-rw-r--r--container-compiler-plugin/src/main/java/io/trygvis/container/compiler/EntityHandler.java66
1 files changed, 38 insertions, 28 deletions
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
index cf21887..c623af7 100644
--- 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
@@ -4,7 +4,7 @@ import io.trygvis.container.compiler.model.ClassG;
import io.trygvis.container.compiler.model.TypeRef;
import io.trygvis.persistence.EntityMirror;
import io.trygvis.persistence.FieldMirror;
-import io.trygvis.persistence.GeneratorSupport;
+import io.trygvis.persistence.GeneratorConfiguration;
import io.trygvis.persistence.SqlEntity;
import io.trygvis.persistence.TypeHandler;
@@ -18,6 +18,7 @@ import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
import javax.persistence.Id;
import javax.tools.JavaFileObject;
+import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@@ -30,8 +31,8 @@ import static java.lang.Character.isUpperCase;
import static javax.lang.model.util.ElementFilter.fieldsIn;
public class EntityHandler extends AbstractHandler {
- private GeneratorSupport generatorSupport = new GeneratorSupport();
- private List<EntityMirror> entities = new ArrayList<>();
+ private GeneratorConfiguration generatorConfiguration = new GeneratorConfiguration();
+ private SqlUnitModel sqlUnit = new SqlUnitModel();
private PackageElement packageElement;
public EntityHandler(ProcessingEnvironment processingEnv) {
@@ -48,7 +49,7 @@ public class EntityHandler extends AbstractHandler {
TypeHandler typeHandler = (TypeHandler) typeHandlerClass.newInstance();
String type = entity.asType().toString();
- generatorSupport.addTypeHandler(new TypeRef(type, type), typeHandler);
+ generatorConfiguration.addTypeHandler(new TypeRef(type, type), typeHandler);
System.out.println("Loaded TypeHandler for " + type + " through " + typeHandlerClass.getCanonicalName());
break;
}
@@ -58,7 +59,7 @@ public class EntityHandler extends AbstractHandler {
System.out.println("packages = " + packages);
if (packages.size() == 0) {
- throw new CompilerException(null, "There has to be exactly one @SqlEntitySet annotated package.");
+ throw new CompilerException("There has to be exactly one @SqlEntitySet annotated package.");
}
packageElement = packages.iterator().next();
@@ -78,12 +79,12 @@ public class EntityHandler extends AbstractHandler {
throw new CompilerException(type, "Could not find annotation " + c.getSimpleName());
}
- public void processEntity(TypeElement element) throws Exception {
- EntityMirror entityMirror = new EntityMirror(generatorSupport, new TypeRef(types.getDeclaredType(element)),
+ public void recordEntity(TypeElement element) throws Exception {
+ EntityMirror entityMirror = new EntityMirror(generatorConfiguration, new TypeRef(types.getDeclaredType(element)),
sqlName(element.getSimpleName().toString()));
for (VariableElement f : fieldsIn(elements.getAllMembers(element))) {
- entityMirror.add(fromElement(generatorSupport, f));
+ entityMirror.add(fromElement(generatorConfiguration, f));
}
List<FieldMirror> idFields = new ArrayList<>();
@@ -100,44 +101,47 @@ public class EntityHandler extends AbstractHandler {
throw new CompilerException(element, "This implementation only support a single @Id annotated field.");
}
- String p = elements.getPackageOf(element).getQualifiedName().toString();
+ sqlUnit.add(entityMirror);
+ }
+ public void generate(EntityMirror entityMirror) throws IOException {
ClassG g = new ClassG(entityMirror.daoType);
- g.addPublicStaticFinalField(String.class, "createTableSql").value(toJavaString(entityMirror.createTableSql()));
+ g.addPublicStaticFinalField(String.class, "createTableSql").value(toJavaString(entityMirror.createTableSql(sqlUnit)));
g.addPublicStaticFinalField(String.class, "dropTableSql").value(toJavaString(entityMirror.dropTableSql()));
g.addPublicStaticFinalField(String.class, "insertIntoSql").value(toJavaString(entityMirror.insertIntoSql()));
g.addPublicStaticFinalField(String.class, "deleteFromSql").value(toJavaString(entityMirror.deleteFromSql()));
- entityMirror.insertInto(g);
+ entityMirror.insertInto(sqlUnit, g);
+ entityMirror.delete(g);
+ entityMirror.deleteById(g);
- JavaFileObject sourceFile = processingEnv.getFiler().createSourceFile(entityMirror.daoType.fqName, element);
+ JavaFileObject sourceFile = processingEnv.getFiler().createSourceFile(entityMirror.daoType.fqName, sqlUnit.elementForEntity(entityMirror));
try (PrintWriter w = new PrintWriter(sourceFile.openWriter())) {
g.write(w);
}
-
- entities.add(entityMirror);
}
- public FieldMirror fromElement(GeneratorSupport generatorSupport, VariableElement var) {
- TypeRef type = new TypeRef(var.asType().toString());
+ public FieldMirror fromElement(GeneratorConfiguration generatorConfiguration, VariableElement var) {
+ TypeRef type = new TypeRef(var.asType());
// 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;
+ boolean unique = false;
boolean id = isId(var);
- if (generatorSupport.isPrimitive(type)) {
- field = new PrimitiveFieldMirror(type, javaName, sqlName, id, notNull);
- } else if (generatorSupport.hasTypeHandler(type)) {
- if (id) {
- throw new CompilerException(var, "A @Id field has to be a primitive or embedded.");
- }
+ boolean primitive = generatorConfiguration.isPrimitive(type);
+ if (id && !primitive) {
+ throw new CompilerException(var, "A @Id field has to be a primitive or embedded.");
+ }
- field = new FieldMirror.ReferenceFieldMirror(type, javaName, sqlName, notNull);
+ FieldMirror field;
+ if (primitive) {
+ field = new PrimitiveFieldMirror(type, javaName, sqlName, id, notNull, unique);
+ } else if (generatorConfiguration.hasTypeHandler(type)) {
+ throw new CompilerException(var, "Missing type handler for type: " + type.fqName);
} else {
- throw new CompilerException(var, "Missing type handler for type: " + type);
+ field = new FieldMirror.ReferenceFieldMirror(type, javaName, sqlName, notNull, unique);
}
-// System.out.println("field = " + field);
return field;
}
@@ -145,12 +149,18 @@ public class EntityHandler extends AbstractHandler {
return var.getAnnotation(Id.class) != null;
}
- // TODO: Rename DAO to Session.
public void phase3() throws Exception {
+ for (EntityMirror entity : sqlUnit.getEntities().values()) {
+ generate(entity);
+ }
+ generateSession();
+ }
+
+ private void generateSession() throws IOException {
String p = packageElement.getQualifiedName().toString();
// TODO: Support a name prefix from @SqlEntitySet
- TypeRef type = new TypeRef(p + ".Daos");
+ TypeRef type = new TypeRef(p + ".Session");
ClassG g = new ClassG(type);