
com.grosner.processor.writer.FlowManagerHolderWriter Maven / Gradle / Ivy
The newest version!
package com.grosner.processor.writer;
import com.google.common.collect.Sets;
import com.grosner.processor.Classes;
import com.grosner.processor.definition.TypeConverterDefinition;
import com.grosner.processor.handler.FlowManagerHandler;
import com.grosner.processor.model.ProcessorManager;
import com.grosner.processor.utils.ModelUtils;
import com.grosner.processor.utils.WriterUtils;
import com.squareup.javawriter.JavaWriter;
import javax.lang.model.element.Modifier;
import java.io.IOException;
/**
* Author: andrewgrosner
* Contributors: { }
* Description:
*/
public class FlowManagerHolderWriter implements FlowWriter {
private final ProcessorManager processorManager;
public FlowManagerHolderWriter(ProcessorManager processorManager){
this.processorManager = processorManager;
}
@Override
public void write(JavaWriter staticFlowManager) throws IOException {
staticFlowManager.emitPackage(Classes.FLOW_MANAGER_PACKAGE);
staticFlowManager.emitImports(Classes.MAP, Classes.HASH_MAP, Classes.TYPE_CONVERTER, Classes.MODEL);
staticFlowManager.beginType(Classes.DATABASE_HOLDER_STATIC_CLASS_NAME, "class", Sets.newHashSet(Modifier.PUBLIC, Modifier.FINAL), null, Classes.FLOW_MANAGER_STATIC_INTERFACE);
// Flow managers
staticFlowManager.emitField("Map, BaseDatabaseDefinition>",FlowManagerHandler.MANAGER_MAP_NAME,
Sets.newHashSet(Modifier.STATIC, Modifier.FINAL), "new HashMap<>()");
staticFlowManager.emitEmptyLine();
staticFlowManager.emitField("Map",FlowManagerHandler.MANAGER_NAME_MAP,
Sets.newHashSet(Modifier.STATIC, Modifier.FINAL), "new HashMap<>()");
staticFlowManager.emitEmptyLine();
// type converters
staticFlowManager.emitField("Map, TypeConverter>", FlowManagerHandler.TYPE_CONVERTER_MAP_FIELD_NAME,
FlowManagerHandler.FIELD_MODIFIERS_STATIC, "new HashMap<>()");
staticFlowManager.emitEmptyLine();
staticFlowManager.beginConstructor(Sets.newHashSet(Modifier.PUBLIC));
staticFlowManager.emitSingleLineComment("Registering with FlowManagerHolder");
for(DatabaseWriter databaseWriter : processorManager.getManagerWriters()) {
staticFlowManager.emitStatement("new %1s(this)", databaseWriter.getSourceFileName());
}
staticFlowManager.emitEmptyLine();
staticFlowManager.endConstructor();
staticFlowManager.beginInitializer(true);
for (TypeConverterDefinition typeConverterDefinition: processorManager.getTypeConverters()) {
staticFlowManager.emitStatement(FlowManagerHandler.TYPE_CONVERTER_MAP_FIELD_NAME + ".put(%1s, new %1s())", ModelUtils.getFieldClass(typeConverterDefinition.getModelClassQualifiedName()),
typeConverterDefinition.getQualifiedName());
}
staticFlowManager.endInitializer();
// Get TypeConverter
staticFlowManager.emitEmptyLine().emitAnnotation(Override.class);
WriterUtils.emitMethod(staticFlowManager, new FlowWriter() {
@Override
public void write(JavaWriter javaWriter) throws IOException {
javaWriter.emitStatement("return %1s.get(%1s)", FlowManagerHandler.TYPE_CONVERTER_MAP_FIELD_NAME, "clazz");
}
}, "TypeConverter", "getTypeConverterForClass", FlowManagerHandler.METHOD_MODIFIERS, "Class>", "clazz");
// Get Managers
staticFlowManager.emitEmptyLine().emitAnnotation(Override.class);
WriterUtils.emitMethod(staticFlowManager, new FlowWriter() {
@Override
public void write(JavaWriter javaWriter) throws IOException {
javaWriter.emitStatement("return %1s.get(%1s)", FlowManagerHandler.MANAGER_MAP_NAME, "table");
}
}, "BaseDatabaseDefinition", "getDatabaseForTable", FlowManagerHandler.METHOD_MODIFIERS, "Class>", "table");
// Get Managers
staticFlowManager.emitEmptyLine().emitAnnotation(Override.class);
WriterUtils.emitMethod(staticFlowManager, new FlowWriter() {
@Override
public void write(JavaWriter javaWriter) throws IOException {
javaWriter.emitStatement("return %1s.get(%1s)", FlowManagerHandler.MANAGER_NAME_MAP, "databaseName");
}
}, "BaseDatabaseDefinition", "getDatabase", FlowManagerHandler.METHOD_MODIFIERS, "String", "databaseName");
// Get Managers
staticFlowManager.emitEmptyLine().emitAnnotation(Override.class);
WriterUtils.emitMethod(staticFlowManager, new FlowWriter() {
@Override
public void write(JavaWriter javaWriter) throws IOException {
javaWriter.emitStatement("%1s.put(%1s, %1s)", FlowManagerHandler.MANAGER_MAP_NAME, "table", "database");
javaWriter.emitStatement("%1s.put(%1s, %1s)", FlowManagerHandler.MANAGER_NAME_MAP, "database.getDatabaseName()", "database");
}
}, "void", "putDatabaseForTable", FlowManagerHandler.METHOD_MODIFIERS,
"Class extends Model>", "table", "BaseDatabaseDefinition", "database");
staticFlowManager.endType();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy