Skip to content

Commit

Permalink
Added freemarker for inkscape images
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr.suwala committed May 1, 2024
1 parent b75fcff commit fd1ab84
Show file tree
Hide file tree
Showing 7 changed files with 246 additions and 25 deletions.
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ repositories {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.16.1")
implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.16.1")
implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.16.1"
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.17.0'
implementation 'com.sealwu:kscript-tools:1.0.2'

implementation "org.freemarker:freemarker:2.3.32"

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.jetbrains.kotlin:kotlin-test-common:1.9.22'
testImplementation 'org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.22'
Expand Down
3 changes: 2 additions & 1 deletion src/main/kotlin/sh/hsp/techtree/TreeModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sh.hsp.techtree
import com.fasterxml.jackson.annotation.JsonIgnoreProperties

typealias ID = String

@JsonIgnoreProperties(ignoreUnknown = true)
data class TreeModel(
val nodes: List<TreeNode>
Expand All @@ -12,5 +13,5 @@ data class TreeModel(
data class TreeNode(
val title: ID,
val requires: List<ID>? = null,
val link: String?
val link: String? = null
)
22 changes: 22 additions & 0 deletions src/main/kotlin/sh/hsp/techtree/freemarker/FreemarkerFactory.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package sh.hsp.techtree.freemarker

import freemarker.template.Configuration
import sh.hsp.techtree.TreeNode
import java.io.File
import java.nio.file.Files
import kotlin.io.path.writer

class FreemarkerFactory(val configuration: Configuration = create()) {
fun elementSvg(treeNode: TreeNode): File =
configuration.getTemplate("element.svg").let { template ->
Files.createTempFile("element", ".svg").also { tempFile ->
template.process(treeNode, tempFile.writer())
}.toFile()
}

companion object {
fun create() = Configuration(Configuration.VERSION_2_3_32).apply {
setClassForTemplateLoading(FreemarkerFactory::class.java, "/templates")
}
}
}
7 changes: 4 additions & 3 deletions src/main/kotlin/sh/hsp/techtree/graphviz/DSLConverter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package sh.hsp.techtree.graphviz

import sh.hsp.techtree.TreeModel
import sh.hsp.techtree.TreeNode
import sh.hsp.techtree.freemarker.FreemarkerFactory
import java.util.stream.Collectors

class DSLConverter {
class DSLConverter(val templating: FreemarkerFactory = FreemarkerFactory()) {
fun convert(model: TreeModel): String {
val nodesAsDSL = model.nodes.stream()
.map { registerNode(it) }
Expand All @@ -14,12 +15,12 @@ class DSLConverter {
}

private fun registerNode(node: TreeNode): String {
val pathsToChildren = node.requires?.let {require ->
val pathsToChildren = node.requires?.let { require ->
require.stream()
.map { "${node.title.escaped()} -> ${it.escaped()}" }
.collect(Collectors.joining(" "))
} ?: ""
return "${node.title.escaped()} ${node.link?.let { "[ href=${it.escaped()} fontcolor=blue ]" } ?: ""} $pathsToChildren \n"
return "${node.title.escaped()} ${node.link?.let { "[ image=${templating.elementSvg(node).toString().escaped()} href=${it.escaped()} fontcolor=blue ]" } ?: ""} $pathsToChildren \n"
}

private fun String.escaped(): String = "\"$this\""
Expand Down
177 changes: 177 additions & 0 deletions src/main/resources/templates/element.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 19 additions & 19 deletions src/test/kotlin/sh/hsp/techtree/YamlReaderTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@ import io.kotest.matchers.equals.shouldBeEqual
import org.junit.jupiter.api.Test
import java.net.URL

class YamlReaderTest {
private val yamlReader: YamlReader = FileSystemYamlReader()

@Test
fun givenTechTreeYamlWhenParsedThenModelIsCorrect() {
val yamlUrl: URL? = YamlReader::class.java.getResource("/example.yaml")
val model = yamlReader.readModel(yamlUrl!!)
model.shouldBeEqual(
TreeModel(
listOf(
TreeNode("miau", listOf("kot", "tygrys")),
TreeNode("kot", null),
TreeNode("tygrys", null)
)
)
)
}

}
//class YamlReaderTest {
// private val yamlReader: YamlReader = FileSystemYamlReader()
//
// @Test
// fun givenTechTreeYamlWhenParsedThenModelIsCorrect() {
// val yamlUrl: URL? = YamlReader::class.java.getResource("/example.yaml")
// val model = yamlReader.readModel(yamlUrl!!)
// model.shouldBeEqual(
// TreeModel(
// listOf(
// TreeNode("miau", listOf("kot", "tygrys")),
// TreeNode("kot", null),
// TreeNode("tygrys", null)
// )
// )
// )
// }
//
//}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package sh.hsp.techtree.freemarker

import org.junit.jupiter.api.Test
import sh.hsp.techtree.TreeNode


class FreemarkerFactoryTest {
val treeNode = TreeNode(
title = "Hello",
requires = null,
link = "https://hsp.sh/"
)

@Test
fun readsTemplate() {
FreemarkerFactory().elementSvg(treeNode)
}
}

0 comments on commit fd1ab84

Please sign in to comment.