Skip to content

Instantly share code, notes, and snippets.

@christiangoudreau
Last active December 16, 2015 22:49
Show Gist options
  • Save christiangoudreau/5509653 to your computer and use it in GitHub Desktop.
Save christiangoudreau/5509653 to your computer and use it in GitHub Desktop.
public abstract class AbstractVelocityGenerator {
private final static String IMPL_NAME = "implName";
private final static String PACKAGE_NAME = "packageName";
private final static String ENCODING = "UTF-8";
private final Provider<VelocityContext> velocityContextProvider;
private final VelocityEngine velocityEngine;
private final GeneratorUtil generatorUtil;
protected AbstractVelocityGenerator(Provider<VelocityContext> velocityContextProvider,
VelocityEngine velocityEngine,
GeneratorUtil generatorUtil) {
this.velocityContextProvider = velocityContextProvider;
this.velocityEngine = velocityEngine;
this.generatorUtil = generatorUtil;
}
public GeneratorUtil getGeneratorUtil() {
return generatorUtil;
}
protected void mergeTemplate(PrintWriter printWriter,
String velocityTemplate,
JClassType descriptor,
String implName,
String packageName) throws Exception {
VelocityContext velocityContext = velocityContextProvider.get();
velocityContext.put(IMPL_NAME, implName);
velocityContext.put(PACKAGE_NAME, packageName);
populateVelocityContext(velocityContext, descriptor);
velocityEngine.mergeTemplate(velocityTemplate, ENCODING, velocityContext, printWriter);
generatorUtil.closeDefinition(printWriter);
}
protected abstract void populateVelocityContext(VelocityContext velocityContext,
JClassType descriptor) throws UnableToCompleteException;
}
public class VelocityColumnsInitializerGenerator extends AbstractVelocityGenerator {
private static final String VELOCITY_TEMPLATE = "com/gwtplatform/carstore/rebind/ColumnsInitializer.vm";
private static final String SUFFIX = "Impl";
@Inject
protected VelocityColumnsInitializerGenerator(Provider<VelocityContext> velocityContextProvider,
VelocityEngine velocityEngine,
GeneratorUtil generatorUtil) {
super(velocityContextProvider, velocityEngine, generatorUtil);
}
@Override
protected void populateVelocityContext(VelocityContext velocityContext,
JClassType type) throws UnableToCompleteException {
ColumnsInitializerDefinitions columnsInitializerDefinitions = ColumnsInitializerDefinitions.createFrom(type);
velocityContext.put("columnsInitializerDefinitions", columnsInitializerDefinitions);
}
public String generate(JClassType type) throws Exception {
String packageName = type.getPackage().getName();
String implName = type.getName() + SUFFIX;
PrintWriter printWriter = getGeneratorUtil().tryCreatePrintWriter(packageName, implName);
if (printWriter != null) {
mergeTemplate(printWriter, VELOCITY_TEMPLATE, type, type.getName(), packageName);
}
return packageName + "." + implName;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment