ProjectForgeHomeFinder.ktprojectforge-application/src/main/kotlin/org/projectforge/start/ProjectForgeHomeFinder.kt que contiene código Kotlin para la capa de Componente.Anotaciones: param, return, JvmStatic
Clases: ProjectForgeHomeFinder, WizardMode
Objetos: and
Clases enum: WizardMode
Funciones (16): findAndEnsureAppHomeDir, proceedForced, searchAndProceed, proceed, answerValid, saveUserPrefHomeDir, checkAndAdd, checkAndAdd, getExecutableDir, findBaseDirAndAncestors, findBaseDirOnly, checkDirectory, isStandardProjectForgeUserDir, isProjectForgeSourceCodeRepository, isProjectForgeConfigured, isProjectForgeConfigured
Propiedades (28): userAcceptsGraphicalTerminal, appHomeDir, prefHomeDir, appHomeDir, appHomeDir, setupContext, answer, setupData, userPrefHomeDir, preferences, preferences, savedHomeDir, absolutePath, ENV_PROJECTFORGE_HOME, COMMAND_LINE_VAR_HOME_DIR, DIR_NAMES, homeEnvironmentVariableDefinition, suggestedDirectories, files, canonicalDir, locationUrl, location, file, currentDir, recursiveCounter...
Importaciones: 17 paquetes
Paquete: org.projectforge.start
package org.projectforge.start
import mu.KotlinLogging
import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.SystemUtils
import org.projectforge.ProjectForgeApp
import org.projectforge.common.CanonicalFileUtils
import org.projectforge.common.EmphasizedLogSupport
import org.projectforge.setup.ProjectForgeInitializer.initialize
import org.projectforge.setup.SetupContext
import org.projectforge.setup.SetupData
import org.projectforge.setup.wizard.lanterna.LantSetupWizard.Companion.run
import org.projectforge.setup.wizard.swing.SwingSetupWizard.Companion.run
import java.awt.GraphicsEnvironment
import java.io.File
import java.io.IOException
import java.net.URI
import java.net.URISyntaxException
import java.util.prefs.Preferences
private val log = KotlinLogging.logger {}
/**
* Ayudante para encontrar el directorio de inicio de ProjectForge:<br></br>
*
* 1. Cree ProjectForge como un directorio de nivel superior de su directorio de inicio: '$HOME/ProjectForge', o
* 1. cree un directorio y coloque el archivo jar en algún lugar dentro de este directorio. ProjectForge detecta la carpeta relativa al jar ejecutado, o
* 1. cree un directorio y defínalo como parámetro de línea de comandos: java -Dhome.dir=sudirectorio -jar ..., o
* 1. cree un directorio y defínalo como variable de entorno del sistema $PROJECTFORGE_HOME.
*
*/
class ProjectForgeHomeFinder {
private var userAcceptsGraphicalTerminal: WizardMode? = null
private enum class WizardMode { DESKTOP, CONSOLE, NONE }
/**
* Intenta encontrar el directorio de inicio de ProjectForge. Si no se encuentra o no está inicializado, se inicia un asistente de configuración.
*
* @return El directorio de inicio. Si no se encuentra, se ejecuta un System.exit() y se muestra información al usuario sobre cómo proceder.
*/
fun findAndEnsureAppHomeDir(): File? {
// Intentar directorio definido mediante línea de comandos: -Dhome.dir:
var appHomeDir = proceedForced(
System.getProperty(COMMAND_LINE_VAR_HOME_DIR),
"El directorio de inicio de ProjectForge está definido como parámetro de línea de comandos, pero aún no está inicializado: -D"
+ COMMAND_LINE_VAR_HOME_DIR + "=\$APP_HOME_DIR"
)
if (appHomeDir != null) return appHomeDir
// Intentar directorio definido mediante línea de comandos: -Dprojectforge.base.dir:
appHomeDir = proceedForced(
System.getProperty(ProjectForgeApp.CONFIG_PARAM_BASE_DIR),
"El directorio de inicio de ProjectForge está definido como parámetro de línea de comandos, pero aún no está inicializado: -D"
+ ProjectForgeApp.CONFIG_PARAM_BASE_DIR + "=\$APP_HOME_DIR"
)
if (appHomeDir != null) return appHomeDir
// Intentar directorio definido mediante variable de entorno:
appHomeDir = proceedForced(
System.getenv(ENV_PROJECTFORGE_HOME),
"El directorio de inicio de ProjectForge está definido como variable de entorno del sistema $" + ENV_PROJECTFORGE_HOME + ": \$APP_HOME_DIR"
)
if (appHomeDir != null) return appHomeDir
// Intentar directorio definido mediante variable de preferencias del usuario:
val prefHomeDir = userPrefHomeDir
if (prefHomeDir != null) {
appHomeDir = proceed(
File(prefHomeDir),
"El directorio de inicio de ProjectForge está definido como preferencia de usuario de java " + ENV_PROJECTFORGE_HOME + ": \$APP_HOME_DIR",
false
)
if (appHomeDir != null) return appHomeDir
}
// Intentar directorio donde reside el jar ejecutable:
appHomeDir = searchAndProceed(
File(System.getProperty("user.home")),
"Directorio de inicio de ProjectForge encontrado en el directorio de inicio del usuario: \$APP_HOME_DIR",
false
)
if (appHomeDir != null) return appHomeDir
// Intentar directorio donde reside el jar ejecutable:
appHomeDir = searchAndProceed(
getExecutableDir(true),
"Directorio de inicio de ProjectForge encontrado relativo al jar ejecutable: \$APP_HOME_DIR",
false
)
if (appHomeDir != null) return appHomeDir
// Intentar directorio actual (iniciar asistente, porque es la última oportunidad para hacerlo):
appHomeDir = searchAndProceed(
File("."),
"""Directorio de inicio de ProjectForge no encontrado, se buscó en:
${StringUtils.join(suggestedDirectories, "\n ")}""",
true
)
if (appHomeDir != null) return appHomeDir
ProjectForgeApplication.giveUpAndSystemExit("No se encontró ni configuró ningún directorio de inicio de ProjectForge, abandonando :-(")
return null // inalcanzable, porque se llamó a SystemExit() antes.
}
/**
*
* 1.
* Si el appHomeDir dado es nulo o está en blanco, se devuelve nulo.
*
* 1.
* Comprueba si el appHomeDir dado ya existe. Si es así, se devuelve appHomeDir como objeto File y ProjectForge
* debe continuar la fase de inicio con este directorio.
*
* 1.
* Si el appHomeDir dado no existe o no está inicializado, se inicia el asistente de configuración y la instalación.
* Si es abortado por el usuario o ocurre algún fallo, se llama a System.exit(1), de lo contrario se devuelve el archivo
* con el nuevo directorio de inicio instalado.
*
*
// ... (truncado, total 381 líneas)
868d6abb7 2025 -> 2026 63081666f Encabezados de archivos fuente: 2024-> 2025. b6092df09 Derechos de autor 2023 -> 2024 ab45d51fa Derechos de autor 2001-2022 -> 2001-2023. 7fe9b2c1d Nueva librería jdbc postgresql: 42.3.4 -> 42.5.0