package de.jos.labelgenerator.template;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import de.jos.labelgenerator.configuration.Address;
import de.jos.labelgenerator.configuration.UndefinedAddress;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.StringTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TemplatingEngine {
private final Configuration cfg;
public TemplatingEngine() {
cfg = new Configuration();
final TemplateLoader templateLoader = new ClassTemplateLoader(TemplatingEngine.class, "/templates");
cfg.setTemplateLoader(templateLoader);
}
public String renderXsltTempalte(Address address, String templateString, Integer frameNumber) {
String renderedTemplate = null;
try {
// TODO cleanup template loader
StringTemplateLoader stringLoader = new StringTemplateLoader();
stringLoader.putTemplate("xsltTemplate", templateString);
cfg.setTemplateLoader(stringLoader);
final Template template = cfg.getTemplate("xsltTemplate");
// create datamodel
Map<String, Object> datamodel = new HashMap<String, Object>();
datamodel.put("address", address);
datamodel.put("frameNumber", frameNumber);
datamodel.put("leadingBlanks", Integer.valueOf(6));
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
final Writer out = new OutputStreamWriter(baout);
template.process(datamodel, out);
out.flush();
renderedTemplate = baout.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return renderedTemplate;
}
public String renderTemplate(Object model, String templateName) {
String renderedTemplate = null;
try {
final Template template = cfg.getTemplate(templateName);
final ByteArrayOutputStream baout = new ByteArrayOutputStream();
final Writer out = new OutputStreamWriter(baout);
template.process(model, out);
out.flush();
renderedTemplate = baout.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return renderedTemplate;
}
public static void main(String args[]) {
TemplatingEngine engine = new TemplatingEngine();
System.out.println(engine.renderTemplate(new UndefinedAddress(), "template_default.ftl"));
}
}