Untergeordnete Seiten
  • Speichern von Annotationen unter Beachtung des Editiermodus
Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Anforderung

Oft ist ein "Annotationen speichern" Knopf in der Toolbar gewünscht. Grundsätzlich ist dies kein Problem. Man erstellt sich ein Command in dessen execute-Methode der Speichervorgang ausgelöst wird. Eine Beschreibung, wie der Speichervorgang von Annotationen implementiert werden kann findet sich unter Technische Annotationsdokumentation.
Dieses Beispiel beschäftigt sich im Schwerpunkt jedoch mit einer anderen Frage. Wie kann die Konsistenz der Annotationseigenschaften sichergestellt werden, wenn sich eine Annotation im Editiermodus befindet? Die ernüchternde Antwort lautet schlicht gar nicht! Durch die flexiblen Möglichkeiten, die die Annotationsprofile bieten unterschiedliche AnnotationWrangler und damit beliebige Annotationseditoren zu nutzen, gibt es keinen zuverlässigen Standardweg vor einem Speichervorgang noch nicht bestätigte Änderungen aus einem aktiven Editor in das zugehörige Annotationsobjekt zu übernehmen. Ebenso gibt es keine sichere Entscheidungsbasis, welche der unbestätigten Änderungen automatisch übernommen werden sollen. Ausschließlich vor und nach einem Editiervorgang sind Annotationen in einem konsistenten Zustand, der als Grundlage für einen Speichervorgang geeignet ist. 

Lösungsmöglichkeit

Für einen Anwender ist es nachvollziehbar, dass ein Speichern nur möglich ist, wenn alle Annotationen in einem definierten Zustand sind. Während des Editierens von Annotationen ist dieser Zustand nicht gewährleistet. Daher sollte zu diesen Zeitpunkt ein "Annotationen speichern" Command nicht aktiv sein. Nach dem Schließen des Annotationseditors ist die Annotation wieder in einen zugesicherten Zustand. In diesem Fall kann das  "Annotationen speichern" Command sich wieder aktivieren.

Das folgende Beispiel skizziert dieses suggestive Verhalten. Das Speichern-Command "beobachtet" dabei den Editierzustand der Annotationen im aktuellen Dokument. Auf Basis dessen aktiviert sich das Command nur dann, wenn die Annotationen in einem definierten Zustand sind.  

Beispiel

3 Kommentare

  1. Anonym sagt:

    Ich denke im Codebeispiel fehlt die Instanzvariable document - bzw. die Zeile:
    private Document document;

    Ansonsten vielen Dank für diesen Code!

    1. Das ist nicht ganz richtig. AbstractDocumentCommand bietet ein Document-Feld an, das von allen davon abgeleiteten Klassen sichtbar ist und verwendet werden kann.

      1. Anonym sagt:

        Sorry, mein Fehler ich hatte von der Klasse AbstractPageViewCommand geerbt...