diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java
index 98c6a8e..d4c59d4 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlController.java
@@ -64,12 +64,6 @@ public class XmlController implements RestController {
acceptRequest(request, response, XmlJobType.XSLT);
}
- @ScopedControllerManifest(method = HandlerType.POST, path = "/xslt/param")
- public void acceptRequestXsltAddParam(Request request, Response response) {
- System.out.println("received param");
- acceptRequest(request, response, XmlJobType.XSLT_PARAM);
- }
-
private void acceptRequest(Request request, Response response, XmlJobType xmlJobType) {
XMLRequestBody requestBody;
try {
@@ -79,22 +73,6 @@ public class XmlController implements RestController {
return;
}
- if (requestBody.getType() != null) {
- String status;
- if (Objects.equals(requestBody.getType(), "add")) {
- status = tools.createNewParam(requestBody.getParamName(), requestBody.getParamValue());
- } else if (Objects.equals(requestBody.getType(), "remove")) {
- status = tools.removeParam(requestBody.getParamName(), requestBody.getParamValue());
- }else {
- unknownOperationType(response);
- return;
- }
-
- XMLResponseBody responseBody = new XMLResponseBody(status);
- response.body(this.gson.toJson(responseBody));
- return;
- }
-
if (requestBody.getProcessor() == null) {
invalidEngineSelectedResponse(response);
return;
@@ -164,7 +142,7 @@ public class XmlController implements RestController {
String result = null;
switch (xmlJob.getXmlJobType()) {
case XSLT:
- result = engine.processXSLT(requestBody.getData(), requestBody.getProcessorData());
+ result = engine.processXSLT(requestBody.getParams(),requestBody.getData(), requestBody.getProcessorData());
break;
case XSD:
result = engine.validate(requestBody.getData(), requestBody.getProcessorData()).trim();
@@ -199,12 +177,6 @@ public class XmlController implements RestController {
response.body(this.gson.toJson(responseBody));
response.status(400);
}
- private void unknownOperationType(Response response) {
- XMLResponseBody responseBody =
- new XMLResponseBody("You can only add and remove parameters", "ERR", "N/A", -1);
- response.body(this.gson.toJson(responseBody));
- response.status(400);
- }
private void requestErrorResponse(Response response, Exception ex) {
XMLResponseBody responseBody = new XMLResponseBody(ex.getMessage(), "ERR", "N/A", -1);
diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java
index 70a22d8..cc0da08 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLRequestBody.java
@@ -2,6 +2,8 @@ package com.r11.tools.model;
import com.google.gson.annotations.SerializedName;
+import java.util.List;
+
/**
* POJO class used to contain body of XML related requests
* @author Adam Bem
@@ -15,21 +17,33 @@ public class XMLRequestBody {
private String processor;
@SerializedName("version")
private String version;
- @SerializedName("paramName")
- private String paramName;
- @SerializedName("paramValue")
- private String paramValue;
+ @SerializedName("params")
+ private List params;
public String getData() {
return data;
}
public String getProcessorData() {return processorData;}
- public String getParamName() {return paramName;}
- public String getParamValue() {return paramValue;}
public String getProcessor() {
return processor;
}
public String getVersion() {
return version;
}
+ public List getParams() {
+ return params;
+ }
+
+ public static class Param {
+ @SerializedName("key")
+ private String key;
+ @SerializedName("value")
+ private String value;
+ public String getKey() {
+ return key;
+ }
+ public String getValue() {
+ return value;
+ }
+ }
}
diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XmlTools.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XmlTools.java
index e1fa2dc..3ae3761 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/model/XmlTools.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XmlTools.java
@@ -18,46 +18,33 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class XmlTools {
private final Map createdParameters = new HashMap<>();
- private final int paramsLimit = 1000;
- private final String errorMessage = "ERR";
- private final String succesMessage = "OK";
-
- private final String parameter = "xsl:param";
- private final String nameAttribute = "name";
- private final String valueAttribute = "select";
- private void createNewNode(String paramName, String paramValue, Document doc) {
-
+ private void createNewNode(String paramName, String paramValue, Document doc) {
+ String parameter = "xsl:param";
Element param = doc.createElement(parameter);
+ String nameAttribute = "name";
param.setAttribute(nameAttribute, paramName);
+ String valueAttribute = "select";
param.setAttribute(valueAttribute, "'" + paramValue + "'");
doc.getDocumentElement().appendChild(param);
}
-
- public String addParams(String processorData ) {
-
+ public String addParams(List params,String processorData) {
+ params.forEach(param ->
+ createdParameters.put(param.getKey(), param.getValue())
+ );
try {
- Document doc = addNode(processorData);
- return docToString(doc);
+ return docToString(addNode(processorData));
} catch (ParserConfigurationException | SAXException | IOException | TransformerException e) {
throw new RuntimeException(e);
+ }finally {
+ createdParameters.clear();
}
}
-
- public String createNewParam(String paramName, String paramValue) {
- if(createdParameters.size() createNewNode(paramName, paramValue, doc));
return doc;
}
-
private String docToString(Document doc) throws TransformerException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
@@ -75,8 +61,4 @@ public class XmlTools {
transformer.transform(source, result);
return outputStream.toString();
}
-
- public String removeParam(String paramName, String paramValue) {
- return createdParameters.remove(paramName,paramValue) ? succesMessage : errorMessage;
- }
}
diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java
index f610a9e..8495e62 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Saxon.java
@@ -1,7 +1,9 @@
package com.r11.tools.xml;
import com.r11.tools.model.XMLMultipleFilesData;
+import com.r11.tools.model.XMLRequestBody;
import com.r11.tools.model.XPathQueryResult;
+import com.r11.tools.model.XmlTools;
import net.sf.saxon.s9api.*;
import javax.xml.transform.stream.StreamSource;
@@ -10,6 +12,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;
+import java.util.List;
import java.util.UUID;
/**
@@ -26,10 +29,13 @@ public class Saxon implements XmlEngine{
* @throws SaxonApiException thrown on stylesheet or transformation error
* @throws IOException thrown when file does not exist, or cannot be read.
*/
+ XmlTools tools = new XmlTools();
public String processXSLT(XMLMultipleFilesData[] data, String transform) throws SaxonApiException, IOException{
Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler();
+ // transform = tools.addParams(params,transform);
+
String filesPath = "/tmp/"+UUID.randomUUID()+"/";
try{
createXMLFilesFromData(data, filesPath);
@@ -78,14 +84,18 @@ public class Saxon implements XmlEngine{
/**
* Transforms string containing xml document via xslt
- * @param data xml to be transformed
+ *
+ * @param params
+ * @param data xml to be transformed
* @param transform xslt
* @return transformed xml
* @throws SaxonApiException thrown on stylesheet or transformation errors
*/
- public String processXSLT(String data, String transform) throws SaxonApiException {
+ public String processXSLT(List params, String data, String transform) throws SaxonApiException {
Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler();
+ transform = tools.addParams(params,transform);
+ System.out.println(transform);
XsltExecutable stylesheet = compiler.compile(new StreamSource(new StringReader(transform)));
StringWriter sw = new StringWriter();
Serializer out = processor.newSerializer(sw);
diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java
index 5c64093..ee3b884 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/Xalan.java
@@ -1,7 +1,9 @@
package com.r11.tools.xml;
import com.r11.tools.model.XMLMultipleFilesData;
+import com.r11.tools.model.XMLRequestBody;
import com.r11.tools.model.XPathQueryResult;
+import com.r11.tools.model.XmlTools;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -22,6 +24,7 @@ import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.StringWriter;
+import java.util.List;
/**
* Handler for Xalan engine
@@ -31,16 +34,20 @@ public class Xalan implements XmlEngine{
/**
* Transforms string containing xml document via xslt
- * @param data xml to be transformed
+ *
+ * @param params
+ * @param data xml to be transformed
* @param transform xslt
* @return transformed xml
* @throws Exception thrown on stylesheet or transformation errors
*/
- public String processXSLT(String data, String transform) throws Exception {
+ public String processXSLT(List params, String data, String transform) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(data)));
+ XmlTools tools = new XmlTools();
+ transform = tools.addParams(params,transform);
StreamSource stylesource = new StreamSource(new StringReader(transform));
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java
index 15deb3b..e66645d 100644
--- a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java
+++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlEngine.java
@@ -1,13 +1,16 @@
package com.r11.tools.xml;
import com.r11.tools.model.XMLMultipleFilesData;
+import com.r11.tools.model.XMLRequestBody;
import com.r11.tools.model.XPathQueryResult;
+import java.util.List;
+
public interface XmlEngine {
String processXSLT(XMLMultipleFilesData[] data, String transform) throws Exception;
XPathQueryResult processXPath(String data, String query, String version) throws Exception;
- String processXSLT(String data, String transform) throws Exception;
+ String processXSLT(List params, String data, String transform) throws Exception;
String validate(String data, String xsd) throws Exception;
String executeXQuery(String data, String xquery, String version) throws Exception;
public String getVersion();
diff --git a/Frontend/src/views/XSLTView.vue b/Frontend/src/views/XSLTView.vue
index 164f36e..8f381ae 100644
--- a/Frontend/src/views/XSLTView.vue
+++ b/Frontend/src/views/XSLTView.vue
@@ -11,6 +11,7 @@ import { ref } from 'vue';
const xml = ref(new Array);
const query = ref('');
const version = ref('');
+const params = ref<{ name: string }[]>([]);
function updateVersion(newVersion: string) {
version.value = newVersion;
@@ -23,9 +24,9 @@ function updateVersion(newVersion: string) {