[Editor] Create DatabaseAssembler and enable assembling database into output game.jar file

This commit is contained in:
2021-03-26 18:15:16 +01:00
parent 668af9b08f
commit 0cde898b51
4 changed files with 79 additions and 1 deletions

View File

@@ -0,0 +1,8 @@
package com.bartlomiejpluta.base.editor.code.build.database
import com.bartlomiejpluta.base.editor.project.model.Project
import java.io.File
interface DatabaseAssembler {
fun assembly(project: Project, targetJar: File)
}

View File

@@ -0,0 +1,50 @@
package com.bartlomiejpluta.base.editor.code.build.database
import com.bartlomiejpluta.base.editor.code.build.exception.BuildException
import com.bartlomiejpluta.base.editor.code.build.packager.JarPackager
import com.bartlomiejpluta.base.editor.common.logs.enumeration.Severity
import com.bartlomiejpluta.base.editor.database.service.DatabaseService
import com.bartlomiejpluta.base.editor.project.model.Project
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Component
import java.io.File
@Component
class H2DatabaseAssembler : DatabaseAssembler {
@Autowired
private lateinit var databaseService: DatabaseService
@Autowired
private lateinit var packager: JarPackager
override fun assembly(project: Project, targetJar: File) {
try {
tryToAssembly(project, targetJar)
} catch (e: Exception) {
throw BuildException(Severity.ERROR, TAG, e.message, e)
}
}
private fun tryToAssembly(project: Project, targetJar: File) {
val dump = project.buildDatabaseDumpFile
dumpDatabase(dump)
copyDumpToTargetJar(dump, targetJar)
}
private fun dumpDatabase(dumpFile: File) {
databaseService.run {
val statement = prepareStatement("SCRIPT TO ?")
statement.setString(1, dumpFile.absolutePath)
statement.execute()
}
}
private fun copyDumpToTargetJar(dumpFile: File, targetJar: File) {
packager.copy(dumpFile, targetJar, "BOOT-INF/classes/database")
}
companion object {
private const val TAG = "Database Assembler"
}
}

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.editor.code.build.pipeline package com.bartlomiejpluta.base.editor.code.build.pipeline
import com.bartlomiejpluta.base.editor.code.build.compiler.Compiler import com.bartlomiejpluta.base.editor.code.build.compiler.Compiler
import com.bartlomiejpluta.base.editor.code.build.database.DatabaseAssembler
import com.bartlomiejpluta.base.editor.code.build.exception.BuildException import com.bartlomiejpluta.base.editor.code.build.exception.BuildException
import com.bartlomiejpluta.base.editor.code.build.game.GameEngineProvider import com.bartlomiejpluta.base.editor.code.build.game.GameEngineProvider
import com.bartlomiejpluta.base.editor.code.build.packager.JarPackager import com.bartlomiejpluta.base.editor.code.build.packager.JarPackager
@@ -35,6 +36,9 @@ class DefaultBuildPipelineService : BuildPipelineService {
@Autowired @Autowired
private lateinit var projectAssembler: ProjectAssembler private lateinit var projectAssembler: ProjectAssembler
@Autowired
private lateinit var databaseAssembler: DatabaseAssembler
@Autowired @Autowired
private lateinit var projectContext: ProjectContext private lateinit var projectContext: ProjectContext
@@ -94,10 +98,15 @@ class DefaultBuildPipelineService : BuildPipelineService {
eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling game engine...", tag = TAG)) eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling game engine...", tag = TAG))
engineProvider.provideBaseGameEngine(outputFile) engineProvider.provideBaseGameEngine(outputFile)
eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling project assets...", tag = TAG)) eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling compiled classes...", tag = TAG))
packager.pack(project.buildClassesDirectory, outputFile, "BOOT-INF/classes") packager.pack(project.buildClassesDirectory, outputFile, "BOOT-INF/classes")
eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling project assets...", tag = TAG))
projectAssembler.assembly(project, outputFile) projectAssembler.assembly(project, outputFile)
eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Assembling database...", tag = TAG))
databaseAssembler.assembly(project, outputFile)
val buildingTime = (System.currentTimeMillis() - startTime) / 1000.0 val buildingTime = (System.currentTimeMillis() - startTime) / 1000.0
eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Build done [${buildingTime}s]", tag = TAG)) eventbus.fire(AppendBuildLogsEvent(Severity.INFO, "Build done [${buildingTime}s]", tag = TAG))
} }

