001package org.nuxeo.template.api.descriptor;
002
003import java.io.Serializable;
004import java.util.ArrayList;
005import java.util.List;
006
007import org.apache.commons.logging.Log;
008import org.apache.commons.logging.LogFactory;
009import org.nuxeo.common.xmap.annotation.XNode;
010import org.nuxeo.common.xmap.annotation.XNodeList;
011import org.nuxeo.common.xmap.annotation.XObject;
012import org.nuxeo.template.api.TemplateProcessor;
013
014@XObject("templateProcessor")
015public class TemplateProcessorDescriptor implements Serializable {
016
017    private static final long serialVersionUID = 1L;
018
019    protected static final Log log = LogFactory.getLog(TemplateProcessorDescriptor.class);
020
021    protected TemplateProcessor processor;
022
023    @XNode("@name")
024    protected String name;
025
026    @XNode("@label")
027    protected String label;
028
029    @SuppressWarnings("rawtypes")
030    @XNode("@class")
031    protected Class className;
032
033    @XNode("@default")
034    protected boolean defaultProcessor = true;
035
036    @XNode("@enabled")
037    protected boolean enabled = true;
038
039    @XNodeList(value = "supportedMimeType", type = ArrayList.class, componentType = String.class)
040    protected List<String> supportedMimeTypes = new ArrayList<String>();
041
042    @XNodeList(value = "supportedExtension", type = ArrayList.class, componentType = String.class)
043    protected List<String> supportedExtensions = new ArrayList<String>();
044
045    public boolean init() {
046        if (getProcessor() == null) {
047            return false;
048        }
049        return true;
050    }
051
052    public TemplateProcessor getProcessor() {
053        if (processor == null) {
054            try {
055                processor = (TemplateProcessor) className.newInstance();
056            } catch (ReflectiveOperationException e) {
057                log.error("Unable to instanciate Processor", e);
058            }
059        }
060        return processor;
061    }
062
063    public String getName() {
064        return name;
065    }
066
067    public String getLabel() {
068        return label;
069    }
070
071    @SuppressWarnings("rawtypes")
072    public Class getClassName() {
073        return className;
074    }
075
076    public List<String> getSupportedMimeTypes() {
077        return supportedMimeTypes;
078    }
079
080    public List<String> getSupportedExtensions() {
081        return supportedExtensions;
082    }
083
084    public boolean isDefaultProcessor() {
085        return defaultProcessor;
086    }
087
088    public boolean isEnabled() {
089        return enabled;
090    }
091
092    public TemplateProcessorDescriptor clone() {
093
094        TemplateProcessorDescriptor clone = new TemplateProcessorDescriptor();
095        clone.enabled = enabled;
096        clone.supportedExtensions = supportedExtensions;
097        clone.supportedMimeTypes = supportedMimeTypes;
098        clone.className = className;
099        clone.processor = processor;
100        clone.defaultProcessor = defaultProcessor;
101        clone.label = label;
102        clone.name = name;
103
104        return clone;
105    }
106
107    public void merge(TemplateProcessorDescriptor srcTpd) {
108        defaultProcessor = srcTpd.defaultProcessor;
109        if (srcTpd.className != null) {
110            className = srcTpd.className;
111        }
112        if (srcTpd.label != null) {
113            label = srcTpd.label;
114        }
115        if (srcTpd.supportedExtensions != null && srcTpd.supportedExtensions.size() > 0) {
116            supportedExtensions = srcTpd.supportedExtensions;
117        }
118        if (srcTpd.supportedMimeTypes != null && srcTpd.supportedMimeTypes.size() > 0) {
119            supportedMimeTypes = srcTpd.supportedMimeTypes;
120        }
121    }
122}