EN · DE · RU · FR · ES

#813: Constants.kt

projectforge-business/src/main/kotlin/org/projectforge/Constants.kt Kotlin-Singleton, projectforge-business/src/main/kotlin/org/projectforge/Constants.kt 158 Zeilen · 65 Code · 46 Kommentare · 47 leer

Zentrale Konstantenverwaltung

Die einzige Quelle der Wahrheit für alle projektweiten Konstanten. Ein Kotlin-object (threadsicherer Singleton) mit 158 Zeilen, der überall referenziert wird – von JPA-Entitäten als @Column(length = Constants.LENGTH_TITLE), von Validatoren, Formatierern und UI-Komponenten. Javadoc: „Definiert verschiedene Konstanten (typische Länge von String-Spalten), die von Plugins und dem Kernpaket verwendet werden können.“

Kategorien von Konstanten

Datenbank-Spaltenlängen

KonstanteWertVerwendung
LENGTH_TEXT4000Standard für Text-/Beschreibungsfelder
LENGTH_COMMENT4000Kommentarfelder
COMMENT_LENGTH4000Legacy-Alias für Kommentarfelder
LENGTH_SUBJECT1000Betreffzeilenfelder
LENGTH_TITLE1000Titelfelder in allen Entitäten

Die Standardisierung der Spaltenlängen an einer Stelle garantiert die Konsistenz des Datenbankschemas über alle Entitätsklassen hinweg. Verwendet in JPA-@Column(length = ...)-Annotationen und der Frontend-Validierung.

Numerische Grenzen

KonstanteWertZweck
TEN_BILLION10000000000Obergrenze für Geldbeträge (BigDecimal precision=12, scale=2)
TEN_BILLION_NEGATIVE-10000000000Untergrenze für Geldbeträge
HUNDRED_BD100Wird in Prozentberechnungen verwendet

Datengrößen-Konstanten

KonstanteWertHinweis
KB1024Integer- und BigDecimal-Varianten verfügbar (z. B. KB_BD). Verwendet für Dateigrößenformatierung und Upload-Limit-Validierung.
MBKB * 1024
GBMB * 1024
TBGB * 1024L (Long)

Zeitkonstanten

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

Jede Zeitkonstante hat eine entsprechende _BD-Variante (BigDecimal). Verwendet in Zeiterfassungsberechnungen, Timern und Datums-/Zeitarithmetik.

Anwendungspfade

KonstanteWertZweck
REACT_APP_PATH"react/"URL-Pfadpräfix für das React-SPA-Frontend
WICKET_APPLICATION_PATH"wa/"URL-Pfadpräfix für Legacy-Wicket-Seiten
BUILD_DIR"build"Gradle-Build-Ausgabeverzeichnis (war „target“ bei Maven)

Externe Links

Mit WEB_ präfigiert bilden diese Konstanten eine Linkhierarchie: WEB_HOME_PAGE_LINKWEB_DOCS_LINKWEB_DOCS_USER_GUIDE_LINK, WEB_DOCS_ADMIN_GUIDE_LINK usw. Werden in der gesamten Benutzeroberfläche für Hilfelinks und Dokumentationsverweise verwendet.

Kalender- und Ereigniskonstanten

TIMESHEET_CALENDAR_ID = -1LSpezielle Kalender-ID für Zeiterfassungsereignisse
MINYEAR = 1900, MAXYEAR = 2100Gültiger Jahresbereich für Datumsauswahlen und Validierung
EVENT_CLASS_NAME = "timesheet"Kennung für Zeiterfassungs-Kalenderereignisse
BREAK_EVENT_CLASS_NAME = "ts-break"Kennung für Pauseneinträge in Zeiterfassungen

Kotlin object – Warum keine Klasse?

Ein Kotlin-object ist ein threadsicherer Singleton, der beim ersten Zugriff über die JVM-Klassenladungsgarantie erstellt wird. Mit const val deklarierte Konstanten werden zu JVM-Statikfeldern kompiliert und an der Aufrufstelle inline eingefügt – kein Laufzeit-Overhead durch Auflösung.

Für Java-Interop:

Git-Verlauf

868d6abb7 2025 -> 2026
47d42a5bb KI-Ersparnis: Massenaktualisierung von Zeiterfassungen, Bearbeitung in klassischer Seite hinzugefügt.
63081666f Quellcodedatei-Header: 2024 -> 2025.
1ffa5a1ef WIP: gradle...
4c04cfd65 GROSSE-ÄNDERUNG! Migration von Integer-IDs zu Long-IDs.
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
dcfc7c1a9 Alter Kalender in Untermenü verschoben, ScriptingTask*, JiraUtils
1ea8d4062 WIP: Aufträge und Bankkontodatensätze.
d7b3e8751 AG Grid: Kopieren, Einfügen und Excel-Export verbessert.