From e37b2c9beb1aec36af36ea926bab407299dc46ec Mon Sep 17 00:00:00 2001 From: alandavis Date: Sun, 14 Aug 2022 08:50:22 +0100 Subject: [PATCH] Addition of CustomTransformers with default [skip ci] --- .../base/registry/CustomTransformers.java | 83 +++++++++++++++++++ .../base/transform/ProcessHandler.java | 10 +-- .../base/transform/TransformHandler.java | 29 ++----- .../libreoffice/LibreOfficeTest.java | 9 +- 4 files changed, 98 insertions(+), 33 deletions(-) create mode 100644 engines/base/src/main/java/org/alfresco/transform/base/registry/CustomTransformers.java 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