Allow default resource metadata to be set in the model
Provider instances have the ability to independently set metadata values, however in most cases metadata is common to all instances of a model and it is relatively static. It therefore makes sense to be able to define default metadata at the resource model level which is applied to the instance when it is first created.
Note that only the Extra metadata is used to populate the defaults. This prevents other data about the resource (e.g. the resource type and value type) from being added and bloating the metadata. To differentiate default metadata values from metadata values which are set later the default metadata values will have no associated timestamp. This is in line with the behaviour for default resource values.
Signed-off-by: Tim Ward <timothyjward@apache.org> (commit: fad36b2)
This commit adds a DuplicateAction to the pushed updates, which determines the behaviour when the pushed update contains a duplicate value or metadata value. A duplicate value is determined by object equality, or == if one value is null. The default for resource values is that duplicates updates are applied, updating the timestamp and generating a update event. The default for metadata values is that duplicate updates are ignored, avoiding timestamp updates and update events. The reason for this difference is that repeated data readings can often give the same value, but this is a new reading. In general metadata values do not change, and so duplicates aren't interesting.
Signed-off-by: Tim Ward <timothyjward@apache.org> (commit: d56f449)