001package org.nuxeo.template.service;
002
003import java.util.Collection;
004import java.util.HashMap;
005import java.util.Map;
006
007import org.nuxeo.ecm.core.api.NuxeoException;
008import org.nuxeo.runtime.model.ContributionFragmentRegistry;
009import org.nuxeo.template.api.descriptor.TemplateProcessorDescriptor;
010
011public class TemplateProcessorRegistry extends ContributionFragmentRegistry<TemplateProcessorDescriptor> {
012
013    protected Map<String, TemplateProcessorDescriptor> processors = new HashMap<String, TemplateProcessorDescriptor>();
014
015    @Override
016    public TemplateProcessorDescriptor clone(TemplateProcessorDescriptor tpd) {
017        return tpd.clone();
018    }
019
020    public TemplateProcessorDescriptor getProcessorByName(String name) {
021        return processors.get(name);
022    }
023
024    public Collection<TemplateProcessorDescriptor> getRegistredProcessors() {
025        return processors.values();
026    }
027
028    @Override
029    public void contributionRemoved(String id, TemplateProcessorDescriptor tpd) {
030        processors.remove(id);
031    }
032
033    @Override
034    public void contributionUpdated(String id, TemplateProcessorDescriptor tpd, TemplateProcessorDescriptor newTpd) {
035        if (tpd == null || !tpd.isEnabled()) {
036            processors.remove(id);
037        } else {
038            if (tpd.init()) {
039                processors.put(id, tpd);
040            } else {
041                throw new NuxeoException("Unable to register processor");
042            }
043        }
044    }
045
046    @Override
047    public String getContributionId(TemplateProcessorDescriptor tpd) {
048        return tpd.getName();
049    }
050
051    @Override
052    public void merge(TemplateProcessorDescriptor srcTpd, TemplateProcessorDescriptor descTpd) {
053        descTpd.merge(srcTpd);
054    }
055
056}