6 Commits

Author SHA1 Message Date
75db025d80 Added type 2025-02-05 15:00:45 +01:00
d33ac7e9f8 cleared code 2025-02-04 18:28:40 +01:00
bbae61da42 Moved param class outside XMLRequestBody 2025-02-04 17:42:32 +01:00
1d5038ca51 Added params functionalities to multipleXml, bugfix 2025-02-04 17:41:22 +01:00
bdb807d3e0 bugfix 2025-01-24 11:57:44 +01:00
16b5522ff5 Removed redundant endpoint improved logic 2025-01-24 11:57:05 +01:00
13 changed files with 129 additions and 171 deletions

View File

@@ -68,7 +68,7 @@ public class MultipleXMLController implements RestController {
private XMLResponseBody processData(MultipleXmlJob xmlJob) throws Exception { private XMLResponseBody processData(MultipleXmlJob xmlJob) throws Exception {
XmlEngine engine = xmlJob.getEngine(); XmlEngine engine = xmlJob.getEngine();
XMLMultipleFilesBody requestBody = xmlJob.getRequestBody(); XMLMultipleFilesBody requestBody = xmlJob.getRequestBody();
String result = engine.processXSLT(requestBody.getData(), requestBody.getProcessorData()); String result = engine.processXSLT(requestBody.getParams(), requestBody.getData(), requestBody.getProcessorData());
return new XMLResponseBody(result, "OK", requestBody.getVersion()); return new XMLResponseBody(result, "OK", requestBody.getVersion());
} }

View File

@@ -64,12 +64,6 @@ public class XmlController implements RestController {
acceptRequest(request, response, XmlJobType.XSLT); 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) { private void acceptRequest(Request request, Response response, XmlJobType xmlJobType) {
XMLRequestBody requestBody; XMLRequestBody requestBody;
try { try {
@@ -79,22 +73,6 @@ public class XmlController implements RestController {
return; 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) { if (requestBody.getProcessor() == null) {
invalidEngineSelectedResponse(response); invalidEngineSelectedResponse(response);
return; return;
@@ -164,7 +142,7 @@ public class XmlController implements RestController {
String result = null; String result = null;
switch (xmlJob.getXmlJobType()) { switch (xmlJob.getXmlJobType()) {
case XSLT: case XSLT:
result = engine.processXSLT(requestBody.getData(), requestBody.getProcessorData()); result = engine.processXSLT(requestBody.getParams(),requestBody.getData(), requestBody.getProcessorData());
break; break;
case XSD: case XSD:
result = engine.validate(requestBody.getData(), requestBody.getProcessorData()).trim(); result = engine.validate(requestBody.getData(), requestBody.getProcessorData()).trim();
@@ -199,12 +177,6 @@ public class XmlController implements RestController {
response.body(this.gson.toJson(responseBody)); response.body(this.gson.toJson(responseBody));
response.status(400); 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) { private void requestErrorResponse(Response response, Exception ex) {
XMLResponseBody responseBody = new XMLResponseBody(ex.getMessage(), "ERR", "N/A", -1); XMLResponseBody responseBody = new XMLResponseBody(ex.getMessage(), "ERR", "N/A", -1);

View File

@@ -0,0 +1,20 @@
package com.r11.tools.model;
import com.google.gson.annotations.SerializedName;
public class Param {
@SerializedName("key")
private String key;
@SerializedName("value")
private String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}

View File

@@ -2,6 +2,8 @@ package com.r11.tools.model;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.util.List;
public class XMLMultipleFilesBody { public class XMLMultipleFilesBody {
@SerializedName("data") @SerializedName("data")
@@ -12,6 +14,8 @@ public class XMLMultipleFilesBody {
private String processor; private String processor;
@SerializedName("version") @SerializedName("version")
private String version; private String version;
@SerializedName("params")
private List<Param> params;
public String getProcessorData() { public String getProcessorData() {
@@ -29,4 +33,9 @@ public class XMLMultipleFilesBody {
public XMLMultipleFilesData[] getData() { public XMLMultipleFilesData[] getData() {
return data; return data;
} }
public List<Param> getParams() {
return params;
}
} }

View File

@@ -2,6 +2,8 @@ package com.r11.tools.model;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import java.util.List;
/** /**
* POJO class used to contain body of XML related requests * POJO class used to contain body of XML related requests
* @author Adam Bem * @author Adam Bem
@@ -15,21 +17,22 @@ public class XMLRequestBody {
private String processor; private String processor;
@SerializedName("version") @SerializedName("version")
private String version; private String version;
@SerializedName("paramName") @SerializedName("params")
private String paramName; private List<Param> params;
@SerializedName("paramValue")
private String paramValue;
public String getData() { public String getData() {
return data; return data;
} }
public String getProcessorData() {return processorData;} public String getProcessorData() {return processorData;}
public String getParamName() {return paramName;}
public String getParamValue() {return paramValue;}
public String getProcessor() { public String getProcessor() {
return processor; return processor;
} }
public String getVersion() { public String getVersion() {
return version; return version;
} }
public List<Param> getParams() {
return params;
}
} }

View File

@@ -18,46 +18,33 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public class XmlTools { public class XmlTools {
private final Map<String, String> createdParameters = new HashMap<>(); private final Map<String, String> createdParameters = new HashMap<>();
private final int paramsLimit = 1000; private void createNewNode(String paramName, String paramValue, Document doc) {
private final String errorMessage = "ERR"; String parameter = "xsl:param";
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) {
Element param = doc.createElement(parameter); Element param = doc.createElement(parameter);
String nameAttribute = "name";
param.setAttribute(nameAttribute, paramName); param.setAttribute(nameAttribute, paramName);
String valueAttribute = "select";
param.setAttribute(valueAttribute, "'" + paramValue + "'"); param.setAttribute(valueAttribute, "'" + paramValue + "'");
doc.getDocumentElement().appendChild(param); doc.getDocumentElement().appendChild(param);
} }
public String addParams(List<Param> params,String processorData) {
public String addParams(String processorData ) { params.forEach(param ->
createdParameters.put(param.getKey(), param.getValue())
);
try { try {
Document doc = addNode(processorData); return docToString(addNode(processorData));
return docToString(doc);
} catch (ParserConfigurationException | SAXException | IOException | TransformerException e) { } catch (ParserConfigurationException | SAXException | IOException | TransformerException e) {
throw new RuntimeException(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 { private Document addNode(String processorData) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(processorData.getBytes(StandardCharsets.UTF_8)); InputStream stream = new ByteArrayInputStream(processorData.getBytes(StandardCharsets.UTF_8));
@@ -65,7 +52,6 @@ public class XmlTools {
createdParameters.forEach((paramName, paramValue) -> createNewNode(paramName, paramValue, doc)); createdParameters.forEach((paramName, paramValue) -> createNewNode(paramName, paramValue, doc));
return doc; return doc;
} }
private String docToString(Document doc) throws TransformerException { private String docToString(Document doc) throws TransformerException {
TransformerFactory transformerFactory = TransformerFactory.newInstance(); TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(); Transformer transformer = transformerFactory.newTransformer();
@@ -75,8 +61,4 @@ public class XmlTools {
transformer.transform(source, result); transformer.transform(source, result);
return outputStream.toString(); return outputStream.toString();
} }
public String removeParam(String paramName, String paramValue) {
return createdParameters.remove(paramName,paramValue) ? succesMessage : errorMessage;
}
} }

View File

@@ -1,7 +1,10 @@
package com.r11.tools.xml; package com.r11.tools.xml;
import com.r11.tools.model.Param;
import com.r11.tools.model.XMLMultipleFilesData; import com.r11.tools.model.XMLMultipleFilesData;
import com.r11.tools.model.XMLRequestBody;
import com.r11.tools.model.XPathQueryResult; import com.r11.tools.model.XPathQueryResult;
import com.r11.tools.model.XmlTools;
import net.sf.saxon.s9api.*; import net.sf.saxon.s9api.*;
import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamSource;
@@ -10,6 +13,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Comparator; import java.util.Comparator;
import java.util.List;
import java.util.UUID; import java.util.UUID;
/** /**
@@ -26,10 +30,13 @@ public class Saxon implements XmlEngine{
* @throws SaxonApiException thrown on stylesheet or transformation error * @throws SaxonApiException thrown on stylesheet or transformation error
* @throws IOException thrown when file does not exist, or cannot be read. * @throws IOException thrown when file does not exist, or cannot be read.
*/ */
public String processXSLT(XMLMultipleFilesData[] data, String transform) throws SaxonApiException, IOException{ XmlTools tools = new XmlTools();
public String processXSLT(List<Param> params, XMLMultipleFilesData[] data, String transform) throws SaxonApiException, IOException{
Processor processor = new Processor(false); Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler(); XsltCompiler compiler = processor.newXsltCompiler();
transform = tools.addParams(params,transform);
String filesPath = "/tmp/"+UUID.randomUUID()+"/"; String filesPath = "/tmp/"+UUID.randomUUID()+"/";
try{ try{
createXMLFilesFromData(data, filesPath); createXMLFilesFromData(data, filesPath);
@@ -78,14 +85,18 @@ public class Saxon implements XmlEngine{
/** /**
* Transforms string containing xml document via xslt * Transforms string containing xml document via xslt
* @param data xml to be transformed *
* @param params
* @param data xml to be transformed
* @param transform xslt * @param transform xslt
* @return transformed xml * @return transformed xml
* @throws SaxonApiException thrown on stylesheet or transformation errors * @throws SaxonApiException thrown on stylesheet or transformation errors
*/ */
public String processXSLT(String data, String transform) throws SaxonApiException { public String processXSLT(List<Param> params, String data, String transform) throws SaxonApiException {
Processor processor = new Processor(false); Processor processor = new Processor(false);
XsltCompiler compiler = processor.newXsltCompiler(); XsltCompiler compiler = processor.newXsltCompiler();
transform = tools.addParams(params,transform);
System.out.println(transform);
XsltExecutable stylesheet = compiler.compile(new StreamSource(new StringReader(transform))); XsltExecutable stylesheet = compiler.compile(new StreamSource(new StringReader(transform)));
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
Serializer out = processor.newSerializer(sw); Serializer out = processor.newSerializer(sw);

View File

@@ -1,7 +1,10 @@
package com.r11.tools.xml; package com.r11.tools.xml;
import com.r11.tools.model.Param;
import com.r11.tools.model.XMLMultipleFilesData; import com.r11.tools.model.XMLMultipleFilesData;
import com.r11.tools.model.XMLRequestBody;
import com.r11.tools.model.XPathQueryResult; import com.r11.tools.model.XPathQueryResult;
import com.r11.tools.model.XmlTools;
import org.apache.xpath.XPathAPI; import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -22,6 +25,7 @@ import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.StringReader; import java.io.StringReader;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.List;
/** /**
* Handler for Xalan engine * Handler for Xalan engine
@@ -31,16 +35,20 @@ public class Xalan implements XmlEngine{
/** /**
* Transforms string containing xml document via xslt * Transforms string containing xml document via xslt
* @param data xml to be transformed *
* @param params
* @param data xml to be transformed
* @param transform xslt * @param transform xslt
* @return transformed xml * @return transformed xml
* @throws Exception thrown on stylesheet or transformation errors * @throws Exception thrown on stylesheet or transformation errors
*/ */
public String processXSLT(String data, String transform) throws Exception { public String processXSLT(List<Param> params, String data, String transform) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(data))); 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)); StreamSource stylesource = new StreamSource(new StringReader(transform));
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource); Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
@@ -62,7 +70,7 @@ public class Xalan implements XmlEngine{
} }
@Override @Override
public String processXSLT(XMLMultipleFilesData[] data, String transform) throws Exception { public String processXSLT(List<Param> params, XMLMultipleFilesData[] data, String transform) throws Exception {
throw new UnsupportedOperationException("Xalan does not support multiple files XSLT processing"); throw new UnsupportedOperationException("Xalan does not support multiple files XSLT processing");
} }

View File

@@ -1,13 +1,16 @@
package com.r11.tools.xml; package com.r11.tools.xml;
import com.r11.tools.model.Param;
import com.r11.tools.model.XMLMultipleFilesData; import com.r11.tools.model.XMLMultipleFilesData;
import com.r11.tools.model.XPathQueryResult; import com.r11.tools.model.XPathQueryResult;
import java.util.List;
public interface XmlEngine { public interface XmlEngine {
String processXSLT(XMLMultipleFilesData[] data, String transform) throws Exception; String processXSLT(List<Param> params, XMLMultipleFilesData[] data, String transform) throws Exception;
XPathQueryResult processXPath(String data, String query, String version) throws Exception; XPathQueryResult processXPath(String data, String query, String version) throws Exception;
String processXSLT(String data, String transform) throws Exception; String processXSLT(List<Param> params, String data, String transform) throws Exception;
String validate(String data, String xsd) throws Exception; String validate(String data, String xsd) throws Exception;
String executeXQuery(String data, String xquery, String version) throws Exception; String executeXQuery(String data, String xquery, String version) throws Exception;
public String getVersion(); public String getVersion();

View File

@@ -13,90 +13,51 @@ const sendToParent = () => {
options.value.forEach((value) => {console.log("KID" + value + options.value.indexOf(value))}) options.value.forEach((value) => {console.log("KID" + value + options.value.indexOf(value))})
emit('update-value', options.value); emit('update-value', options.value);
}; };
const nameInput = ref('') const nameInput = ref('')
const valueInput = ref('') const valueInput = ref('')
const selectedOption = ref(options.value[0].name) const selectedOption = ref(options.value[0].name)
const isNumeric = (string : string) => /^[+-]?\d+(\.\d+)?$/.test(string)
const selectedFunction = () => { const selectedFunction = () => {
if (selectOption(selectedOption.value) === 'Add Param') { const action = selectOption(selectedOption.value);
options.value.push({name: nameInput.value + " = " + valueInput.value}); const name = nameInput.value.trim();
const value = valueInput.value.trim();
if (action === "Add Param" && name && value && !isNumeric(name)) {
options.value.push({ name: `${name} = ${value}` });
nameInput.value = valueInput.value = "";
} }
if (selectOption(selectedOption.value) === 'Remove Param') {
const currentIndex = options.value.indexOf(selectedOption.value) if (action === "Remove Param") {
options.value.splice(currentIndex, 1); options.value = options.value.filter(option => option.name !== selectedOption.value);
selectedOption.value= options.value[0].name selectedOption.value = options.value.length ? options.value[0].name : "";
valueInput.value = "" nameInput.value = valueInput.value = "";
nameInput.value = ""
} }
sendToParent() sendToParent();
/* };
if(selectedOption.value === "Add Param") {
sendRequest("add");
}
else {
sendRequest("remove");
}
*/
}
/*
const sendRequest = (type:string) => {
console.log(type)
let request: Request = prepareRequest(type)
fetchRequest(request).then((body) => {
const {status} = body as any;
console.log(status)
if (status === "OK") {
options.value.push({ name: nameInput.value + " = " + valueInput.value });
}
});
}
*/
function selectOption(option: string): string { function selectOption(option: string): string {
return option == "Add Param" ? "Add Param" : "Remove Param" return option == "Add Param" ? "Add Param" : "Remove Param"
} }
//
// function prepareRequest(type :string): Request {
// let request = new Request(prepareURL(), {
// body: prepareRequestBody(type),
// method: "POST"
// });
// return request
// }
//
// function prepareURL(): string {
// //const engineEndpoint = engine.value == "libxml" ? "libxml" : "java";
// return document.location.protocol + "//" + document.location.hostname + "/" + "java" + "/xslt/param";
// //return "http://localhost:8081/xslt/param";
// }
//
// function prepareRequestBody(type: string): string {
// let requestBody = JSON.stringify({
// "paramName": nameInput.value,
// "paramValue": valueInput.value,
// "type": type
// });
// console.log(requestBody);
// return requestBody;
// }
//
// async function fetchRequest(request: Request): Promise<JSON> {
// console.log(request)
// let responseBody = await fetch(request)
// return await responseBody.json()
// }
</script> </script>
<template> <template>
<input
v-if="selectedOption==='Add Param'"
id="NameTextInput"
v-model="nameInput"
class="text-input h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-48"
type="text"
placeholder="Name"
/>
<input
v-if="selectedOption==='Add Param'"
id="ValueTextInput"
v-model="valueInput"
class="text-input h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-48"
type="text"
placeholder="Value"
/>
<select <select
v-model="selectedOption" v-model="selectedOption"
class="flex h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-48" class="flex h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-48"
@@ -105,22 +66,7 @@ function selectOption(option: string): string {
{{ option.name }} {{ option.name }}
</option> </option>
</select> </select>
<input <button class="tool-button w-24" @click="selectedFunction">{{ selectOption(selectedOption) }}</button>
v-if="selectedOption==='Add Param'"
id="NameTextInput"
v-model="nameInput"
class="text-input h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-1/3"
type="text"
placeholder="Name"
/>
<input
v-if="selectedOption==='Add Param'"
id="ValueTextInput"
v-model="valueInput"
class="text-input h-full px-3 rounded-full border border-slate-400 bg-white dark:text-slate-100 dark:bg-gray-600 w-1/3"
type="text"
placeholder="Value"
/>
<button class="tool-button" @click="selectedFunction">{{ selectOption(selectedOption) }}</button>
</template> </template>

View File

@@ -63,7 +63,7 @@ function readFile(file: any) {
const handleUpdateValue = (options: { name: string }[]) => { const handleUpdateValue = (options: { name: string }[]) => {
console.log("from parent" +options.length) console.log("from parent" +options.length)
params.value = options params.value = options
updateParams(params) updateParams(params.value)
}; };
</script> </script>

View File

@@ -15,6 +15,8 @@ const emit = defineEmits(["update"]);
const result = ref(''); const result = ref('');
let enginesForCurrentTool = ref(["saxon", "xalan", "libxml"]); let enginesForCurrentTool = ref(["saxon", "xalan", "libxml"]);
const formattedParams = ref();
const allVersions = ["1.0", "2.0", "3.0", "3.1"]; const allVersions = ["1.0", "2.0", "3.0", "3.1"];
let versionsForCurrentEngine = ref([""]); let versionsForCurrentEngine = ref([""]);
@@ -100,6 +102,7 @@ function updateOutputField(data: any) {
} }
function prepareRequest():Request { function prepareRequest():Request {
formattedParams.value = formatParams()
let request = new Request(prepareURL(), { let request = new Request(prepareURL(), {
body: selectRequestBodyType(), body: selectRequestBodyType(),
method: "POST" method: "POST"
@@ -127,18 +130,16 @@ function selectRequestBodyType() : string {
return prepareRequestBodySingleXml(props.xml!); return prepareRequestBodySingleXml(props.xml!);
} }
function formatParams() { function formatParams() {
return props.params.map(param => { return props.params?.slice(1).map(param => {
const [key, value] = param.name.split(" = "); const [key, value] = param.name.split(" = ");
return {key, value}; return { key, value };
}); }) ?? [];
} }
function prepareRequestBodySingleXml(data: string):string { function prepareRequestBodySingleXml(data: string):string {
const formattedParams = formatParams();
let requestBody = JSON.stringify({ let requestBody = JSON.stringify({
"params": formattedParams, "params": formattedParams.value,
"data": data, "data": data,
"processorData": props.query, "processorData": props.query,
"processor": engine.value, "processor": engine.value,
@@ -149,12 +150,14 @@ function prepareRequestBodySingleXml(data: string):string {
} }
function prepareRequestBodyMultiXml():string { function prepareRequestBodyMultiXml():string {
if (!Array.isArray(props.xml))
if (!Array.isArray(props.xml))
return ""; return "";
let xmlFilesArray = convertDataArray(props.xml); let xmlFilesArray = convertDataArray(props.xml);
let requestBody = JSON.stringify({ let requestBody = JSON.stringify({
"params": formattedParams.value,
"data": xmlFilesArray, "data": xmlFilesArray,
"processorData": props.query, "processorData": props.query,
"processor": engine.value, "processor": engine.value,

View File

@@ -11,6 +11,7 @@ import { ref } from 'vue';
const xml = ref(new Array<TabData>); const xml = ref(new Array<TabData>);
const query = ref(''); const query = ref('');
const version = ref(''); const version = ref('');
const params = ref<{ name: string }[]>([]);
function updateVersion(newVersion: string) { function updateVersion(newVersion: string) {
version.value = newVersion; 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 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"> <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> <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> </div>
<xmlOutputFieldComponent tool="xslt" :xml="xml" :query="query" @update="updateVersion"></xmlOutputFieldComponent> <xmlOutputFieldComponent tool="xslt" :xml="xml" :query="query" :params="params" @update="updateVersion"></xmlOutputFieldComponent>
</div> </div>
<TooltipComponent tool-type="xslt" :version="version"></TooltipComponent> <TooltipComponent tool-type="xslt" :version="version"></TooltipComponent>
</div> </div>