By using CMIS 'change log' mechanism, application can
discover the set of changes that have occurred to objects stored in the
repository from a given point of time.
Change log is a collection change events. one change
event corresponds to one cmis object.
Note
As per the specification, the change events in the change
log MUST be returned in ascending order from the time when the change event
occurred.
Is change log can
give all the changes?
It depends on the repository. Repositories can have an
entry for every change ever made to content in the repository, or may only be
able to return an entry for all changes made since a particular point in time.
RepositoryInfo interface provides 'getChangesIncomplete'
method, to check whether the entries in the change log are incomplete or
complete.
Boolean
getChangesIncomplete()
Rreturn true if the changes are incomplete, false if the
changes are complete, or null if the repository didn't provide this flag
TestCmis.java
package com.sample.util; import java.util.HashMap; import java.util.Map; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.client.api.SessionFactory; import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; import org.apache.chemistry.opencmis.commons.SessionParameter; import org.apache.chemistry.opencmis.commons.enums.BindingType; public class TestCmis { private static String serverURL = "http://localhost:8080/chemistry-opencmis-server-inmemory-1.1.0/browser"; private static String repositoryId = "A1"; public static Session getSession() { Map<String, String> parameters = new HashMap<>(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value()); parameters.put(SessionParameter.USER, ""); parameters.put(SessionParameter.PASSWORD, ""); parameters.put(SessionParameter.REPOSITORY_ID, repositoryId); parameters.put(SessionParameter.BROWSER_URL, serverURL); SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); return sessionFactory.createSession(parameters); } public static void main(String args[]) { Session session = getSession(); Boolean isChangesInComplete = session.getRepositoryInfo().getChangesIncomplete(); if(isChangesInComplete){ System.out.println("Changes in the changelog are incomplte"); return; } System.out.println("Changes in the change log are complete"); } }
Output
Changes in the changelog are incomplete
Get the level of
change log support by the repository
RepositoryCapabilities interface provides
'getChangesCapability' method to check the level of change log support by the
repository. Following table summarizes the possible values.
Value
|
Description
|
none
|
The repository does not support the change log feature.
|
objectidsonly
|
The change log can return only the object ids for changed
objects in the repository and an indication of the type of change, not details
of the actual change.
|
properties
|
The change log can return properties and the object id
for the changed objects.
|
all
|
The change log can return the object ids for changed
objects in the repository and more information about the actual change.
|
Example
CapabilityChanges
capabilityChanges = repoInfo.getCapabilities().getChangesCapability();
if(capabilityChanges
== null){
System.out.println("Repository
is not providing this value");
}else
if(capabilityChanges == CapabilityChanges.NONE){
System.out.println("The
repository does not support the change log feature");
}else
if(capabilityChanges == CapabilityChanges.OBJECTIDSONLY){
System.out.println("The
change log can return only the object ids for changed objects in the repository
and an indication of the type of change, not details of the actual
change.");
}else
if(capabilityChanges == CapabilityChanges.PROPERTIES){
System.out.println("The
change log can return properties and the object id for the changed
objects.");
}else
if(capabilityChanges == CapabilityChanges.ALL){
System.out.println("The
change log can return the object ids for changed objects in the repository and
more information about the actual change.");
}
TestCmis.java
package com.sample.util; import java.util.HashMap; import java.util.Map; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.client.api.SessionFactory; import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; import org.apache.chemistry.opencmis.commons.SessionParameter; import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; import org.apache.chemistry.opencmis.commons.enums.BindingType; import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges; public class TestCmis { private static String serverURL = "http://localhost:8080/chemistry-opencmis-server-inmemory-1.1.0/browser"; private static String repositoryId = "A1"; public static Session getSession() { Map<String, String> parameters = new HashMap<>(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value()); parameters.put(SessionParameter.USER, ""); parameters.put(SessionParameter.PASSWORD, ""); parameters.put(SessionParameter.REPOSITORY_ID, repositoryId); parameters.put(SessionParameter.BROWSER_URL, serverURL); SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); return sessionFactory.createSession(parameters); } public static void main(String args[]) { Session session = getSession(); RepositoryInfo repoInfo = session.getRepositoryInfo(); CapabilityChanges capabilityChanges = repoInfo.getCapabilities().getChangesCapability(); if(capabilityChanges == null){ System.out.println("Repository is not providing this value"); }else if(capabilityChanges == CapabilityChanges.NONE){ System.out.println("The repository does not support the change log feature"); }else if(capabilityChanges == CapabilityChanges.OBJECTIDSONLY){ System.out.println("The change log can return only the object ids for changed objects in the repository and an indication of the type of change, not details of the actual change."); }else if(capabilityChanges == CapabilityChanges.PROPERTIES){ System.out.println("The change log can return properties and the object id for the changed objects."); }else if(capabilityChanges == CapabilityChanges.ALL){ System.out.println("The change log can return the object ids for changed objects in the repository and more information about the actual change."); } } }
Output
The change log can return only the object ids for changed
objects in the repository and an indication of the type of change, not details
of the actual change.
Change log token
Change log token is an opaque string that uniquely
identifies a particular change in the change log.
How to get latest
Change log token?
RepositoryInfo interface provides 'getLatestChangeLogToken'
method to get the latest change log token.
String latestChangeLogToken =
session.getRepositoryInfo().getLatestChangeLogToken();
No comments:
Post a Comment