Änderungen zwischen zwei Revisionen
Im zweiten Beispiel können die Revisionen komfortabel über eine GUI ausgewählt werden. Dazu muss zunächst ein neues Skript in der Vorlagen-Verwaltung des Projekts angelegt werden.
Im Formularbereich des Skripts können Eingabekomponenten zur Auswahl eines Start- und eines End-Datums für die gewünschten Revisionsgrenzen konfiguriert werden.
Analog zum ersten Beispiel können über die ausgewählten Daten anschließend die entsprechenden Revisionen geholt werden:
data = context.showForm();
if (data != null) {
context.logInfo("data=" + data);
from = data.get(context.getProject().getMasterLanguage(),
"from").get();
to = data.get(context.getProject().getMasterLanguage(),
"enddate").get();
if (from != null) {
context.logInfo(from + " -- " + to);
start = project.getRevision(from);
end = project.getRevision(to);
context.logInfo("startRev=" + start.id + ", endRev=" + end.id);
if (start.id <= end.id) {
revisions = project.getRevisions(start, end, 0, null);
} else {
revisions = project.getRevisions(end, start, 0, null);
}
context.logInfo("found '" + revisions.size() + "' revisions -> first=" + revisions.get(0) + ", last=" +
revisions.get(revisions.size() - 1));
checkChanges(revisions);
}}
In checkChanges werden die Änderungen ermittelt, die innerhalb dieser Revisionen stattgefunden haben. In diesem Beispiel werden Änderungen an Projektinhalten vom Operation-Type DELETE und CREATE (innerhalb der Inhalte-Verwaltung) berücksichtigt. Außerdem werden auch hier Änderungen an Datenbankinhalten des Projekts ermittelt:
Änderung durch Entfernen von Elementen in der Inhalte-Verwaltung:
case RevisionOperation.OperationType.DELETE:
deleteRoot = operation.getDeleteRootElement();
if (deleteRoot.getStoreType() == Store.Type.PAGESTORE) {
// include only pagestore
context.logInfo("found delete in pagestore (deleted node=" +
deleteRoot.getUid() + ") in revision=" +
getRevisionString(revision));
}
break;
Änderung durch Hinzufügen von Elementen im Projekt:
case RevisionOperation.OperationType.CREATE:
created = operation.getCreatedElement();
parent = operation.getParent();
context.logInfo("found created element in store '" +
created.getStoreType() + "' (created node=" +
created.getUid() + ", parent node=" + parent.getUid() + ") in
revision=" + getRevisionString(revision));
break;
Änderung durch Anlegen, Löschen, Ändern oder Freigeben von Datenbank-Inhalten:
case RevisionOperation.OperationType.CONTENT_COMMIT:
created = operation.getCreatedEntities();
changed = operation.getChangedEntities();
deleted = operation.getDeletedEntities();
released = operation.getReleasedEntities();
context.logInfo("found content changes in revision=" +
getRevisionString(revision));
context.logInfo("\t created entities(" + created.size() + ") "
+ created);
context.logInfo("\t changed entities(" + changed.size() + ") "
+ changed);
context.logInfo("\t deleted entities(" + deleted.size() + ") "
+ deleted);
context.logInfo("\t released entities(" + released.size() + ")
" + released);
break;
Die Ausgabe des Skripts erfolgt über die Javakonsole:
..
INFO 20.05.2008 15:44:50.317
startRev=6804, endRev=7677
found created element in store 'PAGESTORE' (created node=Testpage_131, parent node=Test_6C22873) in revision=7335
- Thu May 15 16:02:51 CEST 2008 (importStoreElement) - Admin – CREATE
..