Addition of CustomTransformers with default [skip ci]

This commit is contained in:
alandavis
2022-08-14 08:50:22 +01:00
parent 13ba2534ea
commit e37b2c9beb
4 changed files with 98 additions and 33 deletions

View File

@@ -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 <http://www.gnu.org/licenses/>.
* #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<CustomTransformer> customTransformers;
private final Map<String, CustomTransformer> 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);
}
}

View File

@@ -30,6 +30,7 @@ import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.TransformController; import org.alfresco.transform.base.TransformController;
import org.alfresco.transform.base.logging.LogEntry; import org.alfresco.transform.base.logging.LogEntry;
import org.alfresco.transform.base.probes.ProbeTransform; 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.client.model.TransformRequest;
import org.alfresco.transform.common.TransformException; import org.alfresco.transform.common.TransformException;
import org.alfresco.transform.common.TransformerDebug; import org.alfresco.transform.common.TransformerDebug;
@@ -48,7 +49,6 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.alfresco.transform.common.RequestParamMap.DIRECT_ACCESS_URL; 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_EXTENSION;
import static org.alfresco.transform.common.RequestParamMap.SOURCE_MIMETYPE; import static org.alfresco.transform.common.RequestParamMap.SOURCE_MIMETYPE;
import static org.alfresco.transform.common.RequestParamMap.TARGET_EXTENSION; import static org.alfresco.transform.common.RequestParamMap.TARGET_EXTENSION;
@@ -76,11 +76,11 @@ abstract class ProcessHandler extends FragmentHandler
private final TransformServiceRegistry transformRegistry; private final TransformServiceRegistry transformRegistry;
private final TransformerDebug transformerDebug; private final TransformerDebug transformerDebug;
private final ProbeTransform probeTransform; private final ProbeTransform probeTransform;
private final Map<String, CustomTransformer> customTransformersByName; private final CustomTransformers customTransformers;
ProcessHandler(String sourceMimetype, String targetMimetype, Map<String, String> transformOptions, ProcessHandler(String sourceMimetype, String targetMimetype, Map<String, String> transformOptions,
String reference, TransformServiceRegistry transformRegistry, TransformerDebug transformerDebug, String reference, TransformServiceRegistry transformRegistry, TransformerDebug transformerDebug,
ProbeTransform probeTransform, Map<String, CustomTransformer> customTransformersByName) ProbeTransform probeTransform, CustomTransformers customTransformers)
{ {
this.sourceMimetype = sourceMimetype; this.sourceMimetype = sourceMimetype;
this.targetMimetype = targetMimetype; this.targetMimetype = targetMimetype;
@@ -90,7 +90,7 @@ abstract class ProcessHandler extends FragmentHandler
this.transformRegistry = transformRegistry; this.transformRegistry = transformRegistry;
this.transformerDebug = transformerDebug; this.transformerDebug = transformerDebug;
this.probeTransform = probeTransform; this.probeTransform = probeTransform;
this.customTransformersByName = customTransformersByName; this.customTransformers = customTransformers;
} }
private static Map<String, String> cleanTransformOptions(Map<String, String> requestParameters) private static Map<String, String> cleanTransformOptions(Map<String, String> requestParameters)
@@ -198,7 +198,7 @@ abstract class ProcessHandler extends FragmentHandler
private CustomTransformer getCustomTransformer(String transformName) private CustomTransformer getCustomTransformer(String transformName)
{ {
CustomTransformer customTransformer = customTransformersByName.get(transformName); CustomTransformer customTransformer = customTransformers.get(transformName);
if (customTransformer == null) if (customTransformer == null)
{ {
throw new TransformException(INTERNAL_SERVER_ERROR, "Custom Transformer "+transformName+" not found"); throw new TransformException(INTERNAL_SERVER_ERROR, "Custom Transformer "+transformName+" not found");

View File

@@ -26,12 +26,12 @@
*/ */
package org.alfresco.transform.base.transform; package org.alfresco.transform.base.transform;
import org.alfresco.transform.base.CustomTransformer;
import org.alfresco.transform.base.TransformEngine; import org.alfresco.transform.base.TransformEngine;
import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient; import org.alfresco.transform.base.clients.AlfrescoSharedFileStoreClient;
import org.alfresco.transform.base.messaging.TransformReplySender; import org.alfresco.transform.base.messaging.TransformReplySender;
import org.alfresco.transform.base.model.FileRefResponse; import org.alfresco.transform.base.model.FileRefResponse;
import org.alfresco.transform.base.probes.ProbeTransform; 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.InternalContext;
import org.alfresco.transform.client.model.TransformReply; import org.alfresco.transform.client.model.TransformReply;
import org.alfresco.transform.client.model.TransformRequest; 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.client.HttpClientErrorException;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import javax.jms.Destination; import javax.jms.Destination;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
@@ -65,8 +64,6 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -93,7 +90,7 @@ public class TransformHandler
@Autowired(required = false) @Autowired(required = false)
private List<TransformEngine> transformEngines; private List<TransformEngine> transformEngines;
@Autowired(required = false) @Autowired(required = false)
private List<CustomTransformer> customTransformers; private CustomTransformers customTransformers;
@Autowired @Autowired
private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient; private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
@Autowired @Autowired
@@ -106,22 +103,6 @@ public class TransformHandler
private TransformerDebug transformerDebug; private TransformerDebug transformerDebug;
private final AtomicInteger httpRequestCount = new AtomicInteger(1); private final AtomicInteger httpRequestCount = new AtomicInteger(1);
private final Map<String, CustomTransformer> 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<Resource> handleHttpRequest(HttpServletRequest request, public ResponseEntity<Resource> handleHttpRequest(HttpServletRequest request,
MultipartFile sourceMultipartFile, String sourceMimetype, String targetMimetype, MultipartFile sourceMultipartFile, String sourceMimetype, String targetMimetype,
@@ -131,7 +112,7 @@ public class TransformHandler
new ProcessHandler(sourceMimetype, targetMimetype, requestParameters, new ProcessHandler(sourceMimetype, targetMimetype, requestParameters,
"e" + httpRequestCount.getAndIncrement(), transformRegistry, "e" + httpRequestCount.getAndIncrement(), transformRegistry,
transformerDebug, probeTransform, customTransformersByName) transformerDebug, probeTransform, customTransformers)
{ {
@Override @Override
protected void init() throws IOException protected void init() throws IOException
@@ -175,7 +156,7 @@ public class TransformHandler
{ {
new ProcessHandler(sourceMimetype, targetMimetype, transformOptions, new ProcessHandler(sourceMimetype, targetMimetype, transformOptions,
"p" + httpRequestCount.getAndIncrement(), transformRegistry, "p" + httpRequestCount.getAndIncrement(), transformRegistry,
transformerDebug, probeTransform, customTransformersByName) transformerDebug, probeTransform, customTransformers)
{ {
@Override @Override
protected void init() throws IOException protected void init() throws IOException
@@ -212,7 +193,7 @@ public class TransformHandler
TransformReply reply = createBasicTransformReply(request); TransformReply reply = createBasicTransformReply(request);
new ProcessHandler(request.getSourceMediaType(), request.getTargetMediaType(), new ProcessHandler(request.getSourceMediaType(), request.getTargetMediaType(),
request.getTransformRequestOptions(),"unset", transformRegistry, request.getTransformRequestOptions(),"unset", transformRegistry,
transformerDebug, probeTransform, customTransformersByName) transformerDebug, probeTransform, customTransformers)
{ {
@Override @Override
protected void init() throws IOException protected void init() throws IOException

View File

@@ -56,6 +56,7 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
import org.alfresco.transform.base.CustomTransformer; 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.TransformReply;
import org.alfresco.transform.client.model.TransformRequest; import org.alfresco.transform.client.model.TransformRequest;
import org.alfresco.transform.libreoffice.transformers.LibreOfficeTransformer; import org.alfresco.transform.libreoffice.transformers.LibreOfficeTransformer;
@@ -89,6 +90,8 @@ public class LibreOfficeTest extends AbstractBaseTest
@Autowired @Autowired
private LibreOfficeTransformer libreOfficeTransformer; private LibreOfficeTransformer libreOfficeTransformer;
@Autowired
private CustomTransformers customTransformers;
@Spy @Spy
private LibreOfficeTransformer spyLibreOfficeTransformer; private LibreOfficeTransformer spyLibreOfficeTransformer;
@@ -111,8 +114,7 @@ public class LibreOfficeTest extends AbstractBaseTest
@BeforeEach @BeforeEach
public void before() throws IOException public void before() throws IOException
{ {
var customTransformersByName = (Map<String, CustomTransformer>) ReflectionTestUtils.getField(transformHandler, "customTransformersByName"); customTransformers.put("libreoffice", spyLibreOfficeTransformer);
customTransformersByName.put("libreoffice", spyLibreOfficeTransformer);
sourceExtension = "doc"; sourceExtension = "doc";
targetExtension = "pdf"; targetExtension = "pdf";
@@ -157,8 +159,7 @@ public class LibreOfficeTest extends AbstractBaseTest
@AfterEach @AfterEach
public void after() throws IOException public void after() throws IOException
{ {
var customTransformersByName = (Map<String, CustomTransformer>) ReflectionTestUtils.getField(transformHandler, "customTransformersByName"); customTransformers.put("libreoffice", libreOfficeTransformer);
customTransformersByName.put("libreoffice", libreOfficeTransformer);
} }
@Override @Override