From 9fd8e84feaaa8852324af5aa3dd2da5159c06170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Wed, 24 Mar 2021 19:49:22 +0100 Subject: [PATCH] [Editor] Add support for H2 database --- editor/build.gradle | 2 ++ .../base/editor/database/source/DataSource.kt | 23 +++++++++++++++++++ .../project/context/DefaultProjectContext.kt | 5 ++-- .../base/editor/project/model/Project.kt | 18 ++++++++++++++- gradle.properties | 4 +++- 5 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/source/DataSource.kt diff --git a/editor/build.gradle b/editor/build.gradle index 0165780b..ce48391d 100644 --- a/editor/build.gradle +++ b/editor/build.gradle @@ -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) { diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/source/DataSource.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/source/DataSource.kt new file mode 100644 index 00000000..0d60e9cd --- /dev/null +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/database/source/DataSource.kt @@ -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() +} \ No newline at end of file diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt index 92d8e18f..a83d3dfd 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/context/DefaultProjectContext.kt @@ -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() } } diff --git a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt index 9706c6d5..4c168dec 100644 --- a/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt +++ b/editor/src/main/kotlin/com/bartlomiejpluta/base/editor/project/model/Project.kt @@ -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" diff --git a/gradle.properties b/gradle.properties index be0cfe16..054bb346 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,6 @@ protobufPluginVersion=0.8.14 protobufVersion=3.14.0 richtextfxVersion=0.10.5 janinoVersion=3.1.3 -apacheCommonsVersion=3.6.1 \ No newline at end of file +apacheCommonsVersion=3.6.1 +h2Version=1.4.200 +hikariVersion=4.0.3 \ No newline at end of file