Eclipse RAP custom widget – first steps
Sunday, November 30th, 2008
In einem aktuellen Kundenprojekt wird die Weboberfläche mittels Eclipse RAP realisiert. Eine Anforderung des Kunden aus dem Bereich EVU ist die Darstellung von verschiedenen Kartendaten in der Anwendung. Eine Anforderung die kaum eine verfügbare GUI-Bibliothek von Hause aus bereitstellt. Ein Grund also, sich mit RAP custom widgets zu beschäftigen.
OpenLayers als Basis
Schaut man sich im Internet um, wird man recht schnell feststellen, dass die Leute des OpenLayers Projekts mit ihrer JavaScript Bibliothek eine tolle Arbeit abliefern. Diese Bibliothek lässt kaum Wünsche offen. Der derzeit einzige Wunsch: eine Java API oder – noch besser – ein RCP/RAP widget auf Basis dieser Bibliothek.
Wer noch ein bisschen intensiver recherchiert, wird gwt-openlayers finden – eine Integration von OpenLayers in das Google Web Toolkit.
Erste Schritte
Die Integration von externen JavaScript Bibliotheken gestaltet sich bei RAP etwas aufwendiger, da hier über einen speziellen Lifecycle Adapter der Austausch zwischen der Java und der JavaScript-Welt implementiert werden muss. Dieser Adapter stellt sicher, dass auf dem Server geänderte Daten an den Client geliefert werden und umgekehrt. Zum Beispiel muss die Server-Anwendung darüber informiert werden, wenn im Client die Center-Koordinate, durch Verschieben des Kartenausschnitts, geändert wird. Hinzu kommt, dass RAP Widgets auf der Client-Seite durch das AJAX Framework qooxdoo umgesetzt werden, man also beim Entwickeln des Adapters dieses Framework benutzen muss. Zum Glück nimmt qooxdoo dem JavaScript-Entwickler aber bereits eine Menge Standardaufgaben ab. Hat man dieses Framework erstmal verstanden kommt, man recht schnell zu ersten sichtbaren Ergebnissen.
Erste Erfolge
Bei der Definition des Java API liegt es nahe, sich an die JavaScript Vorgaben zu halten. Das klappt zum Großteil auch und so ist die Programmierschnittstelle in Java nahezu identisch zu dem JavaScript Pendant.
public int createUI() { ... MapWidget mapWidget = new MapWidget( shell, SWT.NONE ); Map map = mapWidget.getMap(); map.setCode( Lang.de ); map.addControl( new LayerSwitcher() ); Yahoo yahoo = new Yahoo( "my YahooLayer" ); yahoo.setIsBaseLayer( true ); map.addLayer( yahoo ); map.setCenter( new LonLat( 12.0, 51.0 ), 4 ); ... }
Zum jetzigen Zeitpunkt stellt das Java API ca. 90% der von der Anwendung geforderten Funktionen bereit. Das OpenLayers Framework bietet aber noch viel mehr Funktionen, die im Folgenden Schritt für Schritt in Java abzubilden sind.