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
This commit is contained in:
Kristian Dimitrov 2020-04-16 16:32:01 +01:00 committed by GitHub
parent a0ebe96217
commit a1b6283a4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 239 additions and 41 deletions

View File

@ -32,6 +32,7 @@ import org.alfresco.transformer.transformers.LibreOfficeAdapter;
import org.alfresco.transformer.transformers.MiscAdapter; import org.alfresco.transformer.transformers.MiscAdapter;
import org.alfresco.transformer.transformers.PdfRendererAdapter; import org.alfresco.transformer.transformers.PdfRendererAdapter;
import org.alfresco.transformer.transformers.TikaAdapter; import org.alfresco.transformer.transformers.TikaAdapter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
@ -39,6 +40,21 @@ import org.springframework.context.annotation.Primary;
@Configuration @Configuration
public class AIOCustomConfig 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} * @return Override the TransformRegistryImpl used in {@link AbstractTransformerController}
@ -50,9 +66,9 @@ public class AIOCustomConfig
AIOTransformRegistry aioTransformRegistry = new AIOTransformRegistry(); AIOTransformRegistry aioTransformRegistry = new AIOTransformRegistry();
aioTransformRegistry.registerTransformer(new MiscAdapter()); aioTransformRegistry.registerTransformer(new MiscAdapter());
aioTransformRegistry.registerTransformer(new TikaAdapter()); aioTransformRegistry.registerTransformer(new TikaAdapter());
aioTransformRegistry.registerTransformer(new ImageMagickAdapter()); aioTransformRegistry.registerTransformer(new ImageMagickAdapter(imageMagickExePath, imageMagickDynPath, imageMagickRootPath));
aioTransformRegistry.registerTransformer(new LibreOfficeAdapter()); aioTransformRegistry.registerTransformer(new LibreOfficeAdapter(libreofficePath));
aioTransformRegistry.registerTransformer(new PdfRendererAdapter()); aioTransformRegistry.registerTransformer(new PdfRendererAdapter(pdfRendererPath));
return aioTransformRegistry; return aioTransformRegistry;
} }
} }

View File

@ -1,2 +1,12 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.aio.acs} 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}

View File

@ -59,9 +59,9 @@ public class ImageMagickAdapter implements Transformer
private static String ID = "imagemagick"; private static String ID = "imagemagick";
private ImageMagickCommandExecutor commandExecutor; 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 @Override

View File

@ -36,9 +36,9 @@ public class LibreOfficeAdapter implements Transformer
private static String ID = "libreoffice"; private static String ID = "libreoffice";
private LibreOfficeJavaExecutor javaExecutor; private LibreOfficeJavaExecutor javaExecutor;
public LibreOfficeAdapter() public LibreOfficeAdapter(String execPath) throws Exception
{ {
javaExecutor = new LibreOfficeJavaExecutor(); javaExecutor = new LibreOfficeJavaExecutor(execPath);
} }
@Override @Override

View File

@ -46,9 +46,9 @@ public class PdfRendererAdapter implements Transformer
private static String ID = "pdfrenderer"; private static String ID = "pdfrenderer";
private PdfRendererCommandExecutor pdfExecutor; private PdfRendererCommandExecutor pdfExecutor;
public PdfRendererAdapter() public PdfRendererAdapter(String execPath) throws Exception
{ {
pdfExecutor = new PdfRendererCommandExecutor(); pdfExecutor = new PdfRendererCommandExecutor(execPath);
} }
@Override @Override

View File

@ -81,6 +81,14 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<IMAGEMAGICK_EXE>/usr/bin/convert</IMAGEMAGICK_EXE>
<IMAGEMAGICK_DYN>/usr/lib64/ImageMagick-7.0.7/lib</IMAGEMAGICK_DYN>
<IMAGEMAGICK_ROOT>/usr/lib64/ImageMagick-7.0.7</IMAGEMAGICK_ROOT>
<buildDirectory>${project.build.directory}</buildDirectory>
</systemPropertyVariables>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -37,6 +37,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.alfresco.transformer.executors.ImageMagickCommandExecutor; import org.alfresco.transformer.executors.ImageMagickCommandExecutor;
@ -44,7 +45,7 @@ import org.alfresco.transformer.logging.LogEntry;
import org.alfresco.transformer.probes.ProbeTestTransform; import org.alfresco.transformer.probes.ProbeTestTransform;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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.core.io.Resource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -79,7 +80,22 @@ public class ImageMagickController extends AbstractTransformerController
{ {
private static final Logger logger = LoggerFactory.getLogger(ImageMagickController.class); 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 @Override
public String getTransformerName() public String getTransformerName()

View File

@ -1,5 +1,10 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.imagemagick.acs} engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.imagemagick.acs}
transform: transform:
config: core:
location: classpath:imagemagick_engine_config.json 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}

