mirror of
https://github.com/Alfresco/alfresco-transform-core.git
synced 2025-06-30 18:14:51 +00:00
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:
parent
a0ebe96217
commit
a1b6283a4c
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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}
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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()
|
||||||
|
@ -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}
|
@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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()
|
||||||
|
@ -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}
|
@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
@ -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>
|
||||||
|
@ -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()
|
||||||
|
@ -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}
|
@ -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"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -48,3 +48,4 @@ management:
|
|||||||
|
|
||||||
container:
|
container:
|
||||||
name: ${HOSTNAME:t-engine}
|
name: ${HOSTNAME:t-engine}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user