[ 
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)

Reply via email to