public static List mergeServiceConfigs()

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