Java源码示例:org.alfresco.service.cmr.repository.TransformationOptions

示例1
private void strictMimetypeCheck(ContentReader reader, TransformationOptions options, String sourceMimetype)
    throws UnsupportedTransformationException
{
    if (strictMimeTypeCheck && depth.get() == 1)
    {
        String differentType = getMimetypeService().getMimetypeIfNotMatches(reader.getReader());

        if (!transformerConfig.strictMimetypeCheck(sourceMimetype, differentType))
        {
            String fileName = ((LegacyTransformerDebug)transformerDebug).getFileName(options, true, 0);
            String readerSourceMimetype = reader.getMimetype();
            String message = "Transformation of ("+fileName+
                ") has not taken place because the declared mimetype ("+
                readerSourceMimetype+") does not match the detected mimetype ("+
                differentType+").";
            logger.warn(message);
            throw new UnsupportedTransformationException(message);
        }
    }
}
 
示例2
@Override
public boolean isSupported(String sourceMimetype, long sourceSizeInBytes, String contentUrl, String targetMimetype,
                           Map<String, String> actualOptions, String transformName, NodeRef sourceNodeRef)
{
    String renditionName = TransformDefinition.convertToRenditionName(transformName);
    TransformationOptions transformationOptions = converter.getTransformationOptions(renditionName, actualOptions);
    transformationOptions.setSourceNodeRef(sourceNodeRef);

    ContentTransformer legacyTransform = getTransformer(contentUrl, sourceMimetype,
            sourceSizeInBytes, targetMimetype, transformationOptions);

    if (logger.isDebugEnabled())
    {
        logger.debug(TRANSFORM + renditionName + " from " + sourceMimetype +
                (legacyTransform == null ? " is unsupported" : " is supported"));
    }
    return legacyTransform != null;
}
 
示例3
private NodeRef createThumbnailNode(final NodeRef node, final QName contentProperty,
            final String mimetype, final TransformationOptions transformationOptions, final String thumbnailName,
            final ThumbnailParentAssociationDetails assocDetails)
{
    // Get the name of the thumbnail and add to properties map
    QName thumbnailQName = getThumbnailQName(thumbnailName);
    RenditionDefinition definition = createRenditionDefinition(contentProperty, mimetype,
                transformationOptions, thumbnailQName, assocDetails);
    try
    {
        ChildAssociationRef thumbnailAssoc = renditionService.render(node, definition);
        NodeRef thumbnail = getThumbnailNode(thumbnailAssoc);
        setThumbnailNameProperty(thumbnail, thumbnailName);
        return thumbnail;
    } catch (RenditionServiceException rsx)
    {
        throw new ThumbnailException(rsx.getMessage(), rsx);
    }
}
 
示例4
@Override
protected void transformRemote(RemoteTransformerClient remoteTransformerClient, ContentReader reader,
                               ContentWriter writer, TransformationOptions options, String sourceMimetype,
                               String targetMimetype, String sourceExtension, String targetExtension,
                               String targetEncoding) throws Exception
{
    String sourceEncoding = reader.getEncoding();
    long timeoutMs = options.getTimeoutMs();

    remoteTransformerClient.request(reader, writer, sourceMimetype, sourceExtension, targetExtension,
            timeoutMs, logger,
            "transformName", "string",
            "sourceMimetype", sourceMimetype,
            "targetMimetype", targetMimetype,
            "targetExtension", targetExtension,
            SOURCE_ENCODING, sourceEncoding,
            TARGET_ENCODING, targetEncoding);

}
 
示例5
@Override
protected void transformRemote(RemoteTransformerClient remoteTransformerClient, ContentReader reader,
                               ContentWriter writer, TransformationOptions options,
                               String sourceMimetype, String targetMimetype,
                               String sourceExtension, String targetExtension,
                               String targetEncoding) throws Exception
{
    long timeoutMs = options.getTimeoutMs();
    boolean recurse = includeContents;
    if(options.getIncludeEmbedded() != null)
    {
        recurse = options.getIncludeEmbedded();
    }
    remoteTransformerClient.request(reader, writer, sourceMimetype, sourceExtension, targetExtension,
            timeoutMs, logger,
            "transformName", "Archive",
            "includeContents", Boolean.toString(recurse),
            "sourceMimetype", sourceMimetype,
            "sourceExtension", sourceExtension,
            "targetMimetype", targetMimetype,
            TARGET_ENCODING, targetEncoding);
}
 
