/** * 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; }