View File

@ -66,6 +66,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.stubbing.Answer; 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.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.core.io.FileSystemResource; 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.util.ReflectionTestUtils;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import javax.annotation.PostConstruct;
/** /**
* Test the ImageMagickController without a server. * Test the ImageMagickController without a server.
* Super class includes tests for the AbstractTransformerController. * Super class includes tests for the AbstractTransformerController.
@ -96,7 +99,22 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest
@Mock @Mock
private RuntimeExec mockCheckCommand; 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 @SpyBean
private ImageMagickController controller; private ImageMagickController controller;
@ -392,4 +410,13 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest
assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getClientData(), transformReply.getClientData());
assertEquals(transformRequest.getSchema(), transformReply.getSchema()); 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"));
}
} }

View File

@ -35,9 +35,31 @@ import java.util.Map;
*/ */
public class ImageMagickCommandExecutor extends AbstractCommandExecutor public class ImageMagickCommandExecutor extends AbstractCommandExecutor
{ {
private static final String ROOT = "/usr/lib64/ImageMagick-7.0.7"; private final String ROOT;
private static final String DYN = ROOT + "/lib"; private final String DYN;
private static final String EXE = "/usr/bin/convert"; 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"; 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";

View File

@ -91,6 +91,11 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<LIBREOFFICE_HOME>/opt/libreoffice6.3</LIBREOFFICE_HOME>
</systemPropertyVariables>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -36,6 +36,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.alfresco.transformer.executors.LibreOfficeJavaExecutor; import org.alfresco.transformer.executors.LibreOfficeJavaExecutor;
@ -44,6 +45,7 @@ import org.alfresco.transformer.probes.ProbeTestTransform;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -77,7 +79,16 @@ public class LibreOfficeController extends AbstractTransformerController
{ {
private static final Logger logger = LoggerFactory.getLogger(LibreOfficeController.class); 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 @Override
public String getTransformerName() public String getTransformerName()

View File

@ -1,5 +1,8 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.libreoffice.acs} engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.libreoffice.acs}
transform: transform:
config: core:
location: classpath:libreoffice_engine_config.json config:
location: classpath:libreoffice_engine_config.json
libreoffice:
home: ${LIBREOFFICE_HOME:/opt/libreoffice6.3}

View File

@ -62,6 +62,8 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; 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.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.core.io.FileSystemResource; 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.util.ReflectionTestUtils;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import javax.annotation.PostConstruct;
/** /**
* Test the LibreOfficeController without a server. * Test the LibreOfficeController without a server.
* Super class includes tests for the AbstractTransformerController. * Super class includes tests for the AbstractTransformerController.
@ -87,8 +91,16 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
@Mock @Mock
private ExecutionResult mockExecutionResult; private ExecutionResult mockExecutionResult;
@SpyBean @Value("${transform.core.libreoffice.home}")
private LibreOfficeJavaExecutor javaExecutor; private String execPath;
LibreOfficeJavaExecutor javaExecutor;
@PostConstruct
private void init()
{
javaExecutor = Mockito.spy(new LibreOfficeJavaExecutor(execPath));
}
@SpyBean @SpyBean
private LibreOfficeController controller; private LibreOfficeController controller;
@ -235,4 +247,11 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getClientData(), transformReply.getClientData());
assertEquals(transformRequest.getSchema(), transformReply.getSchema()); 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"));
}
} }

View File

@ -53,14 +53,20 @@ public class LibreOfficeJavaExecutor implements JavaExecutor
private static final Logger logger = LoggerFactory.getLogger(LibreOfficeJavaExecutor.class); private static final Logger logger = LoggerFactory.getLogger(LibreOfficeJavaExecutor.class);
private static final int JODCONVERTER_TRANSFORMATION_ERROR_CODE = 3088; 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"; 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; 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(); jodconverter = createJodConverter();
} }
@ -70,7 +76,7 @@ public class LibreOfficeJavaExecutor implements JavaExecutor
final JodConverterSharedInstance jodconverter = new JodConverterSharedInstance(); final JodConverterSharedInstance jodconverter = new JodConverterSharedInstance();
jodconverter.setOfficeHome(OFFICE_HOME); // jodconverter.officeHome jodconverter.setOfficeHome(LIBREOFFICE_HOME); // jodconverter.officeHome
jodconverter.setMaxTasksPerProcess("200"); // jodconverter.maxTasksPerProcess jodconverter.setMaxTasksPerProcess("200"); // jodconverter.maxTasksPerProcess
jodconverter.setTaskExecutionTimeout(timeout); // jodconverter.maxTaskExecutionTimeout jodconverter.setTaskExecutionTimeout(timeout); // jodconverter.maxTaskExecutionTimeout
jodconverter.setTaskQueueTimeout(timeout); // jodconverter.taskQueueTimeout jodconverter.setTaskQueueTimeout(timeout); // jodconverter.taskQueueTimeout

View File

@ -1,5 +1,6 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.misc.acs} engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.misc.acs}
transform: transform:
config: core:
location: classpath:misc_engine_config.json config:
location: classpath:misc_engine_config.json

View File

@ -80,6 +80,11 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<PDF_RENDERER_EXE>/usr/bin/alfresco-pdf-renderer</PDF_RENDERER_EXE>
</systemPropertyVariables>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -36,6 +36,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
import java.io.File; import java.io.File;
import java.util.Map; import java.util.Map;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.alfresco.transformer.executors.PdfRendererCommandExecutor; import org.alfresco.transformer.executors.PdfRendererCommandExecutor;
@ -43,7 +44,7 @@ import org.alfresco.transformer.logging.LogEntry;
import org.alfresco.transformer.probes.ProbeTestTransform; import org.alfresco.transformer.probes.ProbeTestTransform;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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.core.io.Resource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
@ -77,7 +78,16 @@ public class AlfrescoPdfRendererController extends AbstractTransformerController
private static final Logger logger = LoggerFactory.getLogger( private static final Logger logger = LoggerFactory.getLogger(
AlfrescoPdfRendererController.class); 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 @Override
public String getTransformerName() public String getTransformerName()

View File

@ -1,5 +1,8 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.alfresco-pdf-renderer.acs} engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.alfresco-pdf-renderer.acs}
transform: transform:
config: core:
location: classpath:pdfrenderer_engine_config.json config:
location: classpath:pdfrenderer_engine_config.json
pdfrenderer:
exe: ${PDFRENDERER_EXE:/usr/bin/alfresco-pdf-renderer}

View File

@ -67,6 +67,7 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.stubbing.Answer; 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.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.core.io.FileSystemResource; 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.util.ReflectionTestUtils;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import javax.annotation.PostConstruct;
/** /**
* Test the AlfrescoPdfRendererController without a server. * Test the AlfrescoPdfRendererController without a server.
* Super class includes tests for the AbstractTransformerController. * Super class includes tests for the AbstractTransformerController.
@ -97,8 +100,17 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro
@Mock @Mock
private RuntimeExec mockCheckCommand; 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 @SpyBean
private AlfrescoPdfRendererController controller; private AlfrescoPdfRendererController controller;
@ -315,4 +327,11 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro
assertEquals(transformRequest.getClientData(), transformReply.getClientData()); assertEquals(transformRequest.getClientData(), transformReply.getClientData());
assertEquals(transformRequest.getSchema(), transformReply.getSchema()); 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"));
}
} }

View File

@ -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"; 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 @Override
protected RuntimeExec createTransformCommand() protected RuntimeExec createTransformCommand()

View File

@ -1,5 +1,6 @@
queue: queue:
engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.tika.acs} engineRequestQueue: ${TRANSFORM_ENGINE_REQUEST_QUEUE:org.alfresco.transform.engine.tika.acs}
transform: transform:
config: core:
location: classpath:tika_engine_config.json config:
location: classpath:tika_engine_config.json

View File

@ -57,7 +57,7 @@ public class TransformRegistryImpl extends AbstractTransformRegistry
@Autowired @Autowired
ResourceLoader resourceLoader; ResourceLoader resourceLoader;
@Value("${transform.config.location:classpath:engine_config.json}") @Value("${transform.core.config.location:classpath:engine_config.json}")
private String locationFromProperty; private String locationFromProperty;
private Resource engineConfig; private Resource engineConfig;

View File

@ -40,8 +40,8 @@ import org.alfresco.transform.exceptions.TransformException;
*/ */
public abstract class AbstractCommandExecutor implements CommandExecutor public abstract class AbstractCommandExecutor implements CommandExecutor
{ {
private final RuntimeExec transformCommand = createTransformCommand(); protected RuntimeExec transformCommand = createTransformCommand();
private final RuntimeExec checkCommand = createCheckCommand(); protected RuntimeExec checkCommand = createCheckCommand();
protected abstract RuntimeExec createTransformCommand(); protected abstract RuntimeExec createTransformCommand();

View File

@ -48,3 +48,4 @@ management:
container: container:
name: ${HOSTNAME:t-engine} name: ${HOSTNAME:t-engine}

View File

@ -44,7 +44,6 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;