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.context.ContextExtensionFactory;
013
014@XObject("contextFactory")
015public class ContextExtensionFactoryDescriptor implements Serializable {
016
017    private static final long serialVersionUID = 1L;
018
019    protected static final Log log = LogFactory.getLog(ContextExtensionFactoryDescriptor.class);
020
021    @XNode("@name")
022    protected String name;
023
024    @XNode("@class")
025    protected Class<? extends ContextExtensionFactory> factoryClass;
026
027    @XNode("@enabled")
028    protected boolean enabled = true;
029
030    @XNodeList(value = "aliasName", type = ArrayList.class, componentType = String.class)
031    protected List<String> aliasNames = new ArrayList<String>();
032
033    protected ContextExtensionFactory factory;
034
035    public boolean isEnabled() {
036        return enabled;
037    }
038
039    public ContextExtensionFactory getExtensionFactory() {
040        if (factory == null) {
041            if (factoryClass != null) {
042                try {
043                    factory = factoryClass.newInstance();
044                } catch (ReflectiveOperationException e) {
045                    log.error("Unable to instanciate Processor", e);
046                }
047            }
048        }
049        return factory;
050    }
051
052    public String getName() {
053        return name;
054    }
055
056    public ContextExtensionFactoryDescriptor clone() {
057        ContextExtensionFactoryDescriptor copy = new ContextExtensionFactoryDescriptor();
058        copy.name = name;
059        copy.factoryClass = factoryClass;
060        copy.enabled = enabled;
061        copy.aliasNames = aliasNames;
062        return copy;
063    }
064
065    public void merge(ContextExtensionFactoryDescriptor src) {
066        if (src.factoryClass != null) {
067            factoryClass = src.factoryClass;
068        }
069        if (src.aliasNames != null) {
070            aliasNames.addAll(src.aliasNames);
071        }
072        enabled = src.enabled;
073    }
074
075    public List<String> getAliases() {
076        return aliasNames;
077    }
078
079}