• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jesperancinha / markdowner / #194

pending completion
#194

push

github-ci

web-flow
Merge pull request #149 from jesperancinha/migration-to-kotlin

Migration to kotlin

333 of 333 new or added lines in 13 files covered. (100.0%)

274 of 333 relevant lines covered (82.28%)

8.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

91.67
/markdowner-filter/src/main/kotlin/org/jesperancinha/parser/markdowner/filter/MavenFilter.kt
1
package org.jesperancinha.parser.markdowner.filter
2

3
import org.apache.logging.log4j.util.Strings
4
import org.slf4j.Logger
5
import org.slf4j.LoggerFactory
6
import org.w3c.dom.Document
7
import org.w3c.dom.NodeList
8
import org.xml.sax.InputSource
9
import org.xml.sax.SAXException
10
import java.io.FileReader
11
import java.io.IOException
12
import java.nio.file.Path
13
import javax.xml.parsers.DocumentBuilderFactory
14
import javax.xml.parsers.ParserConfigurationException
15
import javax.xml.xpath.XPathConstants
16
import javax.xml.xpath.XPathExpressionException
17
import javax.xml.xpath.XPathFactory
18

19
/**
20
 * Filter to check if folder contains a Maven project and keeps the project name in memory
21
 */
22
class MavenFilter : ProjectFilter<Path>() {
6✔
23
    override fun test(path: Path): Boolean {
24
        val maybeMavenBuild = path.getFileName().toString() == POM_XML
12✔
25
        try {
2✔
26
            if (maybeMavenBuild) {
4✔
27
                return checkIfPomProjectFileHasName(path)
8✔
28
            }
29
        } catch (e: Exception) {
×
30
            logger.trace("Not a valid Maven file", e)
×
31
        }
32
        return false
4✔
33
    }
34

35
    @Throws(
36
        ParserConfigurationException::class,
37
        SAXException::class,
38
        IOException::class,
39
        XPathExpressionException::class
40
    )
41
    private fun checkIfPomProjectFileHasName(path: Path): Boolean {
42
        val documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
6✔
43
        val xmlDocument = documentBuilder.parse(InputSource(FileReader(path.toFile())))
24✔
44
        logger.trace("Message is valid XML.")
6✔
45
        var textContent = getString(xmlDocument, "/project/name")
10✔
46
        if (Strings.isEmpty(textContent)) {
8✔
47
            textContent = getString(xmlDocument, "/project/artifactId")
10✔
48
        }
49
        lastProjectName = textContent
6✔
50
        return !Strings.isEmpty(textContent)
14✔
51
    }
52

53
    @Throws(XPathExpressionException::class)
54
    private fun getString(xmlDocument: Document?, expression: String?): String? {
55
        val xPath = XPathFactory.newInstance().newXPath()
6✔
56
        val nodeList = xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET) as NodeList
22✔
57
        return if (nodeList.length == 0) {
8✔
58
            null
4✔
59
        } else nodeList.item(0).textContent
8✔
60
    }
61

62
    override fun lastProjectName(): String? {
63
        return lastProjectName
6✔
64
    }
65

66
    companion object {
67
        private val POM_XML: String = "pom.xml"
4✔
68
        val logger: Logger = LoggerFactory.getLogger(MavenFilter::class.java)
14✔
69
    }
70
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc