The AuditService API provides facilities to query audit data. There are also methods to clear audit data, enable and disable auditing, and check auditing status.
/**
* Returns content changes.
*/
public ObjectList getContentChanges(Holder<String> changeLogToken, BigInteger maxItems) {
final ObjectListImpl result = new ObjectListImpl();
result.setObjects(new ArrayList<ObjectData>());
EntryIdCallback changeLogCollectingCallback = new EntryIdCallback(true) {
@Override
public boolean handleAuditEntry(Long entryId, String user, long time, Map<String, Serializable> values) {
result.getObjects().addAll(createChangeEvents(time, values));
return super.handleAuditEntry(entryId, user, time, values);
}
};
Long from = null;
if ((changeLogToken != null) && (changeLogToken.getValue() != null)) {
try {
from = Long.parseLong(changeLogToken.getValue());
} catch (NumberFormatException e) {
throw new CmisInvalidArgumentException("Invalid change log token: " + changeLogToken);
}
}
AuditQueryParameters params = new AuditQueryParameters();
params.setApplicationName(CMIS_CHANGELOG_AUDIT_APPLICATION);
params.setForward(true);
params.setFromId(from);
int maxResults = (maxItems == null ? 0 : maxItems.intValue());
maxResults = (maxResults < 1 ? 0 : maxResults + 1);
serviceRegistry.getAuditService().auditQuery(changeLogCollectingCallback, params, maxResults);
String newChangeLogToken = null;
if (maxResults > 0) {
if (result.getObjects().size() >= maxResults) {
StringBuilder clt = new StringBuilder();
newChangeLogToken = (from == null ? clt.append(maxItems.intValue() + 1).toString() : clt.append(from.longValue() + maxItems.intValue()).toString());
result.getObjects().remove(result.getObjects().size() - 1).getId();
result.setHasMoreItems(true);
} else {
result.setHasMoreItems(false);
}
}
if (changeLogToken != null) {
changeLogToken.setValue(newChangeLogToken);
}
return result;
}
See also:
- Audit Log
- Auditing provides a detailed overview of auditing.
- Audit API Hints and Tricks DevCon presentation by Mehdi Belmekki.