package org.caudexorigo.jpt; import java.io.InputStream; import java.io.Writer; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.caudexorigo.xom.XomDocumentBuilder; public class JptInstance { private JptDocument _jptDocument; private ArrayList<Dependency> _dependecies; public JptInstance(URI templateUri) { nu.xom.Document doc; try { doc = XomDocumentBuilder.getDocument(templateUri); } catch (Throwable t) { throw new JptException(t); } JptNodeBuilder nbuilder = new JptNodeBuilder(); nbuilder.process(doc, templateUri); _dependecies = nbuilder.getDependecies(); Dependency d = new Dependency(templateUri); _dependecies.add(d); _jptDocument = nbuilder.getJptDocument(); } public JptInstance(InputStream in_io, String resourcePath) { nu.xom.Document doc; try { doc = XomDocumentBuilder.getDocument(in_io); } catch (Exception e) { throw new JptException(e); } URI resourceUri = URI.create(resourcePath); JptNodeBuilder nbuilder = new JptNodeBuilder(); nbuilder.process(doc, resourceUri); _jptDocument = nbuilder.getJptDocument(); } public void render(Writer out) throws Throwable { String obj_type_name = StringUtils.isBlank(_jptDocument.getCtxObjectType()) ? "java.lang.Object" : _jptDocument.getCtxObjectType(); Object oCtx = Class.forName(obj_type_name).newInstance(); Map<String, Object> renderContext = new HashMap<String, Object>(); renderContext.put("$this", oCtx); _jptDocument.render(renderContext, out); } public void render(Map<String, Object> renderContext, Writer out) throws Throwable { _jptDocument.render(renderContext, out); } public String getCtxObjectType() { return _jptDocument.getCtxObjectType(); } public ArrayList<Dependency> getDependecies() { return _dependecies; } }