Laden von FileNet P8 Annotationen

Versionsunabhängige Information

Beschreibt, was beim Laden von FileNet P8 Annotationen zu beachten ist.

 

FileNet P8 Annotationen sind üblicherweise so im Archiv abgelegt, dass für jede Annotation ein separates Datenobjekt gespeichert wird.

Beim serverseitigen Laden dieser Annotationen in der kundenspezifischen DocumentDataProvider-Implementierung ist zu beachten, dass beim Lesevorgang alle Annotationen in einen Stream gepackt werden müssen, damit die Annotationen vollständig zum Dokument geladen werden.

Im folgenden ein Ausschnitt aus einer entsprechenden DocumentDataProvider-Implementierung:

Ausschnitt aus einer entsprechenden DocumentDataProvider
@Override
public final void read(Reader reader, final S source) throws JadiceException, IOException {

  readFNP8Annotations(reader, source);
  readDocumentStreams(reader, source);

}

private void readFNP8Annotations(Reader reader, Source source) {

  final DefaultReaderControls readerControls = new DefaultReaderControls();
  readerControls.getSettings(FNP8AnnotationReaderSettings.class).setAnnotationProfile("FileNet P8"));

  // Falls die Annotation im Archiv in einem anderen Encoding gespeichert sind, dann muss man das
  // Encoding beim Lesen mit angeben. (Hier ist das eigentlich unnötig, aber informationshalber
  // gezeigt.)
  String myEncoding = FNP8AnnotationConstants.ENCODING; // use default encoding UTF-8

  // Encoding auf den readerControls muss man nicht setzen, wenn man den Weg über
  // FNP8AnnotationInput geht und dort beim Lesen das Encoding der gespeicherten Annotationen
  // angibt. Deshalb ist die folgende Zeile auskommentiert und nur exemplarisch hier:
  // readerControls.getSettings(FNP8AnnotationReaderSettings.class).setEncoding(myEncoding);

  reader.setReaderControls(readerControls);
  reader.setFormat(new FNP8AnnotationFormat());

  try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
    // Read all annotations at once to receive the PAGE_READ_COMPLETED notification
    // when ALL annotations are loaded. (see JWT-1128)
    FNP8AnnotationInput input = new FNP8AnnotationInput();
    for (String streamPath : source.getAnnoStreamPaths()) {
      // abweichendes Encoding ggf. hier angeben (hier eigentlich unnötig, weil default)
      input.addAnnotation(getStream(stream), myEncoding);
    }

    input.write(os); // use default Encoding UTF-8

    ByteArrayInputStream bais = new ByteArrayInputStream(os.toByteArray());
    reader.read(bais);
  } catch (JadiceException | IOException e) {
     e.printStackTrace();
  }
}