ProjectForgeInitializer.ktprojectforge-application/src/main/kotlin/org/projectforge/setup/ProjectForgeInitializer.kt contenant du code Kotlin pour la couche Assistant d'installation.Annotations : Suppress, JvmStatic
Objets : ProjectForgeInitializer
Fonctions (3) : initialize, replace, ensureConfigFile
Propriétés (7) : applicationHomeDir, emphasizedLog, counter, serverPort, serverAddress, domainService, jdbc
Importations : 14 paquetages
Paquetage : 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("Aucun répertoire configuré dans l'assistant.")
if (ProjectForgeHomeFinder.isProjectForgeSourceCodeRepository(applicationHomeDir)) {
giveUpAndSystemExit("ProjectForge ne doit pas utiliser le dépôt de code source comme répertoire personnel : $applicationHomeDir")
}
val emphasizedLog =
EmphasizedLogSupport(log, EmphasizedLogSupport.Priority.NORMAL, EmphasizedLogSupport.Alignment.LEFT)
.log("Vérification de l'installation de ProjectForge...")
var counter = 0
if (!applicationHomeDir.exists()) {
emphasizedLog.log(" ${++counter}. Création du répertoire : ${CanonicalFileUtils.absolutePath(applicationHomeDir)}...")
applicationHomeDir.mkdirs()
if (!applicationHomeDir.exists() && !applicationHomeDir.isDirectory) {
emphasizedLog.log(" Erreur lors de la création du répertoire : ${CanonicalFileUtils.absolutePath(applicationHomeDir)}")
.logEnd()
giveUpAndSystemExit("Erreur lors de la création du répertoire : ${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("Initialisation du répertoire personnel de ProjectForge terminée. Le démarrage automatique n'a pas été sélectionné. Veuillez redémarrer le serveur manuellement.")
}
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. Création du fichier de configuration : $filename...")
if (!ProjectForgeApp.ensureInitialConfigFile(baseDir, initialClasspathFilename, filename, false, modifier)) {
emphasizedLog.logEnd()
giveUpAndSystemExit("Erreur lors de la création du fichier de configuration '$filename'.")
}
// ... (tronqué, total 123 lignes)
868d6abb7 2025 -> 2026 63081666f En-têtes des fichiers source : 2024 -> 2025. b1560ca43 Travail sur la migration en cours... b6092df09 Copyright 2023 -> 2024 ab45d51fa Copyright 2001-2022 -> 2001-2023.