示例6
@Override
protected TransformationOptions getTransformOptionsImpl(TransformationOptions options, RenderingContext context)
{
    options.setSourceNodeRef(context.getSourceNode());

    ImageTransformationOptions imageTransformationOptions = (ImageTransformationOptions)options;
    
    String commandOptions = context.getCheckedParam(PARAM_COMMAND_OPTIONS, String.class);
    ImageResizeOptions imageResizeOptions = getImageResizeOptions(context);

    boolean autoOrient = context.getParamWithDefault(PARAM_AUTO_ORIENTATION, true);
    
    imageTransformationOptions.setResizeOptions(imageResizeOptions);
    imageTransformationOptions.setAutoOrient(autoOrient);
    if (commandOptions != null)
    {
        imageTransformationOptions.setCommandOptions(commandOptions);
    }
    
    return super.getTransformOptionsImpl(options, context);
}
 
示例7
/**
 * Returns the maximum source size (in KBytes) allowed given the supplied values.
 * @return 0 if the the transformation is disabled, -1 if there is no limit, otherwise the size in KBytes.
 */
@Override
public long getMaxSourceSizeKBytes(String sourceMimetype, String targetMimetype, TransformationOptions options)
{
    long maxSourceSizeKBytes = -1;
    
    // The maxSourceSizeKbytes value is ignored if this transformer is able to use
    // page limits and the limits include a pageLimit. Normally used in the creation
    // of icons. Note the readLimitKBytes value is not checked as the combined limits
    // only have the max or limit KBytes value set (the smaller value is returned).
    TransformationOptionLimits limits = getLimits(sourceMimetype, targetMimetype, options);
    if (!isPageLimitSupported(sourceMimetype, targetMimetype, options) || limits.getPageLimit() <= 0)
    {
        maxSourceSizeKBytes = limits.getMaxSourceSizeKBytes();
    }
    
    return maxSourceSizeKBytes;
}
 
示例8
@Deprecated
public ContentTransformer getTransformer(String sourceUrl, String sourceMimetype, long sourceSize, String targetMimetype, TransformationOptions options)
{
    List<ContentTransformer> transformers = null;
    try
    {
        transformerDebug.pushAvailable(sourceUrl, sourceMimetype, targetMimetype, options);
        List<ContentTransformer> activeTransformers = getActiveTransformers(sourceMimetype, sourceSize, targetMimetype, options);
        transformerDebug.availableTransformers(activeTransformers, sourceSize, options, "ContentService.getTransformer(...)");
        transformers = activeTransformers.isEmpty() ? null : activeTransformers;
    }
    finally
    {
        transformerDebug.popAvailable();
    }
    return (transformers == null) ? null : transformers.get(0);
}
 
示例9
/**
 * @see org.alfresco.repo.content.transform.ContentTransformer#isTransformable(java.lang.String, java.lang.String, org.alfresco.service.cmr.repository.TransformationOptions)
 */
@SuppressWarnings("deprecation")
public boolean isExplicitTransformation(String sourceMimetype, String targetMimetype, TransformationOptions options)
{
   boolean result = false;
   
   if (this.explicitTransformations != null)
   {
       for (ContentTransformerRegistry.TransformationKey transformationKey : this.explicitTransformations)
       {
           if (transformationKey.getSourceMimetype().equals(sourceMimetype) == true &&
               transformationKey.getTargetMimetype().equals(targetMimetype) == true)
           {
               result = true;
               break;
           }
       }
   }
   
   return result;
}
 
示例10
public void testGetTransformerEnabledDisabled() throws Exception
{
    TransformationOptions options = new TransformationOptions();

    Assert.assertNotNull(registry.getTransformer(MIMETYPE_TEXT_PLAIN, -1, MIMETYPE_TEXT_PLAIN, options));
    try
    {
        registry.setEnabled(false);
        Assert.assertNull(registry.getTransformer(MIMETYPE_TEXT_PLAIN, -1, MIMETYPE_TEXT_PLAIN, options));
    }
    finally
    {
        registry.setEnabled(true);
    }
    Assert.assertNotNull(registry.getTransformer(MIMETYPE_TEXT_PLAIN, -1, MIMETYPE_TEXT_PLAIN, options));
}
 
示例11
/**
 * See {@link TransformerConfig#isSupportedTransformation(ContentTransformer, String, String, TransformationOptions)}.
 */
