/*
* (C) Copyright 2006-2013 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* Vladimir Pasquier <vpasquier@nuxeo.com>
* Antoine Taillefer <ataillefer@nuxeo.com>
*
*/
package org.nuxeo.ecm.core.api.thumbnail;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuxeo.ecm.core.api.Blob;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.NuxeoException;
import org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent;
import org.nuxeo.runtime.model.ComponentInstance;
import org.nuxeo.runtime.model.DefaultComponent;
/**
* Thumbnail service providing 3 kind of factories: by facet, by doctype, and thumbnail default one
*
* @since 5.7
*/
public class ThumbnailServiceImpl extends DefaultComponent implements ThumbnailService {
private static final Log log = LogFactory.getLog(BlobHolderAdapterComponent.class);
public static final String THUMBNAILFACTORY_EP = "thumbnailFactory";
protected static ThumbnailFactory defaultFactory;
protected static final Map<String, ThumbnailFactory> factoriesByDocType = new HashMap<String, ThumbnailFactory>();
protected static final Map<String, ThumbnailFactory> factoriesByFacets = new HashMap<String, ThumbnailFactory>();
@Override
public void registerContribution(Object contribution, String extensionPoint, ComponentInstance contributor) {
if (THUMBNAILFACTORY_EP.equals(extensionPoint)) {
ThumbnailFactoryDescriptor desc = (ThumbnailFactoryDescriptor) contribution;
String docType = desc.getDocType();
if (docType != null) {
factoriesByDocType.put(docType, desc.getFactory());
}
String facet = desc.getFacet();
if (facet != null) {
factoriesByFacets.put(facet, desc.getFactory());
}
if (docType == null && facet == null) {
defaultFactory = desc.getFactory();
}
} else {
log.error("Unknown extension point " + extensionPoint);
}
}
@Override
public void unregisterContribution(Object contribution, String extensionPoint, ComponentInstance contributor) {
}
public Set<String> getFactoryByDocTypeNames() {
return factoriesByDocType.keySet();
}
public Set<String> getFactoryByFacetNames() {
return factoriesByFacets.keySet();
}
public ThumbnailFactory getDefaultFactory() {
return defaultFactory;
}
@Override
public Blob getThumbnail(DocumentModel doc, CoreSession session) {
ThumbnailFactory factory = getThumbnailFactory(doc, session);
return factory.getThumbnail(doc, session);
}
@Override
public Blob computeThumbnail(DocumentModel doc, CoreSession session) {
ThumbnailFactory factory = getThumbnailFactory(doc, session);
return factory.computeThumbnail(doc, session);
}
public ThumbnailFactory getThumbnailFactory(DocumentModel doc, CoreSession session) {
if (factoriesByDocType.containsKey(doc.getType())) {
ThumbnailFactory factory = factoriesByDocType.get(doc.getType());
return factory;
}
for (Map.Entry<String, ThumbnailFactory> entry : factoriesByFacets.entrySet()) {
if (doc.hasFacet(entry.getKey())) {
return entry.getValue();
}
}
if (defaultFactory == null) {
throw new NuxeoException("Please contribute a default thumbnail factory");
}
return defaultFactory;
}
}