diff --git a/src/main/java/org/alfresco/repo/content/transform/RemoteTransformerClient.java b/src/main/java/org/alfresco/repo/content/transform/RemoteTransformerClient.java index db3979c104..c6b0c20e94 100644 --- a/src/main/java/org/alfresco/repo/content/transform/RemoteTransformerClient.java +++ b/src/main/java/org/alfresco/repo/content/transform/RemoteTransformerClient.java @@ -115,6 +115,7 @@ public class RemoteTransformerClient if (args[i+1] != null) { builder.addTextBody(args[i], args[i + 1]); + sj.add(args[i] + '=' + args[i + 1]); } } diff --git a/src/main/java/org/alfresco/repo/content/transform/pdfrenderer/AlfrescoPdfRendererContentTransformerWorker.java b/src/main/java/org/alfresco/repo/content/transform/pdfrenderer/AlfrescoPdfRendererContentTransformerWorker.java index da30213a9f..4c97cc2a9e 100644 --- a/src/main/java/org/alfresco/repo/content/transform/pdfrenderer/AlfrescoPdfRendererContentTransformerWorker.java +++ b/src/main/java/org/alfresco/repo/content/transform/pdfrenderer/AlfrescoPdfRendererContentTransformerWorker.java @@ -33,7 +33,12 @@ import org.alfresco.repo.content.transform.ContentTransformerWorker; import org.alfresco.repo.content.transform.RemoteTransformerClient; import org.alfresco.repo.content.transform.magick.ImageResizeOptions; import org.alfresco.repo.content.transform.magick.ImageTransformationOptions; -import org.alfresco.service.cmr.repository.*; +import org.alfresco.service.cmr.repository.ContentIOException; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.MimetypeService; +import org.alfresco.service.cmr.repository.PagedSourceOptions; +import org.alfresco.service.cmr.repository.TransformationOptions; import org.alfresco.util.Pair; import org.alfresco.util.PropertyCheck; import org.alfresco.util.TempFileProvider; @@ -46,9 +51,9 @@ import java.io.File; import java.util.HashMap; import java.util.Map; -import static org.alfresco.repo.rendition2.RenditionDefinition2.ALLOW_ENLARGEMENT; +import static org.alfresco.repo.rendition2.RenditionDefinition2.ALLOW_PDF_ENLARGEMENT; import static org.alfresco.repo.rendition2.RenditionDefinition2.HEIGHT; -import static org.alfresco.repo.rendition2.RenditionDefinition2.MAINTAIN_ASPECT_RATIO; +import static org.alfresco.repo.rendition2.RenditionDefinition2.MAINTAIN_PDF_ASPECT_RATIO; import static org.alfresco.repo.rendition2.RenditionDefinition2.PAGE; import static org.alfresco.repo.rendition2.RenditionDefinition2.WIDTH; @@ -380,8 +385,8 @@ public class AlfrescoPdfRendererContentTransformerWorker extends ContentTransfor PAGE, page, WIDTH, width, HEIGHT, height, - ALLOW_ENLARGEMENT, allowEnlargement, - MAINTAIN_ASPECT_RATIO, maintainAspectRatio); + ALLOW_PDF_ENLARGEMENT, allowEnlargement, + MAINTAIN_PDF_ASPECT_RATIO, maintainAspectRatio); } @Override diff --git a/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java b/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java index 4c8ce4fbb0..619dce0f3c 100644 --- a/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java +++ b/src/main/java/org/alfresco/repo/rendition2/RenditionDefinition2.java @@ -62,9 +62,6 @@ public interface RenditionDefinition2 public static final String RESIZE_HEIGHT = "resizeHeight"; public static final String RESIZE_PERCENTAGE = "resizePercentage"; - - // ImageMagick & PdfRenderer options - /** Indicates whether scaling operations should scale up or down (true or false). */ public static final String ALLOW_ENLARGEMENT = "allowEnlargement"; @@ -78,6 +75,12 @@ public interface RenditionDefinition2 public static final String WIDTH = "width"; public static final String HEIGHT = "height"; + /** Indicates whether scaling operations should scale up or down (true or false). */ + public static final String ALLOW_PDF_ENLARGEMENT = "allowPdfEnlargement"; + + /** Indicates whether the aspect ratio of the image should be maintained (true or false). */ + public static final String MAINTAIN_PDF_ASPECT_RATIO = "maintainPdfAspectRatio"; + // Video options diff --git a/src/main/java/org/alfresco/repo/rendition2/TransformationOptionsConverter.java b/src/main/java/org/alfresco/repo/rendition2/TransformationOptionsConverter.java index a9ff257520..07c3a90350 100644 --- a/src/main/java/org/alfresco/repo/rendition2/TransformationOptionsConverter.java +++ b/src/main/java/org/alfresco/repo/rendition2/TransformationOptionsConverter.java @@ -46,6 +46,7 @@ import java.util.Set; import java.util.StringJoiner; import static org.alfresco.repo.rendition2.RenditionDefinition2.ALLOW_ENLARGEMENT; +import static org.alfresco.repo.rendition2.RenditionDefinition2.ALLOW_PDF_ENLARGEMENT; import static org.alfresco.repo.rendition2.RenditionDefinition2.AUTO_ORIENT; import static org.alfresco.repo.rendition2.RenditionDefinition2.CROP_GRAVITY; import static org.alfresco.repo.rendition2.RenditionDefinition2.CROP_HEIGHT; @@ -59,6 +60,7 @@ import static org.alfresco.repo.rendition2.RenditionDefinition2.FLASH_VERSION; import static org.alfresco.repo.rendition2.RenditionDefinition2.HEIGHT; import static org.alfresco.repo.rendition2.RenditionDefinition2.INCLUDE_CONTENTS; import static org.alfresco.repo.rendition2.RenditionDefinition2.MAINTAIN_ASPECT_RATIO; +import static org.alfresco.repo.rendition2.RenditionDefinition2.MAINTAIN_PDF_ASPECT_RATIO; import static org.alfresco.repo.rendition2.RenditionDefinition2.MAX_SOURCE_SIZE_K_BYTES; import static org.alfresco.repo.rendition2.RenditionDefinition2.OFFSET; import static org.alfresco.repo.rendition2.RenditionDefinition2.PAGE; @@ -96,7 +98,8 @@ public class TransformationOptionsConverter implements InitializingBean private static Set RESIZE_OPTIONS = new HashSet<>(Arrays.asList(new String[] { - WIDTH, HEIGHT, + WIDTH, HEIGHT, ALLOW_PDF_ENLARGEMENT, MAINTAIN_PDF_ASPECT_RATIO, + THUMBNAIL, RESIZE_WIDTH, RESIZE_HEIGHT, RESIZE_PERCENTAGE, ALLOW_ENLARGEMENT, MAINTAIN_ASPECT_RATIO })); @@ -112,7 +115,7 @@ public class TransformationOptionsConverter implements InitializingBean private static Set PDF_OPTIONS = new HashSet<>(Arrays.asList(new String[] { - PAGE, WIDTH, HEIGHT + PAGE, WIDTH, HEIGHT, ALLOW_PDF_ENLARGEMENT, MAINTAIN_PDF_ASPECT_RATIO })); private static Set FLASH_OPTIONS = new HashSet<>(Arrays.asList(new String[] @@ -192,13 +195,16 @@ public class TransformationOptionsConverter implements InitializingBean boolean hasOptions = !subclassOptionNames.isEmpty(); if (isPdfRendition || hasOptions) { + // The "pdf" rendition used the wrong TransformationOptions subclass. if (isPdfRendition || FLASH_OPTIONS.containsAll(subclassOptionNames)) { SWFTransformationOptions opts = new SWFTransformationOptions(); transformationOptions = opts; opts.setFlashVersion(isPdfRendition ? "9" : options.get(FLASH_VERSION)); } - else if (IMAGE_OPTIONS.containsAll(subclassOptionNames) || PDF_OPTIONS.containsAll(subclassOptionNames)) + // Even though the only standard rendition to use the pdf-renderer is "pdf" there may be custom renditions + // that use ImageTransformOptions to specify width, height etc. + else if (IMAGE_OPTIONS.containsAll(subclassOptionNames) || PDF_OPTIONS.containsAll(subclassOptionNames)) { ImageTransformationOptions opts = new ImageTransformationOptions(); transformationOptions = opts; diff --git a/src/main/java/org/alfresco/transform/client/model/config/TransformOption.java b/src/main/java/org/alfresco/transform/client/model/config/TransformOption.java index dfe3c63fcc..85dba88f06 100644 --- a/src/main/java/org/alfresco/transform/client/model/config/TransformOption.java +++ b/src/main/java/org/alfresco/transform/client/model/config/TransformOption.java @@ -29,7 +29,7 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; /** - * Represents an individual transformer option or group of options that are required or optional. + * Represents an individual transformer option or group of options that are required or optional (default). */ @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, diff --git a/src/main/java/org/alfresco/transform/client/model/config/TransformOptionGroup.java b/src/main/java/org/alfresco/transform/client/model/config/TransformOptionGroup.java index 1d9d099c6b..83919c3ec0 100644 --- a/src/main/java/org/alfresco/transform/client/model/config/TransformOptionGroup.java +++ b/src/main/java/org/alfresco/transform/client/model/config/TransformOptionGroup.java @@ -35,7 +35,7 @@ import java.util.List; public class TransformOptionGroup implements TransformOption { private boolean required; - private List transformOptions; + List transformOptions; public TransformOptionGroup() { diff --git a/src/main/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImpl.java b/src/main/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImpl.java index 2eec19eb08..b76f548fe0 100644 --- a/src/main/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImpl.java +++ b/src/main/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImpl.java @@ -42,13 +42,13 @@ import java.util.concurrent.ConcurrentMap; import static org.alfresco.repo.rendition2.RenditionDefinition2.TIMEOUT; /** - * Used by clients work out if a transformation is supported by the Transform Service. + * Used by clients to work out if a transformation is supported by the Transform Service. */ public class TransformServiceRegistryImpl implements TransformServiceRegistry, InitializingBean { class SupportedTransform { - private TransformOptionGroup transformOptions; + TransformOptionGroup transformOptions; private long maxSourceSizeBytes; public SupportedTransform(List transformOptions, long maxSourceSizeBytes) diff --git a/src/main/resources/alfresco/rendition-services2-context.xml b/src/main/resources/alfresco/rendition-services2-context.xml index b7dda3ac5a..b1fd36d65c 100644 --- a/src/main/resources/alfresco/rendition-services2-context.xml +++ b/src/main/resources/alfresco/rendition-services2-context.xml @@ -119,103 +119,115 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/alfresco/transform-service-config.json b/src/main/resources/alfresco/transform-service-config.json index 7eff8d6bb0..b3cfc347d4 100644 --- a/src/main/resources/alfresco/transform-service-config.json +++ b/src/main/resources/alfresco/transform-service-config.json @@ -4,7 +4,7 @@ "version": "1", "supportedSourceAndTargetList": [ {"sourceExt": "doc", "targetExt": "doc" }, - {"sourceExt": "docx", "targetExt": "doc" }, + {"sourceExt": "docx", "targetExt": "doc" }, {"sourceExt": "doc", "maxSourceSizeBytes": 10485760, "targetExt": "pdf" }, {"sourceExt": "xls", "maxSourceSizeBytes": 10485760, "targetExt": "pdf"}, {"sourceExt": "ppt", "maxSourceSizeBytes": 6291456, "targetExt": "pdf" }, @@ -18,11 +18,11 @@ "name": "tika", "version": "1", "transformOptions": [ - {"value": {"required": false, "name": "transform"}}, - {"value": {"required": false, "name": "includeContents"}}, - {"value": {"required": false, "name": "notExtractBookmarksText"}}, - {"value": {"required": false, "name": "targetMimetype"}}, - {"value": {"required": false, "name": "targetEncoding"}} + {"value": {"name": "transform"}}, + {"value": {"name": "includeContents"}}, + {"value": {"name": "notExtractBookmarksText"}}, + {"value": {"name": "targetMimetype"}}, + {"value": {"name": "targetEncoding"}} ], "supportedSourceAndTargetList": [ {"sourceExt": "pdf", "maxSourceSizeBytes": 26214400, "targetExt": "txt" }, @@ -39,11 +39,11 @@ "name": "pdfRenderer", "version": "1", "transformOptions": [ - {"value": {"required": false, "name": "page"}}, - {"value": {"required": false, "name": "width"}}, - {"value": {"required": false, "name": "height"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"value": {"name": "page"}}, + {"value": {"name": "width"}}, + {"value": {"name": "height"}}, + {"value": {"name": "allowPdfEnlargement"}}, + {"value": {"name": "maintainPdfAspectRatio"}} ], "supportedSourceAndTargetList": [ {"sourceExt": "pdf", "targetExt": "png" } @@ -53,25 +53,25 @@ "name": "imageMagick", "version": "1", "transformOptions": [ - {"value": {"required": false, "name": "alphaRemove"}}, - {"value": {"required": false, "name": "autoOrient"}}, - {"value": {"required": false, "name": "startPage"}}, - {"value": {"required": false, "name": "endPage"}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "cropGravity"}}, - {"value": {"required": false, "name": "cropWidth"}}, - {"value": {"required": false, "name": "cropHeight"}}, - {"value": {"required": false, "name": "cropPercentage"}}, - {"value": {"required": false, "name": "cropXOffset"}}, - {"value": {"required": false, "name": "cropYOffset"}} + {"value": {"name": "alphaRemove"}}, + {"value": {"name": "autoOrient"}}, + {"value": {"name": "startPage"}}, + {"value": {"name": "endPage"}}, + {"group": {"transformOptions": [ + {"value": {"name": "cropGravity"}}, + {"value": {"name": "cropWidth"}}, + {"value": {"name": "cropHeight"}}, + {"value": {"name": "cropPercentage"}}, + {"value": {"name": "cropXOffset"}}, + {"value": {"name": "cropYOffset"}} ]}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "thumbnail"}}, - {"value": {"required": false, "name": "resizeHeight"}}, - {"value": {"required": false, "name": "resizeWidth"}}, - {"value": {"required": false, "name": "resizePercentage"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"group": {"transformOptions": [ + {"value": {"name": "thumbnail"}}, + {"value": {"name": "resizeHeight"}}, + {"value": {"name": "resizeWidth"}}, + {"value": {"name": "resizePercentage"}}, + {"value": {"name": "allowEnlargement"}}, + {"value": {"name": "maintainAspectRatio"}} ]}} ], "supportedSourceAndTargetList": [ @@ -102,35 +102,35 @@ "group": { "required": true, "transformOptions": [ - {"value": {"required": false, "name": "alphaRemove"}}, - {"value": {"required": false, "name": "autoOrient"}}, - {"value": {"required": false, "name": "startPage"}}, - {"value": {"required": false, "name": "endPage"}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "cropGravity"}}, - {"value": {"required": false, "name": "cropWidth"}}, - {"value": {"required": false, "name": "cropHeight"}}, - {"value": {"required": false, "name": "cropPercentage"}}, - {"value": {"required": false, "name": "cropXOffset"}}, - {"value": {"required": false, "name": "cropYOffset"}} + {"value": {"name": "alphaRemove"}}, + {"value": {"name": "autoOrient"}}, + {"value": {"name": "startPage"}}, + {"value": {"name": "endPage"}}, + {"group": {"transformOptions": [ + {"value": {"name": "cropGravity"}}, + {"value": {"name": "cropWidth"}}, + {"value": {"name": "cropHeight"}}, + {"value": {"name": "cropPercentage"}}, + {"value": {"name": "cropXOffset"}}, + {"value": {"name": "cropYOffset"}} ]}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "thumbnail"}}, - {"value": {"required": false, "name": "resizeHeight"}}, - {"value": {"required": false, "name": "resizeWidth"}}, - {"value": {"required": false, "name": "resizePercentage"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"group": {"transformOptions": [ + {"value": {"name": "thumbnail"}}, + {"value": {"name": "resizeHeight"}}, + {"value": {"name": "resizeWidth"}}, + {"value": {"name": "resizePercentage"}}, + {"value": {"name": "allowEnlargement"}}, + {"value": {"name": "maintainAspectRatio"}} ]}} ]}},{ "group": { "required": false, "transformOptions": [ - {"value": {"required": false, "name": "page"}}, - {"value": {"required": false, "name": "width"}}, - {"value": {"required": false, "name": "height"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"value": {"name": "page"}}, + {"value": {"name": "width"}}, + {"value": {"name": "height"}}, + {"value": {"name": "allowPdfEnlargement"}}, + {"value": {"name": "maintainPdfAspectRatio"}} ] } } diff --git a/src/test/java/org/alfresco/repo/rendition2/NoLocalTransformRenditionTest.java b/src/test/java/org/alfresco/repo/rendition2/NoLocalTransformRenditionTest.java index 91be66fbb2..5954f46658 100644 --- a/src/test/java/org/alfresco/repo/rendition2/NoLocalTransformRenditionTest.java +++ b/src/test/java/org/alfresco/repo/rendition2/NoLocalTransformRenditionTest.java @@ -74,4 +74,10 @@ public class NoLocalTransformRenditionTest extends RenditionTest { internalTestGifRenditions(0, 0); } + + @Test + public void testAllTransformServiceConfigRenditions() throws Exception + { + internalTestTasRestApiRenditions(0, 0); + } } diff --git a/src/test/java/org/alfresco/repo/rendition2/RenditionTest.java b/src/test/java/org/alfresco/repo/rendition2/RenditionTest.java index db22a59f23..8b1dec11fc 100644 --- a/src/test/java/org/alfresco/repo/rendition2/RenditionTest.java +++ b/src/test/java/org/alfresco/repo/rendition2/RenditionTest.java @@ -28,16 +28,19 @@ package org.alfresco.repo.rendition2; import junit.framework.AssertionFailedError; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.thumbnail.ThumbnailDefinition; +import org.alfresco.transform.client.model.config.TransformServiceRegistry; import org.alfresco.util.testing.category.DebugTests; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.StringJoiner; @@ -48,6 +51,47 @@ import java.util.StringJoiner; */ public class RenditionTest extends AbstractRenditionIntegrationTest { + // This is the same order as produced by MimetypeMap + public static final List TAS_REST_API_SOURCE_EXTENSIONS = Arrays.asList( + "gif", "jpg", "png", "msg", "doc","ppt", "xls", "docx", "pptx", "xlsx"); + + public static final List TAS_REST_API_EXCLUDE_LIST = Collections.EMPTY_LIST; + + public static final List ALL_SOURCE_EXTENSIONS_EXCLUDE_LIST = Arrays.asList( + "key jpg imgpreview", + "key jpg medium", + "key png doclib", + "key png avatar", + "key png avatar32", + + "pages jpg imgpreview", + "pages jpg medium", + "pages png doclib", + "pages png avatar", + "pages png avatar32", + + "numbers jpg imgpreview", + "numbers jpg medium", + "numbers png doclib", + "numbers png avatar", + "numbers png avatar32", + + "tiff jpg imgpreview", + "tiff jpg medium", + "tiff png doclib", + "tiff png avatar", + "tiff png avatar32", + + "wpd pdf pdf", + "wpd jpg medium", + "wpd png doclib", + "wpd png avatar", + "wpd png avatar32", + "wpd jpg imgpreview"); + + @Autowired + private TransformServiceRegistry transformServiceRegistry; + @Before public void setUp() throws Exception { @@ -70,10 +114,10 @@ public class RenditionTest extends AbstractRenditionIntegrationTest private void assertRenditionsOkayFromSourceExtension(List sourceExtensions, List excludeList, List expectedToFail, int expectedRenditionCount, int expectedFailedCount) throws Exception { - int expectedSuccessCount = expectedRenditionCount - Math.min(excludeList.size(), expectedRenditionCount) - expectedFailedCount; int renditionCount = 0; int failedCount = 0; int successCount = 0; + int excludedCount = 0; RenditionDefinitionRegistry2 renditionDefinitionRegistry2 = renditionService2.getRenditionDefinitionRegistry2(); StringJoiner failures = new StringJoiner("\n"); StringJoiner successes = new StringJoiner("\n"); @@ -98,7 +142,11 @@ public class RenditionTest extends AbstractRenditionIntegrationTest String targetExtension = mimetypeMap.getExtension(targetMimetype); String sourceTragetRendition = sourceExtension + ' ' + targetExtension + ' ' + renditionName; - if (!excludeList.contains(sourceTragetRendition)) + if (excludeList.contains(sourceTragetRendition)) + { + excludedCount++; + } + else { String task = sourceExtension + " " + targetExtension + " " + renditionName; @@ -117,6 +165,8 @@ public class RenditionTest extends AbstractRenditionIntegrationTest } } } + + int expectedSuccessCount = expectedRenditionCount - excludedCount - expectedFailedCount; System.out.println("FAILURES:\n"+failures+"\n"); System.out.println("SUCCESSES:\n"+successes+"\n"); System.out.println("renditionCount: "+renditionCount+" expected "+expectedRenditionCount); @@ -140,7 +190,7 @@ public class RenditionTest extends AbstractRenditionIntegrationTest assertEquals("Added or removed a definition (rendition-service2-contex.xml)?", 7, renditionNames.size()); } - @Test + @Category(DebugTests.class) public void testTasRestApiRenditions() throws Exception { internalTestTasRestApiRenditions(62, 0); @@ -148,15 +198,7 @@ public class RenditionTest extends AbstractRenditionIntegrationTest protected void internalTestTasRestApiRenditions(int expectedRenditionCount, int expectedFailedCount) throws Exception { - assertRenditionsOkayFromSourceExtension(Arrays.asList("doc", "xls", "ppt", "docx", "xlsx", "pptx", "msg", "pdf", "png", "gif", "jpg"), - Arrays.asList(new String[]{ - "docx jpg imgpreview", - "docx jpg medium", - - "xlsx jpg imgpreview", - "xlsx jpg medium", - - }), + assertRenditionsOkayFromSourceExtension(TAS_REST_API_SOURCE_EXTENSIONS, TAS_REST_API_EXCLUDE_LIST, Collections.emptyList(), expectedRenditionCount, expectedFailedCount); } @@ -168,6 +210,56 @@ public class RenditionTest extends AbstractRenditionIntegrationTest } protected void internalTestAllSourceExtensions(int expectedRenditionCount, int expectedFailedCount) throws Exception + { + List sourceExtensions = getAllSourceMimetypes(); + assertRenditionsOkayFromSourceExtension(sourceExtensions, + ALL_SOURCE_EXTENSIONS_EXCLUDE_LIST, + Collections.emptyList(), expectedRenditionCount, expectedFailedCount); + } + + @Category(DebugTests.class) + @Test + public void testTransformServiceConfig() throws Exception + { + internalTestTransformServiceConfig(57, 0); + } + + // Tests all renditions supported by the TransformServiceRegistry (in the case of Transform Service, see + // transform-service-config.json and the LegacyLocalTransformServiceRegistry see the original ACS config). + protected void internalTestTransformServiceConfig(int expectedRenditionCount, int expectedFailedCount) throws Exception + { + List sourceExtensions = getAllSourceMimetypes(); + List excludeList = new ArrayList<>(); + + for (String sourceExtension : sourceExtensions) + { + String sourceMimetype = mimetypeMap.getMimetype(sourceExtension); + String testFileName = getTestFileName(sourceMimetype); + if (testFileName != null) + { + Set renditionNames = renditionDefinitionRegistry2.getRenditionNamesFrom(sourceMimetype, -1); + for (String renditionName : renditionNames) + { + RenditionDefinition2 renditionDefinition = renditionDefinitionRegistry2.getRenditionDefinition(renditionName); + String targetMimetype = renditionDefinition.getTargetMimetype(); + String targetExtension = mimetypeMap.getExtension(targetMimetype); + + String sourceTragetRendition = sourceExtension + ' ' + targetExtension + ' ' + renditionName; + Map actualOptions = renditionDefinition.getTransformOptions(); + if (!transformServiceRegistry.isSupported(sourceMimetype, -1L, targetMimetype, + actualOptions, null)) + { + excludeList.add(sourceTragetRendition); + } + } + } + } + + assertRenditionsOkayFromSourceExtension(sourceExtensions, excludeList, + Collections.emptyList(), expectedRenditionCount, expectedFailedCount); + } + + private List getAllSourceMimetypes() { List sourceExtensions = new ArrayList<>(); for (String sourceMimetype : mimetypeMap.getMimetypes()) @@ -175,46 +267,7 @@ public class RenditionTest extends AbstractRenditionIntegrationTest String sourceExtension = mimetypeMap.getExtension(sourceMimetype); sourceExtensions.add(sourceExtension); } - assertRenditionsOkayFromSourceExtension(sourceExtensions, - Arrays.asList(new String[]{ - "docx jpg imgpreview", - "docx jpg medium", - - "xlsx jpg imgpreview", - "xlsx jpg medium", - - "key jpg imgpreview", - "key jpg medium", - "key png doclib", - "key png avatar", - "key png avatar32", - - "pages jpg imgpreview", - "pages jpg medium", - "pages png doclib", - "pages png avatar", - "pages png avatar32", - - "numbers jpg imgpreview", - "numbers jpg medium", - "numbers png doclib", - "numbers png avatar", - "numbers png avatar32", - - "tiff jpg imgpreview", - "tiff jpg medium", - "tiff png doclib", - "tiff png avatar", - "tiff png avatar32", - - "wpd pdf pdf", - "wpd jpg medium", - "wpd png doclib", - "wpd png avatar", - "wpd png avatar32", - "wpd jpg imgpreview" - }), - Collections.emptyList(), expectedRenditionCount, expectedFailedCount); + return sourceExtensions; } @Test diff --git a/src/test/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImplTest.java b/src/test/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImplTest.java index a4fc31f04b..4fa213139d 100644 --- a/src/test/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImplTest.java +++ b/src/test/java/org/alfresco/transform/client/model/config/TransformServiceRegistryImplTest.java @@ -265,8 +265,8 @@ public class TransformServiceRegistryImplTest new TransformOptionValue(false, "page"), new TransformOptionValue(false, "width"), new TransformOptionValue(false, "height"), - new TransformOptionValue(false, "allowEnlargement"), - new TransformOptionValue(false, "maintainAspectRatio")), + new TransformOptionValue(false, "allowPdfEnlargement"), + new TransformOptionValue(false, "maintainPdfAspectRatio")), Arrays.asList( new SupportedSourceAndTarget(PDF, PNG, -1))); @@ -416,6 +416,34 @@ public class TransformServiceRegistryImplTest "There may be multiple transformers for the same combination. Config change?", 4, countSupportedTransforms(false)); + ConcurrentMap> transformer = + registry.transformers.get("officeToImageViaPdf"); + + // Check required and optional default correctly + ConcurrentMap> transformsToWord = + registry.transformers.get("application/msword"); + List supportedTransforms = transformsToWord.get("image/gif"); + TransformServiceRegistryImpl.SupportedTransform supportedTransform = supportedTransforms.get(0); + + TransformOptionGroup imageMagick = (TransformOptionGroup)supportedTransform.transformOptions.transformOptions.get(0); + TransformOptionGroup pdf = (TransformOptionGroup)supportedTransform.transformOptions.transformOptions.get(1); + + TransformOptionValue alphaRemove = (TransformOptionValue)imageMagick.transformOptions.get(0); + TransformOptionGroup crop = (TransformOptionGroup)imageMagick.transformOptions.get(4); + TransformOptionValue cropGravity = (TransformOptionValue)crop.transformOptions.get(0); + TransformOptionValue cropWidth = (TransformOptionValue)crop.transformOptions.get(1); + + assertTrue("The holding group should be required", supportedTransform.transformOptions.isRequired()); + assertTrue("imageMagick should be required as it is set", imageMagick.isRequired()); + assertFalse("pdf should be optional as required is not set", pdf.isRequired()); + assertEquals("alphaRemove", alphaRemove.getName()); + assertEquals("cropGravity", cropGravity.getName()); + assertEquals("cropWidth", cropWidth.getName()); + assertFalse("alphaRemove should be optional as required is not set", alphaRemove.isRequired()); + assertFalse("crop should be optional as required is not set", crop.isRequired()); + assertTrue("cropGravity should be required as it is set", cropGravity.isRequired()); + assertFalse("cropWidth should be optional as required is not set", cropWidth.isRequired()); + // Check a supported transform for each transformer. assertSupported(DOC,1234, GIF, null, null, ""); assertSupported(DOC,1234, PNG, null, null, ""); diff --git a/src/test/resources/alfresco/transform-service-config-test1.json b/src/test/resources/alfresco/transform-service-config-test1.json index e6431f488b..c3921c391d 100644 --- a/src/test/resources/alfresco/transform-service-config-test1.json +++ b/src/test/resources/alfresco/transform-service-config-test1.json @@ -7,35 +7,34 @@ "group": { "required": true, "transformOptions": [ - {"value": {"required": false, "name": "alphaRemove"}}, - {"value": {"required": false, "name": "autoOrient"}}, - {"value": {"required": false, "name": "startPage"}}, - {"value": {"required": false, "name": "endPage"}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "cropGravity"}}, - {"value": {"required": false, "name": "cropWidth"}}, - {"value": {"required": false, "name": "cropHeight"}}, - {"value": {"required": false, "name": "cropPercentage"}}, - {"value": {"required": false, "name": "cropXOffset"}}, - {"value": {"required": false, "name": "cropYOffset"}} + {"value": {"name": "alphaRemove"}}, + {"value": {"name": "autoOrient"}}, + {"value": {"name": "startPage"}}, + {"value": {"name": "endPage"}}, + {"group": {"transformOptions": [ + {"value": {"required": "true", "name": "cropGravity"}}, + {"value": {"name": "cropWidth"}}, + {"value": {"name": "cropHeight"}}, + {"value": {"name": "cropPercentage"}}, + {"value": {"name": "cropXOffset"}}, + {"value": {"name": "cropYOffset"}} ]}}, - {"group": {"required": false, "transformOptions": [ - {"value": {"required": false, "name": "thumbnail"}}, - {"value": {"required": false, "name": "resizeHeight"}}, - {"value": {"required": false, "name": "resizeWidth"}}, - {"value": {"required": false, "name": "resizePercentage"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"group": {"transformOptions": [ + {"value": {"name": "thumbnail"}}, + {"value": {"name": "resizeHeight"}}, + {"value": {"name": "resizeWidth"}}, + {"value": {"name": "resizePercentage"}}, + {"value": {"name": "allowEnlargement"}}, + {"value": {"name": "maintainAspectRatio"}} ]}} ]}},{ "group": { - "required": false, "transformOptions": [ - {"value": {"required": false, "name": "page"}}, - {"value": {"required": false, "name": "width"}}, - {"value": {"required": false, "name": "height"}}, - {"value": {"required": false, "name": "allowEnlargement"}}, - {"value": {"required": false, "name": "maintainAspectRatio"}} + {"value": {"name": "page"}}, + {"value": {"name": "width"}}, + {"value": {"name": "height"}}, + {"value": {"name": "allowPdfEnlargement"}}, + {"value": {"name": "maintainPdfAspectRatio"}} ] } }