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}