From 7d03ac4516443bacd54f4b5b30b853bd097d10b8 Mon Sep 17 00:00:00 2001
From: npedot <nicola.pedot@gmail.com>
Date: Tue, 14 Jan 2020 18:05:42 +0100
Subject: [PATCH] adds xstl trasnfromer

---
 .../adapter/XSLTransformerJaxpAdapter.kt      | 20 +++++++++++++
 .../service/IXSLTransformerService.kt         |  5 ++++
 .../usecase/XSLTrasformUseCase.kt             | 11 +++++++
 .../usecase/xstl/XSTLTransformTest.kt         | 25 ++++++++++++++++
 src/test/resources/xslt/report.html           | 13 ++++++++
 src/test/resources/xslt/report.xml            | 28 +++++++++++++++++
 src/test/resources/xslt/stylesheet.xsl        | 30 +++++++++++++++++++
 7 files changed, 132 insertions(+)
 create mode 100644 src/main/kotlin/unibz.cs.semint.kprime/adapter/XSLTransformerJaxpAdapter.kt
 create mode 100644 src/main/kotlin/unibz.cs.semint.kprime/service/IXSLTransformerService.kt
 create mode 100644 src/main/kotlin/unibz.cs.semint.kprime/usecase/XSLTrasformUseCase.kt
 create mode 100644 src/test/kotlin/unibz.cs.semint.kprime/usecase/xstl/XSTLTransformTest.kt
 create mode 100644 src/test/resources/xslt/report.html
 create mode 100644 src/test/resources/xslt/report.xml
 create mode 100644 src/test/resources/xslt/stylesheet.xsl

