public Set<String> filterInvalidPropertyValues(Map<PropertyInfo, String> properties, String filteredListName) {
    Set<String> resultSet = new HashSet<>();
    for (Iterator<Entry<PropertyInfo, String>> iterator = properties.entrySet().iterator(); iterator.hasNext();) {
      Entry<PropertyInfo, String> property = iterator.next();
      PropertyInfo propertyInfo = property.getKey();
      String propertyValue = property.getValue();
      if (propertyValue == null || propertyValue.toLowerCase().equals("null") || propertyValue.isEmpty()) {
        LOG.error(String.format("Excluding property %s from %s, because of invalid or empty value!", propertyInfo.getName(), filteredListName));
        iterator.remove();
      } else {
        resultSet.add(propertyValue);
      }
    }
    return resultSet;
  }
Gets the desired tags for a cluster and overrides for a host

@param cluster
         the cluster
@param hostConfigOverrides
         the host overrides applied using config groups
@param clusterDesired
         the desired configurations for the cluster. Obtaining these can be
         expensive, ans since this method could be called 10,000's of times
         when generating cluster/host responses. Therefore, the caller
         should build these once and pass them in. If {@code null}, then
         this method will retrieve them at runtime, incurring a performance
         penality.
@return a map of tag type to tag names with overrides
ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java