001package org.nuxeo.template.service;
002
003import java.util.ArrayList;
004import java.util.HashMap;
005import java.util.List;
006import java.util.Map;
007
008import org.apache.commons.logging.Log;
009import org.apache.commons.logging.LogFactory;
010import org.nuxeo.ecm.core.api.DocumentModel;
011import org.nuxeo.ecm.core.api.DocumentModelList;
012import org.nuxeo.ecm.core.api.UnrestrictedSessionRunner;
013import org.nuxeo.ecm.core.api.repository.RepositoryManager;
014import org.nuxeo.runtime.api.Framework;
015import org.nuxeo.template.adapters.source.TemplateSourceDocumentAdapterImpl;
016import org.nuxeo.template.api.adapters.TemplateSourceDocument;
017
018public class TemplateMappingFetcher extends UnrestrictedSessionRunner {
019
020    protected static String repoName;
021
022    protected static final Log log = LogFactory.getLog(TemplateMappingFetcher.class);
023
024    protected static String getRepoName() {
025        if (repoName == null) {
026            RepositoryManager rm = Framework.getLocalService(RepositoryManager.class);
027            repoName = rm.getDefaultRepositoryName();
028        }
029        return repoName;
030    }
031
032    protected Map<String, List<String>> mapping = new HashMap<String, List<String>>();
033
034    protected TemplateMappingFetcher() {
035        super(getRepoName());
036    }
037
038    @Override
039    public void run() {
040        StringBuffer sb = new StringBuffer("select * from Document where ");
041        sb.append(TemplateSourceDocumentAdapterImpl.TEMPLATE_FORCED_TYPES_ITEM_PROP);
042        sb.append(" <> 'none'");
043
044        DocumentModelList docs = session.query(sb.toString());
045
046        for (DocumentModel doc : docs) {
047            TemplateSourceDocument tmpl = doc.getAdapter(TemplateSourceDocument.class);
048            if (tmpl != null) {
049                for (String type : tmpl.getForcedTypes()) {
050                    if (mapping.containsKey(type)) {
051                        mapping.get(type).add(doc.getId());
052                    } else {
053                        List<String> templates = new ArrayList<String>();
054                        templates.add(doc.getId());
055                        mapping.put(type, templates);
056                    }
057                }
058            }
059        }
060    }
061
062    public Map<String, List<String>> getMapping() {
063        return mapping;
064    }
065}