diff --git a/src/main/kotlin/unibz.cs.semint.kprime/adapter/XSLTransformerJaxpAdapter.kt b/src/main/kotlin/unibz.cs.semint.kprime/adapter/XSLTransformerJaxpAdapter.kt
new file mode 100644
index 0000000..fb69eed
--- /dev/null
+++ b/src/main/kotlin/unibz.cs.semint.kprime/adapter/XSLTransformerJaxpAdapter.kt
@@ -0,0 +1,20 @@
+package unibz.cs.semint.kprime.adapter
+
+import unibz.cs.semint.kprime.service.IXSLTransformerService
+import java.io.FileOutputStream
+import javax.xml.transform.OutputKeys
+import javax.xml.transform.TransformerFactory
+import javax.xml.transform.stream.StreamResult
+import javax.xml.transform.stream.StreamSource
+
+class XSLTransformerJaxpAdapter:IXSLTransformerService {
+    override fun trasform(xsl: String, xml: String, out: String) {
+        val tFactory = TransformerFactory.newInstance()
+        val fileOutputStream = FileOutputStream(out)
+        val transformer = tFactory.newTransformer(StreamSource(xsl))
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes")
+        transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4")
+        transformer.transform(StreamSource(xml), StreamResult(fileOutputStream))
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/unibz.cs.semint.kprime/service/IXSLTransformerService.kt b/src/main/kotlin/unibz.cs.semint.kprime/service/IXSLTransformerService.kt
new file mode 100644
index 0000000..0da9dca
--- /dev/null
+++ b/src/main/kotlin/unibz.cs.semint.kprime/service/IXSLTransformerService.kt
@@ -0,0 +1,5 @@
+package unibz.cs.semint.kprime.service
+
+interface IXSLTransformerService {
+    fun trasform(xsl:String,xml:String,out:String)
+}
\ No newline at end of file
diff --git a/src/main/kotlin/unibz.cs.semint.kprime/usecase/XSLTrasformUseCase.kt b/src/main/kotlin/unibz.cs.semint.kprime/usecase/XSLTrasformUseCase.kt
new file mode 100644
index 0000000..097ec53
--- /dev/null
+++ b/src/main/kotlin/unibz.cs.semint.kprime/usecase/XSLTrasformUseCase.kt
@@ -0,0 +1,11 @@
+package unibz.cs.semint.kprime.usecase
+
+import unibz.cs.semint.kprime.domain.UseCaseResult
+import unibz.cs.semint.kprime.service.IXSLTransformerService
+
+class XSLTrasformUseCase (val transformer:IXSLTransformerService){
+
+    fun transform(xsl: String, xml: String, out: String):UseCaseResult<Unit> {
+        return UseCaseResult("done",transformer.trasform(xsl,xml,out))
+    }
+}
\ No newline at end of file
diff --git a/src/test/kotlin/unibz.cs.semint.kprime/usecase/xstl/XSTLTransformTest.kt b/src/test/kotlin/unibz.cs.semint.kprime/usecase/xstl/XSTLTransformTest.kt
new file mode 100644
index 0000000..2dd254b
--- /dev/null
+++ b/src/test/kotlin/unibz.cs.semint.kprime/usecase/xstl/XSTLTransformTest.kt
@@ -0,0 +1,25 @@
+package unibz.cs.semint.kprime.usecase.xstl
+
+import org.junit.Test
+import unibz.cs.semint.kprime.adapter.XSLTransformerJaxpAdapter
+import unibz.cs.semint.kprime.usecase.XMLSerializeUseCase
+import unibz.cs.semint.kprime.usecase.XSLTrasformUseCase
+
+class XSTLTransformTest {
+
+    @Test
+    fun test_xstl() {
+        // given
+        val transformer = XSLTrasformUseCase(XSLTransformerJaxpAdapter())
+        //val path = XSTLTransformTest::class.java.getResource("xslt/stylesheet.xsl").path
+        //println(path)
+        // when
+        transformer.transform(
+            "target/test-classes/xslt/stylesheet.xsl",
+            "target/test-classes/xslt/report.xml",
+            "target/test-classes/xslt/report.html"
+        )
+        // then
+        //  check output file
+    }
+}
\ No newline at end of file
diff --git a/src/test/resources/xslt/report.html b/src/test/resources/xslt/report.html
new file mode 100644
index 0000000..cd14150
--- /dev/null
+++ b/src/test/resources/xslt/report.html
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset>
+    <url>
+        <stepno>1</stepno>
+        <stepname>Successfully Started browser at http://www.officedepot.com</stepname>
+        <status>PASS</status>
+    </url>
+    <url>
+        <stepno>2</stepno>
+        <stepname>click : By.cssSelector: .ui-link-inherit</stepname>
+        <status>PASS</status>
+    </url>
+</urlset>
diff --git a/src/test/resources/xslt/report.xml b/src/test/resources/xslt/report.xml
new file mode 100644
index 0000000..a245fbf
--- /dev/null
+++ b/src/test/resources/xslt/report.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset>
+    <url>
+        <stepno>1</stepno>
+        <stepname>Successfully Started browser at http://www.officedepot.com</stepname>
+        <status>PASS</status>
+    </url>
+    <url>
+        <stepno>2</stepno>
+        <stepname>click : By.cssSelector: .ui-link-inherit</stepname>
+        <status>PASS</status>
+    </url>
+    <url>
+        <stepno>2</stepno>
+        <stepname>click : By.cssSelector: .ui-link-inherit</stepname>
+        <status>PASS</status>
+    </url>
+    <url>
+        <stepno>2</stepno>
+        <stepname>click : By.cssSelector: .ui-link-inherit</stepname>
+        <status>PASS</status>
+    </url>
+    <url>
+        <stepno>2</stepno>
+        <stepname>click : By.cssSelector: .ui-link-inherit</stepname>
+        <status>PASS</status>
+    </url>
+</urlset>
\ No newline at end of file
diff --git a/src/test/resources/xslt/stylesheet.xsl b/src/test/resources/xslt/stylesheet.xsl
new file mode 100644
index 0000000..1fc4cf2
--- /dev/null
+++ b/src/test/resources/xslt/stylesheet.xsl
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+    <xsl:template match="/">
+        <html>
+            <body>
+                <h1>Test HTML result</h1>
+                <table border="1">
+                    <tr>
+                        <th>stepno</th>
+                        <th>stepname</th>
+                        <th>status</th>
+                    </tr>
+                    <xsl:for-each select="urlset/url">
+                        <tr>
+                            <td>
+                                <xsl:value-of select="stepno" />
+                            </td>
+                            <td>
+                                <xsl:value-of select="stepname" />
+                            </td>
+                            <td>
+                                <xsl:value-of select="status" />
+                            </td>
+                        </tr>
+                    </xsl:for-each>
+                </table>
+            </body>
+        </html>
+    </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
-- 
GitLab