public boolean isSupportedTransformation(ContentTransformer transformer, String sourceMimetype,
        String targetMimetype, TransformationOptions options)
{
    if (sourceMimetype == null)
    {
        sourceMimetype = ANY;
    }
    
    if (targetMimetype == null)
    {
        targetMimetype = ANY;
    }
    
    boolean isSupported = true;
    String name = transformer.getName();
    SupportedAndUnsupportedTransformations supportedBytransformer = supported.get(name);
    if (supportedBytransformer != null)
    {
        isSupported = supportedBytransformer.isSupported(sourceMimetype, targetMimetype);
    }
    return isSupported;
}
 
示例12
@Override
protected void transformRemote(RemoteTransformerClient remoteTransformerClient, ContentReader reader,
                               ContentWriter writer, TransformationOptions options,
                               String sourceMimetype, String targetMimetype,
                               String sourceExtension, String targetExtension,
                               String targetEncoding) throws Exception
{
    long timeoutMs = options.getTimeoutMs();

    remoteTransformerClient.request(reader, writer, sourceMimetype, sourceExtension, targetExtension,
            timeoutMs, logger,
            "transformName", transformerName,
            "sourceMimetype", sourceMimetype,
            "targetMimetype", targetMimetype,
            "targetExtension", targetExtension,
            TARGET_ENCODING, targetEncoding);
}
 
示例13
protected void transformInternal(ContentReader reader, ContentWriter writer, TransformationOptions options)
         throws Exception
 {
     TransformationOptionLimits original = options.getLimits();
     try
     {
         // Combine the transformer's limit values into the options so they are available to the worker
         options.setLimits(getLimits(reader, writer, options));

         // Perform the transformation
         this.worker.transform(reader, writer, options);
     }
     finally
     {
         options.setLimits(original);
     }
}
 
示例14
/**
 * Convenience method to check the transformability of a transformation
 * 
 * @param reader    content reader
 * @param writer    content writer
 * @param options   transformation options
 * @throws AlfrescoRuntimeException if the the transformation isn't supported
 */
protected void checkTransformable(ContentReader reader, ContentWriter writer, TransformationOptions options)
{
    String sourceMimetype = getMimetype(reader);
    String targetMimetype = getMimetype(writer);
    long sourceSize = reader.getSize();
    boolean transformable = isTransformable(sourceMimetype, sourceSize, targetMimetype, options);
    if (transformable == false)
    {
        // This method is only called once a transformer has been selected, so it should be able to
        // handle the mimetypes but might not be able to handle all the limits as it might be part of
        // of a complex (compound) transformer. So report the max size if set.
        long maxSourceSizeKBytes = getMaxSourceSizeKBytes(sourceMimetype, targetMimetype, options);
        boolean sizeOkay = maxSourceSizeKBytes < 0 || (maxSourceSizeKBytes > 0 && sourceSize <= maxSourceSizeKBytes*1024);
        AlfrescoRuntimeException e = new UnsupportedTransformationException("Unsupported transformation: " +
                getBeanName()+' '+sourceMimetype+" to "+targetMimetype+' '+
                (sizeOkay
                ? ""
                : transformerDebug.fileSize(sourceSize)+" > "+ transformerDebug.fileSize(maxSourceSizeKBytes*1024)));
        throw transformerDebug.setCause(e);
    }
    // it all checks out OK
}
 
示例15
@Deprecated
@Override
// Same as getTransformers, but without debug
public List<ContentTransformer> getActiveTransformers(String sourceMimetype,
                                                      String targetMimetype, TransformationOptions options)
{
    return getActiveTransformers(sourceMimetype, -1, targetMimetype, options);
}
 
示例16
/**
 * Constructor.  Specify the name of the thumbnail.
 * 
 * @param thumbnailName the name of the thumbnail, can be null
 */
public ThumbnailDefinition(String mimetype, TransformationOptions options, String thumbnailName)
{
    this(mimetype, options);
    this.name= thumbnailName;
    options.setUse(thumbnailName);
}
 
示例17
@Override
protected void transformRemote(RemoteTransformerClient remoteTransformerClient, ContentReader reader,
                               ContentWriter writer, TransformationOptions options, String sourceMimetype,
                               String targetMimetype, String sourceExtension, String targetExtension,
                               String targetEncoding) throws Exception
{
    long timeoutMs = options.getTimeoutMs();

    remoteTransformerClient.request(reader, writer, sourceMimetype, sourceExtension, targetExtension,
            timeoutMs, logger,
            "transformName", "appleIWorks",
            "sourceMimetype", sourceMimetype,
            "sourceExtension", sourceExtension,
            "targetMimetype", targetMimetype);
}
 
示例18
/**
 * @since 3.5
 */
