diff --git a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java index ce40a6b..30c1905 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/SparkApplication.java @@ -44,6 +44,7 @@ public class SparkApplication { registry.registerController(new XmlController(gson, logger, saxon, xalan)); registry.registerController(new MultipleXMLController(gson,logger, saxon)); registry.registerController(new JsonController(gson, jsongson, logger)); + registry.registerController(new XmlFormatterController(gson)); registry.register(); diff --git a/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlFormatterController.java b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlFormatterController.java new file mode 100644 index 0000000..821990a --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/controller/XmlFormatterController.java @@ -0,0 +1,47 @@ +package com.r11.tools.controller; + +import com.google.gson.Gson; +import com.r11.tools.controller.internal.GlobalControllerManifest; +import com.r11.tools.controller.internal.HandlerType; +import com.r11.tools.controller.internal.RestController; +import com.r11.tools.controller.internal.ScopedControllerManifest; +import com.r11.tools.controller.internal.XmlJobType; +import com.r11.tools.model.XMLRequestBody; +import com.r11.tools.model.XMLResponseBody; +import com.r11.tools.xml.XmlFormatter; +import spark.Request; +import spark.Response; + +@GlobalControllerManifest +public class XmlFormatterController implements RestController { + private final Gson gson; + + public XmlFormatterController(Gson gson) { + this.gson = gson; + } + + + @ScopedControllerManifest(method = HandlerType.POST, path = "/prettify") + public void acceptRequestXslt(Request request, Response response) { + System.out.println("kurwa piwo"); + acceptRequest(request, response); + } + private void acceptRequest(Request request, Response response){ + long timeStart = System.currentTimeMillis(); + long duration; + + XmlFormatter formatter = new XmlFormatter(); + XMLRequestBody requestBody; + try { + requestBody = this.gson.fromJson(request.body(), XMLRequestBody.class); + } catch (Exception e) { + //requestErrorResponse(response, e); + return; + } + String responseString = formatter.formatXML(requestBody.getData()); + duration = System.currentTimeMillis() - timeStart; + XMLResponseBody responseBody = new XMLResponseBody(responseString,"OK",duration); + response.body(this.gson.toJson(responseBody)); + + } +} 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 e7b06aa..b330ba9 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 @@ -4,6 +4,7 @@ import com.google.gson.annotations.SerializedName; /** * POJO class used to contain body of XML related requests + * * @author Adam Bem */ public class XMLRequestBody { @@ -15,6 +16,8 @@ public class XMLRequestBody { private String processor; @SerializedName("version") private String version; + @SerializedName("pretify") + private String pretif; public String getData() { return data; @@ -31,4 +34,8 @@ public class XMLRequestBody { public String getVersion() { return version; } + + public String getPretif() { + return pretif; + } } diff --git a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java index 81f8d73..b5ea050 100644 --- a/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java +++ b/Backend/tools-services/src/main/java/com/r11/tools/model/XMLResponseBody.java @@ -2,6 +2,7 @@ package com.r11.tools.model; public class XMLResponseBody { + private String result; private String status; private String processor; @@ -10,6 +11,11 @@ public class XMLResponseBody { // Optional private String type; + public XMLResponseBody(String result, String status, long duration) { + this.result = result; + this.status = status; + this.duration = duration; + } public XMLResponseBody(String result, String status, String processor) { this.result = result; this.status = status; diff --git a/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlFormatter.java b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlFormatter.java new file mode 100644 index 0000000..8e1b768 --- /dev/null +++ b/Backend/tools-services/src/main/java/com/r11/tools/xml/XmlFormatter.java @@ -0,0 +1,37 @@ +package com.r11.tools.xml; + +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.StringReader; +import java.io.StringWriter; + +public class XmlFormatter { + public String formatXML(String inputXML) { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(inputXML))); + + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + + StringWriter writer = new StringWriter(); + transformer.transform(new DOMSource(document), new StreamResult(writer)); + return writer.toString(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +}