use of io.gravitee.rest.api.model.parameters.ParameterReferenceType in project gravitee-management-rest-api by gravitee-io.
the class ConfigServiceImpl method loadConfigByReference.
private void loadConfigByReference(Object[] objects, AbstractCommonSettingsEntity configEntity, String referenceId, ParameterReferenceType referenceType) {
// get values from DB
final List<Key> parameterKeys = new ArrayList<>();
for (Object o : objects) {
for (Field f : o.getClass().getDeclaredFields()) {
ParameterKey parameterKey = f.getAnnotation(ParameterKey.class);
if (parameterKey != null) {
parameterKeys.add(parameterKey.value());
}
}
}
Map<String, List<String>> parameterMap = parameterService.findAll(parameterKeys, value -> value == null ? null : value.trim(), referenceId, referenceType);
// set values
for (Object o : objects) {
for (Field f : o.getClass().getDeclaredFields()) {
ParameterKey parameterKey = f.getAnnotation(ParameterKey.class);
if (parameterKey != null) {
boolean accessible = f.isAccessible();
f.setAccessible(true);
try {
List<String> values = parameterMap.get(parameterKey.value().key());
if (environment.containsProperty(parameterKey.value().key())) {
configEntity.getMetadata().add(PortalSettingsEntity.METADATA_READONLY, parameterKey.value().key());
}
final String defaultValue = parameterKey.value().defaultValue();
if (Enabled.class.isAssignableFrom(f.getType())) {
f.set(o, Boolean.parseBoolean(getFirstValueOrDefault(values, defaultValue)) ? new Enabled(true) : new Enabled(false));
} else if (Boolean.class.isAssignableFrom(f.getType())) {
f.set(o, Boolean.valueOf(getFirstValueOrDefault(values, defaultValue)));
} else if (Integer.class.isAssignableFrom(f.getType())) {
f.set(o, Integer.valueOf(getFirstValueOrDefault(values, defaultValue)));
} else if (Long.class.isAssignableFrom(f.getType())) {
f.set(o, Long.valueOf(getFirstValueOrDefault(values, defaultValue)));
} else if (List.class.isAssignableFrom(f.getType())) {
if (values == null || values.isEmpty()) {
if (StringUtils.isNotEmpty(defaultValue)) {
f.set(o, Arrays.asList(defaultValue.split(SEPARATOR)));
} else {
f.set(o, emptyList());
}
} else {
f.set(o, values);
}
} else if (Map.class.isAssignableFrom(f.getType())) {
if (values == null || values.isEmpty()) {
if (defaultValue == null) {
f.set(o, emptyMap());
} else {
f.set(o, singletonMap(defaultValue.split(KV_SEPARATOR)[0], defaultValue.split(KV_SEPARATOR)[1]));
}
} else {
f.set(o, values.stream().collect(toMap(v -> v.split(KV_SEPARATOR)[0], v -> {
final String[] split = v.split(KV_SEPARATOR);
if (split.length < 2) {
return "";
}
return split[1];
})));
}
} else {
// If the parameter contains a sensitive info, we return dummy value
if (!parameterKey.sensitive()) {
f.set(o, getFirstValueOrDefault(values, defaultValue));
} else {
f.set(o, SENSITIVE_VALUE);
}
}
} catch (IllegalAccessException e) {
LOGGER.error("Unable to set parameter {}. Use the default value", parameterKey.value().key(), e);
}
f.setAccessible(accessible);
}
}
}
}
Aggregations