Hinweise zur Migration auf jadice web toolkit 5.5

Hinweise zur Migration auf jadice web toolkit 5.5

Inhalt

Neue Funktionen und Features

Servlet 3.0 Support

Aufgrund dieses neuen Features sollten – sofern vorhanden – folgende Servlet- und Filtereinträge aus web.xml entfernt werden, da die Klassen jetzt entsprechend annotiert sind:

  • TileServlet

  • FontDownloadServlet

  • CacheFilter

  • NoCacheFilter

  • TileCacheFilter

  • WebtoolkitGwtRpcFilter

  • WebtoolkitGwtRpcPlusFilter

Wenn der GWT Development Mode verwendet wird, muss der com.levigo.jadice.web.server.DevModeStartupListener zur web.xml hinzugefügt werden (siehe Referenzhandbuch, Abschnitt "Servlet 3.0 Support").

Änderungen an der clientseitigen API

  • Die Beschaffung einer WebtoolkitServerConnection-Instanz sollte nicht mehr durch direktes Instanziieren einer Implementierung (GwtRpcWebtoolkitServerConnection bzw. GwtRpcPlusWebtoolkitServerConnection) passieren. Der entsprechende Konstruktoraufruf ist durch den Aufruf von com.levigo.jadice.web.conn.client.WebtoolkitServerConnectionProvider.get() zu ersetzen (siehe Referenzhandbuch, Abschnitt "Grundlagen zur Connection API").

  • Die GWT-Configuration-Property gwtrpcplus_moduleBaseUrl ist obsolet und sollte aus der Moduldefinitionsdatei (<module>.gwt.xml) entfernt werden. Von Bedeutung war diese Property für solche Integrationsszenarien, wo die HTML-Hostpage nicht Teil der deployten Webtoolkit-Applikation ist. In einem solchen Szenario kann die neue Property jwtBaseURL gesetzt werden, um dem Client bekannt zu machen, auf welchem Server das Webtoolkit zu finden ist.

    Beispiel:

    <set-configuration-property name="jwtBaseURL" value="{moduleBaseUrl}../" />

    Wobei "{moduleBaseUrl}../" nicht explizit gesetzt werden muss, da dies dem Defaultverhalten verspricht.

Änderungen an der serverseitigen API

  • Die Methode com.levigo.jadice.web.conn.server.WebtoolkitFilter.getServerContext() wurde entfernt. Die com.levigo.jadice.web.server.WebtoolkitServerContext-Instanz (Singleton) kann bei Bedarf mit Hilfe der Klasse com.levigo.jadice.web.server.WebtoolkitServerContextProvider.getServerContext(ServletContext sc) beschafft werden.

  • ServletContextListener-Implementierungen, die von der Klasse com.levigo.jadice.web.conn.server.WebtoolkitServletContextListener abgeleitet waren, sind von der Umbenennung dieser Klasse und von der Umbenennung des Interface com.levigo.jadice.web.conn.server.WebtoolkitServerContext (s.u.) betroffen. Es sind lediglich die Imports nachzuziehen.

  • Optional: Die Registrierung der DocumentDataProvider-Implementierungen kann von "programmatisch" auf "automatisch" (siehe Referenzhandbuch, Abschnitt "Dokumente / Automatische Registrierung von DocumentDataProvidern") umgestellt werden. Bei Einsatz des Java-EE- oder Spring-Moduls ist dies besonders einfach und elegant.

Zusammenfassung


alt

neu

Anmerkung

siehe Jira-Ticket

alt

neu

Anmerkung

siehe Jira-Ticket

 web.xml mit Mappings für

  • TileServlet

  • FontDownloadServlet

  • CacheFilter

  • NoCacheFilter

  • TileCacheFilter

  • WebtoolkitGwtRpcFilter

  • WebtoolkitGwtRpcPlusFilter

web.xml ohne Mappings für

  • TileServlet

  • FontDownloadServlet

  • CacheFilter

  • NoCacheFilter

  • TileCacheFilter

  • WebtoolkitGwtRpcFilter

  • WebtoolkitGwtRpcPlusFilter

