001/* 002 * Copyright (c) 2006-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 Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Vladimir Pasquier <vpasquier@nuxeo.com> 011 * Antoine Taillefer <ataillefer@nuxeo.com> 012 * 013 */ 014package org.nuxeo.ecm.platform.thumbnail.factories; 015 016import static org.nuxeo.ecm.platform.thumbnail.ThumbnailConstants.ANY_TO_THUMBNAIL_CONVERTER_NAME; 017 018import java.io.IOException; 019import java.io.InputStream; 020import java.io.Serializable; 021import java.util.HashMap; 022import java.util.Map; 023 024import javax.faces.context.FacesContext; 025 026import org.apache.commons.logging.Log; 027import org.apache.commons.logging.LogFactory; 028import org.nuxeo.ecm.core.api.Blob; 029import org.nuxeo.ecm.core.api.Blobs; 030import org.nuxeo.ecm.core.api.CoreSession; 031import org.nuxeo.ecm.core.api.DocumentModel; 032import org.nuxeo.ecm.core.api.NuxeoException; 033import org.nuxeo.ecm.core.api.PropertyException; 034import org.nuxeo.ecm.core.api.blobholder.BlobHolder; 035import org.nuxeo.ecm.core.api.thumbnail.ThumbnailFactory; 036import org.nuxeo.ecm.core.convert.api.ConversionService; 037import org.nuxeo.ecm.platform.thumbnail.ThumbnailConstants; 038import org.nuxeo.ecm.platform.types.adapter.TypeInfo; 039import org.nuxeo.runtime.api.Framework; 040 041/** 042 * Default thumbnail factory for all non folderish documents Return the main blob converted in thumbnail or get the 043 * document big icon as a thumbnail 044 * 045 * @since 5.7 046 */ 047public class ThumbnailDocumentFactory implements ThumbnailFactory { 048 049 private static final Log log = LogFactory.getLog(ThumbnailDocumentFactory.class); 050 051 @Override 052 public Blob getThumbnail(DocumentModel doc, CoreSession session) { 053 Blob thumbnailBlob = null; 054 try { 055 if (doc.hasFacet(ThumbnailConstants.THUMBNAIL_FACET)) { 056 thumbnailBlob = (Blob) doc.getPropertyValue(ThumbnailConstants.THUMBNAIL_PROPERTY_NAME); 057 } 058 } catch (PropertyException e) { 059 log.warn("Could not fetch the thumbnail blob", e); 060 } 061 if (thumbnailBlob == null) { 062 thumbnailBlob = getDefaultThumbnail(doc); 063 } 064 return thumbnailBlob; 065 } 066 067 @Override 068 public Blob computeThumbnail(DocumentModel doc, CoreSession session) { 069 // TODO: convert non pix attachment 070 // Image converter before thumbnail converter 071 // params.put("targetFilePath", "readyToThumbnail.png"); 072 // BlobHolder bh = conversionService.convertToMimeType( 073 // ThumbnailConstants.THUMBNAIL_MIME_TYPE, blobHolder, 074 // params); 075 // params.clear(); 076 ConversionService conversionService; 077 Blob thumbnailBlob = null; 078 try { 079 conversionService = Framework.getService(ConversionService.class); 080 BlobHolder bh = doc.getAdapter(BlobHolder.class); 081 if (bh != null) { 082 Map<String, Serializable> params = new HashMap<String, Serializable>(); 083 // Thumbnail converter 084 params.put(ThumbnailConstants.THUMBNAIL_SIZE_PARAMETER_NAME, ThumbnailConstants.THUMBNAIL_DEFAULT_SIZE); 085 bh = conversionService.convert(ANY_TO_THUMBNAIL_CONVERTER_NAME, bh, params); 086 if (bh != null) { 087 thumbnailBlob = bh.getBlob(); 088 } 089 } 090 } catch (NuxeoException e) { 091 log.warn("Cannot compute document thumbnail", e); 092 } 093 return thumbnailBlob; 094 } 095 096 protected Blob getDefaultThumbnail(DocumentModel doc) { 097 if (doc == null) { 098 return null; 099 } 100 TypeInfo docType = doc.getAdapter(TypeInfo.class); 101 String iconPath = docType.getBigIcon(); 102 if (iconPath == null) { 103 iconPath = docType.getIcon(); 104 } 105 if (iconPath == null) { 106 return null; 107 } 108 FacesContext ctx = FacesContext.getCurrentInstance(); 109 if (ctx == null) { 110 return null; 111 } 112 try { 113 try (InputStream iconStream = ctx.getExternalContext().getResourceAsStream(iconPath)) { 114 if (iconStream != null) { 115 return Blobs.createBlob(iconStream); 116 } 117 } 118 } catch (IOException e) { 119 log.warn(String.format("Could not fetch the thumbnail blob from icon path '%s'", iconPath), e); 120 } 121 return null; 122 } 123 124}