001package org.nuxeo.template.jaxrs;
002
003import java.util.List;
004
005import javax.ws.rs.GET;
006import javax.ws.rs.Path;
007import javax.ws.rs.PathParam;
008import javax.ws.rs.Produces;
009
010import org.nuxeo.ecm.core.api.Blob;
011import org.nuxeo.ecm.core.api.DocumentModel;
012import org.nuxeo.ecm.core.api.IdRef;
013import org.nuxeo.ecm.core.api.blobholder.BlobHolder;
014import org.nuxeo.ecm.webengine.model.WebObject;
015import org.nuxeo.ecm.webengine.model.impl.DefaultObject;
016import org.nuxeo.runtime.api.Framework;
017import org.nuxeo.template.api.TemplateProcessorService;
018import org.nuxeo.template.api.adapters.TemplateSourceDocument;
019
020@WebObject(type = "templateResource")
021public class TemplateResource extends DefaultObject {
022
023    protected String uuid;
024
025    public TemplateResource() {
026        uuid = null;
027    }
028
029    protected void initialize(Object... args) {
030        if (args != null && args.length > 0) {
031            this.uuid = (String) args[0];
032        }
033    }
034
035    public TemplateResource(String value) {
036        this.uuid = value;
037    }
038
039    protected TemplateSourceDocument resolve() {
040        if (uuid != null) {
041            IdRef idRef = new IdRef(uuid);
042            DocumentModel doc = getContext().getCoreSession().getDocument(idRef);
043            return doc.getAdapter(TemplateSourceDocument.class);
044        } else {
045            return null;
046        }
047    }
048
049    @GET
050    public Object get() {
051        TemplateSourceDocument source = resolve();
052        if (source == null) {
053            return getList();
054        } else {
055            StringBuffer sb = new StringBuffer();
056            sb.append(source.getId() + " - " + source.getLabel());
057            return sb.toString();
058        }
059    }
060
061    protected String getList() {
062
063        TemplateProcessorService tps = Framework.getLocalService(TemplateProcessorService.class);
064        List<TemplateSourceDocument> sources = tps.getAvailableTemplates(getContext().getCoreSession(), null);
065
066        StringBuffer sb = new StringBuffer();
067        for (TemplateSourceDocument source : sources) {
068            sb.append(source.getId() + " - " + source.getName() + "-" + source.getLabel());
069            sb.append("\n");
070        }
071        return sb.toString();
072    }
073
074    @GET
075    @Path("resource/{resourceName}")
076    @Produces("*/*")
077    public Blob getResource(@PathParam(value = "resourceName") String resourceName) {
078        TemplateSourceDocument tmpl = resolve();
079        return getResource(tmpl, resourceName);
080    }
081
082    static Blob getResource(TemplateSourceDocument tmpl, String resourceName) {
083
084        BlobHolder bh = tmpl.getAdaptedDoc().getAdapter(BlobHolder.class);
085        if (bh != null) {
086            for (Blob blob : bh.getBlobs()) {
087                if (resourceName.equalsIgnoreCase(blob.getFilename())) {
088                    return blob;
089                }
090            }
091        }
092        return null;
093    }
094
095}