public List<ContentTransformer> getActiveTransformers(String sourceMimetype, long sourceSize, String targetMimetype, TransformationOptions options)
{
    if (firstTime)
    {
        firstTime = false;
        transformerDebug.debug("Legacy transforms are " + (enabled ? "enabled" : "disabled"));
    }

    // Get the list of transformers
    List<ContentTransformer> transformers;
    if (enabled)
    {
        transformers = transformerSelector.selectTransformers(sourceMimetype, sourceSize, targetMimetype, options);

    }
    else
    {
        transformers = Collections.EMPTY_LIST;
    }
    if (logger.isDebugEnabled())
    {
        logger.debug("Searched for transformer: \n" +
                "   source mimetype: " + sourceMimetype + "\n" +
                "   target mimetype: " + targetMimetype + "\n" +
                "   transformers: " + transformers);
    }
    return transformers;
}
 
示例19
private void normalTest(boolean isAvailable)
{
    AbstractContentTransformer2 simple = new AbstractContentTransformer2() {
        @Override
        protected void transformInternal(ContentReader reader, ContentWriter writer,
                TransformationOptions options) throws Exception
        {
        }};
    simple.setBeanName("transformer.exampleSimple");
    
    when(transformerRegistry.getAllTransformers()).thenReturn(Arrays.asList(new ContentTransformer[] {(ContentTransformer)simple}));
    if (isAvailable)
    {
        when(transformerRegistry.getTransformers()).thenReturn(Arrays.asList(new ContentTransformer[] {(ContentTransformer)simple}));
    }
    when(transformerLog.getPropertyAndValue(any(Properties.class))).thenReturn("# transformer.log.entries=0");
    when(transformerDebugLog.getPropertyAndValue(any(Properties.class))).thenReturn("# transformer.debug.entries=0");

    String actual = new TransformerPropertyGetter(false, transformerProperties,
            mimetypeService, transformerRegistry, transformerLog, transformerDebugLog).toString();
    
    assertEquals("# LOG and DEBUG history sizes\n" +
            "# ===========================\n" +
            "# Use small values as these logs are held in memory. 0 to disable.\n" +
            "# transformer.log.entries=0\n" +
            "# transformer.debug.entries=0\n" +
            "\n" +
            "# Transformers without extra configuration settings\n" +
            "# =================================================\n" +
            "\n" +
            "# exampleSimple\n" +
            "# -------------\n" +
            (isAvailable ? "" : "# content.transformer.exampleSimple.available=false\n"), actual);
}
 
示例20
@Override
protected TransformationOptions newTransformationOptions(Action ruleAction, NodeRef sourceNodeRef)
{
    ImageTransformationOptions options = new ImageTransformationOptions();
    options.setSourceNodeRef(sourceNodeRef);
    options.setSourceContentProperty(ContentModel.PROP_NAME);
    options.setTargetContentProperty(ContentModel.PROP_NAME);
    
    String convertCommand = (String) ruleAction.getParameterValue(PARAM_CONVERT_COMMAND);
    options.setCommandOptions(convertCommand);

    return options;
}
 
示例21
@Override
public boolean isTransformableMimetype(String sourceMimetype,
        String targetMimetype, TransformationOptions options)
{
    // We'll arbitrarily claim to be able to transform PDF to PNG
    return MimetypeMap.MIMETYPE_PDF.equals(targetMimetype);
}
 
示例22
public TransformationCallable(ContentReader contentReader, String targetMimeType,
                              TransformationOptions transformationOptions, RenderingContext context, String initiatingUsername)
{
    this.contentReader = contentReader;
    this.targetMimeType = targetMimeType;
    String sourceMimetype = contentReader.getMimetype();
    this.options = converter.getOptions(transformationOptions, sourceMimetype, targetMimeType);
    this.context = context;
    this.initiatingUsername = initiatingUsername;
}
 
示例23
private boolean isPageLimitSupported(ContentTransformer transformer, String sourceMimetype,
        String targetMimetype, TransformationOptions options)
{
    return (transformer instanceof AbstractContentTransformerLimits)
        ? ((AbstractContentTransformerLimits)transformer).isPageLimitSupported(sourceMimetype, targetMimetype, options)
        : false;
}
 
示例24
/**
 * {@inheritDoc}<p>
 * 
 * Implementation calls the deprecated overloaded method without the sourceSize parameter
 * and then {@link #isTransformableSize(String, long, String, TransformationOptions)}.
 */
