ResultHolder.javaGeneric result wrapper used as a return value from service methods. 106 lines. Combines a status (ResultHolderStatus: OK/WARNING/ERROR/FAILED) with a list of messages. This is ProjectForge's version of the Result pattern — instead of methods returning a value or throwing exceptions, they return a ResultHolder with accumulated messages.
IMessage — interface with getMessage()Message — stores a raw string message (static text)I18nMessage — stores an i18n key + optional params. getMessage() resolves the key via ThreadLocalUserContext.getLocalizedString() with MessageFormat parameter substitution. This is the more commonly used variant — most operation results need internationalized messagesResultHolder result = myService.doSomething();
if (result.getStatus() == ResultHolderStatus.ERROR) {
showErrors(result.getMessages());
}
The holder accumulates messages through addMessage() — multiple validation errors can be collected before returning. Used by form validators, import operations, and setup wizard steps where multiple issues should be reported at once rather than failing on the first error.