package org.etk.model.apt;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.processing.Filer;
import javax.tools.JavaFileObject;
import org.etk.model.plugins.entity.binding.EntityBinding;
import org.etk.model.plugins.entity.binding.PropertyBinding;
import org.etk.orm.api.PropertyLiteral;
import org.etk.orm.apt.FormatterStyle;
import org.etk.orm.apt.TypeFormatter;
import org.etk.reflect.api.ClassTypeInfo;
import org.etk.reflect.api.TypeInfo;
class PropertyLiteralGenerator {
/** . */
private final EntityBinding entityBinding;
PropertyLiteralGenerator(EntityBinding beanMapping) {
this.entityBinding = beanMapping;
}
void build(Filer filer) throws IOException {
String qualifiedName = entityBinding.getEntity().getClassType().getName() + "_";
JavaFileObject jfo = filer.createSourceFile(qualifiedName); // Lack of the originating elt!!!!
PrintWriter out = new PrintWriter(jfo.openWriter());
build(out);
out.close();
}
private void build(Appendable code) throws IOException {
//
ClassTypeInfo owner = entityBinding.getEntity().getClassType();
code.append("package ").append(owner.getPackageName()).append(";\n");
code.append("import ").append(PropertyLiteral.class.getName()).append(";\n");
//
code.append("public class ").append(owner.getSimpleName()).append("_ {\n");
for (PropertyBinding pm : entityBinding.getProperties().values()) {
TypeInfo type = pm.getValue().getEffectiveType();
StringBuilder toto = new StringBuilder();
new TypeFormatter(owner, FormatterStyle.CAST, toto).format(type);
code.append("public static final PropertyLiteral<").
append(owner.getName()).
append(",").
append(toto).
append("> ").append(pm.getName()).append(" = new PropertyLiteral<").
append(owner.getName()).
append(",").
append(toto).
append(">").
append("(").
append(owner.getName()).append(".class").
append(",").
append("\"").append(pm.getName()).append("\"").
append(",").
append(toto).append(".class").
append(");\n");
}
code.append("}\n");
}
}