diff --git a/engines/base/src/main/java/org/alfresco/transform/base/registry/CustomTransformers.java b/engines/base/src/main/java/org/alfresco/transform/base/registry/CustomTransformers.java
new file mode 100644
index 00000000..a4df1599
--- /dev/null
+++ b/engines/base/src/main/java/org/alfresco/transform/base/registry/CustomTransformers.java
@@ -0,0 +1,83 @@
+/*
+ * #%L
+ * Alfresco Transform Core
+ * %%
+ * Copyright (C) 2022 - 2022 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.base.registry;
+
+import org.alfresco.transform.base.CustomTransformer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class CustomTransformers
+{
+ private static final Logger logger = LoggerFactory.getLogger(CustomTransformers.class);
+
+ @Autowired(required = false)
+ private List customTransformers;
+
+ private final Map customTransformersByName = new HashMap<>();
+
+ private CustomTransformer defaultCustomTransformer;
+
+ @PostConstruct
+ private void initCustomTransformersByName()
+ {
+ if (customTransformers != null)
+ {
+ customTransformers.forEach(customTransformer ->
+ customTransformersByName.put(customTransformer.getTransformerName(), customTransformer));
+
+ logger.info("Transformers:");
+ customTransformers.stream()
+ .sorted(Comparator.comparing(CustomTransformer::getTransformerName))
+ .map(customTransformer -> " "+customTransformer.getTransformerName()).forEach(logger::info);
+ }
+ }
+
+ public void setDefaultCustomTransformer(CustomTransformer defaultCustomTransformer)
+ {
+ this.defaultCustomTransformer = defaultCustomTransformer;
+ }
+
+ public CustomTransformer get(String name)
+ {
+ CustomTransformer customTransformer = customTransformersByName.get(name);
+ return customTransformer == null ? defaultCustomTransformer : customTransformer;
+ }
+
+ public void put(String name, CustomTransformer customTransformer)
+ {
+ customTransformersByName.put(name, customTransformer);
+ }
+}
diff --git a/engines/base/src/main/java/org/alfresco/transform/base/transform/ProcessHandler.java b/engines/base/src/main/java/org/alfresco/transform/base/transform/ProcessHandler.java
index 7487b197..010a7d6e 100644
--- a/engines/base/src/main/java/org/alfresco/transform/base/transform/ProcessHandler.java
+++ b/engines/base/src/main/java/org/alfresco/transform/base/transform/ProcessHandler.java
@@ -30,6 +30,7 @@ import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.TransformController;
import org.alfresco.transform.base.logging.LogEntry;
import org.alfresco.transform.base.probes.ProbeTransform;
+import org.alfresco.transform.base.registry.CustomTransformers;
import org.alfresco.transform.client.model.TransformRequest;
import org.alfresco.transform.common.TransformException;
import org.alfresco.transform.common.TransformerDebug;
@@ -48,7 +49,6 @@ import java.util.Map;
import java.util.stream.Collectors;
import static org.alfresco.transform.common.RequestParamMap.DIRECT_ACCESS_URL;
-import static org.alfresco.transform.common.RequestParamMap.SOURCE_ENCODING;
import static org.alfresco.transform.common.RequestParamMap.SOURCE_EXTENSION;
import static org.alfresco.transform.common.RequestParamMap.SOURCE_MIMETYPE;
import static org.alfresco.transform.common.RequestParamMap.TARGET_EXTENSION;
@@ -76,11 +76,11 @@ abstract class ProcessHandler extends FragmentHandler
private final TransformServiceRegistry transformRegistry;
private final TransformerDebug transformerDebug;
private final ProbeTransform probeTransform;
- private final Map customTransformersByName;
+ private final CustomTransformers customTransformers;
ProcessHandler(String sourceMimetype, String targetMimetype, Map transformOptions,
String reference, TransformServiceRegistry transformRegistry, TransformerDebug transformerDebug,
- ProbeTransform probeTransform, Map customTransformersByName)
+ ProbeTransform probeTransform, CustomTransformers customTransformers)
{
this.sourceMimetype = sourceMimetype;
this.targetMimetype = targetMimetype;
@@ -90,7 +90,7 @@ abstract class ProcessHandler extends FragmentHandler
this.transformRegistry = transformRegistry;
this.transformerDebug = transformerDebug;
this.probeTransform = probeTransform;
- this.customTransformersByName = customTransformersByName;
+ this.customTransformers = customTransformers;
}
private static Map cleanTransformOptions(Map requestParameters)
@@ -198,7 +198,7 @@ abstract class ProcessHandler extends FragmentHandler
private CustomTransformer getCustomTransformer(String transformName)
{
- CustomTransformer customTransformer = customTransformersByName.get(transformName);
+ CustomTransformer customTransformer = customTransformers.get(transformName);
if (customTransformer == null)
{
throw new TransformException(INTERNAL_SERVER_ERROR, "Custom Transformer "+transformName+" not found");
diff --git a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
index 4721cb2d..ebc84ddf 100644
--- a/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
+++ b/engines/base/src/main/java/org/alfresco/transform/base/transform/TransformHandler.java
@@ -26,12 +26,12 @@
*/
package org.alfresco.transform.base.transform;
-import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.TransformEngine;
import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
import org.alfresco.transform.base.messaging.TransformReplySender;
import org.alfresco.transform.base.model.FileRefResponse;
import org.alfresco.transform.base.probes.ProbeTransform;
+import org.alfresco.transform.base.registry.CustomTransformers;
import org.alfresco.transform.client.model.InternalContext;
import org.alfresco.transform.client.model.TransformReply;
import org.alfresco.transform.client.model.TransformRequest;
@@ -53,7 +53,6 @@ import org.springframework.validation.Errors;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.multipart.MultipartFile;
-import javax.annotation.PostConstruct;
import javax.jms.Destination;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedInputStream;
@@ -65,8 +64,6 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -93,7 +90,7 @@ public class TransformHandler
@Autowired(required = false)
private List transformEngines;
@Autowired(required = false)
- private List customTransformers;
+ private CustomTransformers customTransformers;
@Autowired
private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
@Autowired
@@ -106,22 +103,6 @@ public class TransformHandler
private TransformerDebug transformerDebug;
private final AtomicInteger httpRequestCount = new AtomicInteger(1);
- private final Map customTransformersByName = new HashMap<>();
-
- @PostConstruct
- private void initCustomTransformersByName()
- {
- if (customTransformers != null)
- {
- customTransformers.forEach(customTransformer ->
- customTransformersByName.put(customTransformer.getTransformerName(), customTransformer));
-
- logger.info("Transformers:");
- customTransformers.stream()
- .sorted(Comparator.comparing(CustomTransformer::getTransformerName))
- .map(customTransformer -> " "+customTransformer.getTransformerName()).forEach(logger::info);
- }
- }
public ResponseEntity handleHttpRequest(HttpServletRequest request,
MultipartFile sourceMultipartFile, String sourceMimetype, String targetMimetype,
@@ -131,7 +112,7 @@ public class TransformHandler
new ProcessHandler(sourceMimetype, targetMimetype, requestParameters,
"e" + httpRequestCount.getAndIncrement(), transformRegistry,
- transformerDebug, probeTransform, customTransformersByName)
+ transformerDebug, probeTransform, customTransformers)
{
@Override
protected void init() throws IOException
@@ -175,7 +156,7 @@ public class TransformHandler
{
new ProcessHandler(sourceMimetype, targetMimetype, transformOptions,
"p" + httpRequestCount.getAndIncrement(), transformRegistry,
- transformerDebug, probeTransform, customTransformersByName)
+ transformerDebug, probeTransform, customTransformers)
{
@Override
protected void init() throws IOException
@@ -212,7 +193,7 @@ public class TransformHandler
TransformReply reply = createBasicTransformReply(request);
new ProcessHandler(request.getSourceMediaType(), request.getTargetMediaType(),
request.getTransformRequestOptions(),"unset", transformRegistry,
- transformerDebug, probeTransform, customTransformersByName)
+ transformerDebug, probeTransform, customTransformers)
{
@Override
protected void init() throws IOException
diff --git a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
index 1d6fa311..9ea8f619 100644
--- a/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
+++ b/engines/libreoffice/src/test/java/org/alfresco/transform/libreoffice/LibreOfficeTest.java
@@ -56,6 +56,7 @@ import java.util.Map;
import java.util.UUID;
import org.alfresco.transform.base.CustomTransformer;
+import org.alfresco.transform.base.registry.CustomTransformers;
import org.alfresco.transform.client.model.TransformReply;
import org.alfresco.transform.client.model.TransformRequest;
import org.alfresco.transform.libreoffice.transformers.LibreOfficeTransformer;
@@ -89,6 +90,8 @@ public class LibreOfficeTest extends AbstractBaseTest
@Autowired
private LibreOfficeTransformer libreOfficeTransformer;
+ @Autowired
+ private CustomTransformers customTransformers;
@Spy
private LibreOfficeTransformer spyLibreOfficeTransformer;
@@ -111,8 +114,7 @@ public class LibreOfficeTest extends AbstractBaseTest
@BeforeEach
public void before() throws IOException
{
- var customTransformersByName = (Map) ReflectionTestUtils.getField(transformHandler, "customTransformersByName");
- customTransformersByName.put("libreoffice", spyLibreOfficeTransformer);
+ customTransformers.put("libreoffice", spyLibreOfficeTransformer);
sourceExtension = "doc";
targetExtension = "pdf";
@@ -157,8 +159,7 @@ public class LibreOfficeTest extends AbstractBaseTest
@AfterEach
public void after() throws IOException
{
- var customTransformersByName = (Map) ReflectionTestUtils.getField(transformHandler, "customTransformersByName");
- customTransformersByName.put("libreoffice", libreOfficeTransformer);
+ customTransformers.put("libreoffice", libreOfficeTransformer);
}
@Override