code: private SortedSet<String> applyConfiguredValues(ResourceResolver resolver, String configurationId,
        Map<String, Object> parameterValues, SortedSet<String> ancestorLockedParameterNames) {
  
      // get data from persistence
      ParameterPersistenceData data = parameterPersistence.getData(resolver, configurationId);
  
      // ensure the types provided by persistence are valid
      Map<String, Object> configuredValues = ensureValidValueTypes(data.getValues());
  
      // put parameter values to map (respect locked parameter names that may be defined on ancestor level)
      if (!ancestorLockedParameterNames.isEmpty()) {
        for (Map.Entry<String, Object> entry : configuredValues.entrySet()) {
          if (!ancestorLockedParameterNames.contains(entry.getKey())) {
            parameterValues.put(entry.getKey(), entry.getValue());
          }
        }
      }
      else {
        parameterValues.putAll(configuredValues);
      }
  
      // aggregate set of locked parameter names from ancestor levels and this level
      return mergeSets(ancestorLockedParameterNames, data.getLockedParameterNames());
    }
docs: Apply configured values for given configuration id (except those for which the parameter names are locked on a
  higher configuration level).
  @param resolver Resource resolver
  @param configurationId Configuration id
  @param parameterValues Parameter values
  @param ancestorLockedParameterNames Set of locked parameter names on the configuration levels above.
  @return Set of locked parameter names on this configuration level combined with the from the levels above.