class ConfigUtil {

    public static void applyDefaultConfiguration(Configuration configuration,
            @Nullable ConfigDescription configDescription) {
        if (configDescription != null) {
            for (ConfigDescriptionParameter parameter : configDescription.getParameters()) {
                String defaultValue = parameter.getDefault();
                if (defaultValue != null && configuration.get(parameter.getName()) == null) {
                    if (parameter.isMultiple()) {
                        if (defaultValue.contains(DEFAULT_LIST_DELIMITER)) {
                            List<Object> values = (List<Object>) List.of(defaultValue.split(DEFAULT_LIST_DELIMITER))
                                    .stream() //
                                    .map(String::trim) //
                                    .filter(not(String::isEmpty)) //
                                    .map(value -> ConfigUtil.getDefaultValueAsCorrectType(parameter.getName(),
                                            parameter.getType(), value)) //
                                    .filter(Objects::nonNull) //
                                    .collect(Collectors.toList());
                            Integer multipleLimit = parameter.getMultipleLimit();
                            if (multipleLimit != null && values.size() > multipleLimit.intValue()) {
                                LoggerFactory.getLogger(ConfigUtil.class).warn(
                                        "Number of default values ({}) for parameter '{}' is greater than multiple limit ({})",
                                        values.size(), parameter.getName(), multipleLimit);
                            }
                            configuration.put(parameter.getName(), values);
                        } else {
                            Object value = ConfigUtil.getDefaultValueAsCorrectType(parameter);
                            if (value != null) {
                                configuration.put(parameter.getName(), Arrays.asList(value));
                            }
                        }
                    } else {
                        Object value = ConfigUtil.getDefaultValueAsCorrectType(parameter);
                        if (value != null) {
                            configuration.put(parameter.getName(), value);
                        }
                    }
                }
            }
        }
    }

}