View File

@@ -96,10 +96,18 @@ class Project {
var buildDependenciesDirectory by buildDependenciesDirectoryProperty var buildDependenciesDirectory by buildDependenciesDirectoryProperty
private set private set
val buildDatabaseDumpDirectoryProperty = SimpleObjectProperty<File>()
var buildDatabaseDumpDirectory by buildDatabaseDumpDirectoryProperty
private set
val buildOutDirectoryProperty = SimpleObjectProperty<File>() val buildOutDirectoryProperty = SimpleObjectProperty<File>()
var buildOutDirectory by buildOutDirectoryProperty var buildOutDirectory by buildOutDirectoryProperty
private set private set
val buildDatabaseDumpFileProperty =
createObjectBinding({ File(buildDatabaseDumpDirectory, DATABASE_DUMP_FILE) }, buildDatabaseDumpDirectoryProperty)
val buildDatabaseDumpFile by buildDatabaseDumpFileProperty
val buildOutputJarFileProperty = val buildOutputJarFileProperty =
createObjectBinding({ File(buildOutDirectory, PROJECT_OUTPUT_JAR_FILE) }, buildOutDirectoryProperty) createObjectBinding({ File(buildOutDirectory, PROJECT_OUTPUT_JAR_FILE) }, buildOutDirectoryProperty)
val buildOutputJarFile by buildOutputJarFileProperty val buildOutputJarFile by buildOutputJarFileProperty
@@ -121,6 +129,7 @@ class Project {
buildDirectory = File(it, BUILD_DIR) buildDirectory = File(it, BUILD_DIR)
buildClassesDirectory = File(it, BUILD_CLASSES_DIR) buildClassesDirectory = File(it, BUILD_CLASSES_DIR)
buildDependenciesDirectory = File(it, BUILD_DEPENDENCIES_DIR) buildDependenciesDirectory = File(it, BUILD_DEPENDENCIES_DIR)
buildDatabaseDumpDirectory = File(it, BUILD_DATABASE_DUMP_DIR)
buildOutDirectory = File(it, BUILD_OUT_DIR) buildOutDirectory = File(it, BUILD_OUT_DIR)
} }
} }
@@ -151,6 +160,7 @@ class Project {
companion object { companion object {
const val PROJECT_FILE = "project.bep" const val PROJECT_FILE = "project.bep"
const val DATABASE_FILE = "data" const val DATABASE_FILE = "data"
const val DATABASE_DUMP_FILE = "data.sql"
const val PROJECT_OUTPUT_JAR_FILE = "game.jar" const val PROJECT_OUTPUT_JAR_FILE = "game.jar"
const val MAPS_DIR = "maps" const val MAPS_DIR = "maps"
@@ -166,5 +176,6 @@ class Project {
const val BUILD_CLASSES_DIR = "$BUILD_DIR/classes" const val BUILD_CLASSES_DIR = "$BUILD_DIR/classes"
const val BUILD_OUT_DIR = "$BUILD_DIR/out" const val BUILD_OUT_DIR = "$BUILD_DIR/out"
const val BUILD_DEPENDENCIES_DIR = "$BUILD_DIR/dependencies" const val BUILD_DEPENDENCIES_DIR = "$BUILD_DIR/dependencies"
const val BUILD_DATABASE_DUMP_DIR = "$BUILD_DIR/db"
} }
} }