Exemplo n.º 1
0
  /**
   * Creates an {@link AttributeValueSets} for saving as XML. The result contains two sets:
   * components defaults and the overriding values the user changed using the editor. Additionally,
   * {@link Internal} non-configuration and a number of special attributes are removed.
   */
  private AttributeValueSets createAttributeValueSetsToSave(Map<String, Object> overrides) {
    final String componentId = getComponentId();
    assert componentId != null;

    final AttributeValueSet defaults = getDefaultAttributeValueSet(componentId);

    /*
     * Create an AVS for the default values and a based-on AVS with overridden values.
     */
    final AttributeValueSet overridenAvs = new AttributeValueSet("overridden-attributes", defaults);
    removeSpecialKeys(overrides);
    removeInternalNonConfigurationAttributes(overrides, componentId);
    removeKeysWithDefaultValues(overrides, defaults);
    overrides.keySet().retainAll(defaults.getAttributeValues().keySet());
    overridenAvs.setAttributeValues(overrides);

    // Flatten and save.
    final AttributeValueSets merged = new AttributeValueSets();
    merged.addAttributeValueSet(overridenAvs.label, overridenAvs);
    merged.addAttributeValueSet(defaults.label, defaults);
    merged.setDefaultAttributeValueSetId(overridenAvs.label);
    return merged;
  }