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}