Skip to main content

Annotationsprofile für den NG-Client

Annotationsprofile aus GWT-Zeiten enthalten pro Annotationstyp Einträge für die Toolkits swing und gwt. Der TypeScript-Client (NG-Client, jadice web viewer) liest die gwt-Einträge nicht, sondern eigene Einträge mit dem Toolkit-Präfix web:. Ein bestehendes Profil muss deshalb ergänzt, nicht ersetzt werden: swing- und gwt-Einträge bleiben stehen, dieselbe XML-Datei bedient weiterhin den GWT-Client, den Export und das Rendering auf dem Server.

Die vier web:-Toolkits​

ElementToolkitAufgabe im NG-ClientGWT-Gegenstück
<wrangler>web:creatorGeste, mit der die Annotation erzeugt wird<wrangler toolkit="gwt">
<wrangler>web:manipulatorGriffe und Verhalten beim Bearbeiten<wrangler toolkit="gwt">
<initializer>web:initializerVorbelegung einer neu erzeugten Annotation (z. B. strokeResolution)<initializer toolkit="gwt">
<renderer>web:rendererKonfiguration des eingebauten Renderers (Zeilenumbruch, Auflösungsanpassung)<renderer toolkit="gwt">

Der GWT-Client hat einen Wrangler je Typ, der Erzeugen und Bearbeiten zusammen abdeckt; der NG-Client trennt das in Creator und Manipulator. Aus einem gwt-Wrangler werden also in der Regel zwei web:-Einträge.

Anders als bei GWT wird die class nicht als Java-Klassenname, sondern als Bezeichner aus einer festen Liste angegeben (siehe Tabellen unten). Eigene Implementierungen lassen sich nicht über das Profil einhängen.

<editor>-Einträge bleiben unverändert​

Property-Editoren brauchen keinen web:-Eintrag. Der NG-Client wählt den Editor anhand des Property-Namens aus seiner eigenen Registry und liest aus dem vorhandenen <editor toolkit="gwt"> nur den Parameter iconName für das Toolbar-Icon. Ein Property ohne <editor> erscheint auch im NG-Client nicht in der Annotations-Toolbar.

Zuordnung der GWT-Klassen​

Wrangler → Creator und Manipulator​

GWT-Wrangler (toolkit="gwt")web:creatorweb:manipulator
DefaultWrangler (Rechteck, Ellipse, Highlight, Maske)DRAG_BOXSIMPLE_BOX mit bounds=rect
TextAnnotationWranglerDRAG_BOXTEXT
LineAnnotationWranglerDRAG_LINEVERTEX_COLLECTION mit collection-pattern=LINE
ArrowAnnotationWranglerDRAG_LINEVERTEX_COLLECTION mit collection-pattern=ARROW
PolygonAnnotationWranglerCLICK_PATH (closed=true bzw. false)VERTEX_COLLECTION mit collection-pattern=POLYGON
FreehandAnnotationWranglerDRAG_PATHSIMPLE_BOX mit bounds=path
StampAnnotationWranglerSTAMPSTAMP
JWTImageAnnotationWranglerDRAG_BOXSIMPLE_BOX mit bounds=rect
IconifiedTextAnnotationWrangler (FileNet-IS-Notiz)DRAG_BOXFNIS_NOTE

Weitere verfügbare Bezeichner: Creator CM8_STAMP; Manipulator CM_STAMP, HIGHLIGHT, NOTE.

Initializer​

GWT-Initializerweb:initializer
FNP8AnnotationInitializerFNP8_ANNOTATION_INITIALIZER
CMAnnotationInitializer (Content Manager 7)CM7_ANNOTATION_INITIALIZER
CMAnnotationInitializer (Content Manager 8)CM8_ANNOTATION_INITIALIZER

Fehlt der web:initializer, obwohl ein gwt-Initializer vorhanden ist, erzeugt der NG-Client die Annotation uninitialisiert (etwa ohne strokeResolution) und schreibt einmal pro Profil und Typ eine Warnung ins Browser-Log.

Renderer​

Für jeden Annotationstyp bringt der NG-Client einen eingebauten Renderer mit; ein web:renderer-Eintrag ist nur nötig, wenn der GWT-Renderer konfiguriert war oder ein archivspezifisches Verhalten braucht:

GWT-Rendererweb:renderertypische Properties
FNP8TextAnnotationRendererFNP8_TEXTlineWrap=CHARACTER_CR, adjustLineWidth=true
FNP8StampAnnotationRendererFNP8_STAMPadjustLineWidth=true
CMTextAnnotationRenderer (Text)CM8_TEXTlineWrap=WORD_CR, adjustFontSize=true, adjustLineWidth=true
CMTextAnnotationRenderer (Notiz)CM8_NOTElineWrap=WORD_CR
CMStampAnnotationRendererSTAMPadjustFontSize=true, adjustLineWidth=true
FNISNoteAnnotationRendererFNIS_NOTElineWrap=NONE
HistoryAnnotationRendererHISTORYlineWrap=WORD_CR, adjustFontSize=false, adjustLineWidth=false

Die Properties adjustFontSize und adjustLineWidth steuern wie in GWT, ob Schriftgröße und Linienstärke gegen die Basisauflösung des Archivformats umgerechnet werden. Der NG-Client wertet dafür ausschließlich den web:renderer-Eintrag aus; die gleichnamigen Properties am gwt-Renderer bleiben unberücksichtigt. Ohne expliziten Eintrag greift bei den Content-Manager-Profilen ein Fallback über den Profilnamen, bei umbenannten Profilen müssen die Werte deshalb explizit gesetzt werden – oder der Profilname wird registriert, siehe Umbenannte Profile.

Umbenannte Profile​

