jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dürig (JIRA) <j...@apache.org>
Subject [jira] [Commented] (OAK-2262) Add metadata about the changed value to a PROPERTY_CHANGED event on a multivalued property
Date Mon, 09 Mar 2015 17:29:38 GMT

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

Mime
View raw message