package org.etk.orm.apt;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.processing.Filer;
import javax.tools.JavaFileObject;
import org.etk.orm.api.PropertyLiteral;
import org.etk.orm.plugins.bean.mapping.BeanMapping;
import org.etk.orm.plugins.bean.mapping.PropertyMapping;
import org.etk.reflect.api.ClassTypeInfo;
import org.etk.reflect.api.TypeInfo;
class PropertyLiteralGenerator {
/** . */
private final BeanMapping beanMapping;
PropertyLiteralGenerator(BeanMapping beanMapping) {
this.beanMapping = beanMapping;
}
void build(Filer filer) throws IOException {
String qualifiedName = beanMapping.getBean().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 = beanMapping.getBean().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 (PropertyMapping pm : beanMapping.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");
}
}