[
https://issues.apache.org/jira/browse/OAK-2262?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14353231#comment-14353231
]
Michael Dürig commented on OAK-2262:
------------------------------------
As Oak doesn't keep track of the operation performed we can only provide sort
of a consolidated approximation of what has happened to a multi valued
property. The algorithm for calculating the sets of the indices of the
{{changed}}, {{added}} and {{removed}} properties might look something like
this:
{code}
for (int k = 0; k < min(beforeCount, afterCount); k++) {
if (!beforeValue[k].equals(afterValue[k])) {
changed.add(k);
}
}
if (beforeCount > afterCount) {
for (int k = afterCount; k < beforeCount; k++) {
removed.add(k);
}
} else if (afterCount > beforeCount) {
for (int k = beforeCount; k < afterCount; k++) {
added.add(k);
}
}
{code}
Of course this would reflect e.g. a deleting followed by an addition as a
change.
[~teofili], let me know whether this works for your case and whether we can
tweak this in a way that better suites you.
> Add metadata about the changed value to a PROPERTY_CHANGED event on a
> multivalued property
> ------------------------------------------------------------------------------------------
>
> Key: OAK-2262
> URL: https://issues.apache.org/jira/browse/OAK-2262
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: core, jcr
> Affects Versions: 1.1.2
> Reporter: Tommaso Teofili
> Assignee: Michael Dürig
> Labels: observation
> Fix For: 1.1.8
>
>
> When getting _PROPERTY_CHANGED_ events on non-multivalued properties only one
> value can have actually changed so that handlers of such events do not need
> any further information to process it and eventually work on the changed
> value; on the other hand _PROPERTY_CHANGED_ events on multivalued properties
> (e.g. String[]) may relate to any of the values and that brings a source of
> uncertainty on event handlers processing such changes because there's no mean
> to understand which property value had been changed and therefore to them to
> react accordingly.
> A workaround for that is to create Oak specific _Observers_ which can deal
> with the diff between before and after state and create a specific event
> containing the "diff", however this would add a non trivial load to the
> repository because of the _Observer_ itself and because of the additional
> events being generated while it'd be great if the 'default' events would have
> metadata e.g. of the changed value index or similar information that can help
> understanding which value has been changed (added, deleted, updated).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)