in jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/timer/CalendarBean.java [78:175]
static {
FORMAT_VALIDATOR_MAP = new HashMap<>();
FORMAT_VALIDATOR_MAP.put(START_HOUR, (stringBuilder, properties) -> {
if (properties.containsKey(START_HOUR)) {
try {
int hour = getPropertyAsInt(START_HOUR, properties);
if (!isInsideValidRange(hour, LOWER_HOUR_BOUND, UPPER_HOUR_BOUND)) {
addMessageToStringBuilder(stringBuilder, String.format(OUTSIDE_BOUNDARY_ERROR_MESSAGE, START_HOUR, hour, "(0-24)"));
}
} catch (NumberFormatException e) {
addMessageToStringBuilder(stringBuilder, String.format(INVALID_FORMAT_ERROR_MESSAGE, START_HOUR, e.getMessage()));
}
}
});
FORMAT_VALIDATOR_MAP.put(END_HOUR, (stringBuilder, properties) -> {
if (properties.containsKey(END_HOUR)) {
try {
int hour = getPropertyAsInt(END_HOUR, properties);
if (!isInsideValidRange(hour, LOWER_HOUR_BOUND, UPPER_HOUR_BOUND)) {
addMessageToStringBuilder(stringBuilder, String.format(OUTSIDE_BOUNDARY_ERROR_MESSAGE, END_HOUR, hour, "(0-24)"));
}
} catch (NumberFormatException e) {
addMessageToStringBuilder(stringBuilder, String.format(INVALID_FORMAT_ERROR_MESSAGE, END_HOUR, e.getMessage()));
}
}
});
FORMAT_VALIDATOR_MAP.put(HOLIDAYS, (stringBuilder, properties) -> {
if (properties.containsKey(HOLIDAYS)) {
String originalData = properties.getProperty(HOLIDAYS);
String[] allHolidays = originalData.split(",");
for (String holiday : allHolidays) {
String[] ranges = holiday.split(":");
for (String range : ranges) {
try {
getFormattedDate(range, properties);
} catch (ParseException e) {
addMessageToStringBuilder(stringBuilder, String.format(INVALID_FORMAT_ERROR_MESSAGE, HOLIDAYS, e.getMessage()));
}
}
}
}
});
FORMAT_VALIDATOR_MAP.put(HOLIDAY_DATE_FORMAT, (stringBuilder, properties) -> {
if (properties.containsKey(HOLIDAY_DATE_FORMAT)) {
try {
getSimpleDateFormat((String) properties.get(HOLIDAY_DATE_FORMAT));
} catch (IllegalArgumentException e) {
addMessageToStringBuilder(stringBuilder, e.getMessage());
}
}
});
FORMAT_VALIDATOR_MAP.put(WEEKEND_DAYS, (stringBuilder, properties) -> {
if (properties.containsKey(WEEKEND_DAYS)) {
String originalData = properties.getProperty(WEEKEND_DAYS);
String[] weekendDays = originalData.split(",\\s?");
Set<String> differentValues = Arrays.stream(weekendDays).collect(Collectors.toSet());
if (differentValues.size() < weekendDays.length) {
addMessageToStringBuilder(stringBuilder, String.format(REPEATED_VALUES_ERROR_MESSAGE, WEEKEND_DAYS, originalData));
}
if (differentValues.contains("0") && differentValues.size() > 1) {
addMessageToStringBuilder(stringBuilder, String.format(OTHER_VALUES_ERR_MSG, "0 (= no weekends)", WEEKEND_DAYS, originalData));
}
final List<Integer> intValues = new ArrayList<>();
differentValues.forEach(s -> {
try {
intValues.add(getStringAsInt(s));
} catch (NumberFormatException e) {
addMessageToStringBuilder(stringBuilder, e.getMessage());
}
});
if (intValues.stream().anyMatch(value -> value < 0 || value > 7)) {
addMessageToStringBuilder(stringBuilder, String.format(OUTSIDE_BOUNDARY_ERROR_MESSAGE, WEEKEND_DAYS, intValues.stream().filter(value -> value < 0 || value > 7).toList(), "(0-7)"));
}
}
});
FORMAT_VALIDATOR_MAP.put(TIMEZONE, (stringBuilder, properties) -> {
if (properties.containsKey(TIMEZONE)) {
String originalData = properties.getProperty(TIMEZONE);
if (!Arrays.asList(TimeZone.getAvailableIDs()).contains(originalData)) {
addMessageToStringBuilder(stringBuilder, String.format(INVALID_FORMAT_ERROR_MESSAGE, TIMEZONE, originalData));
}
}
});
BUSINESS_VALIDATOR_LIST = new ArrayList<>();
BUSINESS_VALIDATOR_LIST.add((stringBuilder, properties) -> {
if (properties.containsKey(START_HOUR) && properties.containsKey(END_HOUR)) {
try {
int startHour = getPropertyAsInt(START_HOUR, properties);
int endHour = getPropertyAsInt(END_HOUR, properties);
if (startHour == endHour) {
addMessageToStringBuilder(stringBuilder, String.format(VALUES_SAME_ERR_MSG, START_HOUR, startHour, END_HOUR, endHour));
}
} catch (NumberFormatException nfe) {
logger.error("Number format exception while checking equality of start time and end time: {}", nfe.getMessage());
}
}
});
}