s.o.

 JWT-1163

<module>.gwt.xml:

gwtrpcplus_moduleBaseUrl

ggf. Verwendung von  jwtBaseURL:

<set-configuration-property name="jwtBaseURL" value="{moduleBaseUrl}../" /> 

s.o.

 

com.levigo.jadice.web.conn.server.WebtoolkitServerContext

com.levigo.jadice.web.conn.server.WebtoolkitServletContextListener

com.levigo.jadice.web.server.WebtoolkitServerContext

com.levigo.jadice.web.server.WebtoolkitServletContextListener

Haben nichts mit der Verbindung zwischen Client und Server zu tun und wurden deshalb in ein anderes Modul verlegt.

JWT-1163

com.levigo.jadice.web.demo.common.server.util.CacheFilter
com.levigo.jadice.web.demo.common.server.util.NoCacheFilter
com.levigo.jadice.web.demo.common.server.util.TileCacheFilter

com.levigo.jadice.web.server.filter.CacheFilter
com.levigo.jadice.web.server.filter.NoCacheFilter
com.levigo.jadice.web.server.filter.TileCacheFilter

Aus einem Demo- in ein Kernmodul umgezogen. Filter sind jetzt per Default aktiviert.

JWT-1163

new GwtRpcWebtoolkitServerConnection(...)
new GwtRpcPlusWebtoolkitServerConnection(..)

com.levigo.jadice.web.conn.client.WebtoolkitServerConnectionProvider.get() 

 

JWT-1163

 

Client

GWT 2.8 Support

jadice web toolkit 5.5.0.0 unterstützt GWT 2.8, kann jedoch weiterhin auch mit GWT 2.7 genutzt werden.

