From a1b6283a4cfa176d9e20591eb1162cd8d98e80d1 Mon Sep 17 00:00:00 2001 From: Kristian Dimitrov Date: Thu, 16 Apr 2020 16:32:01 +0100 Subject: [PATCH] ATS-669: Parameterize T-Engines transformer execution locations (#203) * ATS-669: Implement cmd line arguments for ImageMagick, PdfRenderer and LibreOffice * ATS-669: Remove unnecessary test ImageMagick line * ATS-669: Implement Spring boot properties via application.yaml * ATS-669: Implement Spring config binds and utilize new functionality in pdfRender * ATS-669: Wire externalProps for ImageMagick * ATS-669: Wire externalProps for LibreOffice * ATS-669: Fix failing tests * ATS-669: Implement parameterized execution for All-In-One transform module * ATS-669: Use string values instead of GlobalProperties class * ATS-669: Change pdfrenderer property format * ATS-669: Add validation to executor constructors * ATS-669: Fix failing LibreOffice tests * ATS-669: Add missing license * ATS-669: Update LibreOffice version * ATS-669: Remove unnecessary annotation * ATS-669: Standardise properties * ATS-669: Change field variable names * ATS-669: Change field variable values * ATS-669: Add unit tests for passing system properties * ATS-669: Standardise yaml properties * ATS-669: Remove unnecessary super() calls * ATS-669: Change CRLF to LF * ATS-669: Change LF to CRLF * ATS-669: Fix yaml indentation * ATS-669: Update tika and misc yaml file with new sub-property * ATS-669: Remove unused import * ATS-669: Update TransformRegistryImpl property location --- .../alfresco/transformer/AIOCustomConfig.java | 22 ++++++++++++-- .../main/resources/application-default.yaml | 12 +++++++- .../transformers/ImageMagickAdapter.java | 4 +-- .../transformers/LibreOfficeAdapter.java | 4 +-- .../transformers/PdfRendererAdapter.java | 4 +-- .../pom.xml | 8 +++++ .../transformer/ImageMagickController.java | 20 +++++++++++-- .../main/resources/application-default.yaml | 9 ++++-- .../ImageMagickControllerTest.java | 29 ++++++++++++++++++- .../executors/ImageMagickCommandExecutor.java | 28 ++++++++++++++++-- .../pom.xml | 5 ++++ .../transformer/LibreOfficeController.java | 13 ++++++++- .../main/resources/application-default.yaml | 7 +++-- .../LibreOfficeControllerTest.java | 23 +++++++++++++-- .../executors/LibreOfficeJavaExecutor.java | 12 ++++++-- .../main/resources/application-default.yaml | 5 ++-- .../pom.xml | 5 ++++ .../AlfrescoPdfRendererController.java | 14 +++++++-- .../main/resources/application-default.yaml | 7 +++-- .../AlfrescoPdfRendererControllerTest.java | 23 +++++++++++++-- .../executors/PdfRendererCommandExecutor.java | 13 ++++++++- .../main/resources/application-default.yaml | 5 ++-- .../transformer/TransformRegistryImpl.java | 2 +- .../executors/AbstractCommandExecutor.java | 4 +-- .../src/main/resources/application.yaml | 1 + .../AbstractTransformerControllerTest.java | 1 - 26 files changed, 239 insertions(+), 41 deletions(-) diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java index 1946718d..f9207ebf 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/java/org/alfresco/transformer/AIOCustomConfig.java @@ -32,6 +32,7 @@ import org.alfresco.transformer.transformers.LibreOfficeAdapter; import org.alfresco.transformer.transformers.MiscAdapter; import org.alfresco.transformer.transformers.PdfRendererAdapter; import org.alfresco.transformer.transformers.TikaAdapter; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -39,6 +40,21 @@ import org.springframework.context.annotation.Primary; @Configuration public class AIOCustomConfig { + @Value("${transform.core.libreoffice.path}") + private String libreofficePath; + + @Value("${transform.core.pdfrenderer.exe}") + private String pdfRendererPath; + + @Value("${transform.core.imagemagick.exe}") + private String imageMagickExePath; + + @Value("${transform.core.imagemagick.dyn}") + private String imageMagickDynPath; + + @Value("${transform.core.imagemagick.root}") + private String imageMagickRootPath; + /** * * @return Override the TransformRegistryImpl used in {@link AbstractTransformerController} @@ -50,9 +66,9 @@ public class AIOCustomConfig AIOTransformRegistry aioTransformRegistry = new AIOTransformRegistry(); aioTransformRegistry.registerTransformer(new MiscAdapter()); aioTransformRegistry.registerTransformer(new TikaAdapter()); - aioTransformRegistry.registerTransformer(new ImageMagickAdapter()); - aioTransformRegistry.registerTransformer(new LibreOfficeAdapter()); - aioTransformRegistry.registerTransformer(new PdfRendererAdapter()); + aioTransformRegistry.registerTransformer(new ImageMagickAdapter(imageMagickExePath, imageMagickDynPath, imageMagickRootPath)); + aioTransformRegistry.registerTransformer(new LibreOfficeAdapter(libreofficePath)); + aioTransformRegistry.registerTransformer(new PdfRendererAdapter(pdfRendererPath)); return aioTransformRegistry; } } diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml index f1c633dc..2d295f0f 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio-boot/src/main/resources/application-default.yaml @@ -1,2 +1,12 @@ queue: - engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.aio.acs} \ No newline at end of file + engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.aio.acs} +transform: + core: + pdfrenderer: + exe: ${PDFRENDERER_EXE:/usr/bin/alfresco-pdf-renderer} + libreoffice: + path: ${LIBREOFFICE_HOME:/opt/libreoffice6.3} + imagemagick: + root: ${IMAGEMAGICK_ROOT:/usr/lib64/ImageMagick-7.0.7} + dyn: ${IMAGEMAGICK_DYN:/usr/lib64/ImageMagick-7.0.7/lib} + exe: ${IMAGEMAGICK_EXE:/usr/bin/convert} \ No newline at end of file diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/ImageMagickAdapter.java b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/ImageMagickAdapter.java index 0deb4b78..7610b210 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/ImageMagickAdapter.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/ImageMagickAdapter.java @@ -59,9 +59,9 @@ public class ImageMagickAdapter implements Transformer private static String ID = "imagemagick"; private ImageMagickCommandExecutor commandExecutor; - public ImageMagickAdapter() + public ImageMagickAdapter(String exe, String dyn, String root) throws Exception { - commandExecutor = new ImageMagickCommandExecutor(); + commandExecutor = new ImageMagickCommandExecutor(exe, dyn, root); } @Override diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/LibreOfficeAdapter.java b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/LibreOfficeAdapter.java index 51f33ddd..0853deae 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/LibreOfficeAdapter.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/LibreOfficeAdapter.java @@ -36,9 +36,9 @@ public class LibreOfficeAdapter implements Transformer private static String ID = "libreoffice"; private LibreOfficeJavaExecutor javaExecutor; - public LibreOfficeAdapter() + public LibreOfficeAdapter(String execPath) throws Exception { - javaExecutor = new LibreOfficeJavaExecutor(); + javaExecutor = new LibreOfficeJavaExecutor(execPath); } @Override diff --git a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/PdfRendererAdapter.java b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/PdfRendererAdapter.java index ff5360eb..12d4fd6b 100644 --- a/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/PdfRendererAdapter.java +++ b/alfresco-transform-core-aio/alfresco-transform-core-aio/src/main/java/org/alfresco/transformer/transformers/PdfRendererAdapter.java @@ -46,9 +46,9 @@ public class PdfRendererAdapter implements Transformer private static String ID = "pdfrenderer"; private PdfRendererCommandExecutor pdfExecutor; - public PdfRendererAdapter() + public PdfRendererAdapter(String execPath) throws Exception { - pdfExecutor = new PdfRendererCommandExecutor(); + pdfExecutor = new PdfRendererCommandExecutor(execPath); } @Override diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml index 45739a35..92e89ff3 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/pom.xml @@ -81,6 +81,14 @@ org.apache.maven.plugins maven-surefire-plugin + + + /usr/bin/convert + /usr/lib64/ImageMagick-7.0.7/lib + /usr/lib64/ImageMagick-7.0.7 + ${project.build.directory} + + org.apache.maven.plugins diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/java/org/alfresco/transformer/ImageMagickController.java b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/java/org/alfresco/transformer/ImageMagickController.java index 95cfb7b4..d16e7352 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/java/org/alfresco/transformer/ImageMagickController.java +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/java/org/alfresco/transformer/ImageMagickController.java @@ -37,6 +37,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; import java.io.File; import java.util.Map; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import org.alfresco.transformer.executors.ImageMagickCommandExecutor; @@ -44,7 +45,7 @@ import org.alfresco.transformer.logging.LogEntry; import org.alfresco.transformer.probes.ProbeTestTransform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -79,7 +80,22 @@ public class ImageMagickController extends AbstractTransformerController { private static final Logger logger = LoggerFactory.getLogger(ImageMagickController.class); - private ImageMagickCommandExecutor commandExecutor = new ImageMagickCommandExecutor(); + @Value("${transform.core.imagemagick.exe}") + private String EXE; + + @Value("${transform.core.imagemagick.dyn}") + private String DYN; + + @Value("${transform.core.imagemagick.root}") + private String ROOT; + + ImageMagickCommandExecutor commandExecutor; + + @PostConstruct + private void init() + { + commandExecutor = new ImageMagickCommandExecutor(EXE, DYN, ROOT); + } @Override public String getTransformerName() diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml index ace915aa..c421f43e 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/main/resources/application-default.yaml @@ -1,5 +1,10 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.imagemagick.acs} transform: - config: - location: classpath:imagemagick_engine_config.json \ No newline at end of file + core: + config: + location: classpath:imagemagick_engine_config.json + imagemagick: + root: ${IMAGEMAGICK_ROOT:/usr/lib64/ImageMagick-7.0.7} + dyn: ${IMAGEMAGICK_DYN:/usr/lib64/ImageMagick-7.0.7/lib} + exe: ${IMAGEMAGICK_EXE:/usr/bin/convert} \ No newline at end of file diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java index 978980e2..62c8c9a4 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick-boot/src/test/java/org/alfresco/transformer/ImageMagickControllerTest.java @@ -66,6 +66,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.core.io.FileSystemResource; @@ -77,6 +78,8 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import javax.annotation.PostConstruct; + /** * Test the ImageMagickController without a server. * Super class includes tests for the AbstractTransformerController. @@ -96,7 +99,22 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest @Mock private RuntimeExec mockCheckCommand; - private ImageMagickCommandExecutor commandExecutor = new ImageMagickCommandExecutor(); + @Value("${transform.core.imagemagick.exe}") + private String EXE; + + @Value("${transform.core.imagemagick.dyn}") + private String DYN; + + @Value("${transform.core.imagemagick.root}") + private String ROOT; + + ImageMagickCommandExecutor commandExecutor; + + @PostConstruct + private void init() + { + commandExecutor = new ImageMagickCommandExecutor(EXE, DYN, ROOT); + } @SpyBean private ImageMagickController controller; @@ -392,4 +410,13 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getSchema(), transformReply.getSchema()); } + + @Test + public void testOverridingExecutorPaths() + { + //System test property values can me modified in the pom.xml + assertEquals(EXE, System.getProperty("IMAGEMAGICK_EXE")); + assertEquals(DYN, System.getProperty("IMAGEMAGICK_DYN")); + assertEquals(ROOT, System.getProperty("IMAGEMAGICK_ROOT")); + } } diff --git a/alfresco-transform-imagemagick/alfresco-transform-imagemagick/src/main/java/org/alfresco/transformer/executors/ImageMagickCommandExecutor.java b/alfresco-transform-imagemagick/alfresco-transform-imagemagick/src/main/java/org/alfresco/transformer/executors/ImageMagickCommandExecutor.java index 3808380b..02f46b15 100644 --- a/alfresco-transform-imagemagick/alfresco-transform-imagemagick/src/main/java/org/alfresco/transformer/executors/ImageMagickCommandExecutor.java +++ b/alfresco-transform-imagemagick/alfresco-transform-imagemagick/src/main/java/org/alfresco/transformer/executors/ImageMagickCommandExecutor.java @@ -35,9 +35,31 @@ import java.util.Map; */ public class ImageMagickCommandExecutor extends AbstractCommandExecutor { - private static final String ROOT = "/usr/lib64/ImageMagick-7.0.7"; - private static final String DYN = ROOT + "/lib"; - private static final String EXE = "/usr/bin/convert"; + private final String ROOT; + private final String DYN; + private final String EXE; + + public ImageMagickCommandExecutor(String exe, String dyn, String root) + { + if (exe == null || exe.isEmpty()) + { + throw new IllegalArgumentException("ImageMagickCommandExecutor EXE variable cannot be null or empty"); + } + if (dyn == null || dyn.isEmpty()) + { + throw new IllegalArgumentException("ImageMagickCommandExecutor DYN variable cannot be null or empty"); + } + if (root == null || root.isEmpty()) + { + throw new IllegalArgumentException("ImageMagickCommandExecutor ROOT variable cannot be null or empty"); + } + this.EXE = exe; + this.DYN = dyn; + this.ROOT = root; + + super.transformCommand = createTransformCommand(); + super.checkCommand = createCheckCommand(); + } public static final String LICENCE = "This transformer uses ImageMagick from ImageMagick Studio LLC. See the license at http://www.imagemagick.org/script/license.php or in /ImageMagick-license.txt"; diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml index 43c00a30..288598d0 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/pom.xml @@ -91,6 +91,11 @@ org.apache.maven.plugins maven-surefire-plugin + + + /opt/libreoffice6.3 + + org.apache.maven.plugins diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/java/org/alfresco/transformer/LibreOfficeController.java b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/java/org/alfresco/transformer/LibreOfficeController.java index aa3e2ab8..df773cf9 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/java/org/alfresco/transformer/LibreOfficeController.java +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/java/org/alfresco/transformer/LibreOfficeController.java @@ -36,6 +36,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; import java.io.File; import java.util.Map; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import org.alfresco.transformer.executors.LibreOfficeJavaExecutor; @@ -44,6 +45,7 @@ import org.alfresco.transformer.probes.ProbeTestTransform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -77,7 +79,16 @@ public class LibreOfficeController extends AbstractTransformerController { private static final Logger logger = LoggerFactory.getLogger(LibreOfficeController.class); - private LibreOfficeJavaExecutor javaExecutor = new LibreOfficeJavaExecutor(); + @Value("${transform.core.libreoffice.home}") + private String execPath; + + LibreOfficeJavaExecutor javaExecutor; + + @PostConstruct + private void init() + { + javaExecutor = new LibreOfficeJavaExecutor(execPath); + } @Override public String getTransformerName() diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml index 29166682..a48b88e0 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/main/resources/application-default.yaml @@ -1,5 +1,8 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.libreoffice.acs} transform: - config: - location: classpath:libreoffice_engine_config.json \ No newline at end of file + core: + config: + location: classpath:libreoffice_engine_config.json + libreoffice: + home: ${LIBREOFFICE_HOME:/opt/libreoffice6.3} \ No newline at end of file diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java index 005b8373..2653ca6c 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice-boot/src/test/java/org/alfresco/transformer/LibreOfficeControllerTest.java @@ -62,6 +62,8 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.core.io.FileSystemResource; @@ -73,6 +75,8 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import javax.annotation.PostConstruct; + /** * Test the LibreOfficeController without a server. * Super class includes tests for the AbstractTransformerController. @@ -87,8 +91,16 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest @Mock private ExecutionResult mockExecutionResult; - @SpyBean - private LibreOfficeJavaExecutor javaExecutor; + @Value("${transform.core.libreoffice.home}") + private String execPath; + + LibreOfficeJavaExecutor javaExecutor; + + @PostConstruct + private void init() + { + javaExecutor = Mockito.spy(new LibreOfficeJavaExecutor(execPath)); + } @SpyBean private LibreOfficeController controller; @@ -235,4 +247,11 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getSchema(), transformReply.getSchema()); } + + @Test + public void testOverridingExecutorPaths() + { + //System test property value can me modified in the pom.xml + assertEquals(execPath, System.getProperty("LIBREOFFICE_HOME")); + } } diff --git a/alfresco-transform-libreoffice/alfresco-transform-libreoffice/src/main/java/org/alfresco/transformer/executors/LibreOfficeJavaExecutor.java b/alfresco-transform-libreoffice/alfresco-transform-libreoffice/src/main/java/org/alfresco/transformer/executors/LibreOfficeJavaExecutor.java index bd5b534b..ae7f4d9a 100644 --- a/alfresco-transform-libreoffice/alfresco-transform-libreoffice/src/main/java/org/alfresco/transformer/executors/LibreOfficeJavaExecutor.java +++ b/alfresco-transform-libreoffice/alfresco-transform-libreoffice/src/main/java/org/alfresco/transformer/executors/LibreOfficeJavaExecutor.java @@ -53,14 +53,20 @@ public class LibreOfficeJavaExecutor implements JavaExecutor private static final Logger logger = LoggerFactory.getLogger(LibreOfficeJavaExecutor.class); private static final int JODCONVERTER_TRANSFORMATION_ERROR_CODE = 3088; - private static final String OFFICE_HOME = "/opt/libreoffice6.3"; + + private static String LIBREOFFICE_HOME; public static final String LICENCE = "This transformer uses LibreOffice from The Document Foundation. See the license at https://www.libreoffice.org/download/license/ or in /libreoffice.txt"; private JodConverter jodconverter; - public LibreOfficeJavaExecutor() + public LibreOfficeJavaExecutor(String path) { + if (path == null || path.isEmpty()) + { + throw new IllegalArgumentException("LibreOfficeJavaExecutor OFFICE_HOME variable cannot be null or empty"); + } + LIBREOFFICE_HOME = path; jodconverter = createJodConverter(); } @@ -70,7 +76,7 @@ public class LibreOfficeJavaExecutor implements JavaExecutor final JodConverterSharedInstance jodconverter = new JodConverterSharedInstance(); - jodconverter.setOfficeHome(OFFICE_HOME); // jodconverter.officeHome + jodconverter.setOfficeHome(LIBREOFFICE_HOME); // jodconverter.officeHome jodconverter.setMaxTasksPerProcess("200"); // jodconverter.maxTasksPerProcess jodconverter.setTaskExecutionTimeout(timeout); // jodconverter.maxTaskExecutionTimeout jodconverter.setTaskQueueTimeout(timeout); // jodconverter.taskQueueTimeout diff --git a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml index a2ae6bff..30fea7ee 100644 --- a/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-misc/alfresco-transform-misc-boot/src/main/resources/application-default.yaml @@ -1,5 +1,6 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.misc.acs} transform: - config: - location: classpath:misc_engine_config.json \ No newline at end of file + core: + config: + location: classpath:misc_engine_config.json \ No newline at end of file diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml index 045f8121..a219b065 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/pom.xml @@ -80,6 +80,11 @@ org.apache.maven.plugins maven-surefire-plugin + + + /usr/bin/alfresco-pdf-renderer + + org.apache.maven.plugins diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/java/org/alfresco/transformer/AlfrescoPdfRendererController.java b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/java/org/alfresco/transformer/AlfrescoPdfRendererController.java index 5a65ecc8..9e1d38bf 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/java/org/alfresco/transformer/AlfrescoPdfRendererController.java +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/java/org/alfresco/transformer/AlfrescoPdfRendererController.java @@ -36,6 +36,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; import java.io.File; import java.util.Map; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import org.alfresco.transformer.executors.PdfRendererCommandExecutor; @@ -43,7 +44,7 @@ import org.alfresco.transformer.logging.LogEntry; import org.alfresco.transformer.probes.ProbeTestTransform; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -77,7 +78,16 @@ public class AlfrescoPdfRendererController extends AbstractTransformerController private static final Logger logger = LoggerFactory.getLogger( AlfrescoPdfRendererController.class); - private PdfRendererCommandExecutor commandExecutor = new PdfRendererCommandExecutor(); + @Value("${transform.core.pdfrenderer.exe}") + private String execPath; + + PdfRendererCommandExecutor commandExecutor; + + @PostConstruct + private void init() + { + commandExecutor = new PdfRendererCommandExecutor(execPath); + } @Override public String getTransformerName() diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml index b0e1e764..75860056 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/main/resources/application-default.yaml @@ -1,5 +1,8 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.alfresco-pdf-renderer.acs} transform: - config: - location: classpath:pdfrenderer_engine_config.json \ No newline at end of file + core: + config: + location: classpath:pdfrenderer_engine_config.json + pdfrenderer: + exe: ${PDFRENDERER_EXE:/usr/bin/alfresco-pdf-renderer} \ No newline at end of file diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java index a14770d3..c209089f 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer-boot/src/test/java/org/alfresco/transformer/AlfrescoPdfRendererControllerTest.java @@ -67,6 +67,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.stubbing.Answer; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.core.io.FileSystemResource; @@ -78,6 +79,8 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import javax.annotation.PostConstruct; + /** * Test the AlfrescoPdfRendererController without a server. * Super class includes tests for the AbstractTransformerController. @@ -97,8 +100,17 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro @Mock private RuntimeExec mockCheckCommand; - - private PdfRendererCommandExecutor commandExecutor = new PdfRendererCommandExecutor(); + + @Value("${transform.core.pdfrenderer.exe}") + private String execPath; + + PdfRendererCommandExecutor commandExecutor; + + @PostConstruct + private void init() + { + commandExecutor = new PdfRendererCommandExecutor(execPath); + } @SpyBean private AlfrescoPdfRendererController controller; @@ -315,4 +327,11 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getSchema(), transformReply.getSchema()); } + + @Test + public void testOverridingExecutorPaths() + { + //System test property value can me modified in the pom.xml + assertEquals(execPath, System.getProperty("PDF_RENDERER_EXE")); + } } diff --git a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/src/main/java/org/alfresco/transformer/executors/PdfRendererCommandExecutor.java b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/src/main/java/org/alfresco/transformer/executors/PdfRendererCommandExecutor.java index 72c8cd63..87f40c45 100644 --- a/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/src/main/java/org/alfresco/transformer/executors/PdfRendererCommandExecutor.java +++ b/alfresco-transform-pdf-renderer/alfresco-transform-pdf-renderer/src/main/java/org/alfresco/transformer/executors/PdfRendererCommandExecutor.java @@ -37,7 +37,18 @@ public class PdfRendererCommandExecutor extends AbstractCommandExecutor { public static final String LICENCE = "This transformer uses alfresco-pdf-renderer which uses the PDFium library from Google Inc. See the license at https://pdfium.googlesource.com/pdfium/+/master/LICENSE or in /pdfium.txt"; - private static final String EXE = "/usr/bin/alfresco-pdf-renderer"; + private final String EXE; + + public PdfRendererCommandExecutor(String exe) + { + if (exe == null || exe.isEmpty()) + { + throw new IllegalArgumentException("PdfRendererCommandExecutor EXE variable cannot be null or empty"); + } + this.EXE = exe; + super.transformCommand = createTransformCommand(); + super.checkCommand = createCheckCommand(); + } @Override protected RuntimeExec createTransformCommand() diff --git a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml index ee9a4f68..0a4b2765 100644 --- a/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml +++ b/alfresco-transform-tika/alfresco-transform-tika-boot/src/main/resources/application-default.yaml @@ -1,5 +1,6 @@ queue: engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.tika.acs} transform: - config: - location: classpath:tika_engine_config.json \ No newline at end of file + core: + config: + location: classpath:tika_engine_config.json \ No newline at end of file diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java index f08f4cea..3439d6b3 100644 --- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java +++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/TransformRegistryImpl.java @@ -57,7 +57,7 @@ public class TransformRegistryImpl extends AbstractTransformRegistry @Autowired ResourceLoader resourceLoader; - @Value("${transform.config.location:classpath:engine_config.json}") + @Value("${transform.core.config.location:classpath:engine_config.json}") private String locationFromProperty; private Resource engineConfig; diff --git a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/executors/AbstractCommandExecutor.java b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/executors/AbstractCommandExecutor.java index 013dccc6..c881082a 100644 --- a/alfresco-transformer-base/src/main/java/org/alfresco/transformer/executors/AbstractCommandExecutor.java +++ b/alfresco-transformer-base/src/main/java/org/alfresco/transformer/executors/AbstractCommandExecutor.java @@ -40,8 +40,8 @@ import org.alfresco.transform.exceptions.TransformException; */ public abstract class AbstractCommandExecutor implements CommandExecutor { - private final RuntimeExec transformCommand = createTransformCommand(); - private final RuntimeExec checkCommand = createCheckCommand(); + protected RuntimeExec transformCommand = createTransformCommand(); + protected RuntimeExec checkCommand = createCheckCommand(); protected abstract RuntimeExec createTransformCommand(); diff --git a/alfresco-transformer-base/src/main/resources/application.yaml b/alfresco-transformer-base/src/main/resources/application.yaml index d18bf043..4191f918 100644 --- a/alfresco-transformer-base/src/main/resources/application.yaml +++ b/alfresco-transformer-base/src/main/resources/application.yaml @@ -48,3 +48,4 @@ management: container: name: ${HOSTNAME:t-engine} + diff --git a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java index c6ba029f..ca2eafa8 100644 --- a/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java +++ b/alfresco-transformer-base/src/test/java/org/alfresco/transformer/AbstractTransformerControllerTest.java @@ -44,7 +44,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; import java.nio.channels.FileChannel;