Das Speichern der FNP8 Annotation erfolgt in mehreren Schritten:
Alle Annotationen vom Dokument in ein Datenobjekt schreiben (Codebsp. 1)
Datenobjekt erneut laden um die neu angelegten / geänderten / gelöschten Annotationen ermitteln (Codebsp. 2)
Neu angelegte / veränderte Annotationen ins Archiv speichern, gelöschte anhand der Annotation ID aus dem Archiv entfernen, unveränderte Annotation müssen nicht gespeichert werden (siehe FileNet P8 API).
Codebeispiel 1:
FNP8AnnotationWriter writer = new FNP8AnnotationWriter(); DefaultWriterControls controls = new DefaultWriterControls(); writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);
Um an die einzelnen Annotationen zu kommen und deren Zustand zu ermitteln, muss die die FNP8AnnotationOutput-Klasse verwendet werden.
Codebeispiel 2:
FNP8AnnotationOutput output = new FNP8AnnotationOutput(<<Datenobjekt-Inputstream>>); // Unveränderte Annotationen für alle Seiten org.w3c.dom.Document[] annotationsUmodified = output.getUnmodifiedAnnotations(); //Veränderte Annotationen org.w3c.dom.Document[] annotationsModified = output.getModifiedAnnotations(); //Hinzugefügte Annotationen org.w3c.dom.Document[] annotationsAdded = output.getAddedAnnotations(); //Gelöschte Annotationen org.w3c.dom.Document[] annotationsDeleted = output.getDeletedAnnotations();
Die einzelnen Annotationsobjekte sind nun verfügbar (in DOM-Struktur), jetzt müssen je nach Änderung / Zustand noch Anpassungen an den Attribute vorgenommen werden.
Erstell-/ Änderungsdatum anpassen, nur bei neu angelegten und geänderten Annotationen nötig:
// Aktueller Zeitstempel holen long timestamp = System.currentTimeMillis(); //Setzen des Erstelldatums (nur für neu angelegte Anntationen nötig) FNP8AnnotationXMLUtils.setEntryDate(<<Annotation>>, timestamp); //Setzen des Modifikationsdatums FNP8AnnotationXMLUtils.setModifyDate(<<Annotation>>, timestamp);
Annotation-ID (F_ID und F_ANNOTATEDID Attribute) zum Speichern / Löschen ermitteln:
Geänderte / gelöschte Annotationen besitzen bereits eine ID, diese kann aus der DOM-Struktur ermittelt werden:
String id = FNP8AnnotationXMLUtils.getAnnotationID(<<Annotation>>);
Neu angelegte Annotationen besitzen noch keine ID, diese muss aus dem Archiv ermittelt und gesetzt werden:
FNP8AnnotationXMLUtils.setAnnotationID(<<Annotation>>, <<Neue ID>>);
Die oben genannten ID's dann als Referenz zum Speichern der Annotation im Archiv verwenden (siehe FileNet P8 API).
Der Seitenindex der Annotation muss in der Regel nicht angepasst werden.
Wird jedoch die Dokumentstruktur verändert und ins Archiv gespeichert, muss der Annotationsseitenindex (F_PAGENUMBER und F_MULTIPAGETIFFPAGENUMBER Attribute) entsprechend angepasst werden:
// Setzen des Seitenindex für das Attribut F_PAGENUMBER (Dokument Nummer) FNP8AnnotationXMLUtils.setPageNumber(<<Annotation>>, <<Index>>); // Setzen des Seitenindex für das Attribut F_MULTIPAGETIFFPAGENUMBER (Seitennummer innerhalb des Dokuments) FNP8AnnotationXMLUtils.setMultiPageTiffPageNumber(<<Annotation>>, <<Index>>);
Die angepasste Annotation DOM-Struktur muss jetzt noch ins XML-Format geschrieben werden und kann ins Archiv gespeichert werden.
// Annotation DOM-Struktur ins XML-Format schreiben ByteArrayOutputStream os = new ByteArrayOutputStream(); FNP8AnnotationXMLUtils.write(os, <<Annotation>>); // XML-Daten in Byte-Array, ins Archiv speichern byte[] xmlAnnoData = os.toByteArray();