Grundsätzlich wird bei Einsatz von GWT 2.8 die Verwendung von GSS empfohlen (http://www.gwtproject.org/articles/gss_migration.html). Demzufolge wurden die CSS-Dateien des jadice web toolkit in GSS-Dateien umgewandelt.

Für die Integration in Kundenanwendungen bedeutet dies: Wenn diese CSS-Dateien in der Integration nicht vollständig überschrieben wurden, müssen auch die CSS-Dateien in der Integration in GSS-Dateien umgewandelt werden. 

Unterstützung von Icon Fonts auf dem Client

jadice web toolkit 5.5.0.0 bietet eine Unterstützung für Icon Fonts in UI-Komponenten. Icon Fonts können ganz leicht in die UI Komponenten des JWT eingebunden werden (JadiceButton, ContextMenu). Eine Anleitung findet sich in der Benutzerdokumentation.

Alternativ können weiterhin PNGs wie bisher über den UIStyle eingebunden werden.

In den Klassen, die sich die Icons automatisch ziehen (AnnotationProfileAwareToolbar, DefaultButtons, PropertyProfileEditor) werden standardmäßig PNGs angezogen. Zum Umstellen muss ClientConfigurationManager.getClientConfiguration().setIsIconFontUsed(true) gesetzt werden.

Modernisierung der Default Icons

Im Zuge der Unterstützung von IconFonts wurden die im jadice web toolkit mitgelieferten Default Icons modernisiert und ergänzt.

Infolgedessen wird nun im Annotationseditor zwischen einem Icon für die Schriftgröße und einem für die Schriftart unterschieden. Diese erfordern eine Anpassung im Annotationsprofil, wo sie über die Properties fontSize bzw. fontFace anzugeben sind.

Styling

Mit der Umstellung auf Icon Fonts in den JWT Demoanwendungen gab es einige Styling-Anpassungen.

  • Die Styling-Klasse des ColorEditor erhielt zwei neue Felder, um die Farbe der Border des ColorPickers und für den Pointer im ColorPicker anzupassen.

  • Die Icons für die RolloutSearch werden nun nicht länger über CSS- bzw. GSS-Ressourcen definiert, sondern über den IconFont bzw. den UIStyle.

  • Für das CalibrateResolutionWidget wurde eine Styling Klasse hinzugefügt, um dessen Design über GSS Ressourcen anpassbar zu machen.

Buttons und Menüs

Das Erzeugen von Buttons und Menüs wurde auf rein clientseitige APIs umgestellt. Demzufolge wurden die Declarative UI und die Parameter-Injection für Commands aus dem Produkt entfernt.

Folgende Mechanismen dienen nun zur komfortablen Bestückung und Konfiguration von Toolbars, Menüs, Kontextmenüs und Buttons:

  • Die Klasse DefaultButtons wird durch die Klasse DefaultActions abgelöst.

    • Actions (repräsentiert durch das Interface Action mit den Implementierungen RegisteredAction und BasicAction) verknüpfen Kommandos mit UI-relevanten Informationen wie Accelerator-Keys (nur bei RegisteredActions), Beschreibungstexten, Labels und Icons.

    • Die DefaultActions können verwendet werden, um die Toolbars oder Menüs mit Inahlten zu befüllen. (Früher wurden diese mit DefaultButtons bestückt.) 

    • Sie können auch verwendet werden, um daraus direkt Buttons zu erzeugen. Hierfür sind nun die Klassen JadiceDefaultButton und JadiceSubmenuButton Teil der Public API. 

  • Menüs können komfortabel über einen MenuBuilder erstellt werden, mit dem BasicMenuBuilder als Standardimplementierung. 

    • Ein MenuBuilder ermöglicht beispielsweise das Generieren von Toolbars (die von AbstractBar ableiten) und das Erstellen von ContextMenus. 

    • Aus einem MenuBuilder können nach Bedarf mehrere Menus mit denselben Inhalten befüllt werden. 

  • ActionRegistry

    • Jede Action sollte in einem Context (sprich für eine PageView) nur ein Mal generiert werden. Dies hat den Vorteil, dass ToggleButtons, die in mehreren Menükomponenten enthalten sind, denselben Zustand haben, da sie auf dieselben Kontextinformationen zugreifen. Zu diesem Zweck wurde eine ActionRegistry eingeführt, die als Sammel- und Zugriffspunkt für alle Actions dient. 

    • In Folge müssen Commands über eine eindeutige ID identifizierbar sein.

  • KeyStrokes

    • Zudem gibt es über die neu hinzugefügte ActionRegistry ein festes KeyStroke-Mapping. Hier werden alle KeyStrokes gespeichert und sobald eine Tastenkombination gedrückt wurde, wird hierüber das Command ausgeführt. Da alle Actions in einer einzigen gegebenen Registry gespeichert werden, ist es nicht möglich, über die Klasse DefaultActions zwei gleiche Actions mit unterschiedlichen Inhalten (z.B. abweichenden KeyStrokes) zu definieren.

Events

In Folge einer Überarbeitung der Eventstruktur feuert der ToolManger außer für die Property statusFeedback keine PropertyChangeEvents mehr, sondern ToolChangedEvents. Die Eigenschaften propertyNameoldValue und newValue sind hierin unter gleichem Name enthalten. Eine eigene Implementierung des  ToolChangedEvent.Handler kann dem ToolManager über addToolChangedHandler(handler) hinzugefügt werden.

Internet Explorer 11 Kompatibilitätsmodus

Hierbei gibt es einige Einschränkungen zu beachten - bitte beachten Sie hierzu die Known Issues in der Entwicklerdokumentation: http://webtoolkit.jadice.com/doc/sect.knownissues.html.

Zusammenfassung

alt

neu

Anmerkung

siehe Jira-Ticket

alt

neu

Anmerkung

siehe Jira-Ticket

Annotationsprofil *.xml:

<editor toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.editor.FontSizeEditor">
<property name="iconName">text</property>
</editor>

<editor toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.editor.FontFaceEditor">
<property name="iconName">text</property>
</editor>

Annotationsprofil *.xml:

<editor toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.editor.FontSizeEditor">
<property name="iconName">fontSize</property>
</editor>

<editor toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.editor.FontFaceEditor">
<property name="iconName">fontFace</property>
</editor>

s.o.

JWT-1271, JWT-1255

 


Server

 

alt

neu

Anmerkung

siehe Jira-Ticket

alt

neu

Anmerkung

siehe Jira-Ticket

PredefinedAnnotationRenderStrategy.CLIENT.applyToDocument(...)
PredefinedAnnotationRenderStrategy.MASKING.applyToDocument(...) 

ebenso, aber anderer Default

Default der PredefinedRenderStrategy wurde von SERVER_SIDE_MASKING auf CLIENT umgestellt.
Dies hat zur Folge, dass PredefinedAnnotationRenderStrategy.SERVER_SIDE_MASKING.applyToDocument(Document) nun ggf. explizit im DocumentDataProvider gesetzt werden muss.

JWT-1144

 


Weitere API-Änderungen und Umbenennungen von Klassen und Packages

alt

neu

Anmerkung

siehe Jira-Ticket

alt

neu

Anmerkung

siehe Jira-Ticket

com.levigo.jadice.web.client.EffectContainer

com.levigo.jadice.web.client.WidgetContainer

 

JWT-350

com.levigo.jadice.web.client.util.EffectContainers

com.levigo.jadice.web.client.util.WidgetContainers

Die Methode findEffectContainer() wurde in findWidgetContainer() umbenannt

JWT-350

-

com.levigo.jadice.web.client.event.JadiceEventBus

Singleton zum Transport von Jadice Events

JWT-942

com.levigo.jadice.web.client.events.DocumentChangedEvent

com.levigo.jadice.web.client.event.DocumentChangedEvent

 

JWT-942

com.levigo.jadice.web.client.events.PageLayoutChangedEvent

com.levigo.jadice.web.client.event.PageLayoutChangedEvent

 

JWT-942

com.levigo.jadice.web.client.events.PageSelectionChangedEvent

com.levigo.jadice.web.client.event.PageSelectionChangedEvent

 

JWT-942

com.levigo.jadice.web.client.events.ToolsChangedEvent

com.levigo.jadice.web.client.event.ToolChangedEvent

Abfrage der Zustandsänderung ermöglicht über Enum. Möglich Werte: ACTIVATED, VALUE_CHANGED, EXCLUSIVE, ENABLED, REGISTERED

JWT-942

com.levigo.jadice.web.client.events.VisibleRectChangedEvent

com.levigo.jadice.web.client.event.VisibleRectChangedEvent

 

JWT-942

com.levigo.jadice.web.client.settings.RenderSettingsEvent

 

Erbt nun auch von com.levigo.jadice.web.client.event.JadiceEvent

JWT-942

com.levigo.jadice.web.client.settings.RenderSettingsListener

com.levigo.jadice.web.client.settings.RenderSettingsEvent.Handler

Erbt nun von JadiceEventHandler

JWT-942

com.levigo.jadice.web.client.events.RenderSettingsEvent

-> com.levigo.jadice.web.client.settings.RenderSettingsEvent

Wurde mit com.levigo.jadice.web.client.settings.RenderSettingsEvent zusammengeführt

JWT-942

com.levigo.jadice.web.client.event.MouseDragEvent

com.levigo.jadice.web.client.event.input.MouseDragEvent

In separates "input"-Package umgezogen, da es sich um ein Input-Event handelt und nicht um ein JadiceEvent (diese liegen gesammelt im Package "com.levigo.jadice.web.client.event").

JWT-942

com.levigo.jadice.web.client.settings.InventoryRenderSettingsEvent

 

Erbt nun auch von com.levigo.jadice.web.client.event.JadiceEvent

JWT-942

com.levigo.jadice.web.client.settings.InventoryRenderSettingsListener

com.levigo.jadice.web.client.settings.InventoryRenderSettingsEvent.Handler

Erbt nun von JadiceEventHandler

JWT-942

com.jadice.web.util.eventbus.client.WebtoolkitEventBus

new com.levigo.jadice.web.client.reader.Reader(WebtoolkitServerConnection, WebtoolkitEventBus)
+ new PageSnapIn(...), new ZoomSnapIn(...)

com.jadice.web.util.eventbus.client.NotificationEventBus

new com.levigo.jadice.web.client.reader.Reader(WebtoolkitServerConnection)
+ analog bei den anderen Konstruktoren

Benennung spiegelt den Zweck (Zuständigkeit für Notifications) nun besser wieder.

Es entfällt die Möglichkeit, in diversen Konstruktoren einen eigenen WebtoolkitEventBus mitzugeben. Dies wird nun zentral über NotificationEventBus.Instance.set(...) ermöglicht.

JWT-942

com.jadice.web.util.eventbus.*

com.jadice.web.util.notifications.*

Das Modul webtoolkit-util-eventbus wurde in webtoolkit-util-notifications umbenannt.

JWT-1316

com.levigo.jadice.web.demo.common.client.events.ui.DemoPopup

com.levigo.jadice.web.demo.common.client.events.ui.NotificationPopup

"

JWT-942

com.levigo.jadice.web.client.ui.internal.menu.BasicMenuBuilder

com.levigo.jadice.web.client.ui.menu.BasicMenuBuilder

BasicMenuBuilder ist nach Wegfall der Declarative UI nun public API.

JWT-673

com.levigo.jadice.web.client.ThumbnailViewBuilder#setTargetPageView()

com.levigo.jadice.web.client.ThumbnailViewBuilder#ThumbnailViewBuilder(PageView)

Methode ist entfallen. Stattdessen wird nun die targetPageview als Parameter im Konstruktor erwartet.

JWT-942

com.levigo.jadice.web.client.PageView

  • getRenderedPageBounds(Page page)

  • getCurrentRenderedPageBounds()

com.levigo.jadice.web.client.PageView

  • getLaidOutPageBounds(Page page)

  • getCurrentLaidOutPageBounds()

 

interne Klasse RenderedPage wurde in LaidOutPage umbenannt.

JWT-886 

com.levigo.jadice.web.client.ui.DefaultButtons.*Button()

com.levigo.jadice.web.client.ui.DefaultButtons.*Button(KeyStroke)

Accelerator Keys können direkt im Methodenaufruf mit übergeben werden. Ggf. einfach null übergeben.

JWT-673

com.levigo.jadice.web.client.util.internal.keys.KeyBinding
com.levigo.jadice.web.client.util.internal.keys.Key
com.levigo.jadice.web.client.util.internal.keys.Keys 

com.levigo.jadice.web.client.util.action.KeyStroke
com.levigo.jadice.web.client.util.action.Key
com.levigo.jadice.web.client.util.action.Keys

Die Klasse wurde umbenannt und ist nun Teil der öffentlichen API .

JWT-673

com.levigo.jadice.web.client.tools.PanForceTool

com.levigo.jadice.web.client.tools.PanForceMouseTool

Die Klasse PanForceTool ist immer noch vorhanden, bildet nun jedoch eine Superklasse für das PanForceMouseTool und das PanForceTouchTool.
Künftig sind also explizit die Unterklassen über den ToolManager einzuhängen. 

JWT-475

com.levigo.jadice.web.client.ui.defaultstyle.Splash.ui.xml

-

Die Datei wurde entfernt, da der Splash Screen nun als ImageRessource angezogen wird.

JWT-1339

com.levigo.jadice.web.client.ui.defaultstyle.SplashBinder

-

"

JWT-1339

com.jadice.web.util.client.command.*
com.jadice.web.util.client.context.* 
com.jadice.web.util.client.action.* 
com.jadice.web.util.client.menu.*  

com.jadice.web.util.client.action.GwtAction

com.levigo.jadice.web.client.util.command.*
com.levigo.jadice.web.client.util.context.*
com.levigo.jadice.web.client.util.action.* 
com.levigo.jadice.web.client.ui.menu.*  

com.levigo.jadice.web.client.util.action.JwtAction