Removed redundant endpoint improved logic

This commit is contained in:
2025-01-24 11:57:05 +01:00
parent 04e37258bf
commit 16b5522ff5
7 changed files with 61 additions and 72 deletions

View File

@@ -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);

View File

@@ -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<Param> 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<Param> 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;
}
}
}

View File

@@ -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<String, String> 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<XMLRequestBody.Param> 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()<paramsLimit){
createdParameters.put(paramName, paramValue);
return succesMessage;
}else {
return errorMessage;
}
}
private Document addNode(String processorData) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(processorData.getBytes(StandardCharsets.UTF_8));
@@ -65,7 +52,6 @@ public class XmlTools {
createdParameters.forEach((paramName, paramValue) -> 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;
}
}

View File

@@ -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<XMLRequestBody.Param> 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);

View File

@@ -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<XMLRequestBody.Param> 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");

View File

@@ -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<XMLRequestBody.Param> 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();

View File

@@ -11,6 +11,7 @@ import { ref } from 'vue';
const xml = ref(new Array<TabData>);
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) {
<div class="flex flex-col 2xl:flex-row w-full xl:w-7/12 grow overflow-hide pr-2">
<div class="flex flex-col w-full 2xl:w-1/2 h-2/3 2xl:h-full flex-none items-center">
<xmlTabbedInputComponent stylized-name="XML" :tab-count-limit="3" v-model="xml"></xmlTabbedInputComponent>
<xmlInputFieldComponent stylized-name="XSLT" :data="query" v-model="query"></xmlInputFieldComponent>
<xmlInputFieldComponent stylized-name="XSLT" :data="query" v-model:params="params" v-model="query"></xmlInputFieldComponent>
</div>
<xmlOutputFieldComponent tool="xslt" :xml="xml" :query="query" @update="updateVersion"></xmlOutputFieldComponent>
<xmlOutputFieldComponent tool="xslt" :xml="xml" :query="query" :params="params" @update="updateVersion"></xmlOutputFieldComponent>
</div>
<TooltipComponent tool-type="xslt" :version="version"></TooltipComponent>
</div>