From 41164123a3a928a2ab76b99e52393a121ad327cb Mon Sep 17 00:00:00 2001
From: brian <brian@brian-linux-laptop>
Date: Mon, 18 Jan 2021 15:56:53 -0500
Subject: [PATCH] added engine selection

---
 .../alfmarkdown/FlexmarkTransformer.java       |  5 +++--
 .../alfmarkdown/TransformerController.java     | 18 ++++++++++++++++--
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/FlexmarkTransformer.java b/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/FlexmarkTransformer.java
index 2e78a9f..79a2def 100644
--- a/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/FlexmarkTransformer.java
+++ b/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/FlexmarkTransformer.java
@@ -36,9 +36,10 @@ import com.vladsch.flexmark.util.misc.Extension;
 
 @Component
 public class FlexmarkTransformer implements Transformer {
+
+	public static final String ID = "flexmark";
 	
 	private final Logger logger = LoggerFactory.getLogger(FlexmarkTransformer.class);
-	private final String id = "flexmark";
 	private final List<String> classSearchPrefixes = Arrays.asList("", "com.vladsch.flexmark.ext.{name}.", "com.vladsch.flexmark.ext.");
 	private final Pattern extClassNamePattern = Pattern.compile("[\\.]?(([A-Za-z0-9]+)Extension|[A-Za-z0-9]+)$");
 	
@@ -56,7 +57,7 @@ public class FlexmarkTransformer implements Transformer {
 	
 	@Override
 	public String getTransformerId() {
-		return this.id;
+		return ID;
 	}
 	
 	@Override
diff --git a/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/TransformerController.java b/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/TransformerController.java
index b225738..9b88e0d 100644
--- a/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/TransformerController.java
+++ b/tengine/src/main/java/com/inteligr8/alfresco/module/alfmarkdown/TransformerController.java
@@ -29,6 +29,8 @@
 package com.inteligr8.alfresco.module.alfmarkdown;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -75,11 +77,12 @@ public class TransformerController extends AbstractTransformerController {
 	private final MediaType defaultTarget = MediaType.TEXT_HTML;
 
 	@Autowired
-	private Transformer transformer;
+	private List<Transformer> transformers;
 	
 	@Value("${transform.alfmarkdown.version}")
 	private String version;
 	
+	private Map<String, Transformer> engineMap;
 	private ProbeTestTransform probe;
 
 	@Override
@@ -92,6 +95,13 @@ public class TransformerController extends AbstractTransformerController {
 		return this.version;
 	}
 	
+	@PostConstruct
+	public void mapEngines() {
+		this.engineMap = new HashMap<>();
+		for (Transformer transformer : this.transformers)
+			this.engineMap.put(transformer.getTransformerId(), transformer);
+	}
+	
 	@PostConstruct
 	public void initProbe() {
 		this.probe = new ProbeTestTransform(this, "quick.src", "quick.trgt", 
@@ -137,8 +147,12 @@ public class TransformerController extends AbstractTransformerController {
 		if (!MediaType.TEXT_MARKDOWN_VALUE.equals(sourceMimetype))
 			throw new TransformException(HttpStatus.BAD_REQUEST.value(), "This transformer does not support source data of the '" + sourceMimetype + "' type");
 		
+		String engine = transformOptions.getOrDefault(RequestParamConstants.ENGINE, FlexmarkTransformer.ID);
+		if (!this.engineMap.containsKey(engine))
+			throw new TransformException(HttpStatus.BAD_REQUEST.value(), "This transformer does not support the following engine: " + engine);
+		
 		try {
-			this.transformer.transform(transformName, sourceMimetype, targetMimetype, transformOptions, sourceFile, targetFile);
+			this.engineMap.get(engine).transform(transformName, sourceMimetype, targetMimetype, transformOptions, sourceFile, targetFile);
 		} catch (Exception e) {
 			this.logger.error("The transformation encountered an unexpected issue", e);
 			throw new TransformException(HttpStatus.INTERNAL_SERVER_ERROR.value(), "The transformer encountered an unexpected");