public Map<String, Map<String, Map<String, String>>> getFullAttributes() {
    Map<String, Map<String, Map<String, String>>> mergedAttributeMap = parentConfiguration == null ?
      new HashMap<>() :
      new HashMap<>(parentConfiguration.getFullAttributes());

    for (Map.Entry<String, Map<String, Map<String, String>>> typeEntry : attributes.entrySet()) {
      String type = typeEntry.getKey();
      Map<String, Map<String, String>> typeAttributes = new HashMap<>();
      for (Map.Entry<String, Map<String, String>> attributeEntry : typeEntry.getValue().entrySet()) {
        typeAttributes.put(attributeEntry.getKey(), new HashMap<>(attributeEntry.getValue()));
      }

      if (! mergedAttributeMap.containsKey(type)) {
        mergedAttributeMap.put(type, typeAttributes);
      } else {
        Map<String, Map<String, String>> mergedAttributes = mergedAttributeMap.get(type);
        for (Map.Entry<String, Map<String, String>> attributeEntry : typeAttributes.entrySet()) {
          String attribute = attributeEntry.getKey();
          if (! mergedAttributes.containsKey(attribute)) {
            mergedAttributes.put(attribute, attributeEntry.getValue());
          } else {
            Map<String, String> mergedAttributeProps = mergedAttributes.get(attribute);
            for (Map.Entry<String, String> propEntry : attributeEntry.getValue().entrySet()) {
              mergedAttributeProps.put(propEntry.getKey(), propEntry.getValue());
            }
          }
        }
      }
    }
    return mergedAttributeMap;
  }
Get a complete merged map of attributes including this instance and the entire parent hierarchy.
Attributes are merged so that children override the same attribute specified in it's parent hierarchy.
This result is re-calculated for each request in case a parent value has changed so the result
should be cached if possible.

@return complete map of merged attributes {configType -> {attributeName -> {propName, attributeValue}}}
ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java