private Map<String, Collection<String>> addTomissingProperties(Map<String, Collection<String>> missingProperties, String hostGroup, Collection<String> values) {
    Map<String, Collection<String>> missing;

    if (missingProperties == null) {
      missing = new TreeMap<>();
    } else {
      missing = new TreeMap<>(missingProperties);
    }

    if (!missing.containsKey(hostGroup)) {
      missing.put(hostGroup, new TreeSet<>());
    }

    missing.get(hostGroup).addAll(values);

    return missing;
  }
Collects required properties for services in the blueprint. Configuration properties are returned by configuration type.
service -> configType -> properties

@param blueprint the blueprint from the cluster topology
@return a map with configuration types mapped to collections of required property names
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java