ProjectForgeInitializer.ktprojectforge-application/src/main/kotlin/org/projectforge/setup/ProjectForgeInitializer.kt, die Kotlin-Code für die Setup-Assistenten-Ebene enthält.Annotationen: Suppress, JvmStatic
Objekte: ProjectForgeInitializer
Funktionen (3): initialize, replace, ensureConfigFile
Eigenschaften (7): applicationHomeDir, emphasizedLog, counter, serverPort, serverAddress, domainService, jdbc
Importe: 14 Pakete
Paket: org.projectforge.setup
package org.projectforge.setup
import mu.KotlinLogging
import org.projectforge.ProjectForgeApp
import org.projectforge.business.configuration.DomainService
import org.projectforge.common.CanonicalFileUtils
import org.projectforge.common.EmphasizedLogSupport
import org.projectforge.common.StringModifier
import org.projectforge.framework.configuration.ConfigXml
import org.projectforge.framework.utils.NumberHelper
import org.projectforge.plugins.core.PluginAdminService
import org.projectforge.start.ProjectForgeApplication
import org.projectforge.start.ProjectForgeApplication.giveUpAndSystemExit
import org.projectforge.start.ProjectForgeHomeFinder
import java.io.File
import java.util.regex.Matcher
private val log = KotlinLogging.logger {}
object ProjectForgeInitializer {
@JvmStatic
fun initialize(setupData: SetupData?): File? {
val applicationHomeDir = setupData?.applicationHomeDir
?: return giveUpAndSystemExit("Kein Verzeichnis im Assistenten konfiguriert.")
if (ProjectForgeHomeFinder.isProjectForgeSourceCodeRepository(applicationHomeDir)) {
giveUpAndSystemExit("ProjectForge sollte das Quellcode-Repository nicht als Home-Verzeichnis verwenden: $applicationHomeDir")
}
val emphasizedLog =
EmphasizedLogSupport(log, EmphasizedLogSupport.Priority.NORMAL, EmphasizedLogSupport.Alignment.LEFT)
.log("Überprüfe ProjectForge-Installation...")
var counter = 0
if (!applicationHomeDir.exists()) {
emphasizedLog.log(" ${++counter}. Erstelle Verzeichnis: ${CanonicalFileUtils.absolutePath(applicationHomeDir)}...")
applicationHomeDir.mkdirs()
if (!applicationHomeDir.exists() && !applicationHomeDir.isDirectory) {
emphasizedLog.log(" Fehler beim Erstellen des Verzeichnisses: ${CanonicalFileUtils.absolutePath(applicationHomeDir)}")
.logEnd()
giveUpAndSystemExit("Fehler beim Erstellen des Verzeichnisses: ${CanonicalFileUtils.absolutePath(applicationHomeDir)}")
}
}
val serverPort = if (setupData.serverPort in 1..65535) setupData.serverPort else 8080
val serverAddress = setupData.serverAdress
val domainService = DomainService.internalCreate(setupData.domain)
counter = ensureConfigFile(applicationHomeDir,
ProjectForgeApplication.CLASSPATH_INITIAL_PROPERTIES_FILENAME,
ProjectForgeApplication.PROPERTIES_FILENAME,
counter,
emphasizedLog,
StringModifier {
var result = replace(it, "server.address", "$serverAddress")
result = replace(result, "server.port", "$serverPort")
result = replace(result, "projectforge.domain", domainService.domain)
result = replace(result, "projectforge.servletContextPath", domainService.contextPath)
result = replace(result, "projectforge.currencySymbol", setupData.currencySymbol)
result = replace(result, "projectforge.defaultLocale", setupData.defaultLocale)
result = replace(result, "projectforge.defaultTimeNotation", setupData.defaultTimeNotation)
result = replace(result, "projectforge.defaultFirstDayOfWeek", setupData.defaultFirstDayOfWeek)
if (setupData.developmentMode) {
result = replace(result, "projectforge.web.development.enableCORSFilter", "true")
}
val jdbc = setupData.jdbcSettings
if (!setupData.useEmbeddedDatabase && jdbc != null) {
result = replace(result, "spring.datasource.url", jdbc.jdbcUrl)
result = replace(result, "spring.datasource.username", jdbc.user)
result = replace(result, "spring.datasource.password", jdbc.password)
result = replace(result, "spring.datasource.driver-class-name", "org.postgresql.Driver")
}
result = replace(result, "projectforge.security.passwordPepper", NumberHelper.getSecureRandomAlphanumeric(20))
result = replace(
result,
"projectforge.security.authenticationTokenEncryptionKey",
NumberHelper.getSecureRandomAlphanumeric(20)
)
result
}
)
ensureConfigFile(
applicationHomeDir,
ConfigXml.CLASSPATH_INITIAL_CONFIG_XML_FILE, ConfigXml.CONFIG_XML_FILE, counter, emphasizedLog
)
/* @Suppress("UNUSED_VALUE")
counter = ensureConfigFile(
applicationHomeDir,
AttrSchemaServiceSpringBeanImpl.CLASSPATH_INITIAL_ATTR_SCHEMA_CONFIG_FILE,
AttrSchemaServiceSpringBeanImpl.ATTR_SCHEMA_CONFIG_FILE,
counter,
emphasizedLog
)*/
emphasizedLog.logEnd()
if (!setupData.startServer) {
giveUpAndSystemExit("Initialisierung des ProjectForge-Home-Verzeichnisses abgeschlossen. Autostart wurde nicht ausgewählt. Bitte starten Sie den Server manuell neu.")
}
PluginAdminService.registerFirstStart()
return setupData.applicationHomeDir
}
private fun replace(text: String, property: String, value: Any?): String {
return text.replaceFirst(
"^#?+$property=.*$".toRegex(RegexOption.MULTILINE),
Matcher.quoteReplacement("$property=$value")
)
}
private fun ensureConfigFile(
baseDir: File, initialClasspathFilename: String, filename: String, counter: Int,
emphasizedLog: EmphasizedLogSupport, modifier: StringModifier? = null
): Int {
if (File(baseDir, filename).exists())
return counter
emphasizedLog.log(" $counter. Erstelle Konfigurationsdatei: $filename...")
if (!ProjectForgeApp.ensureInitialConfigFile(baseDir, initialClasspathFilename, filename, false, modifier)) {
emphasizedLog.logEnd()
giveUpAndSystemExit("Fehler beim Erstellen der Konfigurationsdatei '$filename'.")
}
// ... (gekürzt, insgesamt 123 Zeilen)
868d6abb7 2025 -> 2026 63081666f Quellcode-Dateiköpfe: 2024 -> 2025. b1560ca43 Migration in Arbeit... b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023.