Merge branch 'ATS-675_aio_transformer' of github.com:Alfresco/alfresco-transform-core into ATS-675_aio_transformer

This commit is contained in:
David Edwards
2020-04-07 08:54:28 +01:00
9 changed files with 131 additions and 35 deletions

View File

@@ -29,6 +29,11 @@ package org.alfresco.transformer;
import org.alfresco.transform.client.model.config.TransformConfig; import org.alfresco.transform.client.model.config.TransformConfig;
import org.alfresco.transform.client.registry.TransformServiceRegistry; import org.alfresco.transform.client.registry.TransformServiceRegistry;
import org.alfresco.transformer.transformers.AllInOneTransformer; import org.alfresco.transformer.transformers.AllInOneTransformer;
import org.alfresco.transformer.transformers.ImageMagickAdapter;
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.alfresco.transformer.transformers.Transformer; import org.alfresco.transformer.transformers.Transformer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
@@ -41,9 +46,15 @@ public class AIOCustomConfig
{ {
@Bean("AllInOneTransformer") @Bean("AllInOneTransformer")
public Transformer aioTransformer() public Transformer aioTransformer() throws Exception
{ {
return new AllInOneTransformer(); AllInOneTransformer aioTransformer = new AllInOneTransformer();
aioTransformer.registerTransformer(new MiscAdapter());
aioTransformer.registerTransformer(new TikaAdapter());
aioTransformer.registerTransformer(new ImageMagickAdapter());
aioTransformer.registerTransformer(new LibreOfficeAdapter());
aioTransformer.registerTransformer(new PdfRendererAdapter());
return aioTransformer;
} }
/** /**
@@ -56,7 +67,6 @@ public class AIOCustomConfig
{ {
return new TransformRegistryImpl() return new TransformRegistryImpl()
{ {
@Autowired @Autowired
@Qualifier("AllInOneTransformer") @Qualifier("AllInOneTransformer")
Transformer transformer; Transformer transformer;

View File

@@ -55,24 +55,6 @@ public class AllInOneTransformer implements Transformer
*/ */
private Map<String, Transformer> transformerTransformMapping = new HashMap(); private Map<String, Transformer> transformerTransformMapping = new HashMap();
public AllInOneTransformer()
{
// TODO - use observer style registration?
try
{
this.registerTransformer(new MiscAdapter());
this.registerTransformer(new TikaAdapter());
this.registerTransformer(new ImageMagickAdapter());
this.registerTransformer(new LibreOfficeAdapter());
this.registerTransformer(new PdfRendererAdapter());
}
catch (Exception e)
{
// Rethrow as runtime exception, nothing else can be done
throw new RuntimeException("Failed to register all transformers.", e);
}
}
/** /**
* The registration will go through all supported sub transformers and map them to the transformer implementation. * The registration will go through all supported sub transformers and map them to the transformer implementation.
* *
@@ -139,4 +121,14 @@ public class AllInOneTransformer implements Transformer
return allInOneConfig; return allInOneConfig;
} }
public Map<String, Transformer> getTransformerTransformMapping()
{
return transformerTransformMapping;
}
public void setTransformerTransformMapping(Map<String, Transformer> transformerTransformMapping)
{
this.transformerTransformMapping = transformerTransformMapping;
}
} }

View File

@@ -26,8 +26,10 @@
*/ */
package org.alfresco.transformer.transformers; package org.alfresco.transformer.transformers;
import org.alfresco.transform.client.model.config.TransformConfig;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.PDFTextStripper;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import java.io.File; import java.io.File;
@@ -35,8 +37,13 @@ import java.io.FileOutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import static org.alfresco.transformer.transformers.TextToPdfContentTransformer.PAGE_LIMIT; import static org.alfresco.transformer.transformers.TextToPdfContentTransformer.PAGE_LIMIT;
import static org.alfresco.transformer.transformers.Transformer.TRANSFORM_NAME_PARAMETER; import static org.alfresco.transformer.transformers.Transformer.TRANSFORM_NAME_PARAMETER;
@@ -49,7 +56,16 @@ public class AllInOneTransformerTest
String SOURCE_ENCODING = "sourceEncoding"; String SOURCE_ENCODING = "sourceEncoding";
String TARGET_ENCODING = "targetEncoding"; String TARGET_ENCODING = "targetEncoding";
AllInOneTransformer transformer = new AllInOneTransformer(); AllInOneTransformer aioTransformer = new AllInOneTransformer();
@Before
public void before() throws Exception
{
aioTransformer.registerTransformer(new MiscAdapter());
aioTransformer.registerTransformer(new TikaAdapter());
}
private void writeToFile(File file, String content, String encoding) throws Exception private void writeToFile(File file, String content, String encoding) throws Exception
{ {
@@ -64,18 +80,47 @@ public class AllInOneTransformerTest
return new String(Files.readAllBytes(file.toPath()), encoding); return new String(Files.readAllBytes(file.toPath()), encoding);
} }
// TODO - add more thorough test
@Test @Test
public void TestConfigAggregation() public void testConfigAggregation() throws Exception
{ {
transformer.getTransformConfig().getTransformers().forEach(t -> {System.out.println(t); System.out.println(" **");}); List<String> expectedTransformNames = Arrays.asList("html", "string", "appleIWorks", "textToPdf", "rfc822",
"Archive", "OutlookMsg", "PdfBox", "Office", "Poi", "OOXML", "TikaAuto", "TextMining");
List<String> expectedTransformOptionNames = Arrays.asList("tikaOptions", "archiveOptions", "pdfboxOptions",
"textToPdfOptions", "stringOptions", "htmlOptions");
TransformConfig miscConfig = (new MiscAdapter()).getTransformConfig();
TransformConfig tikaConfig = (new TikaAdapter()).getTransformConfig();
// check correct number of transformers
assertEquals("Number of expected transformers",
miscConfig.getTransformers().size() + tikaConfig.getTransformers().size(),
aioTransformer.getTransformConfig().getTransformers().size());
List<String> actualTransformerNames = aioTransformer.getTransformConfig().getTransformers()
.stream().map(t -> t.getTransformerName()).collect(Collectors.toList());
// check all transformers are there // check all transformers are there
// check all options are there for(String transformNames : expectedTransformNames)
{
assertTrue("Expected transformer missing.", actualTransformerNames.contains(transformNames));
}
// check correct number of options
assertEquals("Number of expected transformers",
miscConfig.getTransformOptions().size() + tikaConfig.getTransformOptions().size(),
aioTransformer.getTransformConfig().getTransformOptions().size());
Set<String> actualOptionNames = aioTransformer.getTransformConfig().getTransformOptions().keySet();
// check all options are there
for (String optionName : expectedTransformOptionNames)
{
assertTrue("Expected transform option missing.", actualOptionNames.contains(optionName));
}
} }
/// Test copied from Misc transformer - html /// Test copied from Misc aioTransformer - html
@Test @Test
public void testMiscHtml() throws Exception public void testMiscHtml() throws Exception
{ {
@@ -105,7 +150,7 @@ public class AllInOneTransformerTest
Map<String, String> parameters = new HashMap<>(); Map<String, String> parameters = new HashMap<>();
parameters.put(SOURCE_ENCODING, "ISO-8859-1"); parameters.put(SOURCE_ENCODING, "ISO-8859-1");
parameters.put(TRANSFORM_NAME_PARAMETER, "html"); parameters.put(TRANSFORM_NAME_PARAMETER, "html");
transformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters); aioTransformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters);
assertEquals(expected, readFromFile(tmpD, "UTF-8")); assertEquals(expected, readFromFile(tmpD, "UTF-8"));
tmpS.delete(); tmpS.delete();
@@ -119,7 +164,7 @@ public class AllInOneTransformerTest
parameters = new HashMap<>(); parameters = new HashMap<>();
parameters.put(TRANSFORM_NAME_PARAMETER, "html"); parameters.put(TRANSFORM_NAME_PARAMETER, "html");
parameters.put(SOURCE_ENCODING, "UTF-8"); parameters.put(SOURCE_ENCODING, "UTF-8");
transformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters); aioTransformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters);
assertEquals(expected, readFromFile(tmpD, "UTF-8")); assertEquals(expected, readFromFile(tmpD, "UTF-8"));
tmpS.delete(); tmpS.delete();
tmpD.delete(); tmpD.delete();
@@ -132,7 +177,7 @@ public class AllInOneTransformerTest
parameters = new HashMap<>(); parameters = new HashMap<>();
parameters.put(TRANSFORM_NAME_PARAMETER, "html"); parameters.put(TRANSFORM_NAME_PARAMETER, "html");
parameters.put(SOURCE_ENCODING, "UTF-16"); parameters.put(SOURCE_ENCODING, "UTF-16");
transformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters); aioTransformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters);
assertEquals(expected, readFromFile(tmpD, "UTF-8")); assertEquals(expected, readFromFile(tmpD, "UTF-8"));
tmpS.delete(); tmpS.delete();
tmpD.delete(); tmpD.delete();
@@ -158,7 +203,7 @@ public class AllInOneTransformerTest
parameters = new HashMap<>(); parameters = new HashMap<>();
parameters.put(TRANSFORM_NAME_PARAMETER, "html"); parameters.put(TRANSFORM_NAME_PARAMETER, "html");
parameters.put(SOURCE_ENCODING, "ISO-8859-1"); parameters.put(SOURCE_ENCODING, "ISO-8859-1");
transformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters); aioTransformer.transform(tmpS, tmpD, SOURCE_MIMETYPE, TARGET_MIMETYPE, parameters);
assertEquals(expected, readFromFile(tmpD, "UTF-8")); assertEquals(expected, readFromFile(tmpD, "UTF-8"));
tmpS.delete(); tmpS.delete();
tmpD.delete(); tmpD.delete();
@@ -174,7 +219,7 @@ public class AllInOneTransformerTest
} }
} }
/// Test copied from Misc transformer - pdf /// Test copied from Misc aioTransformer - pdf
@Test @Test
public void testMiscPdf() throws Exception public void testMiscPdf() throws Exception
{ {
@@ -215,7 +260,7 @@ public class AllInOneTransformerTest
Map<String, String> parameters = new HashMap<>(); Map<String, String> parameters = new HashMap<>();
parameters.put(TRANSFORM_NAME_PARAMETER, "textToPdf"); parameters.put(TRANSFORM_NAME_PARAMETER, "textToPdf");
parameters.put(PAGE_LIMIT, pageLimit); parameters.put(PAGE_LIMIT, pageLimit);
transformer.transform(sourceFile, targetFile, "text/plain", "application/pdf", parameters); aioTransformer.transform(sourceFile, targetFile, "text/plain", "application/pdf", parameters);
// Read back in the PDF and check it // Read back in the PDF and check it
PDDocument doc = PDDocument.load(targetFile); PDDocument doc = PDDocument.load(targetFile);

View File

@@ -85,6 +85,8 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@WebMvcTest(ImageMagickController.class) @WebMvcTest(ImageMagickController.class)
public class ImageMagickControllerTest extends AbstractTransformerControllerTest public class ImageMagickControllerTest extends AbstractTransformerControllerTest
{ {
private static final String ENGINE_CONFIG_NAME = "imagemagick_engine_config.json";
@Mock @Mock
private ExecutionResult mockExecutionResult; private ExecutionResult mockExecutionResult;
@@ -109,6 +111,12 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest
mockTransformCommand("jpg", "png", "image/jpg", true); mockTransformCommand("jpg", "png", "image/jpg", true);
} }
@Override
public String getEngineConfigName()
{
return ENGINE_CONFIG_NAME;
}
@Override @Override
protected void mockTransformCommand(String sourceExtension, protected void mockTransformCommand(String sourceExtension,
String targetExtension, String sourceMimetype, String targetExtension, String sourceMimetype,

View File

@@ -81,6 +81,9 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@WebMvcTest(LibreOfficeControllerTest.class) @WebMvcTest(LibreOfficeControllerTest.class)
public class LibreOfficeControllerTest extends AbstractTransformerControllerTest public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
{ {
private static final String ENGINE_CONFIG_NAME = "libreoffice_engine_config.json";
@Mock @Mock
private ExecutionResult mockExecutionResult; private ExecutionResult mockExecutionResult;
@@ -137,6 +140,12 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
}).when(javaExecutor).convert(any(), any()); }).when(javaExecutor).convert(any(), any());
} }
@Override
public String getEngineConfigName()
{
return ENGINE_CONFIG_NAME;
}
@Override @Override
protected void mockTransformCommand(String sourceExtension, String targetExtension, protected void mockTransformCommand(String sourceExtension, String targetExtension,
String sourceMimetype, boolean readTargetFileBytes) String sourceMimetype, boolean readTargetFileBytes)

