001package org.nuxeo.template.web;
002
003import java.io.Serializable;
004import java.util.List;
005
006import org.apache.commons.logging.Log;
007import org.apache.commons.logging.LogFactory;
008import org.jboss.seam.annotations.In;
009import org.nuxeo.ecm.core.api.CoreSession;
010import org.nuxeo.ecm.core.api.DocumentModel;
011import org.nuxeo.ecm.core.api.DocumentNotFoundException;
012import org.nuxeo.ecm.core.api.IdRef;
013import org.nuxeo.ecm.core.api.security.SecurityConstants;
014import org.nuxeo.ecm.platform.rendition.service.RenditionDefinition;
015import org.nuxeo.ecm.platform.rendition.service.RenditionService;
016import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
017import org.nuxeo.runtime.api.Framework;
018import org.nuxeo.template.api.TemplateProcessorService;
019import org.nuxeo.template.api.adapters.TemplateBasedDocument;
020import org.nuxeo.template.api.adapters.TemplateSourceDocument;
021import org.nuxeo.template.rendition.TemplateBasedRenditionProvider;
022
023public class BaseTemplateAction implements Serializable {
024
025    private static final long serialVersionUID = 1L;
026
027    protected static final Log log = LogFactory.getLog(BaseTemplateAction.class);
028
029    @In(create = true)
030    protected transient NavigationContext navigationContext;
031
032    @In(create = true, required = false)
033    protected transient CoreSession documentManager;
034
035    public boolean canAddTemplateInputs() {
036        DocumentModel currentDocument = navigationContext.getCurrentDocument();
037        if (!documentManager.hasPermission(currentDocument.getRef(), SecurityConstants.WRITE)) {
038            return false;
039        }
040        TemplateSourceDocument template = currentDocument.getAdapter(TemplateSourceDocument.class);
041        return template != null ? true : false;
042    }
043
044    public boolean canUpdateTemplateInputs(String templateName) {
045        DocumentModel currentDocument = navigationContext.getCurrentDocument();
046        if (!documentManager.hasPermission(currentDocument.getRef(), SecurityConstants.WRITE)) {
047            return false;
048        }
049        TemplateSourceDocument template = currentDocument.getAdapter(TemplateSourceDocument.class);
050        if (template != null) {
051            return true;
052        }
053        TemplateBasedDocument templateBased = currentDocument.getAdapter(TemplateBasedDocument.class);
054        if (templateBased != null) {
055            return templateBased.hasEditableParams(templateName);
056        }
057        return false;
058    }
059
060    public boolean canResetParameters() {
061        DocumentModel currentDocument = navigationContext.getCurrentDocument();
062        if (!documentManager.hasPermission(currentDocument.getRef(), SecurityConstants.WRITE)) {
063            return false;
064        }
065        TemplateBasedDocument templateBased = currentDocument.getAdapter(TemplateBasedDocument.class);
066        if (templateBased != null) {
067            return true;
068        }
069        return false;
070    }
071
072    public TemplateSourceDocument getCurrentDocumentAsTemplateSourceDocument() {
073        return navigationContext.getCurrentDocument().getAdapter(TemplateSourceDocument.class);
074    }
075
076    public DocumentModel resolveTemplateById(String uuid) {
077        try {
078            return documentManager.getDocument(new IdRef(uuid));
079        } catch (DocumentNotFoundException e) {
080            return null;
081        }
082    }
083
084    public List<RenditionDefinition> getRenditions() {
085        RenditionService rs = Framework.getLocalService(RenditionService.class);
086        return rs.getDeclaredRenditionDefinitionsForProviderType(TemplateBasedRenditionProvider.class.getSimpleName());
087    }
088
089    public List<TemplateSourceDocument> getAvailableOfficeTemplates(String targetType) {
090        TemplateProcessorService tps = Framework.getLocalService(TemplateProcessorService.class);
091        return tps.getAvailableOfficeTemplates(documentManager, targetType);
092    }
093
094}