@Override public Configuration createConfiguration() { Configuration cfg = super.createConfiguration(); cfg.setObjectWrapper(new DocumentObjectWrapper()); return cfg; }
public RenderingResult process(RenderingContext ctx) throws RenderingException { try { if (cfg == null) { cfg = createConfiguration(); } FreemarkerRenderingJob job = createJob(ctx); cfg.getTemplate(job.getTemplate(), cfg.getDefaultEncoding()).process(ctx, job.getWriter()); return job.getResult(); } catch (IOException | TemplateException e) { throw new RenderingException("Freemarker processing failed", e); } }
@Override public int size() throws TemplateModelException { if (size == -1) { size = DocumentFieldAccessor.getAcessorsCount() + doc.getSchemas().length; } return size; }
@Override public TemplateCollectionModel values() throws TemplateModelException { List<Object> values = new ArrayList<Object>(); for (DocumentFieldAccessor accessor : DocumentFieldAccessor.getAcessors()) { values.add(accessor.getValue(doc)); } for (String schema : doc.getSchemas()) { Map<String, Object> properties = doc.getProperties(schema); if (properties != null) { values.add(properties); } } return (TemplateCollectionModel) wrapper.wrap(values); }
@Override public TemplateModel get(String key) throws TemplateModelException { DocumentFieldAccessor accessor = DocumentFieldAccessor.get(key); if (accessor != null) { return wrapper.wrap(accessor.getValue(doc)); } // may be a schema name (doc.dublincore.title) Map<String, Object> properties = doc.getProperties(key); if (properties != null) { return wrapper.wrap(properties); } return wrapper.wrap(null); }
@Override protected TemplateModel handleUnknownType(Object obj) throws TemplateModelException { if (obj instanceof DocumentModel) { return new DocumentModelAdapter((DocumentModel) obj); } return super.handleUnknownType(obj); }
@Override public Configuration createConfiguration() { Configuration cfg = super.createConfiguration(); cfg.setSharedVariable("htmlEscape", new HtmlEscapeMethod()); return cfg; }
@Override public TemplateCollectionModel keys() throws TemplateModelException { if (keys == null) { List<String> keysCol = new ArrayList<String>(); keysCol.addAll(DocumentFieldAccessor.getFieldNames()); String[] schemas = doc.getSchemas(); keysCol.addAll(Arrays.asList(schemas)); size = keysCol.size(); keys = (TemplateCollectionModel) wrapper.wrap(keysCol); } return keys; }