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
| Element | Toolkit | Aufgabe im NG-Client | GWT-Gegenstück |
|---|---|---|---|
<wrangler> | web:creator | Geste, mit der die Annotation erzeugt wird | <wrangler toolkit="gwt"> |
<wrangler> | web:manipulator | Griffe und Verhalten beim Bearbeiten | <wrangler toolkit="gwt"> |
<initializer> | web:initializer | Vorbelegung einer neu erzeugten Annotation (z. B. strokeResolution) | <initializer toolkit="gwt"> |
<renderer> | web:renderer | Konfiguration 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:creator | web:manipulator |
|---|---|---|
DefaultWrangler (Rechteck, Ellipse, Highlight, Maske) | DRAG_BOX | SIMPLE_BOX mit bounds=rect |
TextAnnotationWrangler | DRAG_BOX | TEXT |
LineAnnotationWrangler | DRAG_LINE | VERTEX_COLLECTION mit collection-pattern=LINE |
ArrowAnnotationWrangler | DRAG_LINE | VERTEX_COLLECTION mit collection-pattern=ARROW |
PolygonAnnotationWrangler | CLICK_PATH (closed=true bzw. false) | VERTEX_COLLECTION mit collection-pattern=POLYGON |
FreehandAnnotationWrangler | DRAG_PATH | SIMPLE_BOX mit bounds=path |
StampAnnotationWrangler | STAMP | STAMP |
JWTImageAnnotationWrangler | DRAG_BOX | SIMPLE_BOX mit bounds=rect |
IconifiedTextAnnotationWrangler (FileNet-IS-Notiz) | DRAG_BOX | FNIS_NOTE |
Weitere verfügbare Bezeichner: Creator CM8_STAMP; Manipulator CM_STAMP, HIGHLIGHT, NOTE.
Initializer
| GWT-Initializer | web:initializer |
|---|---|
FNP8AnnotationInitializer | FNP8_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-Renderer | web:renderer | typische Properties |
|---|---|---|
FNP8TextAnnotationRenderer | FNP8_TEXT | lineWrap=CHARACTER_CR, adjustLineWidth=true |
FNP8StampAnnotationRenderer | FNP8_STAMP | adjustLineWidth=true |
CMTextAnnotationRenderer (Text) | CM8_TEXT | lineWrap=WORD_CR, adjustFontSize=true, adjustLineWidth=true |
CMTextAnnotationRenderer (Notiz) | CM8_NOTE | lineWrap=WORD_CR |
CMStampAnnotationRenderer | STAMP | adjustFontSize=true, adjustLineWidth=true |
FNISNoteAnnotationRenderer | FNIS_NOTE | lineWrap=NONE |
HistoryAnnotationRenderer | HISTORY | lineWrap=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
| Eintrag | Property | Bedeutung |
|---|---|---|
web:creator (alle) | minWidth, minHeight | kleinste erzeugbare Annotation in Dokumenteinheiten (7200 je Zoll); Default 1417,32 = 5 mm |
web:creator (alle) | executeActionAfterCreation | true: Annotation nach dem Erzeugen auswählen und den Editor öffnen, wie der gleichnamige GWT-Parameter |
web:creator CLICK_PATH | closed | true für geschlossene Polygone, false für offene |
web:manipulator SIMPLE_BOX | bounds | rect für rechteckige Formen, path für Freihandlinien |
web:manipulator VERTEX_COLLECTION | collection-pattern | LINE, ARROW oder POLYGON |
web:manipulator FNIS_NOTE | editorMinWidth, editorMinHeight | Startgröße des Notiz-Editors in CSS-Pixeln (Default 258 × 145) |
web:renderer | lineWrap | NONE, WORD_CR, CHARACTER_CR |
web:renderer | adjustFontSize, adjustLineWidth | Umrechnung 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).
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
- Profil kopieren und die
swing- undgwt-Einträge unverändert lassen. - Je Annotationstyp mit
gwt-Wrangler einenweb:creatorund einenweb:manipulatornach der Tabelle oben ergänzen;bounds,collection-patternundclosednicht vergessen. - Je
gwt-Initializer einenweb:initializerergänzen. - Nur wo der
gwt-Renderer Properties trägt oder ein archivspezifischer Renderer gesetzt ist, einenweb:renderermit denselben Properties ergänzen. - Abgeleitete Typen prüfen: eigene Minima oder abweichende Gesten brauchen eigene
web:-Einträge. - Weicht der Profilname von den eingebauten Namen ab, ihn im NG-Client mit
AnnotationFormat.<FORMAT>.registerName(...)registrieren (siehe Umbenannte Profile). - Profil wie bisher über
webtoolkit.annotationProfilesregistrieren (siehe Annotationen) und im NG-Client mit geöffnetem Browser-Log testen: der Client meldet fehlendeweb:initializer- undweb:renderer-Einträge sowie unbekannte Profile als Warnung.