From 36c251afff9bea30af7a7964c7f64eecc50f9c7f Mon Sep 17 00:00:00 2001 From: Alexandru Epure Date: Tue, 9 Aug 2016 13:57:13 +0000 Subject: [PATCH] Merged 5.2.N (5.2.1) to HEAD (5.2) 128569 adavis: MNT-16381 Transformers must validate the content stream mimetype - Ensure error when indexer is the caller includes the file name rather than null. NodeContentGet now calls transform method with TransformationOptions parameter and the original transformer method was deprecated as it should be been when this extra parameter was added. - Set the strictMimeTypeCheck and retryTransformOnDifferentMimeType properties on dynamically created pipeline and fail over transformers from global properties as is don for static transformers. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@129293 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../AbstractContentTransformer2.java | 7 +- .../content/transform/ContentTransformer.java | 5 +- .../TransformerConfigDynamicTransformers.java | 40 +++-- .../transform/TransformerConfigImpl.java | 2 +- ...nsformerConfigDynamicTransformersTest.java | 160 +++++++++++++----- 5 files changed, 154 insertions(+), 60 deletions(-) diff --git a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformer2.java b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformer2.java index a5c81fbbf2..600567c1bb 100644 --- a/source/java/org/alfresco/repo/content/transform/AbstractContentTransformer2.java +++ b/source/java/org/alfresco/repo/content/transform/AbstractContentTransformer2.java @@ -656,7 +656,12 @@ public abstract class AbstractContentTransformer2 extends AbstractContentTransfo transformerConfig.getStatistics(null, sourceMimetype, targetMimetype, true).recordError(transformationTime); } } - + + public Object getRetryTransformOnDifferentMimeType() + { + return retryTransformOnDifferentMimeType; + } + public void setRetryTransformOnDifferentMimeType(boolean retryTransformOnDifferentMimeType) { this.retryTransformOnDifferentMimeType = retryTransformOnDifferentMimeType; diff --git a/source/java/org/alfresco/repo/content/transform/ContentTransformer.java b/source/java/org/alfresco/repo/content/transform/ContentTransformer.java index 8f4b8fa4d2..f06a813544 100644 --- a/source/java/org/alfresco/repo/content/transform/ContentTransformer.java +++ b/source/java/org/alfresco/repo/content/transform/ContentTransformer.java @@ -138,7 +138,10 @@ public interface ContentTransformer extends ContentWorker public long getTransformationTime(String sourceMimetype, String targetMimetype); /** - * @see #transform(ContentReader, ContentWriter, TransformationOptions) + * @see #transform(ContentReader, ContentWriter, TransformationOptions) + * + * @deprecated + * Deprecated use {link {@link #transform(ContentReader, ContentWriter, TransformationOptions)}. */ public void transform(ContentReader reader, ContentWriter writer) throws ContentIOException; diff --git a/source/java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformers.java b/source/java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformers.java index 740d51cb45..d78c1c9c22 100644 --- a/source/java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformers.java +++ b/source/java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformers.java @@ -36,8 +36,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Map; - +import java.util.Map; +import java.util.Properties; + import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.service.cmr.module.ModuleService; @@ -60,15 +61,17 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam public TransformerConfigDynamicTransformers(TransformerConfig transformerConfig, TransformerProperties transformerProperties, MimetypeService mimetypeService, ContentService contentService, ContentTransformerRegistry transformerRegistry, - TransformerDebug transformerDebug, ModuleService moduleService, DescriptorService descriptorService) + TransformerDebug transformerDebug, ModuleService moduleService, DescriptorService descriptorService, + Properties globalProperties) { createDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, moduleService, descriptorService); + transformerRegistry, transformerDebug, moduleService, descriptorService, globalProperties); } private void createDynamicTransformers(TransformerConfig transformerConfig, TransformerProperties transformerProperties, MimetypeService mimetypeService, ContentService contentService, ContentTransformerRegistry transformerRegistry, - TransformerDebug transformerDebug, ModuleService moduleService, DescriptorService descriptorService) + TransformerDebug transformerDebug, ModuleService moduleService, DescriptorService descriptorService, + Properties globalProperties) { Collection SUFFIXES = Arrays.asList(new String [] { FAILOVER, @@ -118,9 +121,11 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam AbstractContentTransformer2 transformer = property.suffix.equals(PIPELINE) ? createComplexTransformer(property, transformerConfig, mimetypeService, - contentService, transformerRegistry, transformerDebug, available) + contentService, transformerRegistry, transformerDebug, available, + globalProperties) : createFailoverTransformer(property, transformerConfig, mimetypeService, - contentService, transformerRegistry, transformerDebug, available); + contentService, transformerRegistry, transformerDebug, available, + globalProperties); transformer.register(); processed.add(property); dynamicTransformers.add(transformer); @@ -168,7 +173,7 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam TransformerConfig transformerConfig, MimetypeService mimetypeService, ContentService contentService, ContentTransformerRegistry transformerRegistry, TransformerDebug transformerDebug, - boolean available) + boolean available, Properties globalProperties) { List transformers = new ArrayList(); List intermediateMimetypes = new ArrayList(); @@ -185,7 +190,7 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam } }; setupContentTransformer2(property, transformerConfig, mimetypeService, contentService, - transformerRegistry, transformerDebug, available, transformer, transformers); + transformerRegistry, transformerDebug, available, transformer, transformers, globalProperties); // baseComplexContentTransformer transformer.setContentService(contentService); @@ -201,7 +206,7 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam TransformerConfig transformerConfig, MimetypeService mimetypeService, ContentService contentService, ContentTransformerRegistry transformerRegistry, TransformerDebug transformerDebug, - boolean available) + boolean available, Properties globalProperties) { List transformers = new ArrayList(); @@ -217,7 +222,7 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam } }; setupContentTransformer2(property, transformerConfig, mimetypeService, contentService, - transformerRegistry, transformerDebug, available, transformer, transformers); + transformerRegistry, transformerDebug, available, transformer, transformers, globalProperties); // FailoverContentTransformer transformer.setTransformers(transformers); @@ -286,7 +291,8 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam TransformerConfig transformerConfig, MimetypeService mimetypeService, ContentService contentService, ContentTransformerRegistry transformerRegistry, TransformerDebug transformerDebug, boolean available, - AbstractContentTransformer2 transformer, List transformers) + AbstractContentTransformer2 transformer, List transformers, + Properties globalProperties) { try { @@ -311,9 +317,17 @@ public class TransformerConfigDynamicTransformers extends TransformerPropertyNam // AbstractContentTransformer2 transformer.setBeanName(property.transformerName); - transformer.setRegisterTransformer(available); + transformer.setRegisterTransformer(available); + transformer.setStrictMimeTypeCheck(getBoolean(globalProperties, "content.transformer.strict.mimetype.check")); + transformer.setRetryTransformOnDifferentMimeType(getBoolean(globalProperties, "content.transformer.retryOn.different.mimetype")); } + private boolean getBoolean(Properties properties, String name) + { + String value = properties == null ? null : properties.getProperty(name); + return "true".equalsIgnoreCase(value); + } + private void error(String msg) { errorCount++; diff --git a/source/java/org/alfresco/repo/content/transform/TransformerConfigImpl.java b/source/java/org/alfresco/repo/content/transform/TransformerConfigImpl.java index 8e4f47f137..c1363fedce 100644 --- a/source/java/org/alfresco/repo/content/transform/TransformerConfigImpl.java +++ b/source/java/org/alfresco/repo/content/transform/TransformerConfigImpl.java @@ -168,7 +168,7 @@ public class TransformerConfigImpl extends AbstractLifecycleBean implements Tran transformerProperties = new TransformerProperties(subsystem, globalProperties); dynamicTransformers = new TransformerConfigDynamicTransformers(this, transformerProperties, mimetypeService, - contentService, transformerRegistry, transformerDebug, moduleService, descriptorService); + contentService, transformerRegistry, transformerDebug, moduleService, descriptorService, globalProperties); statistics= new TransformerConfigStatistics(this, mimetypeService); limits = new TransformerConfigLimits(transformerProperties, mimetypeService); supported = new TransformerConfigSupported(transformerProperties, mimetypeService); diff --git a/source/test-java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformersTest.java b/source/test-java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformersTest.java index feb1ffbced..a1c76a6e7e 100644 --- a/source/test-java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformersTest.java +++ b/source/test-java/org/alfresco/repo/content/transform/TransformerConfigDynamicTransformersTest.java @@ -25,28 +25,23 @@ */ package org.alfresco.repo.content.transform; -import static org.alfresco.repo.content.transform.TransformerPropertyNameExtractorTest.mockMimetypes; -import static org.alfresco.repo.content.transform.TransformerPropertyNameExtractorTest.mockProperties; -import static org.junit.Assert.*; -import static org.mockito.Mockito.when; - -import java.util.Arrays; -import java.util.Date; - -import org.alfresco.service.cmr.module.ModuleDetails; -import org.alfresco.service.cmr.module.ModuleService; -import org.alfresco.service.cmr.repository.ContentService; -import org.alfresco.service.cmr.repository.MimetypeService; -import org.alfresco.service.cmr.repository.TransformationOptionLimits; -import org.alfresco.service.cmr.repository.TransformationOptions; -import org.alfresco.service.descriptor.Descriptor; -import org.alfresco.service.descriptor.DescriptorService; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; +import static org.alfresco.repo.content.transform.TransformerPropertyNameExtractorTest.mockMimetypes; +import static org.alfresco.repo.content.transform.TransformerPropertyNameExtractorTest.mockProperties; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; + +import java.util.Properties; + +import org.alfresco.service.cmr.module.ModuleDetails; +import org.alfresco.service.cmr.module.ModuleService; +import org.alfresco.service.cmr.repository.ContentService; +import org.alfresco.service.cmr.repository.MimetypeService; +import org.alfresco.service.cmr.repository.TransformationOptions; +import org.alfresco.service.descriptor.Descriptor; +import org.alfresco.service.descriptor.DescriptorService; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; /** @@ -121,7 +116,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "transformer1|pdf|transformer2|png|transformer3"); assertEquals(0, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); assertEquals(4, transformerRegistry.getAllTransformers().size()); assertEquals(1, transformerRegistry.getTransformers().size()); @@ -141,9 +136,9 @@ public class TransformerConfigDynamicTransformersTest assertEquals("transformer.transformer3", transformer.getIntermediateTransformers().get(2).getName()); // - transformer.isTransformable("application/pdf", -1, "text/txt", new TransformationOptions()); - } - + transformer.isTransformable("application/pdf", -1, "text/txt", new TransformationOptions()); + } + @Test // Pipeline - too few components in the value public void pipelineTooFewCompsTest() @@ -152,7 +147,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "transformer1|pdf"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -163,7 +158,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "transformer1|pdf|transformer2|png"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -174,7 +169,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformer3.pipeline", "transformer1|pdf|transformer2"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -185,7 +180,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "transformer1|*|transformer2|png|transformer3"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); transformerRegistry.getTransformer("transformer.transformerA"); } @@ -198,7 +193,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "transformer1|pdf|*|png|transformer3"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); transformerRegistry.getTransformer("transformer.transformerA"); } @@ -211,7 +206,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.pipeline", "unknown1|pdf|unknown2|png|unknown3"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -223,7 +218,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.available", "false"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); assertEquals(4, transformerRegistry.getAllTransformers().size()); assertEquals(0, transformerRegistry.getTransformers().size()); // << note 0 rather than 1 @@ -241,7 +236,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.failover", "transformer1|transformer2|transformer3"); assertEquals(0, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); assertEquals(4, transformerRegistry.getAllTransformers().size()); assertEquals(1, transformerRegistry.getTransformers().size()); @@ -258,7 +253,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.failover", "transformer1"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -269,7 +264,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformer3.failover", "transformer1|transformer2"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -280,7 +275,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.failover", "transformer1|*|transformer3"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); transformerRegistry.getTransformer("transformer.transformerA"); } @@ -293,7 +288,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.failover", "unknown1|unknown2|unknown3"); assertEquals(1, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null).getErrorCount()); + transformerRegistry, transformerDebug, null, null, null).getErrorCount()); } @Test @@ -305,7 +300,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.available", "false"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); assertEquals(4, transformerRegistry.getAllTransformers().size()); assertEquals(0, transformerRegistry.getTransformers().size()); // << note 0 rather than 1 @@ -325,7 +320,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerE.failover", "transformer1|transformer1"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); assertEquals(5, transformerRegistry.getTransformers().size()); @@ -344,7 +339,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerE.failover", "transformer1|transformerC"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, null); + transformerRegistry, transformerDebug, null, null, null); assertEquals(2, transformerRegistry.getTransformers().size()); @@ -361,7 +356,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.edition", "Enterprise"); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, null, descriptorService); + transformerRegistry, transformerDebug, null, descriptorService, null); } private void ampTransformer(String moduleId) @@ -373,7 +368,7 @@ public class TransformerConfigDynamicTransformersTest "content.transformer.transformerA.amp", moduleId); new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, - transformerRegistry, transformerDebug, moduleService, null); + transformerRegistry, transformerDebug, moduleService, null, null); } @Test @@ -409,5 +404,82 @@ public class TransformerConfigDynamicTransformersTest ampTransformer("testAmp"); assertEquals(4, transformerRegistry.getAllTransformers().size()); - } + } + + // for MNT-16381 + + @Test + public void failoverPropertyFFTest() + { + internalProprtyTest(false, false, false); + } + + @Test + public void failoverPropertyFTTest() + { + internalProprtyTest(false, false, true); + } + + @Test + public void failoverPropertyTFTest() + { + internalProprtyTest(false, true, false); + } + + @Test + public void failoverPropertyTTTest() + { + internalProprtyTest(false, true, true); + } + + @Test + public void pipelinePropertyFFTest() + { + internalProprtyTest(true, false, false); + } + + @Test + public void pipelinePropertyFTTest() + { + internalProprtyTest(true, false, true); + } + + @Test + public void pipelinePropertyTFTest() + { + internalProprtyTest(true, true, false); + } + + @Test + public void pipelinePropertyTTTest() + { + internalProprtyTest(true, true, true); + } + + private void internalProprtyTest(boolean pipeline, boolean expectedRetry, boolean expectedCheck) + { + String[] transformerNamesAndValues = pipeline + ? new String[] {"content.transformer.transformerA.pipeline", "transformer1|pdf|transformer2"} + : new String[] {"content.transformer.transformerA.failover", "transformer1|transformer2|transformer3"}; + + Properties properties = new Properties(); + if (expectedRetry) + { + properties.setProperty("content.transformer.retryOn.different.mimetype", "true"); + } + if (expectedCheck) + { + properties.setProperty("content.transformer.strict.mimetype.check", "true"); + } + + mockProperties(transformerProperties, transformerNamesAndValues); + + assertEquals(0, new TransformerConfigDynamicTransformers(transformerConfig, transformerProperties, mimetypeService, contentService, + transformerRegistry, transformerDebug, null, null, properties).getErrorCount()); + + // Throws an exception if it does not exist + AbstractContentTransformer2 transformer = (AbstractContentTransformer2)transformerRegistry.getTransformer("transformer.transformerA"); + assertEquals("retryTransformOnDifferentMimeType was not set", expectedRetry, transformer.getRetryTransformOnDifferentMimeType()); + assertEquals("strictMimetypeCheck was not set", expectedCheck, transformer.getStrictMimeTypeCheck()); + } }