diff --git a/pom.xml b/pom.xml index f0ea59626a..4204a6136b 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ 0.2 5.23.0 5.23.0 - 1.3.1 + 1.4.0 6.2 0.0.12 diff --git a/repository/pom.xml b/repository/pom.xml index a380857ec8..57002a5bc9 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -718,7 +718,7 @@ org.alfresco alfresco-transform-model - ${dependency.transform.model.version} + ${dependency.alfresco-transform-model.version} @@ -740,7 +740,7 @@ org.alfresco alfresco-transform-model - ${dependency.transform.model.version} + ${dependency.alfresco-transform-model.version} tests test diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalCombinedConfig.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalCombinedConfig.java deleted file mode 100644 index f8a331acef..0000000000 --- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalCombinedConfig.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * #%L - * Alfresco Repository - * %% - * Copyright (C) 2019 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.repo.content.transform; - -import org.alfresco.transform.client.model.config.Transformer; -import org.alfresco.transform.client.registry.CombinedConfig; -import org.alfresco.transform.client.registry.TransformServiceRegistryImpl; -import org.apache.commons.logging.Log; - -import java.util.List; - -import static org.alfresco.repo.content.transform.LocalTransformServiceRegistry.LOCAL_TRANSFORMER; -import static org.alfresco.repo.content.transform.LocalTransformServiceRegistry.URL; -import static org.alfresco.util.EqualsHelper.nullSafeEquals; - -/** - * Extends the standard CombinedConfig to add in removal of overridden or invalid transforms. - * - * @author adavis - */ -public class LocalCombinedConfig extends CombinedConfig -{ - public LocalCombinedConfig(Log log) - { - super(log); - } - - /** - * Discards a transformer that is invalid (e.g. T-Engines with the same name, baseUrl has not been specified on a - * T-Engine transform) or overridden an earlier transform with the same name). If the overridden transform is from - * a T-Engine and the overriding transform is not a pipeline or a failover, we also copy the {@code baseUrl} from - * the overridden transform so that the original T-Engine will still be called. - * - * @param i the current transform's index into combinedTransformers. - * @param combinedTransformers the full list of transformers in the order they were read. - * @param registry that wil hold the transforms. - * @param transformAndItsOrigin the current combinedTransformers element. - * @param transformer the current transformer. - * @param name the current transformer's name. - * @param readFrom where the current transformer was read from. - * @param isPipeline if the current transform is a pipeline. - * @param isFailover if the current transform is a failover. - * - * @returns the index of a transform to be removed. {@code -1} is returned if there should not be a remove. - * @throws IllegalArgumentException if the current transform has a problem and should be removed. - */ - @Override - protected int removeInvalidTransformer(int i, List combinedTransformers, - TransformServiceRegistryImpl registry, - TransformAndItsOrigin transformAndItsOrigin, Transformer transformer, - String name, String readFrom, boolean isPipeline, boolean isFailover) - { - int indexToRemove = -1; - - if (name == null || "".equals(name.trim())) - { - throw new IllegalArgumentException("Local transformer names may not be null. Read from " + readFrom); - } - - // Get the baseUrl - test code might change it - String baseUrl = transformAndItsOrigin.getBaseUrl(); - String testBaseUrl = ((LocalTransformServiceRegistry)registry).getBaseUrlIfTesting(name, baseUrl); - if (!nullSafeEquals(baseUrl, testBaseUrl)) - { - baseUrl = testBaseUrl; - transformAndItsOrigin = new TransformAndItsOrigin(transformer, baseUrl, readFrom); - combinedTransformers.set(i, transformAndItsOrigin); - } - - boolean isOneStepTransform = !isPipeline && !isFailover && !name.equals(LocalPassThroughTransform.NAME); - - // Check to see if the name has been used before. - int j = lastIndexOf(name, combinedTransformers, i); - if (j >= 0) - { - if (baseUrl != null) // If a T-Engine, else it is an override - { - throw new IllegalArgumentException("Local T-Engine transformer " + transformerName(name) + - " must be a unique name. Read from " + readFrom); - } - - if (isOneStepTransform) - { - // We need to set the baseUrl of the original transform in the one overriding, - // so we can talk to its T-Engine - TransformAndItsOrigin overriddenTransform = combinedTransformers.get(j); - String overriddenBaseUrl = overriddenTransform.getBaseUrl(); - Transformer overriddenTransformTransform = transformAndItsOrigin.getTransformer(); - TransformAndItsOrigin overridingTransform = new TransformAndItsOrigin( - overriddenTransformTransform, overriddenBaseUrl, readFrom); - combinedTransformers.set(i, overridingTransform); - } - indexToRemove = j; - } - else if (isOneStepTransform && baseUrl == null) - { - throw new IllegalArgumentException("Local T-Engine transformer " + transformerName(name) + - " must have its baseUrl set in " + LOCAL_TRANSFORMER + name + URL + " Read from " + - readFrom); - } - return indexToRemove; - } - - private static int lastIndexOf(String name, List combinedTransformers, int toIndex) - { - // Lists are short (< 100) entries and this is not a frequent or time critical step, so walking the list - // should be okay. - for (int j = toIndex-1; j >=0; j--) - { - TransformAndItsOrigin transformAndItsOrigin = combinedTransformers.get(j); - Transformer transformer = transformAndItsOrigin.getTransformer(); - String transformerName = transformer.getTransformerName(); - if (name.equals(transformerName)) - { - return j; - } - } - return -1; - } -} diff --git a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java index bc4daa6ed7..ff1ab924ae 100644 --- a/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java +++ b/repository/src/main/java/org/alfresco/repo/content/transform/LocalTransformServiceRegistry.java @@ -133,7 +133,7 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl @Override public boolean readConfig() throws IOException { - CombinedConfig combinedConfig = new LocalCombinedConfig(getLog()); + CombinedConfig combinedConfig = new CombinedConfig(getLog()); List urls = getTEngineUrls(); boolean successReadingConfig = combinedConfig.addRemoteConfig(urls, "T-Engine"); successReadingConfig &= combinedConfig.addLocalConfig("alfresco/transforms"); @@ -315,12 +315,6 @@ public class LocalTransformServiceRegistry extends TransformServiceRegistryImpl options; } - // When testing, we need to be able to set the baseUrl when reading from a file. - public String getBaseUrlIfTesting(String name, String baseUrl) - { - return baseUrl; - } - @Override protected Log getLog() { diff --git a/repository/src/main/java/org/alfresco/transform/client/registry/CombinedConfig.java b/repository/src/main/java/org/alfresco/transform/client/registry/CombinedConfig.java index 8234ad14d6..1b208c5f61 100644 --- a/repository/src/main/java/org/alfresco/transform/client/registry/CombinedConfig.java +++ b/repository/src/main/java/org/alfresco/transform/client/registry/CombinedConfig.java @@ -30,10 +30,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.content.transform.LocalPassThroughTransform; import org.alfresco.service.cmr.repository.MimetypeService; -import org.alfresco.transform.client.model.config.SupportedSourceAndTarget; import org.alfresco.transform.client.model.config.TransformConfig; -import org.alfresco.transform.client.model.config.TransformOption; -import org.alfresco.transform.client.model.config.TransformStep; import org.alfresco.transform.client.model.config.Transformer; import org.alfresco.util.ConfigFileFinder; import org.apache.commons.logging.Log; @@ -47,58 +44,22 @@ import org.apache.http.util.EntityUtils; import java.io.IOException; import java.io.StringReader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.alfresco.repo.content.metadata.AsynchronousExtractor.isMetadataEmbedMimetype; -import static org.alfresco.repo.content.metadata.AsynchronousExtractor.isMetadataExtractMimetype; /** - * This class reads multiple T-Engine config and local files and registers them all with a registry as if they were all + * This class reads multiple T-Engine config and local files and registers as if they were all * in one file. Transform options are shared between all sources.

