From 16b5522ff5412a326dde11137c581a09c986830c Mon Sep 17 00:00:00 2001 From: szewczyw Date: Fri, 24 Jan 2025 11:57:05 +0100 Subject: [PATCH] Removed redundant endpoint improved logic --- .../r11/tools/controller/XmlController.java | 30 +------------ .../com/r11/tools/model/XMLRequestBody.java | 26 +++++++++--- .../java/com/r11/tools/model/XmlTools.java | 42 ++++++------------- .../main/java/com/r11/tools/xml/Saxon.java | 14 ++++++- .../main/java/com/r11/tools/xml/Xalan.java | 11 ++++- .../java/com/r11/tools/xml/XmlEngine.java | 5 ++- Frontend/src/views/XSLTView.vue | 5 ++- 7 files changed, 61 insertions(+), 72 deletions(-) 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) {
- +
- +