@Override
public boolean isTransformable(String sourceMimetype, long sourceSize, String targetMimetype, TransformationOptions options)
{
    // To make TransformerDebug output clearer, check the mimetypes and then the sizes.
    // If not done, 'unavailable' transformers due to size might be reported even
    // though they cannot transform the source to the target mimetype.

    return
        isSupportedTransformation(sourceMimetype, targetMimetype, options) &&
        isTransformableMimetype(sourceMimetype, targetMimetype, options) &&
        isTransformableSize(sourceMimetype, sourceSize, targetMimetype, options);
}
 
示例25
public void checkIsTransformable() throws Exception
{
    // check reliability
    boolean reliability = transformer.isTransformable(MimetypeMap.MIMETYPE_HTML, -1, MimetypeMap.MIMETYPE_TEXT_PLAIN, new TransformationOptions());
    assertTrue(reliability);   // plain text to plain text is supported
    
    // check other way around
    reliability = transformer.isTransformable(MimetypeMap.MIMETYPE_TEXT_PLAIN, -1, MimetypeMap.MIMETYPE_HTML, new TransformationOptions());
    assertFalse(reliability);   // plain text to plain text is not supported
}
 
示例26
@Override
public void transformInternal(ContentReader reader,
        ContentWriter writer, TransformationOptions options)
        throws Exception
{
    triggered.setValue(true);

    reader.getContentString();
    
    // alwaysFail
    throw new AlfrescoRuntimeException("Test code intentionally failed method call.");
}
 
示例27
/**
 * Returns max and limit values for time, size and pages for a specified source and
 * target mimetypes, combined with this Transformer's general limits and optionally
 * the supplied transformation option's limits.
 */
protected TransformationOptionLimits getLimits(ContentReader reader, ContentWriter writer,
        TransformationOptions options)
{
    return (reader == null || writer == null)
        ? transformerConfig.getLimits(this, null, null, options.getUse()).combine(options.getLimits())
        : getLimits(reader.getMimetype(), writer.getMimetype(), options);
}
 
示例28
/**
 * Pass on any limits to the reader. Will only do so if the reader is an
 * {@link AbstractContentReader}.
 * @param reader passed to {@link #transform(ContentReader, ContentWriter, TransformationOptions)}.
 * @param writer passed to {@link #transform(ContentReader, ContentWriter, TransformationOptions)}.
 * @param options passed to {@link #transform(ContentReader, ContentWriter, TransformationOptions)}.
 */
protected void setReaderLimits(ContentReader reader, ContentWriter writer,
        TransformationOptions options)
{
    if (reader instanceof AbstractContentReader)
    {
        AbstractContentReader abstractContentReader = (AbstractContentReader)reader;
        TransformationOptionLimits limits = getLimits(reader, writer, options);
        abstractContentReader.setLimits(limits);
        abstractContentReader.setTransformerDebug(transformerDebug);
    }
}
 
示例29
@Override
public boolean isTransformable(String sourceMimetype, long sourceSize, String targetMimetype, TransformationOptions options)
{
    if (!isAvailable())
    {
        return false;
    }

    return super.isTransformable(sourceMimetype, sourceSize, targetMimetype, options);
}
 
示例30
public void transformInternal(ContentReader reader, ContentWriter writer, TransformationOptions options)
        throws Exception
{
    if (remoteTransformerClientConfigured())
    {
        String sourceMimetype = getMimetype(reader);
        String targetMimetype = writer.getMimetype();
        String targetEncoding = writer.getEncoding();

        MimetypeService mimetypeService = getMimetypeService();
        String sourceExtension = mimetypeService.getExtension(sourceMimetype);
        String targetExtension = mimetypeService.getExtension(targetMimetype);
        if (sourceExtension == null || targetExtension == null)
        {
            throw new AlfrescoRuntimeException("Unknown extensions for mimetypes: \n" +
                    "   source mimetype: " + sourceMimetype + "\n" +
                    "   source extension: " + sourceExtension + "\n" +
                    "   target mimetype: " + targetMimetype + "\n" +
                    "   target extension: " + targetExtension + "\n" +
                    "   target encoding: " + targetEncoding);
        }

        transformRemote(remoteTransformerClient, reader, writer, options, sourceMimetype, targetMimetype,
                sourceExtension, targetExtension, targetEncoding);
    }
    else
    {
        transformLocal(reader, writer, options);
    }

    Log logger = getLogger();
    if (logger.isDebugEnabled())
    {
        logger.debug("Transformation completed: \n" +
                "   source: " + reader + "\n" +
                "   target: " + writer + "\n" +
                "   options: " + options);
    }
}