Der NG-Client erkennt das Annotationsformat am Profilnamen (ContentManager 7, FileNet P8 usw.). Ein Profil mit eigenem Namen wird ohne formatspezifische Anpassungen gerendert. Abhilfe: den Namen für das Format der Annotationen registrieren, vor dem Laden von Profilen und Dokumenten:

import { AnnotationFormat } from "@levigo/webtoolkit-ng-client";

AnnotationFormat.CM7.registerName("Name des eigenen Profils");

Details siehe Profilnamen und Formaterkennung.

Parameter der web:-Einträge​

EintragPropertyBedeutung
web:creator (alle)minWidth, minHeightkleinste erzeugbare Annotation in Dokumenteinheiten (7200 je Zoll); Default 1417,32 = 5 mm
web:creator (alle)executeActionAfterCreationtrue: Annotation nach dem Erzeugen auswählen und den Editor öffnen, wie der gleichnamige GWT-Parameter
web:creator CLICK_PATHclosedtrue für geschlossene Polygone, false für offene
web:manipulator SIMPLE_BOXboundsrect für rechteckige Formen, path für Freihandlinien
web:manipulator VERTEX_COLLECTIONcollection-patternLINE, ARROW oder POLYGON
web:manipulator FNIS_NOTEeditorMinWidth, editorMinHeightStartgröße des Notiz-Editors in CSS-Pixeln (Default 258 × 145)
web:rendererlineWrapNONE, WORD_CR, CHARACTER_CR
web:rendereradjustFontSize, adjustLineWidthUmrechnung gegen die Basisauflösung des Archivs

GWT-Parameter ohne Entsprechung werden ignoriert. In den Referenzprofilen wurden entfernt: showRotationHandle und forceAnnotationUpright am Text-Wrangler, das fixed-Property rotation des Texttyps sowie der Schriftname sansserif (NG und Browser erwarten SansSerif).

Vererbung

Bei extends gelten die web:-Einträge des Elterntyps weiter. Parameter wie minWidth wirken aber nur für den Typ, der den web:creator deklariert: Soll ein abgeleiteter Typ (etwa Text, abgeleitet von Rectangle) eigene Minima haben, braucht er einen eigenen web:creator-Eintrag.

Beispiel​

Rechteck-Typ eines FileNet-P8-Profils vor der Migration (gekürzt):

<annotation-type name="BaseRectangle" archetype="BaseRectangle"
class="com.levigo.jadice.annotation.RectangleAnnotation">
<renderer toolkit="swing" class="com.levigo.jadice.annotation.internal.renderer.fnp8.FNP8RectangleAnnotationRenderer"/>
<renderer toolkit="gwt" class="com.levigo.jadice.web.client.renderer.internal.annotation.RectangleAnnotationRenderer">
<property name="adjustLineWidth">true</property>
</renderer>
<wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.DefaultWrangler"/>
<initializer toolkit="swing" class="com.levigo.jadice.annotation.internal.renderer.fnp8.FNP8AnnotationInitializer"/>
<initializer toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.initializer.FNP8AnnotationInitializer"/>
...
</annotation-type>

Dieselbe Definition nach der Migration; die bestehenden Einträge bleiben, drei web:-Einträge kommen hinzu:

<annotation-type name="BaseRectangle" archetype="BaseRectangle"
class="com.levigo.jadice.annotation.RectangleAnnotation">
<renderer toolkit="swing" class="com.levigo.jadice.annotation.internal.renderer.fnp8.FNP8RectangleAnnotationRenderer"/>
<renderer toolkit="gwt" class="com.levigo.jadice.web.client.renderer.internal.annotation.RectangleAnnotationRenderer">
<property name="adjustLineWidth">true</property>
</renderer>
<wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.DefaultWrangler"/>
<wrangler toolkit="web:creator" class="DRAG_BOX"/>
<wrangler toolkit="web:manipulator" class="SIMPLE_BOX">
<property name="bounds">rect</property>
</wrangler>
<initializer toolkit="swing" class="com.levigo.jadice.annotation.internal.renderer.fnp8.FNP8AnnotationInitializer"/>
<initializer toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.initializer.FNP8AnnotationInitializer"/>
<initializer toolkit="web:initializer" class="FNP8_ANNOTATION_INITIALIZER"/>
...
</annotation-type>

Ein Texttyp desselben Profils erhält zusätzlich die Renderer-Konfiguration:

<renderer toolkit="web:renderer" class="FNP8_TEXT">
<property name="lineWrap">CHARACTER_CR</property>
<property name="adjustLineWidth">true</property>
</renderer>
<wrangler toolkit="web:creator" class="DRAG_BOX"/>
<wrangler toolkit="web:manipulator" class="TEXT"/>

Vorgehen​

  1. Profil kopieren und die swing- und gwt-Einträge unverändert lassen.
  2. Je Annotationstyp mit gwt-Wrangler einen web:creator und einen web:manipulator nach der Tabelle oben ergänzen; bounds, collection-pattern und closed nicht vergessen.
  3. Je gwt-Initializer einen web:initializer ergänzen.
  4. Nur wo der gwt-Renderer Properties trägt oder ein archivspezifischer Renderer gesetzt ist, einen web:renderer mit denselben Properties ergänzen.
  5. Abgeleitete Typen prüfen: eigene Minima oder abweichende Gesten brauchen eigene web:-Einträge.
  6. Weicht der Profilname von den eingebauten Namen ab, ihn im NG-Client mit AnnotationFormat.<FORMAT>.registerName(...) registrieren (siehe Umbenannte Profile).
  7. Profil wie bisher über webtoolkit.annotationProfiles registrieren (siehe Annotationen) und im NG-Client mit geöffnetem Browser-Log testen: der Client meldet fehlende web:initializer- und web:renderer-Einträge sowie unbekannte Profile als Warnung.