[Editor] Add support for H2 database

This commit is contained in:
2021-03-24 19:49:22 +01:00
parent 6d7eb8c7a6
commit 9fd8e84fea
5 changed files with 48 additions and 4 deletions

View File

@@ -48,6 +48,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
implementation "org.slf4j:jul-to-slf4j:${slf4jVersion}"
implementation "com.h2database:h2:${h2Version}"
implementation "com.zaxxer:HikariCP:${hikariVersion}"
}
task provideGameEngine(type: Copy) {

View File

@@ -0,0 +1,23 @@
package com.bartlomiejpluta.base.editor.database.source
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import java.io.File
import java.sql.Connection
class DataSource(dbFile: File) {
private val config = HikariConfig()
private val source: HikariDataSource
init {
config.jdbcUrl = "jdbc:h2:file:${dbFile.absolutePath.replace("\\", "/")}"
config.username = "root"
config.password = ""
source = HikariDataSource(config)
}
val connection: Connection
get() = source.connection
fun close() = source.close()
}

View File

@@ -63,8 +63,9 @@ class DefaultProjectContext : ProjectContext {
override var project by projectProperty
init {
projectProperty.addListener { _, _, newProject ->
newProject?.mkdirs()
projectProperty.addListener { _, prevProject, newProject ->
prevProject?.dispose()
newProject?.init()
tileSetCache.clear()
}
}

View File

@@ -2,6 +2,7 @@ package com.bartlomiejpluta.base.editor.project.model
import com.bartlomiejpluta.base.editor.animation.asset.AnimationAsset
import com.bartlomiejpluta.base.editor.audio.asset.SoundAsset
import com.bartlomiejpluta.base.editor.database.source.DataSource
import com.bartlomiejpluta.base.editor.entityset.asset.EntitySet
import com.bartlomiejpluta.base.editor.file.model.FileSystemNode
import com.bartlomiejpluta.base.editor.gui.font.asset.FontAsset
@@ -27,6 +28,9 @@ class Project {
val projectFileProperty = createObjectBinding({ File(sourceDirectory, PROJECT_FILE) }, sourceDirectoryProperty)
val projectFile by projectFileProperty
val databaseFileProperty = createObjectBinding({ File(sourceDirectory, DATABASE_FILE) }, sourceDirectoryProperty)
val databaseFile by databaseFileProperty
val runnerProperty = SimpleStringProperty()
var runner by runnerProperty
@@ -100,6 +104,8 @@ class Project {
createObjectBinding({ File(buildOutDirectory, PROJECT_OUTPUT_JAR_FILE) }, buildOutDirectoryProperty)
val buildOutputJarFile by buildOutputJarFileProperty
lateinit var database: DataSource
init {
sourceDirectoryProperty.addListener { _, _, dir ->
dir?.let {
@@ -120,7 +126,16 @@ class Project {
}
}
fun mkdirs() {
fun init() {
database = DataSource(databaseFile)
mkdirs()
}
fun dispose() {
database.close()
}
private fun mkdirs() {
sourceDirectory?.mkdirs()
mapsDirectory?.mkdirs()
tileSetsDirectory?.mkdirs()
@@ -135,6 +150,7 @@ class Project {
companion object {
const val PROJECT_FILE = "project.bep"
const val DATABASE_FILE = "data"
const val PROJECT_OUTPUT_JAR_FILE = "game.jar"
const val MAPS_DIR = "maps"

View File

@@ -11,4 +11,6 @@ protobufPluginVersion=0.8.14
protobufVersion=3.14.0
richtextfxVersion=0.10.5
janinoVersion=3.1.3
apacheCommonsVersion=3.6.1
apacheCommonsVersion=3.6.1
h2Version=1.4.200
hikariVersion=4.0.3