/**
*
*/
package org.minnal.generator.core;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.minnal.generator.exception.MinnalGeneratorException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Charsets;
/**
* @author ganeshs
*/
public abstract class AbstractTemplateGenerator extends AbstractGenerator {
private static final Logger logger = LoggerFactory.getLogger(AbstractTemplateGenerator.class);
protected final static VelocityEngine engine;
static {
logger.debug("Loading the velocity templates");
Properties properties = new Properties();
properties.put("runtime.log.logsystem.class", "org.minnal.utils.Slf4jLogChute");
engine = new VelocityEngine(properties);
engine.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
engine.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
}
public AbstractTemplateGenerator(File baseDir) {
super(baseDir);
}
protected void writeFile(String content, File file) {
logger.info("Creating the file {}", file.getAbsolutePath());
OutputStreamWriter writer = null;
try {
writer = new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8);
writer.write(content);
} catch (IOException e) {
throw new MinnalGeneratorException(e);
} finally {
closeStream(writer);
}
}
protected void writeFile(Template template, VelocityContext context, File file) {
logger.info("Creating the file {}", file.getAbsolutePath());
OutputStreamWriter writer = null;
try {
writer = new OutputStreamWriter(new FileOutputStream(file), Charsets.UTF_8);
template.merge(context, writer);
} catch (IOException e) {
throw new MinnalGeneratorException(e);
} finally {
closeStream(writer);
}
}
}