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()); + } }