* - * The caller should make calls to {@link #addRemoteConfig(List, String)} and {@link #addLocalConfig(String)} followed - * by a call to {@link #register(TransformServiceRegistryImpl)}. + * The caller should make calls to {@link #addRemoteConfig(List, String)}, {@link #addLocalConfig(String)} or + * {@link #addTransformConfig(TransformConfig, String, String)} followed by a call to + * {@link #register(TransformServiceRegistryImpl)}. * * @author adavis */ -public class CombinedConfig +public class CombinedConfig extends CombinedTransformConfig { private final Log log; - public static class TransformAndItsOrigin - { - final Transformer transformer; - final String baseUrl; - final String readFrom; - - public TransformAndItsOrigin(Transformer transformer, String baseUrl, String readFrom) - { - this.transformer = transformer; - this.baseUrl = baseUrl; - this.readFrom = readFrom; - } - - public Transformer getTransformer() - { - return transformer; - } - - public String getBaseUrl() - { - return baseUrl; - } - } - - Map> combinedTransformOptions = new HashMap<>(); - List combinedTransformers = new ArrayList<>(); - private ObjectMapper jsonObjectMapper = new ObjectMapper(); private ConfigFileFinder configFileFinder; private int tEngineCount; @@ -113,9 +74,7 @@ public class CombinedConfig protected void readJson(JsonNode jsonNode, String readFrom, String baseUrl) { TransformConfig transformConfig = jsonObjectMapper.convertValue(jsonNode, TransformConfig.class); - transformConfig.getTransformOptions().forEach((key, map) -> combinedTransformOptions.put(key, map)); - transformConfig.getTransformers().forEach(transformer -> combinedTransformers.add( - new TransformAndItsOrigin(transformer, baseUrl, readFrom))); + addTransformConfig(transformConfig, readFrom, baseUrl); } }; } @@ -255,6 +214,12 @@ public class CombinedConfig return message; } + @Override + protected boolean isPassThroughTransformName(String name) + { + return name.equals(LocalPassThroughTransform.NAME); + } + /** * Adds a PassThrough transform where the source and target mimetypes are identical, or transforms to "text/plain" * from selected text based types. @@ -273,277 +238,7 @@ public class CombinedConfig data.setTEngineCount(tEngineCount); data.setFileCount(configFileFinder.getFileCount()); - combinedTransformers = removeInvalidTransformers(combinedTransformers, registry); - combinedTransformers = sortTransformers(combinedTransformers, registry); - addWildcardSupportedSourceAndTarget(combinedTransformers); - - combinedTransformers.forEach(transformer -> - registry.register(transformer.transformer, combinedTransformOptions, - transformer.baseUrl, transformer.readFrom)); - } - - /** - * Discards transformers that are invalid (e.g. transformers that have both pipeline and failover sections). Calls - * {@link #removeInvalidTransformer(int, List, TransformServiceRegistryImpl, TransformAndItsOrigin, Transformer, - * String, String, boolean, boolean)} for each transform, so that subclasses (LocalCombinedConfig), may also - * discard invalid transforms or overridden transforms. - * - * @param combinedTransformers the full list of transformers in the order they were read. - * @param registry that wil hold the transforms. - */ - private List removeInvalidTransformers(List combinedTransformers, - TransformServiceRegistryImpl registry) - { - for (int i=0; i pipeline = transformer.getTransformerPipeline(); - List failover = transformer.getTransformerFailover(); - boolean isPipeline = pipeline != null && !pipeline.isEmpty(); - boolean isFailover = failover != null && !failover.isEmpty(); - - if (isPipeline && isFailover) - { - throw new IllegalArgumentException("Transformer " + transformerName(name) + - " cannot have pipeline and failover sections. Read from " + readFrom); - } - - // Local transforms may override each other or be invalid - int indexToRemove = removeInvalidTransformer(i, combinedTransformers, registry, transformAndItsOrigin, - transformer, name, readFrom, isPipeline, isFailover); - - // If required remove the requested transform - if (indexToRemove >= 0) - { - combinedTransformers.remove(indexToRemove); - // this may also require the current index i to be changed so we don't skip one. - if (i >= indexToRemove) - { - i--; - } - } - } - catch (IllegalArgumentException e) - { - String msg = e.getMessage(); - registry.logError(msg); - combinedTransformers.remove(i--); - } - } - return combinedTransformers; - } - - protected int removeInvalidTransformer(int i, List combinedTransformers, - TransformServiceRegistryImpl registry, - TransformAndItsOrigin transformAndItsOrigin, Transformer transformer, - String name, String readFrom, boolean isPipeline, boolean isFailover) - { - return -1; - } - - protected static String transformerName(String name) - { - return name == null ? " without a name" : "\"" + name + "\""; - } - - // Sort transformers so there are no forward references, if that is possible. - private List sortTransformers(List original, TransformServiceRegistryImpl registry) - { - List transformers = new ArrayList<>(original.size()); - List todo = new ArrayList<>(original.size()); - Set transformerNames = new HashSet<>(); - boolean added; - do - { - added = false; - for (TransformAndItsOrigin entry : original) - { - String name = entry.transformer.getTransformerName(); - List pipeline = entry.transformer.getTransformerPipeline(); - Set referencedTransformerNames = new HashSet<>(); - boolean addEntry = true; - if (pipeline != null) - { - for (TransformStep step : pipeline) - { - String stepName = step.getTransformerName(); - referencedTransformerNames.add(stepName); - } - } - List failover = entry.transformer.getTransformerFailover(); - if (failover != null) - { - referencedTransformerNames.addAll(failover); - } - - for (String referencedTransformerName : referencedTransformerNames) - { - if (!transformerNames.contains(referencedTransformerName)) - { - todo.add(entry); - addEntry = false; - break; - } - } - - if (addEntry) - { - transformers.add(entry); - added = true; - if (name != null) - { - transformerNames.add(name); - } - } - } - original.clear(); - original.addAll(todo); - todo.clear(); - } - while (added && !original.isEmpty()); - - transformers.addAll(todo); - - for (TransformAndItsOrigin transformAndItsOrigin : original) - { - String name = transformAndItsOrigin.getTransformer().getTransformerName(); - registry.logError("Transformer " + transformerName(name) + - " ignored as step transforms do not exist. Read from " + transformAndItsOrigin.readFrom); - } - - return transformers; - } - - private void addWildcardSupportedSourceAndTarget(List combinedTransformers) - { - Map transformers = new HashMap<>(); - combinedTransformers.forEach(ct -> transformers.put(ct.transformer.getTransformerName(), ct.transformer)); - - combinedTransformers.forEach(transformAndItsOrigin -> - { - Transformer transformer = transformAndItsOrigin.transformer; - - // If there are no SupportedSourceAndTarget, then work out all the wildcard combinations. - if (transformer.getSupportedSourceAndTargetList().isEmpty()) - { - List pipeline = transformer.getTransformerPipeline(); - List failover = transformer.getTransformerFailover(); - boolean isPipeline = pipeline != null && !pipeline.isEmpty(); - boolean isFailover = failover != null && !failover.isEmpty(); - if (isFailover) - { - // Copy all SupportedSourceAndTarget values from each step transformer - Set supportedSourceAndTargets = failover.stream().flatMap( - name -> transformers.get(name).getSupportedSourceAndTargetList().stream()). - collect(Collectors.toSet()); - transformer.setSupportedSourceAndTargetList(supportedSourceAndTargets); - } - else if (isPipeline) - { - // Build up SupportedSourceAndTarget values. The list of source types and max sizes will come from the - // initial step transformer that have a target mimetype that matches the first intermediate mimetype. - // We then step through all intermediate transformers checking the next intermediate type is supported. - // When we get to the last step transformer, it provides all the target mimetypes based on the previous - // intermediate mimeype. Any combinations supported by the first transformer are excluded. - boolean first = true; - String sourceMediaType = null; - Set sourceMediaTypesAndMaxSizes = null; - Set firstTransformOptions = null; - for (TransformStep step : pipeline) - { - String name = step.getTransformerName(); - Transformer stepTransformer = transformers.get(name); - if (stepTransformer == null) - { - break; - } - - String stepTrg = step.getTargetMediaType(); - if (first) - { - first = false; - sourceMediaTypesAndMaxSizes = stepTransformer.getSupportedSourceAndTargetList().stream(). - filter(s -> stepTrg.equals(s.getTargetMediaType())). - collect(Collectors.toSet()); - sourceMediaType = stepTrg; - firstTransformOptions = stepTransformer.getTransformOptions(); - } - else - { - final String src = sourceMediaType; - if (stepTrg == null) // if final step - { - // Create a cartesian product of sourceMediaType,MaxSourceSize and TargetMediaType where - // the source matches the last intermediate. - Set supportedSourceAndTargets = sourceMediaTypesAndMaxSizes.stream(). - flatMap(s -> stepTransformer.getSupportedSourceAndTargetList().stream(). - filter(st -> - { - String targetMimetype = st.getTargetMediaType(); - return st.getSourceMediaType().equals(src) && - !(isMetadataExtractMimetype(targetMimetype) || - isMetadataEmbedMimetype(targetMimetype)); - }). - map(t -> t.getTargetMediaType()). - map(trg -> SupportedSourceAndTarget.builder(). - withSourceMediaType(s.getSourceMediaType()). - withMaxSourceSizeBytes(s.getMaxSourceSizeBytes()). - withPriority(s.getPriority()). - withTargetMediaType(trg).build())). - collect(Collectors.toSet()); - - // Exclude duplicates with the first transformer, if it has the same options. - // There is no point doing more work. - Set transformOptions = transformer.getTransformOptions(); - if (sameOptions(transformOptions, firstTransformOptions)) - { - supportedSourceAndTargets.removeAll(sourceMediaTypesAndMaxSizes); - } - - transformer.setSupportedSourceAndTargetList(supportedSourceAndTargets); - } - else // if intermediate step - { - // Check source to target is supported (it normally is) - if (!stepTransformer.getSupportedSourceAndTargetList().stream(). - anyMatch(st -> st.getSourceMediaType().equals(src) && - st.getTargetMediaType().equals(stepTrg))) - { - break; - } - - sourceMediaType = stepTrg; - } - } - } - } - } - }); - } - - private boolean sameOptions(Set transformOptionNames1, Set transformOptionNames2) - { - // They have the same names - if (transformOptionNames1.equals(transformOptionNames2)) - { - return true; - } - - // Check the actual options. - Set transformOptions1 = getTransformOptions(transformOptionNames1); - Set transformOptions2 = getTransformOptions(transformOptionNames2); - return transformOptions1.equals(transformOptions2); - } - - private Set getTransformOptions(Set transformOptionNames) - { - Set transformOptions = new HashSet<>(); - transformOptionNames.forEach(name->transformOptions.addAll(combinedTransformOptions.get(name))); - return transformOptions; + combineTransformerConfig(registry); + registerCombinedTransformers(registry); } } diff --git a/repository/src/main/java/org/alfresco/transform/client/registry/TransformServiceRegistryImpl.java b/repository/src/main/java/org/alfresco/transform/client/registry/TransformServiceRegistryImpl.java index 2467a924ff..72cca58777 100644 --- a/repository/src/main/java/org/alfresco/transform/client/registry/TransformServiceRegistryImpl.java +++ b/repository/src/main/java/org/alfresco/transform/client/registry/TransformServiceRegistryImpl.java @@ -175,6 +175,12 @@ public abstract class TransformServiceRegistryImpl extends AbstractTransformRegi getLog().error(msg); } + @Override + protected void logWarn(String msg) + { + getLog().warn(msg); + } + @Override public String findTransformerName(final String sourceMimetype, final long sourceSizeInBytes, final String targetMimetype, final Map actualOptions, diff --git a/repository/src/test/java/org/alfresco/AllUnitTestsSuite.java b/repository/src/test/java/org/alfresco/AllUnitTestsSuite.java index 7836b7cbec..c403da3452 100644 --- a/repository/src/test/java/org/alfresco/AllUnitTestsSuite.java +++ b/repository/src/test/java/org/alfresco/AllUnitTestsSuite.java @@ -235,7 +235,6 @@ import org.junit.runners.Suite; org.alfresco.repo.events.ClientUtilTest.class, org.alfresco.repo.rendition2.RenditionService2Test.class, org.alfresco.repo.rendition2.TransformationOptionsConverterTest.class, - org.alfresco.transform.client.registry.TransformServiceRegistryConfigTest.class, org.alfresco.repo.event2.RepoEvent2UnitSuite.class, diff --git a/repository/src/test/java/org/alfresco/transform/client/registry/LocalTransformServiceRegistryConfigTest.java b/repository/src/test/java/org/alfresco/transform/client/registry/LocalTransformServiceRegistryConfigTest.java index a30f2e1399..866afecb63 100644 --- a/repository/src/test/java/org/alfresco/transform/client/registry/LocalTransformServiceRegistryConfigTest.java +++ b/repository/src/test/java/org/alfresco/transform/client/registry/LocalTransformServiceRegistryConfigTest.java @@ -28,16 +28,19 @@ package org.alfresco.transform.client.registry; import com.fasterxml.jackson.databind.ObjectMapper; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.transform.AbstractLocalTransform; -import org.alfresco.repo.content.transform.LocalCombinedConfig; import org.alfresco.repo.content.transform.LocalPipelineTransform; import org.alfresco.repo.content.transform.LocalTransformImpl; import org.alfresco.repo.content.transform.LocalTransformServiceRegistry; import org.alfresco.repo.content.transform.TransformerDebug; import org.alfresco.transform.client.model.config.SupportedSourceAndTarget; import org.alfresco.transform.client.model.config.TransformOption; +import org.alfresco.transform.client.model.config.TransformOptionGroup; +import org.alfresco.transform.client.model.config.TransformOptionValue; import org.alfresco.transform.client.model.config.Transformer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.log4j.Level; +import org.apache.log4j.LogManager; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -48,6 +51,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -55,7 +59,9 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static java.util.Collections.emptyMap; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -63,11 +69,9 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** - * Extends the {@link TransformServiceRegistryConfigTest} (used to test the config received from the Transform Service) - * so that configuration for the local transformations may be tested. This includes pipelines and options specific - * transform steps. + * Testing LocalTransformServiceRegistry. */ -public class LocalTransformServiceRegistryConfigTest extends TransformServiceRegistryConfigTest +public class LocalTransformServiceRegistryConfigTest extends TransformRegistryTest { public static final String HARD_CODED_VALUE = "hard coded value"; @@ -135,6 +139,12 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg super.logError(msg); } + @Override + protected void logWarn(String msg) + { + logError(msg); + } + public Data assertDataChanged(Data prevData, String msg) { // If the data changes, there has been a read @@ -169,10 +179,14 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg private static Log log = LogFactory.getLog(LocalTransformServiceRegistry.class); + public static final String PNG = "image/png"; + public static final String TIFF = "image/tiff"; + + public static final ObjectMapper JSON_OBJECT_MAPPER = new ObjectMapper(); + private static final String LOCAL_TRANSFORM_SERVICE_CONFIG = "alfresco/local-transform-service-config-test.json"; private static final String LOCAL_TRANSFORM_SERVICE_CONFIG_PIPELINE = "alfresco/local-transform-service-config-pipeline-test.json"; - private static final ObjectMapper JSON_OBJECT_MAPPER = new ObjectMapper(); private static final String LOCAL_TRANSFORM = "localTransform."; private static final String URL = ".url"; @@ -202,8 +216,10 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg initTestData(); super.setUp(); + LogManager.getLogger(LocalTransformServiceRegistryConfigTest.class).setLevel(Level.DEBUG); } + @Override protected LocalTransformServiceRegistry buildTransformServiceRegistryImpl() throws Exception { registry = new TestLocalTransformServiceRegistry(); @@ -222,19 +238,6 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg return (System.currentTimeMillis() - startMs) + "ms: "; } - @Override - protected String getTransformServiceConfig() - { - return LOCAL_TRANSFORM_SERVICE_CONFIG; - } - - @Override - protected String getTransformServiceConfigPipeline() - { - return LOCAL_TRANSFORM_SERVICE_CONFIG_PIPELINE; - } - - @Override protected int getExpectedTransformsForTestJsonPipeline() { // imagemagick @@ -259,7 +262,7 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg */ private void retrieveLocalTransformList(String path) { - CombinedConfig combinedConfig = new LocalCombinedConfig(log); + CombinedConfig combinedConfig = new CombinedConfig(log); combinedConfig.addLocalConfig(path); combinedConfig.register(registry); mapOfTransformOptions = combinedConfig.combinedTransformOptions; @@ -379,11 +382,166 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg return i; } + private void register(String path) throws IOException + { + CombinedConfig combinedConfig = new CombinedConfig(log); + combinedConfig.addLocalConfig(path); + combinedConfig.register((TransformServiceRegistryImpl)registry); + } + @Test - @Override public void testJsonConfig() throws IOException { - internalTestJsonConfig(64, 70); + register(LOCAL_TRANSFORM_SERVICE_CONFIG); + + // Check the count of transforms supported + assertEquals("The number of UNIQUE source to target mimetypes transforms has changed. Config change?", + 64, countSupportedTransforms(true)); + assertEquals("The number of source to target mimetypes transforms has changed. " + + "There may be multiple transformers for the same combination. Config change?", + 70, countSupportedTransforms(false)); + + // Check a supported transform for each transformer. + assertSupported(DOC, 1234, PDF, emptyMap(), null, ""); // libreoffice + assertSupported(DOC, 1234, PDF, emptyMap(), null, ""); // libreoffice + assertSupported(PDF, 1234, PNG, emptyMap(), null, ""); // pdfrenderer + assertSupported(JPEG,1234, GIF, emptyMap(), null, ""); // imagemagick + assertSupported(MSG, 1234, TXT, emptyMap(), null, ""); // tika + assertSupported(MSG, 1234, GIF, emptyMap(), null, ""); // officeToImageViaPdf + + Map invalidPdfOptions = new HashMap<>(); + invalidPdfOptions.put("allowEnlargement", "false"); + assertSupported(DOC, 1234, PDF, invalidPdfOptions, null, "Invalid as there is a extra option"); + } + + @Test + public void testJsonPipeline() throws IOException + { + register(LOCAL_TRANSFORM_SERVICE_CONFIG_PIPELINE); + + // Check the count of transforms supported + int expectedTransforms = getExpectedTransformsForTestJsonPipeline(); + assertEquals("The number of UNIQUE source to target mimetypes transforms has changed. Config change?", + expectedTransforms, countSupportedTransforms(true)); + assertEquals("The number of source to target mimetypes transforms has changed. " + + "There may be multiple transformers for the same combination. Config change?", + expectedTransforms, countSupportedTransforms(false)); + + // Check required and optional default correctly + Map> transformsToWord = + registry.getData().getTransforms().get(DOC); + List supportedTransforms = transformsToWord.get(GIF); + SupportedTransform supportedTransform = supportedTransforms.get(0); + + Set transformOptionsSet = supportedTransform.getTransformOptions().getTransformOptions(); + + Iterator iterator = transformOptionsSet.iterator(); + assertTrue("Expected transform values", iterator.hasNext()); + // Because Set is unordered we don't know which TransformOptionGroup we retrieve + TransformOptionGroup transformOptions1 = (TransformOptionGroup)iterator.next(); + + assertTrue("Expected transform values", iterator.hasNext()); + TransformOptionGroup transformOptions2 = (TransformOptionGroup)iterator.next(); + + TransformOptionGroup imagemagick; + TransformOptionGroup pdf; + + if(containsTransformOptionValueName(transformOptions1, "alphaRemove")) + { + imagemagick = transformOptions1; + pdf = transformOptions2; + } + else + { + imagemagick = transformOptions2; + pdf = transformOptions1; + } + + TransformOptionValue alphaRemove = (TransformOptionValue)retrieveTransformOptionByPropertyName(imagemagick, "alphaRemove", "TransformOptionValue"); + TransformOptionGroup crop = (TransformOptionGroup)retrieveTransformOptionByPropertyName(imagemagick, "crop", "TransformOptionGroup"); + TransformOptionValue cropGravity = (TransformOptionValue)retrieveTransformOptionByPropertyName(crop, "cropGravity", "TransformOptionValue"); + TransformOptionValue cropWidth = (TransformOptionValue)retrieveTransformOptionByPropertyName(crop, "cropWidth", "TransformOptionValue"); + + assertTrue("The holding group should be required", supportedTransform.getTransformOptions().isRequired()); + assertFalse("imagemagick should be optional as it is not 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, emptyMap(), null, ""); + assertSupported(DOC,1234, PNG, emptyMap(), null, ""); + assertSupported(DOC,1234, JPEG, emptyMap(), null, ""); + assertSupported(DOC,1234, TIFF, emptyMap(), null, ""); + + Map actualOptions = new HashMap<>(); + actualOptions.put("thumbnail", "true"); + actualOptions.put("resizeWidth", "100"); + actualOptions.put("resizeHeight", "100"); + actualOptions.put("allowEnlargement", "false"); + actualOptions.put("maintainAspectRatio", "true"); + assertSupported(DOC,1234, PNG, actualOptions, null, ""); + } + + private TransformOption retrieveTransformOptionByPropertyName (TransformOptionGroup transformOptionGroup, String propertyName, String propertyType) + { + Iterator iterator = transformOptionGroup.getTransformOptions().iterator(); + + List transformOptionsList = new ArrayList<>(); + while(iterator.hasNext()) + { + transformOptionsList.add(iterator.next()); + } + + for (TransformOption t : transformOptionsList) + { + if (t instanceof TransformOptionValue) + { + TransformOptionValue value = (TransformOptionValue) t; + if (propertyType.equalsIgnoreCase("TransformOptionValue")) + { + if (value.getName().equalsIgnoreCase(propertyName)) + return value; + } + else + { + if (value.getName().contains(propertyName)) + return transformOptionGroup; + } + } + else + { + TransformOption result = retrieveTransformOptionByPropertyName((TransformOptionGroup)t, propertyName, propertyType); + if (result != null) + return result; + } + } + return null; + } + + private boolean containsTransformOptionValueName (TransformOptionGroup transformOptionGroup, String propertyName) + { + return retrieveTransformOptionByPropertyName(transformOptionGroup, propertyName, "TransformOptionValue") != null; + } + + private int countSupportedTransforms(boolean unique) + { + int count = 0; + int uniqueCount = 0; + for (Map> targetMap : registry.getData().getTransforms().values()) + { + for (List supportedTransforms : targetMap.values()) + { + uniqueCount++; + count += supportedTransforms.size(); + } + } + return unique ? uniqueCount : count; } @Test @@ -635,7 +793,7 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg public void testNoName() { retrieveLocalTransformList("alfresco/local-transform-service-config-no-name-test.json"); - registry.assertErrorLogged("Local transformer names may not be null.*no-name-test.*"); + registry.assertErrorLogged("Transformer names may not be null.*no-name-test.*"); } @Test @@ -649,7 +807,7 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg public void testTEngineDuplicateNames() { retrieveLocalTransformList("alfresco/local-transform-service-config-dup-name-test.json"); - registry.assertErrorLogged("Local T-Engine transformer .* must be a unique name.*dup-name.*"); + registry.assertErrorLogged("Transformer \"pdfrenderer\" must be a unique name.*dup-name.*"); } @Test @@ -657,21 +815,22 @@ public class LocalTransformServiceRegistryConfigTest extends TransformServiceReg { registry.setResetBaseUrl(false); retrieveLocalTransformList("alfresco/local-transform-service-config-no-base-url-test.json"); - registry.assertErrorLogged("Local T-Engine transformer .* must have its baseUrl set .*no-base-url.*"); + registry.assertErrorLogged("Single step transformers \\(such as \"pdfrenderer\"\\) must be defined in a " + + "T-Engine rather than in a pipeline file, unless they are overriding an existing single step definition.*no-base-url.*"); } @Test public void testPipelineMissingStepTransform() { retrieveLocalTransformList("alfresco/transform-service-config-pipeline-missing-step-test.json"); - registry.assertErrorLogged("Transformer .* ignored as step transforms do not exist.*pipeline-missing-step.*"); + registry.assertErrorLogged("Transformer \"missingPdfrenderer\" ignored as step transforms \\(\"pdfrenderer\"\\) do not exist.*pipeline-missing-step-test.*"); } @Test public void testFailoverMissingStepTransform() { retrieveLocalTransformList("alfresco/transform-service-config-failover-missing-step-test.json"); - registry.assertErrorLogged("Transformer .* ignored as step transforms do not exist.*failover-missing-step.*"); + registry.assertErrorLogged("Transformer \"missingPdfrenderer\" ignored as step transforms \\(\"pdfrenderer\"\\) do not exist.*failover-missing-step-test.*"); } @Test diff --git a/repository/src/test/java/org/alfresco/transform/client/registry/TransformServiceRegistryConfigTest.java b/repository/src/test/java/org/alfresco/transform/client/registry/TransformServiceRegistryConfigTest.java deleted file mode 100644 index 2ccccada69..0000000000 --- a/repository/src/test/java/org/alfresco/transform/client/registry/TransformServiceRegistryConfigTest.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * #%L - * Alfresco Repository - * %% - * Copyright (C) 2005 - 2019 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.transform.client.registry; - -import static java.util.Collections.emptyMap; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.alfresco.transform.client.model.config.TransformOption; -import org.alfresco.transform.client.model.config.TransformOptionGroup; -import org.alfresco.transform.client.model.config.TransformOptionValue; -import org.alfresco.transform.client.registry.SupportedTransform; -import org.alfresco.transform.client.registry.TransformRegistryTest; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.log4j.Level; -import org.apache.log4j.LogManager; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * Test the config received from the Transform Service about what it supports. - * - * @author adavis - */ -public class TransformServiceRegistryConfigTest extends TransformRegistryTest -{ - private static Log log = LogFactory.getLog(TransformServiceRegistryConfigTest.class); - - public static final String PNG = "image/png"; - public static final String TIFF = "image/tiff"; - - private static final String TRANSFORM_SERVICE_CONFIG = "alfresco/transform-service-config-test.json"; - private static final String TRANSFORM_SERVICE_CONFIG_PIPELINE = "alfresco/transform-service-config-pipeline-test.json"; - - public static final ObjectMapper JSON_OBJECT_MAPPER = new ObjectMapper(); - - @Before - @Override - public void setUp() throws Exception - { - super.setUp(); - LogManager.getLogger(TransformServiceRegistryConfigTest.class).setLevel(Level.DEBUG); - } - - @Override - protected TransformServiceRegistryImpl buildTransformServiceRegistryImpl() throws Exception - { - TransformServiceRegistryImpl registry = new TransformServiceRegistryImpl() - { - @Override - public boolean readConfig() throws IOException - { - return true; - } - - @Override - protected Log getLog() - { - return log; - } - }; - registry.setJsonObjectMapper(JSON_OBJECT_MAPPER); - registry.setCronExpression(null); // just read once - registry.afterPropertiesSet(); - return registry; - } - - @After - public void tearDown() - { - // shut down - } - - protected String getTransformServiceConfig() - { - return TRANSFORM_SERVICE_CONFIG; - } - - protected String getTransformServiceConfigPipeline() - { - return TRANSFORM_SERVICE_CONFIG_PIPELINE; - } - - private void register(String path) throws IOException - { - CombinedConfig combinedConfig = new CombinedConfig(log); - combinedConfig.addLocalConfig(path); - combinedConfig.register((TransformServiceRegistryImpl)registry); - } - - @Test - public void testJsonConfig() throws IOException - { - internalTestJsonConfig(60, 60); - } - - protected void internalTestJsonConfig(int expectedSourceTargetUniqueCount, int expectedSourceTargetCount) throws IOException - { - register(getTransformServiceConfig()); - - // Check the count of transforms supported - assertEquals("The number of UNIQUE source to target mimetypes transforms has changed. Config change?", - expectedSourceTargetUniqueCount, countSupportedTransforms(true)); - assertEquals("The number of source to target mimetypes transforms has changed. " + - "There may be multiple transformers for the same combination. Config change?", - expectedSourceTargetCount, countSupportedTransforms(false)); - - // Check a supported transform for each transformer. - assertSupported(DOC, 1234, PDF, emptyMap(), null, ""); // libreoffice - assertSupported(DOC, 1234, PDF, emptyMap(), null, ""); // libreoffice - assertSupported(PDF, 1234, PNG, emptyMap(), null, ""); // pdfrenderer - assertSupported(JPEG,1234, GIF, emptyMap(), null, ""); // imagemagick - assertSupported(MSG, 1234, TXT, emptyMap(), null, ""); // tika - assertSupported(MSG, 1234, GIF, emptyMap(), null, ""); // officeToImageViaPdf - - Map invalidPdfOptions = new HashMap<>(); - invalidPdfOptions.put("allowEnlargement", "false"); - assertSupported(DOC, 1234, PDF, invalidPdfOptions, null, "Invalid as there is a extra option"); - } - - @Test - public void testJsonPipeline() throws IOException - { - register(getTransformServiceConfigPipeline()); - - // Check the count of transforms supported - int expectedTransforms = getExpectedTransformsForTestJsonPipeline(); - assertEquals("The number of UNIQUE source to target mimetypes transforms has changed. Config change?", - expectedTransforms, countSupportedTransforms(true)); - assertEquals("The number of source to target mimetypes transforms has changed. " + - "There may be multiple transformers for the same combination. Config change?", - expectedTransforms, countSupportedTransforms(false)); - - // Check required and optional default correctly - Map> transformsToWord = - registry.getData().getTransforms().get(DOC); - List supportedTransforms = transformsToWord.get(GIF); - SupportedTransform supportedTransform = supportedTransforms.get(0); - - Set transformOptionsSet = supportedTransform.getTransformOptions().getTransformOptions(); - - Iterator iterator = transformOptionsSet.iterator(); - assertTrue("Expected transform values", iterator.hasNext()); - // Because Set is unordered we don't know which TransformOptionGroup we retrieve - TransformOptionGroup transformOptions1 = (TransformOptionGroup)iterator.next(); - - assertTrue("Expected transform values", iterator.hasNext()); - TransformOptionGroup transformOptions2 = (TransformOptionGroup)iterator.next(); - - TransformOptionGroup imagemagick; - TransformOptionGroup pdf; - - if(containsTransformOptionValueName(transformOptions1, "alphaRemove")) - { - imagemagick = transformOptions1; - pdf = transformOptions2; - } - else - { - imagemagick = transformOptions2; - pdf = transformOptions1; - } - - TransformOptionValue alphaRemove = (TransformOptionValue)retrieveTransformOptionByPropertyName(imagemagick, "alphaRemove", "TransformOptionValue"); - TransformOptionGroup crop = (TransformOptionGroup)retrieveTransformOptionByPropertyName(imagemagick, "crop", "TransformOptionGroup"); - TransformOptionValue cropGravity = (TransformOptionValue)retrieveTransformOptionByPropertyName(crop, "cropGravity", "TransformOptionValue"); - TransformOptionValue cropWidth = (TransformOptionValue)retrieveTransformOptionByPropertyName(crop, "cropWidth", "TransformOptionValue"); - - assertTrue("The holding group should be required", supportedTransform.getTransformOptions().isRequired()); - assertFalse("imagemagick should be optional as it is not 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, emptyMap(), null, ""); - assertSupported(DOC,1234, PNG, emptyMap(), null, ""); - assertSupported(DOC,1234, JPEG, emptyMap(), null, ""); - assertSupported(DOC,1234, TIFF, emptyMap(), null, ""); - - Map actualOptions = new HashMap<>(); - actualOptions.put("thumbnail", "true"); - actualOptions.put("resizeWidth", "100"); - actualOptions.put("resizeHeight", "100"); - actualOptions.put("allowEnlargement", "false"); - actualOptions.put("maintainAspectRatio", "true"); - assertSupported(DOC,1234, PNG, actualOptions, null, ""); - } - - private TransformOption retrieveTransformOptionByPropertyName (TransformOptionGroup transformOptionGroup, String propertyName, String propertyType) - { - Iterator iterator = transformOptionGroup.getTransformOptions().iterator(); - - List transformOptionsList = new ArrayList<>(); - while(iterator.hasNext()) - { - transformOptionsList.add(iterator.next()); - } - - for (TransformOption t : transformOptionsList) - { - if (t instanceof TransformOptionValue) - { - TransformOptionValue value = (TransformOptionValue) t; - if (propertyType.equalsIgnoreCase("TransformOptionValue")) - { - if (value.getName().equalsIgnoreCase(propertyName)) - return value; - } - else - { - if (value.getName().contains(propertyName)) - return transformOptionGroup; - } - } - else - { - TransformOption result = retrieveTransformOptionByPropertyName((TransformOptionGroup)t, propertyName, propertyType); - if (result != null) - return result; - } - } - return null; - } - - private boolean containsTransformOptionValueName (TransformOptionGroup transformOptionGroup, String propertyName) - { - return retrieveTransformOptionByPropertyName(transformOptionGroup, propertyName, "TransformOptionValue") != null; - } - - protected int getExpectedTransformsForTestJsonPipeline() - { -// {"sourceMediaType": "application/msword", "targetMediaType": "image/gif" }, -// {"sourceMediaType": "application/msword", "targetMediaType": "image/jpeg"}, -// {"sourceMediaType": "application/msword", "targetMediaType": "image/png" }, -// {"sourceMediaType": "application/msword", "targetMediaType": "image/tiff"} - return 4; - } - - private int countSupportedTransforms(boolean unique) - { - int count = 0; - int uniqueCount = 0; - for (Map> targetMap : registry.getData().getTransforms().values()) - { - for (List supportedTransforms : targetMap.values()) - { - uniqueCount++; - count += supportedTransforms.size(); - } - } - return unique ? uniqueCount : count; - } -} \ No newline at end of file diff --git a/repository/src/test/resources/alfresco/transform-service-config-pipeline-test.json b/repository/src/test/resources/alfresco/transform-service-config-pipeline-test.json deleted file mode 100644 index 5160301fd9..0000000000 --- a/repository/src/test/resources/alfresco/transform-service-config-pipeline-test.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "transformOptions": { - "imageMagickOptions": [ - {"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": {"transformOptions": [ - {"value": {"name": "thumbnail"}}, - {"value": {"name": "resizeHeight"}}, - {"value": {"name": "resizeWidth"}}, - {"value": {"name": "resizePercentage"}}, - {"value": {"name": "allowEnlargement"}}, - {"value": {"name": "maintainAspectRatio"}} - ]}} - ], - "pdfRendererOptions": [ - {"value": {"name": "page"}}, - {"value": {"name": "width"}}, - {"value": {"name": "height"}}, - {"value": {"name": "allowPdfEnlargement"}}, - {"value": {"name": "maintainPdfAspectRatio"}} - ] - }, - "transformers": [ - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "application/msword", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/msword", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/msword", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/msword", "targetMediaType": "image/tiff"} - ], - "transformOptions": [ - "pdfRendererOptions", - "imageMagickOptions" - ] - } - ] -} \ No newline at end of file diff --git a/repository/src/test/resources/alfresco/transform-service-config-test.json b/repository/src/test/resources/alfresco/transform-service-config-test.json deleted file mode 100644 index 9b021fddf0..0000000000 --- a/repository/src/test/resources/alfresco/transform-service-config-test.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "transformOptions": { - "imageMagickOptions": [ - {"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": {"transformOptions": [ - {"value": {"name": "thumbnail"}}, - {"value": {"name": "resizeHeight"}}, - {"value": {"name": "resizeWidth"}}, - {"value": {"name": "resizePercentage"}}, - {"value": {"name": "allowEnlargement"}}, - {"value": {"name": "maintainAspectRatio"}} - ]}} - ], - "tikaOptions": [ - {"value": {"name": "transform"}}, - {"value": {"name": "includeContents"}}, - {"value": {"name": "notExtractBookmarksText"}}, - {"value": {"name": "targetMimetype"}}, - {"value": {"name": "targetEncoding"}} - ], - "pdfRendererOptions": [ - {"value": {"name": "page"}}, - {"value": {"name": "width"}}, - {"value": {"name": "height"}}, - {"value": {"name": "allowPdfEnlargement"}}, - {"value": {"name": "maintainPdfAspectRatio"}} - ] - }, - "transformers": [ - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "image/gif", "targetMediaType": "image/gif" }, - {"sourceMediaType": "image/gif", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "image/gif", "targetMediaType": "image/png" }, - {"sourceMediaType": "image/gif", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "image/jpeg", "targetMediaType": "image/gif" }, - {"sourceMediaType": "image/jpeg", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "image/jpeg", "targetMediaType": "image/png" }, - {"sourceMediaType": "image/jpeg", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "image/png", "targetMediaType": "image/gif" }, - {"sourceMediaType": "image/png", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "image/png", "targetMediaType": "image/png" }, - {"sourceMediaType": "image/png", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "image/tiff", "targetMediaType": "image/gif" }, - {"sourceMediaType": "image/tiff", "targetMediaType": "image/tiff"} - ], - "transformOptions": [ - "imageMagickOptions" - ] - }, - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "application/pdf", "maxSourceSizeBytes": 26214400, "targetMediaType": "text/plain" }, - {"sourceMediaType": "application/msword", "targetMediaType": "text/plain"}, - {"sourceMediaType": "application/vnd.ms-excel", "targetMediaType": "text/plain" }, - {"sourceMediaType": "application/vnd.ms-powerpoint", "targetMediaType": "text/plain" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "text/plain"}, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "targetMediaType": "text/plain" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "targetMediaType": "text/plain" }, - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "text/plain"} - ], - "transformOptions": [ - "tikaOptions" - ] - }, - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "application/pdf", "targetMediaType": "image/png" } - ], - "transformOptions": [ - "pdfRendererOptions" - ] - }, - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "application/msword", "targetMediaType": "application/msword" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "application/msword" }, - {"sourceMediaType": "application/msword", "maxSourceSizeBytes": 10485760, "targetMediaType": "application/pdf" }, - {"sourceMediaType": "application/vnd.ms-excel", "maxSourceSizeBytes": 10485760, "targetMediaType": "application/pdf"}, - {"sourceMediaType": "application/vnd.ms-powerpoint", "maxSourceSizeBytes": 6291456, "targetMediaType": "application/pdf" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "maxSourceSizeBytes": 786432, "targetMediaType": "application/pdf" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "maxSourceSizeBytes": 1572864, "targetMediaType": "application/pdf"}, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "maxSourceSizeBytes": 4194304, "targetMediaType": "application/pdf" }, - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "application/pdf"} - ] - }, - { - "supportedSourceAndTargetList": [ - {"sourceMediaType": "application/msword", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/msword", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/msword", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/msword", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.ms-excel", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.ms-excel", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.ms-excel", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.ms-excel", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.ms-powerpoint", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.ms-powerpoint", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.ms-powerpoint", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.ms-powerpoint", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.openxmlformats-officedocument.presentationml.presentation", "targetMediaType": "image/tiff"}, - - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "image/gif" }, - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "image/jpeg"}, - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "image/png" }, - {"sourceMediaType": "application/vnd.ms-outlook", "targetMediaType": "image/tiff"} - ], - "transformOptions": [ - "pdfRendererOptions", - "imageMagickOptions" - ] - } - ] -} \ No newline at end of file