static

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());
                }
            }
        });
    }