001/*
002 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Thomas Roger
016 */
017
018package org.nuxeo.ecm.platform.thumbnail.converter;
019
020import static org.nuxeo.ecm.platform.thumbnail.ThumbnailConstants.ANY_TO_PDF_TO_THUMBNAIL_CONVERTER_NAME;
021import static org.nuxeo.ecm.platform.thumbnail.ThumbnailConstants.PDF_AND_IMAGE_TO_THUMBNAIL_CONVERTER_NAME;
022
023import java.io.Serializable;
024import java.util.Map;
025import java.util.regex.Pattern;
026
027import org.nuxeo.ecm.core.api.Blob;
028import org.nuxeo.ecm.core.api.blobholder.BlobHolder;
029import org.nuxeo.ecm.core.convert.api.ConversionException;
030import org.nuxeo.ecm.core.convert.api.ConversionService;
031import org.nuxeo.ecm.core.convert.extension.Converter;
032import org.nuxeo.ecm.core.convert.extension.ConverterDescriptor;
033import org.nuxeo.runtime.api.Framework;
034
035/**
036 * Base converter choosing the correct convert to generate a thumbnail according to the Blob's mime type.
037 *
038 * @since 5.8
039 */
040public class AnyToThumbnailConverter implements Converter {
041
042    public static final String PDF_MIME_TYPE = "application/pdf";
043
044    public static final Pattern PDF_MIME_TYPE_PATTERN = Pattern.compile("application/.*pdf");
045
046    public static final String ANY_TO_PDF_CONVERTER_NAME = "any2pdf";
047
048    @Override
049    public void init(ConverterDescriptor descriptor) {
050    }
051
052    @Override
053    public BlobHolder convert(BlobHolder blobHolder, Map<String, Serializable> parameters) throws ConversionException {
054        Blob sourceBlob;
055        sourceBlob = blobHolder.getBlob();
056        if (sourceBlob == null) {
057            return null;
058        }
059
060        String mimeType = sourceBlob.getMimeType();
061        if (mimeType == null) {
062            return null;
063        }
064
065        ConversionService conversionService = Framework.getLocalService(ConversionService.class);
066
067        String converterName = null;
068        if ((mimeType.startsWith("image/") || PDF_MIME_TYPE_PATTERN.matcher(mimeType).matches())
069                && conversionService.isConverterAvailable(PDF_AND_IMAGE_TO_THUMBNAIL_CONVERTER_NAME, true).isAvailable()) {
070            converterName = PDF_AND_IMAGE_TO_THUMBNAIL_CONVERTER_NAME;
071        } else if (conversionService.isSourceMimeTypeSupported(ANY_TO_PDF_CONVERTER_NAME, mimeType)
072                && conversionService.isConverterAvailable(ANY_TO_PDF_CONVERTER_NAME, true).isAvailable()) {
073            converterName = ANY_TO_PDF_TO_THUMBNAIL_CONVERTER_NAME;
074        }
075        return converterName == null ? null : conversionService.convert(converterName, blobHolder, parameters);
076    }
077}