EN · DE · RU · FR · ES

#813: Constants.kt

projectforge-business/src/main/kotlin/org/projectforge/Constants.kt singleton Kotlin, projectforge-business/src/main/kotlin/org/projectforge/Constants.kt 158 líneas · 65 código · 46 comentarios · 47 en blanco

Repositorio Central de Constantes

La única fuente de verdad para todas las constantes del proyecto. Un object de Kotlin (singleton thread-safe) de 158 líneas, referenciado en todas partes — por entidades JPA como @Column(length = Constants.LENGTH_TITLE), por validadores, formateadores y componentes de UI. Javadoc: "Define diferentes constantes (longitud típica de columnas de cadena) utilizables por plugins y el paquete central."

Categorías de Constantes

Longitudes de Columnas de Base de Datos

ConstanteValorUso
LENGTH_TEXT4000Valor por defecto para campos de texto/descripción
LENGTH_COMMENT4000Campos de comentario
COMMENT_LENGTH4000Alias heredado para campos de comentario
LENGTH_SUBJECT1000Campos de línea de asunto
LENGTH_TITLE1000Campos de título en todas las entidades

Estandarizar las longitudes de columna en un solo lugar garantiza la consistencia del esquema de base de datos en todas las clases de entidad. Se utiliza en anotaciones JPA @Column(length = ...) y en la validación del front-end.

Límites Numéricos

ConstanteValorPropósito
TEN_BILLION10000000000Límite superior para campos monetarios (BigDecimal precisión=12, escala=2)
TEN_BILLION_NEGATIVE-10000000000Límite inferior para campos monetarios
HUNDRED_BD100Utilizado en cálculos de porcentaje

Constantes de Tamaño de Datos

ConstanteValorNota
KB1024Variantes Integer y BigDecimal disponibles (ej. KB_BD). Se utilizan para formateo de tamaño de archivos y validación de límites de carga.
MBKB * 1024
GBMB * 1024
TBGB * 1024L (Long)

Constantes de Tiempo

SECONDS_PER_MINUTE = 60MILLIS_PER_SECOND = 1_000L
SECONDS_PER_HOUR = 60 * 60MILLIS_PER_MINUTE = 60 * 1_000L
SECONDS_PER_DAY = 3600 * 24MILLIS_PER_HOUR = 3_600_000L
SECONDS_PER_WEEK = 86400 * 7MILLIS_PER_DAY = 86_400_000L
MILLIS_PER_WEEK = 604_800_000L

Cada constante de tiempo tiene una variante _BD correspondiente (BigDecimal). Se utiliza en cálculos de hojas de tiempo, temporizadores y aritmética de fecha/hora.

Rutas de Aplicación

ConstanteValorPropósito
REACT_APP_PATH"react/"Prefijo de ruta URL para el frontend SPA React
WICKET_APPLICATION_PATH"wa/"Prefijo de ruta URL para páginas Wicket heredadas
BUILD_DIR"build"Directorio de salida de compilación de Gradle (era "target" con Maven)

Enlaces Externos

Prefijadas con WEB_, estas constantes forman una jerarquía de enlaces: WEB_HOME_PAGE_LINKWEB_DOCS_LINKWEB_DOCS_USER_GUIDE_LINK, WEB_DOCS_ADMIN_GUIDE_LINK, etc. Se utilizan en toda la UI para enlaces de ayuda y referencias de documentación.

Constantes de Calendario y Eventos

TIMESHEET_CALENDAR_ID = -1LID de calendario especial para eventos de hoja de tiempo
MINYEAR = 1900, MAXYEAR = 2100Rango de años válido para selectores de fecha y validación
EVENT_CLASS_NAME = "timesheet"Identificador para eventos de calendario de hoja de tiempo
BREAK_EVENT_CLASS_NAME = "ts-break"Identificador para entradas de descanso en hojas de tiempo

object de Kotlin — ¿Por Qué No una Clase?

Un object de Kotlin es un singleton thread-safe creado en el primer acceso mediante las garantías de carga de clases de la JVM. Las constantes declaradas con const val se compilan a campos estáticos de la JVM y se inlinean en el punto de llamada — sin sobrecarga de resolución en tiempo de ejecución.

Para interoperabilidad con Java:

Historial de Git

868d6abb7 2025 -> 2026
47d42a5bb AI savings: actualización masiva de hojas de tiempo, edición en página clásica añadida.
63081666f Encabezados de archivos fuente: 2024 -> 2025.
1ffa5a1ef WIP: gradle...
4c04cfd65 CAMBIO-MAYOR! Migración de ids enteros a ids Long.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
dcfc7c1a9 Calendario antiguo movido a submenú, ScriptingTask*, JiraUtils
1ea8d4062 WIP: Trabajos y registros de cuentas bancarias.
d7b3e8751 AG grid: Copiar y pegar y exportación a Excel mejorados.