Skip to content
Snippets Groups Projects
Commit 49ab4190 authored by Kaj Koivunen's avatar Kaj Koivunen :coffee:
Browse files

DslMarker-annotaatio

parent 4c2518ff
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,10 @@ import javax.xml.stream.XMLEventReader ...@@ -6,6 +6,10 @@ import javax.xml.stream.XMLEventReader
import javax.xml.stream.XMLInputFactory import javax.xml.stream.XMLInputFactory
import javax.xml.stream.events.XMLEvent import javax.xml.stream.events.XMLEvent
@DslMarker
annotation class DSL
@DSL
class XMLParserDSL(path: String) { class XMLParserDSL(path: String) {
private val factory: XMLInputFactory = XMLInputFactory.newInstance() private val factory: XMLInputFactory = XMLInputFactory.newInstance()
private val reader: XMLEventReader = factory.createXMLEventReader(FileInputStream(path)) private val reader: XMLEventReader = factory.createXMLEventReader(FileInputStream(path))
...@@ -21,6 +25,7 @@ class XMLParserDSL(path: String) { ...@@ -21,6 +25,7 @@ class XMLParserDSL(path: String) {
fun element(name: String, f: Element.() -> Unit) = Element(name, reader, event!!).f() fun element(name: String, f: Element.() -> Unit) = Element(name, reader, event!!).f()
@DSL
class Element(private val name: String, private val reader: XMLEventReader, private val event: XMLEvent) { class Element(private val name: String, private val reader: XMLEventReader, private val event: XMLEvent) {
fun start(f: StartElement.() -> Unit) { fun start(f: StartElement.() -> Unit) {
if (event.isStartElement && event.asStartElement().name.localPart.toString() == name) if (event.isStartElement && event.asStartElement().name.localPart.toString() == name)
...@@ -32,6 +37,7 @@ class XMLParserDSL(path: String) { ...@@ -32,6 +37,7 @@ class XMLParserDSL(path: String) {
f() f()
} }
@DSL
class StartElement(private val reader: XMLEventReader, private val event: javax.xml.stream.events.StartElement) { class StartElement(private val reader: XMLEventReader, private val event: javax.xml.stream.events.StartElement) {
fun value(): String? { fun value(): String? {
return try { return try {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment