Hi Sascha,

The maxItems parameter defines how many entries should be returned (at most). If the client does not specify the maxItems parameter, the server can decide.

I agree the spec wording could be better. It should be:

"If not specified, then the repository MUST return the first change event recorded in the change log [as the first result in the output]."

A client can receive all change events from the beginning of time with one call (if the repository supports this) by providing no change log token.


Re 2)
The latestChangeLogToken is not the one that is passed in. It's a holder variable that is updated in the getContentChanges() method of the respective binding implementation. Whatever the server returned as "changeLogToken" is used here.


- Florian


2)
I am a bit irritated about client library behaviour when getting
latestChangeLogToken from ChangeEvent:

It seems to always return the token which is passed as argument of
method ‚getContentChanges‘.
A look inside SessionImpl class confirmed that the token parameter is
passed through to create ChangeEventsImpl.

Shouldn’t the latestChangeLogToken be the one at the end of the
changeEvents List retrieved from server?

Due to spec the token which is passed as parameter should be the FIRST
result in the output. So the first change event in list should
correspond to this token.
And the latestChangeLogToken should be „The change log token
corresponding to the LAST change event in changeEvents.“

Do I miss sth. here?
(Don’t want to immediately create a bug ticket because I think its
more probably that I misunderstood sth.)

tia

Cheers
Sascha



Am 06.03.2015 um 12:23 schrieb Sascha Homeier
<shome...@apollon.de<mailto:shome...@apollon.de>>:

Hello together,

I am currently implementing the ChangeLog functionality on server side
and have a question concerning the spec conformant behavior of
Discovery Service „getContentChanges“:

Due to get the very first change event the CMIS spec 1.1 says I need
to pass a null changeLogToken parameter:


 *   String changeLogToken: If specified, then the repository MUST
return the change event corresponding to the value of the specified
change log token as the first result in the output.

If not specified, then the repository MUST return the first change event
recorded in the change log.

So did I understand it correctly that at server side I should only
pass ONE change event which must be the very first event (either from
beginning if ChangeLog capability provides complete log or otherwise
from the point in time when changes were recorded)?

So if I am on the right track I think to get ALL change events from
beginning of the ChangeLog on client-side I should first ask for the
first change event with token parameter null and then ask for the
events since that token.
So client-code should look like that imho:

// get very first change event
ItemIterable<ChangeEvent> contentChanges =
cmisSession.getContentChanges(null, includeProperties);
ChangeEvent veryFirstChangeEvent = contentChanges.iterator().next();

// get change log token of very first event and ask for the first page
of change events on going-forward basis
CmisObject veryFirstCmisObject =
cmisSession.getObject(veryFirstChangeEvent.getObjectId());
ChangeEvents allContentChangesFirstPage =
cmisSession.getContentChanges(veryFirstCmisObject.getChangeToken(),
includeProperties, maxItems);

It would be nice if someone could just confirm if this is the intended
and spec compliant repository behaviour.
I am not fully sure if the server reply for a null token parameter
should really only be ONE change event (the very first) or ALL change
events beginning with the very first.


thx in advance.

Cheers
Sascha

Reply via email to