Removed redundant endpoint improved logic
This commit is contained in:
		| @@ -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); | ||||
|   | ||||
| @@ -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; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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"); | ||||
|   | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user