private void createOrAddProperties(String defaultServiceName, String defaultComponentName, String defaultCategoryName,
                                     Set<Map<String, Object>> requestProperties, boolean removePropertiesIfNotSpecified)
      throws SystemException {
    // set of resource properties (each entry in the set belongs to a different resource)
    if (requestProperties != null) {
      for (Map<String, Object> resourceProperties : requestProperties) {
        RequestDetails requestDetails = parseProperties(defaultServiceName, defaultComponentName, defaultCategoryName, resourceProperties);

        RootServiceComponentConfigurationHandler handler = rootServiceComponentConfigurationHandlerFactory.getInstance(requestDetails.serviceName, requestDetails.componentName, requestDetails.categoryName);
        if (handler != null) {
          try {
            handler.updateComponentCategory(requestDetails.categoryName, requestDetails.properties, removePropertiesIfNotSpecified);
          } catch (AmbariException | IllegalArgumentException e) {
            throw new SystemException(e.getMessage(), e.getCause());
          }
        } else {
          throw new SystemException(String.format("Configurations may not be updated for the %s component of the root service, %s", requestDetails.serviceName, requestDetails.componentName));
        }
      }
    }
  }
Retrieves groups of properties from the request data and create or updates them as needed.
<p>
Each group of properties is expected to have a category (<code>AmbariConfiguration/category</code>)
value and one or more property (<code>AmbariConfiguration/properties/property.name</code>) values.
If a category cannot be determined from the propery set, the default category value (passed in)
is used.  If a default category is set, it is assumed that it was parsed from the request predicate
(if available).

@param defaultServiceName             the default service name to use if needed
@param defaultComponentName           the default component name to use if needed
@param defaultCategoryName            the default category to use if needed
@param requestProperties              a collection of property maps parsed from the request
@param removePropertiesIfNotSpecified <code>true</code> to remove existing properties that have not been specifed in the request;
                                      <code>false</code> append or update the existing set of properties with values from the request
@throws SystemException if an error occurs saving the configuration data
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentConfigurationResourceProvider.java