List<Component> buildComponents(@Nullable Object componentsRaw) {
    if (null == componentsRaw) {
      return ImmutableList.of();
    }
    List<Component> components = new ArrayList<>();
    for (Map<String, Object> componentAsMap: (Collection<Map<String, Object>>)componentsRaw) {
      String componentName = (String)componentAsMap.get(NAME);
      Object filtersRaw = componentAsMap.get(FILTERS);
      components.add(Component.create(componentName,
          buildQuickLinkFilters(filtersRaw)));
    }
    return components;  }
@param globalFiltersRaw The data in the request belonging to the "quicklinks_profile/filters" key.
@param serviceFiltersRaw The data in the request belonging to "quicklinks_profile/services"
@return The quicklinks profile as Json encoded string.
@throws QuickLinksProfileEvaluationException when the received data defines an invalid profile. This can be of various
   reasons: the received data is has invalid structure, critical data is missing or there are contradicting filter
   rules in the profile
ambari-server/src/main/java/org/apache/ambari/server/state/quicklinksprofile/QuickLinksProfileBuilder.java