in bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/StackConfigUtils.java [76:128]
public static List<ServiceConfigDTO> mergeServiceConfigs(
List<ServiceConfigDTO> oriConfigs, List<ServiceConfigDTO> overrideConfigs) {
// To avoid to change the original configs, we use cloned object
List<ServiceConfigDTO> mergedConfigs = new ArrayList<>();
for (ServiceConfigDTO oriConfig : oriConfigs) {
ServiceConfigDTO mergedConfig = new ServiceConfigDTO();
BeanUtils.copyProperties(oriConfig, mergedConfig);
mergedConfigs.add(mergedConfig);
}
if (CollectionUtils.isEmpty(overrideConfigs)) {
return mergedConfigs;
}
// Assign id for each service config
for (ServiceConfigDTO config : mergedConfigs) {
config.setId(overrideConfigs.stream()
.filter(x -> x.getName().equals(config.getName()))
.findFirst()
.map(ServiceConfigDTO::getId)
.orElse(null));
}
Map<String, Map<String, String>> overrideConfigsMap = serviceConfig2Map(overrideConfigs);
for (ServiceConfigDTO mergedConfig : mergedConfigs) {
String configName = mergedConfig.getName();
if (!overrideConfigsMap.containsKey(configName)) {
continue;
}
// Override existing properties
Map<String, String> overridePropertiesMap = overrideConfigsMap.get(configName);
for (PropertyDTO property : mergedConfig.getProperties()) {
String propertyName = property.getName();
String value = overridePropertiesMap.remove(propertyName);
if (value != null) {
property.setValue(value);
}
}
// We may still have some properties added by user manually
if (MapUtils.isNotEmpty(overridePropertiesMap)) {
for (Map.Entry<String, String> entry : overridePropertiesMap.entrySet()) {
PropertyDTO property = new PropertyDTO();
property.setName(entry.getKey());
property.setValue(entry.getValue());
mergedConfig.getProperties().add(property);
}
}
}
return mergedConfigs;
}