1 package org.collectionspace.services.common.imaging.nuxeo;
4 import java.io.Serializable;
7 import org.apache.commons.logging.Log;
8 import org.apache.commons.logging.LogFactory;
9 import org.nuxeo.ecm.core.api.Blob;
10 import org.nuxeo.ecm.core.api.blobholder.BlobHolder;
11 import org.nuxeo.ecm.core.api.impl.blob.FileBlob;
12 import org.nuxeo.ecm.core.convert.api.ConversionException;
13 import org.nuxeo.ecm.core.convert.cache.SimpleCachableBlobHolder;
14 import org.nuxeo.ecm.core.convert.extension.Converter;
15 import org.nuxeo.ecm.core.convert.extension.ConverterDescriptor;
16 import org.nuxeo.ecm.core.storage.sql.coremodel.SQLBlob;
17 import org.nuxeo.ecm.platform.commandline.executor.api.CmdParameters;
18 import org.nuxeo.ecm.platform.commandline.executor.api.CommandAvailability;
19 import org.nuxeo.ecm.platform.commandline.executor.api.CommandLineExecutorService;
20 import org.nuxeo.ecm.platform.commandline.executor.api.ExecResult;
21 import org.nuxeo.ecm.platform.picture.core.im.IMImageUtils;
22 import org.nuxeo.runtime.api.Framework;
23 import org.nuxeo.runtime.services.streaming.FileSource;
24 import org.nuxeo.runtime.services.streaming.StreamSource;
26 public class ThumbnailConverter extends IMImageUtils implements Converter {
27 private static final Log log = LogFactory.getLog(ThumbnailConverter.class);
30 public BlobHolder convert(BlobHolder blobHolder,
31 Map<String, Serializable> parameters) throws ConversionException {
33 // Make sure the toThumbnail command is available
34 CommandLineExecutorService cles = Framework
35 .getLocalService(CommandLineExecutorService.class);
36 CommandAvailability commandAvailability = cles
37 .getCommandAvailability("toThumbnail");
38 if (!commandAvailability.isAvailable()) {
41 // get the input and output of the command
42 Blob blob = blobHolder.getBlob();
43 File inputFile = null;
44 if (blob instanceof FileBlob) {
45 inputFile = ((FileBlob) blob).getFile();
46 } else if (blob instanceof SQLBlob) {
47 StreamSource source = ((SQLBlob) blob).getBinary()
49 inputFile = ((FileSource) source).getFile();
51 if (inputFile == null) {
54 CmdParameters params = new CmdParameters();
55 File outputFile = File.createTempFile("nuxeoImageTarget", "."
57 params.addNamedParameter("inputFilePath", inputFile);
58 params.addNamedParameter("outputFilePath", outputFile);
60 ExecResult res = cles.execCommand("toThumbnail", params);
61 if (!res.isSuccessful()) {
64 Blob targetBlob = new FileBlob(outputFile);
65 Framework.trackFile(outputFile, targetBlob);
66 return new SimpleCachableBlobHolder(targetBlob);
67 } catch (Exception e) {
68 throw new ConversionException("Thumbnail conversion has failed", e);
73 public void init(ConverterDescriptor descriptor) {