001package org.nuxeo.template.processors.xdocreport; 002 003import java.io.IOException; 004import java.io.InputStream; 005 006import org.nuxeo.common.utils.FileUtils; 007import org.nuxeo.ecm.core.api.Blob; 008import org.nuxeo.ecm.core.api.Blobs; 009import org.nuxeo.template.processors.AbstractBindingResolver; 010 011import fr.opensagres.xdocreport.core.document.SyntaxKind; 012import fr.opensagres.xdocreport.document.images.IImageProvider; 013import fr.opensagres.xdocreport.template.formatter.FieldsMetadata; 014import freemarker.template.TemplateModelException; 015 016/** 017 * @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a> 018 */ 019public class XDocReportBindingResolver extends AbstractBindingResolver { 020 021 protected final FieldsMetadata metadata; 022 023 public XDocReportBindingResolver(FieldsMetadata metadata) { 024 this.metadata = metadata; 025 } 026 027 @Override 028 protected String handleHtmlField(String paramName, String htmlValue) { 029 metadata.addFieldAsTextStyling(paramName, SyntaxKind.Html); 030 return super.handleHtmlField(paramName, htmlValue); 031 } 032 033 @Override 034 protected void handleBlobField(String paramName, Blob blobValue) { 035 if ("text/html".equals(blobValue.getMimeType())) { 036 metadata.addFieldAsTextStyling(paramName, SyntaxKind.Html); 037 } 038 } 039 040 @Override 041 protected Object handlePictureField(String paramName, Blob blobValue) { 042 if (blobValue == null) { 043 // manage a default picture : blank one :) 044 try (InputStream is = this.getClass().getClassLoader().getResourceAsStream("blank.png")) { 045 byte[] bin = FileUtils.readBytes(is); 046 blobValue = Blobs.createBlob(bin, "image/png"); 047 blobValue.setFilename("blank.png"); 048 } catch (IOException e) { 049 log.error("Unable to read fake Blob", e); 050 } 051 } 052 IImageProvider imgBlob = new BlobImageProvider(blobValue); 053 metadata.addFieldAsImage(paramName); 054 return imgBlob; 055 } 056 057 @Override 058 protected Object handleLoop(String paramName, Object value) { 059 metadata.addFieldAsList(paramName); 060 try { 061 return getWrapper().wrap(value); 062 } catch (TemplateModelException e) { 063 return null; 064 } 065 } 066 067}