View File

@@ -71,6 +71,8 @@ public class MiscControllerTest extends AbstractTransformerControllerTest
private final String targetEncoding = "UTF-8"; private final String targetEncoding = "UTF-8";
private final String targetMimetype = MIMETYPE_TEXT_PLAIN; private final String targetMimetype = MIMETYPE_TEXT_PLAIN;
private static final String ENGINE_CONFIG_NAME = "misc_engine_config.json";
@Before @Before
public void before() throws Exception public void before() throws Exception
{ {
@@ -86,6 +88,12 @@ public class MiscControllerTest extends AbstractTransformerControllerTest
expectedSourceFileBytes); expectedSourceFileBytes);
} }
@Override
public String getEngineConfigName()
{
return ENGINE_CONFIG_NAME;
}
@Override @Override
protected void mockTransformCommand(String sourceExtension, String targetExtension, protected void mockTransformCommand(String sourceExtension, String targetExtension,
String sourceMimetype, boolean readTargetFileBytes) String sourceMimetype, boolean readTargetFileBytes)

View File

@@ -86,6 +86,9 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@WebMvcTest(AlfrescoPdfRendererController.class) @WebMvcTest(AlfrescoPdfRendererController.class)
public class AlfrescoPdfRendererControllerTest extends AbstractTransformerControllerTest public class AlfrescoPdfRendererControllerTest extends AbstractTransformerControllerTest
{ {
private static final String ENGINE_CONFIG_NAME = "pdfrenderer_engine_config.json";
@Mock @Mock
private ExecutionResult mockExecutionResult; private ExecutionResult mockExecutionResult;
@@ -110,6 +113,12 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro
mockTransformCommand("pdf", "png", "application/pdf", true); mockTransformCommand("pdf", "png", "application/pdf", true);
} }
@Override
public String getEngineConfigName()
{
return ENGINE_CONFIG_NAME;
}
@Override @Override
public void mockTransformCommand(String sourceExtension, public void mockTransformCommand(String sourceExtension,
String targetExtension, String sourceMimetype, String targetExtension, String sourceMimetype,

View File

@@ -116,6 +116,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
@WebMvcTest(TikaController.class) @WebMvcTest(TikaController.class)
public class TikaControllerTest extends AbstractTransformerControllerTest public class TikaControllerTest extends AbstractTransformerControllerTest
{ {
private static final String ENGINE_CONFIG_NAME = "tika_engine_config.json";
private static final String EXPECTED_XHTML_CONTENT_CONTAINS = "<p>The quick brown fox jumps over the lazy dog</p>"; private static final String EXPECTED_XHTML_CONTENT_CONTAINS = "<p>The quick brown fox jumps over the lazy dog</p>";
private static final String EXPECTED_TEXT_CONTENT_CONTAINS = "The quick brown fox jumps over the lazy dog"; private static final String EXPECTED_TEXT_CONTENT_CONTAINS = "The quick brown fox jumps over the lazy dog";
private static final String EXPECTED_MSG_CONTENT_CONTAINS = "Recipients\n" + private static final String EXPECTED_MSG_CONTENT_CONTAINS = "Recipients\n" +
@@ -146,6 +147,12 @@ public class TikaControllerTest extends AbstractTransformerControllerTest
targetExtension = "txt"; targetExtension = "txt";
} }
@Override
public String getEngineConfigName()
{
return ENGINE_CONFIG_NAME;
}
@Override @Override
protected void mockTransformCommand(String sourceExtension, protected void mockTransformCommand(String sourceExtension,
String targetExtension, String sourceMimetype, String targetExtension, String sourceMimetype,

View File

@@ -340,15 +340,24 @@ public abstract class AbstractTransformerControllerTest
assertEquals(BAD_REQUEST.value(), transformReply.getStatus()); assertEquals(BAD_REQUEST.value(), transformReply.getStatus());
} }
/**
*
* @return transformer specific engine config name
*/
public String getEngineConfigName()
{
return "engine_config.json";
}
@Test @Test
public void testGetTransformConfigInfo() throws Exception public void testGetTransformConfigInfo() throws Exception
{ {
TransformConfig expectedTransformConfig = objectMapper TransformConfig expectedTransformConfig = objectMapper
.readValue(new ClassPathResource("engine_config.json").getFile(), .readValue(new ClassPathResource(getEngineConfigName()).getFile(),
TransformConfig.class); TransformConfig.class);
ReflectionTestUtils.setField(transformRegistry, "engineConfig", ReflectionTestUtils.setField(transformRegistry, "engineConfig",
new ClassPathResource("engine_config.json")); new ClassPathResource(getEngineConfigName()));
String response = mockMvc String response = mockMvc
.perform(MockMvcRequestBuilders.get("/transform/config")) .perform(MockMvcRequestBuilders.get("/transform/config"))
@@ -357,7 +366,6 @@ public abstract class AbstractTransformerControllerTest
.andReturn().getResponse().getContentAsString(); .andReturn().getResponse().getContentAsString();
TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class); TransformConfig transformConfig = objectMapper.readValue(response, TransformConfig.class);
assertEquals(expectedTransformConfig, transformConfig); assertEquals(expectedTransformConfig, transformConfig);
} }