The API of the PropertyValue value object should be clearl separated into
- a key, value part representing a configuration entry.
- a meta-data Map<String,String>
- a PropertyValueBuilder toBuilder() method to create a mutable builder from a value.
Additionally the corresponding PropertyValueBuilder must have methods to
- change an entries key, value and _meta-data entries.
As a side effect the concrete representation of meta-data, be it in form of specialized config entries, be it in as separately accessible artifacts can be postponed, since additional entries are independently stored in a separate datastructure by the property sources returning any property values. Additionally since meta-data entries are highly cohesive with the data data, property values help to ensure that only the relevant meta-data for a certain config entry is returned in a final configuration instance (the current solution quickly looses control on which entries are belonging to the current evaluated config key, value pair, since meta-entries are mixed up with the ordinary config entries).