SlideShare ist ein Scribd-Unternehmen logo
Plus CD!                  Umfrage Eclipse in Lehre und Forschung                                        >> 31


                                                                               6.10




                   www.eclipse-magazin.de

                                                                                                      10
                                                                                                 Hef t!




                                     Eclipse &
                                                                                 Alle Infos im

          Boris Bokowski:
          Adopting e4



                                             Academia
                                                  Von der Wissenschaft

Eclipse SDK 4.0                  >> 18
                                                              in die Wirtschaft
Von den Grundlagen bis zur

                                                      erdruck
lauffähigen e4-Anwendung

BIRT Chart API                 >> 42
                                                 Sond
Business Intelligence à la Eclipse

Von EMF auf CDO                          >> 88

Zentrale Speicherung von Editormodellen

                              RCP-Hilfe und Enterprise-Wikis                     >> 8
                              Wiki-Texte mit RCP-Anwendungen verheiraten

                              Goodbye XML: Befreiungsakt mit Xtext                                        >> 67
                              Warum man in den meisten Fällen auf XML verzichten kann
Sonderdruck




            Erweiterung des Einsatzgebiets



            RCP-Hilfesystem und
            Enterprise-Wikis
        Am Anfang unseres Projekts stand der Wunsch unserer Fachabteilung, ihre im Wiki ge-
        sammelten Informationen und Hilfetexte direkt mit unserer RCP-Anwendung zu verheira-
        ten. Wir haben reflexartig entgegnet: „Kein Problem, mit Eclipse geht so etwas leicht!“.
        Wie sich im Projektverlauf herausstellte, ist dieses Unterfangen doch nicht ganz so trivial,
        wie es anfangs schien. Viele Kleinigkeiten standen dem eigentlich klaren Ziel im Weg, und
        die vorhandene Eclipse-Dokumentation schwieg sich zu diesem wichtigen Thema doch be-
        harrlich aus. Wir möchten in diesem Artikel unseren Weg zu einer gar nicht mal so komple-
        xen Lösung skizzieren und hoffen, die erwähnte Dokumentationslücke etwas zu schließen.




        von Holger Grosse-Plankermann und Jörg Meister             wand verbunden. Es ist somit nicht unbedingt ratsam,
                                                                   für Änderungen in Hilfetexten einen solchen Prozess
        Der Artikel wird sich mit der Erweiterung und An-          durchzuführen. Ein Abtrennen der Hilfetexte vom Pro-
        passung des Eclipse-Hilfesystems im Hinblick auf eine      gramm ist somit notwendig. Anforderung war, dass
        vorhandene Infrastruktur zur Dokumentation in Form         Hilfetexte zu bestimmten Bereichen der Anwendung auf
        eines Wikis befassen. Entstanden ist der Sourcecode in     Knopfdruck verfügbar sein sollen. Die kontextsensitive
        einem Projekt im Enterprise-Umfeld. Ein Deployment-        Hilfe von Eclipse bietet hierfür bereits sehr gute Mög-
        Prozess ist im Enterprise-Umfeld oft mit hohem Auf-        lichkeiten. Da die Dokumentation im Wiki entwickelt




2   eclipse magazin   6.10                  © Software & Support Verlag GmbH                            www.eclipse-magazin.de
Sonderdruck

wird, entstand der Wunsch, auf diese
aus der Anwendung heraus zugreifen zu
können. Im Idealfall hätte man somit eine
Trennung von Hilfetexten und RCP-An-
wendung, sodass die Texte unabhängig
von der Anwendung pflegbar sind. Dies
ist out-of-the-Box nicht direkt möglich.
Zunächst haben wir versucht, Eclipse-
Bordmittel und die mächtige Konfigura-
tion des Hilfesystems zu verwenden, um
uns diesen Anforderungen zu nähern. Das
wird in den Punkten 1 und 2 beschrieben.
Die beschriebenen Wege sind durchaus
gangbar, haben uns allerdings nicht voll-
ständig zufrieden gestellt. Schlussendlich
haben wir einen programmatischen An- Abb. 1: Das Standardverhalten des Eclipse Help UI am Beispiel des Mail-Templates
satz gewählt, wie er in Punkt 3 skizziert
ist. Dieser Artikel ist eher Erfahrungsbericht als Tutorial. <contexts>
Wir gehen davon aus, dass Sie dem hier vorkommenden            <context id="form_top" title="Eclipse">
Sourcecode leicht folgen können, wenn Sie sich schon ein         <description>Dies ist ein Link zu Eclipse in Wikipedia</description>
wenig mit der RCP-Entwicklung beschäftigt haben und              <topic href="http://de.wikipedia.org/wiki/Eclipse_%28IDE%29"
auch mit dem Eclipse-Hilfesystem in Berührung gekom-                                                                      label="Eclipse"/>
men sind. Als gute Einführung in das Thema sei unter           </context>
anderem auf [1] verwiesen.                                   </contexts>

1. Eingebaute Hilfe
Als erster Weg wurde die Standardhilfe verwendet, wie                   Die Kontexte werden anschließend mittels der plugin.
sie in diversen Artikeln und Büchern [1-5] beschrieben                  xml verdrahtet:
wird. Diese umfasst die aus der Eclipse IDE bekannte
Help-Sidebar. Die Help-Sidebar kann eine Zusammen-                       <plugin>
fassung des Hilfethemas und Links auf das Wiki ent-                        <extension
halten. Das bedeutet, dass ein Nutzer bei Druck auf                            point="org.eclipse.help.contexts">
F1 auf einem Control zunächst diese Sidebar sieht und                         <contexts
dann den Link auf das Wiki auswählen kann. Als Basis                             file="contexts.xml"
benutzten wir für diesen Artikel eine leicht angepasste                          plugin="beispielApplikation.app">
Version des RCP-Mail-Templates. Dieses ist über den                          </contexts>
Wizard für ein neues Plugin-Project zu erstellen. Das                        <contexts
Einbinden des Eclipse-Hilfesystems ist in der Literatur                          file="contexts_missing.xml"
bereits ausführlich behandelt worden. Daher beschrei-                            plugin="org.eclipse.ui">
                                                                             </contexts>
ben wir an dieser Stelle den Weg nur schematisch (Kas-
                                                                          </extension>
ten: „Die Beispielprojekte“).
                                                                         </plugin>
   Das RCP-Mail-Template wurde so abgeändert, dass
es ein Help-Plug-in enthält. Als Basis kann man hier
ebenfalls den Wizard für ein neues Plugin-Project ver-                  Wie man hier sehen kann, gehen wir in unserem Beispiel
wenden, indem man das Template Plugin With Sam-                         noch ein kleines Stückchen weiter und richten einen Fall-
ple HelpContent verwendet. Wir haben allerdings alle                    back-Kontext ein, den so genannten Context_missing.
für unseren Zweck überflüssigen TOCs entfernt. Ausge-                   Dieser wird benutzt, wenn Eclipse bei Druck auf F1 kei-
hend von diesem RCP-Mail-Template haben wir einige                      nen passenden Kontext findet. Er ist somit prädestiniert
Anpassungen vorgenommen. Für unseren Kunden war                         dafür, auf die Hilfestartseite zu verweisen. Selektiert
es ausreichend, dass es pro Bildschirmseite nur einen                   man nun das Textfeld mit der E-Mail und drückt auf
Hilfekontext gibt. Hier bietet es sich an, den Kontext                  F1, öffnet sich die Sidebar mit dem Link auf Wikipedia
an das oberste Composite (Top-Level-Composite) der                      (Abb. 1). Fokussiert man den linken Navigationsbereich
Form zu binden. In unserem Beispiel wurde in View.java                  und drückt F1, greift der Context_missing.
die Zeile PlatformUI.getWorkbench().getHelpSystem().                       Die Standardhilfe bietet darüber hinaus weitere Mög-
setHelp(top,"beispielApplikation.app.form_top") hin-                    lichkeiten, zum Beispiel die eingebaute Suche und die
zugefügt und somit HelpSystem und Composite verbun-                     Indizierung, die allerdings in unserem Projekt nicht er-
den. Nun wurden noch in der contexts.xml Kontexte                       wünscht waren. Zum einen sind sie schwer anpassbar,
angelegt:                                                               zum anderen sind viele Anwender ohne technischen




www.eclipse-magazin.de                                   © Software & Support Verlag GmbH                                 eclipse magazin     6.10   3
Sonderdruck

                                                                                                        se-Bereitstellungsmechanismus p2
                                                                                                        erledigt werden. Ein Update zu
                                                                                                        Programmstart ist sicherlich ein
                                                                                                        gangbarer Weg. Leider konnte
                                                                                                        p2 allerdings in unserem Projekt
                                                                                                        nicht eingesetzt werden, da eine
                                                                                                        bereits im Unternehmen vorhan-
                                                                                                        dene Softwareverteilung benutzt
                                                                                                        werden musste. Von diesem Um-
                                                                                                        stand können sicherlich viele RCP-
                                                                                                        Entwickler ein Lied singen. Da wir
                                                                                                        p2 nicht einsetzen konnten, wäre
                                                                                                        bei Änderungen der Hilfetexte
                                                                                                        ein komplettes Deployment er-
                                                                                                        forderlich gewesen. Dies war der
                                                                                                        Zeitpunkt, an dem wir uns nach
                                                                                                        Alternativen umschauen mussten.

                                                                                                        2. Infocenter
                                                                                                         Die zweite Idee war das Verwen-
                                                                                                         den des Infocenters (Abb. 2). Das
                                                                                                         Infocenter ist eine abgespeckte
                                                                                                         Eclipse-Version, die mittels des
Abb. 2: Infocenter der Eclipse-Hilfe auf www.eclipse.org                                                 eingebauten Jetty als Webserver
                                                                                                         fungiert [6]. Somit kann der Nut-
              Background von diesen Möglichkeiten oft schlichtweg                 zer mit einem Webbrowser über Intra- oder Internet
              überfordert. Dass der Nutzer nur über den Umweg des                 auf die Hilfeseiten zugreifen. Allerdings bietet das Info-
              Hilfefensters zur Information im Wiki gelangt, wurde                center nicht alle Features des Built-in-Help-Systems. Es
              zunächst toleriert, richtig zufrieden war man mit der               fehlt die Unterstützung für Context Help, Active Help
              Lösung jedoch nicht. Eine Aktualisierung der Doku-                  und Command Support [7]. Vorteil des Infocenters ist
              mentation ist hier ebenfalls schwieriger als nötig. Die be-         das separate Deployment des Hilfesystems auf einem
              troffenen Kontexte müssen separat von der eigentlichen              Application-Server. Die Anwendung selber ist somit un-
              Dokumentation angepasst werden. Änderungen müssen                   abhängig von Hilfe-Updates. Eine Änderung der Hilfe
              dann auf irgendeine Art auf alle installierten Clients ge-          kann also separat ausgeliefert werden und ist für alle
              langen. Dies könnte über Featureupdates und den Eclip-              Nutzer sofort verfügbar.
                                                                                    Das Infocenter kam den Anforderungen im Unter-
                                                                                  nehmen schon recht nahe, da bei Änderungen an den
                                                                                  Hilfetexten keine Neuauslieferung der Clientsoftware
    Die Beispielprojekte                                                          erforderlich ist. Der Nachteil, dass die Kontexthilfe vom
    Um dem Text leichter folgen zu können, haben wir zwei Beispielprojekte        Infocenter nicht out-of-the-Box unterstützt wird, war
    erstellt. Diese befinden sich als ZIP-Datei unter [10] und auf der beilie-    für die Nutzer allerdings so gravierend, dass wir diese
    genden CD. Die ZIP-Datei enthält zwei Verzeichnisse:                          Lösung verwerfen mussten.
    ■ Abschnitt1 enthält die Sourcen von Abschnitt 1,
    ■ Abschnitt3 enthält die Sourcen von Abschnitt 3.
                                                                                  3. Programmatische Anpassung des Hilfesystems
                                                                                  Nachdem uns die beiden Standardansätze nicht zufrie-
    Die Verzeichnisse enthalten jeweils zwei Projekte:                            den stellten, fingen wir an, einen Weg zu suchen, das Ver-
    ■ net.iksgmbh.beispielApplikation.app                                         halten des Hilfesystems stärker beeinflussen zu können.
    ■ net.iksgmbh.beispielApplikation.help                                        Die Internetrecherche war leider nicht sehr erfolgreich.
                                                                                  So blieb (wie so häufig) nur die Möglichkeit, den Sour-
    Das *help-Plug-in enthält die Hilfetexte und das *app-Plug-in die eigent-     cecode zu analysieren und schrittweise zu durchlaufen.
    liche Programmlogik. In einem echten Projekt würde man diese Auftei-          Erneut hilfreich beim Verständnis der Funktionsweise
    lung sicher noch feingranularer vornehmen. Die Projekte können Sie wie        der Eclipse-Hilfe war hier die Möglichkeit des Tracings
    gewohnt über File|import… laden. Beim Erstellen der Run Configuration         in der Run-Configuration, um herauszufinden, welche
    ist darauf zu achten, dass auf dem Reiter main unter run a product die        die am Hilfesystem beteiligten Klassen und Plug-ins sind
    Product-ID net.iksgmbh.beispielApplikation.app.product ausgewählt ist         (Abb. 3). Als Einstieg boten sich die Plug-ins org.eclipse.
    und auf dem Reiter plug-ins die beiden Plug-ins angehakt sind. Nach           help und org.eclipse.help.ui an.
    einem Klick auf add required plugins ist die Konfiguration abgeschlossen.       Wir stießen so relativ schnell auf die Klasse
                                                                                  WorkbenchHelpSystem. Dort findet sich mit dem




4         eclipse magazin   6.10                           © Software & Support Verlag GmbH                               www.eclipse-magazin.de
Sonderdruck

WorkbenchHelpListener und der Methode
helpRequested(HelpEvent event) der Ein-
stiegspunkt in das Eclipse-Hilfesystem. Über
die Methoden displayHelp und getHelpUI
kamen wir dem Mysterium Eclipse-Hilfe
mehr und mehr auf die Schliche. Die Stan-
dard-UI-Funktionalität der Hilfe verbirgt
sich in der Klasse DefaultHelpUI. Das Ja-
vaDoc der Basisklasse AbstractHelpUI er-
klärte die Funktionsweise der Hilfe dann
schließlich. Der UI-Teil der Hilfe ist über den
Extension-Point org.eclipse.ui.helpSupport
austauschbar. Wichtig ist, dass es nur eine
Help-UI-Implementierung im System geben
darf. Die Standardimplementierung ist also
irgendwie zu entfernen.
   Wie ist nun weiter vorzugehen? Zur Er-
innerung: Die Aufgabe besteht darin, bei
Druck auf F1 auf einem fokussierten Control Abb. 3: An den Run Configurations hat man die Möglichkeit, Tracings einzurichten
einen Wiki-URL in einem Webbrowser auf-
zurufen. Wie wir gesehen haben, ist die Verwaltung des       public void displayHelp() {
Hilfesystems (WorkbenchHelpSystem) getrennt von der            displayHelpResource("http://de.wikipedia.org");
Präsentation (DefaultHelpUI). Das spielt uns an dieser       }
Stelle in die Karten: Die Funktionalität der Kontexte und
das Finden von F1 sind schließlich durchaus erwünscht Die Methode displayContext wird eigentlich dafür ver-
(Kasten: „Das F1-Problem“).                                wendet, den übergebenen Hilfekontext an der ebenfalls
   Als Ausgangspunkt für unsere Klasse BrowserHelpUI übermittelten Position anzuzeigen. Die Position interes-
kopierten wir die Klasse DefaultHelpUI aus dem Plug-in siert uns an dieser Stelle nicht, da die Hilfe außerhalb
org.eclipse.help.ui und entfernten allen für uns unnöti- des Anwendungsfensters der Applikation dargestellt
gen Ballast. Es mussten noch die Plug-ins org.eclipse.help wird. Interessant ist hier der Zugriff auf die Konfigura-
und org.eclipse.help.base als Dependency hinzugefügt tion der Hilfekontexte. An dieser Stelle zur Erinnerung
werden. Übrig geblieben in BrowserHelpUI ist die inne- ein Ausschnitt aus einer contexts.xml-Datei:
re Klasse ExternalWorkbenchBrowser, die einen kleinen
Wrapper um die Browserfunktionalität darstellt, sowie       <contexts>
einige Methoden, die wir entsprechend unseren Wün-            <context id="form_top" title="Eclipse">
schen angepasst haben und im Folgenden beschreiben.             <description>Dies ist ein Link zu Eclipse in Wikipedia</description>
   Die Methode displayHelp wird für das statische Auf-          <topic href="http://de.wikipedia.org/wiki/Eclipse_%28IDE%29"
rufen des Hilfesystems verwendet. Dieses ist in unserem                                                                  label="Eclipse"/>
Use Case ja durchaus erwünscht. An dieser Stelle sollte      </context>
möglichst die Startseite des Wikis aufgerufen werden.        </contexts>



   Hilfearten in Eclipse RCP
   Hier sind die unterschiedlichen Wege der Aktivierung der Eclipse-Hilfe zusammengefasst, die einem Eclipse-Entwickler zur Verfügung stehen,
   wenn er die Hilfe wie skizziert mit der Anwendung verbindet.

    Begriff                              Erklärung
    Help                                 Hilfe, die beim Betätigen der Hilfetaste oder eines Menüpunkts erscheint. Üblicherweise öffnet sich
                                         dann die Hilfeübersicht in einem Fenster der RCP-Anwendung.
    Context/Kontext                      Umgebung, in der ein Hilfebereich gültig ist. Oft ein bestimmtes Control, das den Focus besitzt.
    Context Help                         Hilfe, die bei Druck auf die Hilfetaste (unter Windows: F1) den Kontext berücksichtigt.
    Dynamic Context Help                 Context Help, deren Kontexte dynamisch aufgebaut werden. So können beispielsweise einzelnen
                                         Elementen einer Combobox spezielle Hilfethemen zugeordnet werden. Nicht Thema dieses Artikels.
    Active Help/Command Support          Möglichkeit, Code aus dem Inhalt der Hilfe aufzurufen.

   Tabelle 1: Die Möglichkeiten der Hilfe in Eclipse RCP




www.eclipse-magazin.de                                     © Software & Support Verlag GmbH                             eclipse magazin   6.10   5
Sonderdruck

                    Für das Hilfesystem ist hier zunächst nur die ID wichtig,                             public void displayContext(IContext context, int x, int y) {
                    auf die später im Code referenziert wird (siehe hierzu                                  IHelpResource[] relatedTopics = context.getRelatedTopics();
                    die Hilfeverknüpfung in View.java im ersten Abschnitt).                                 for (int i = 0; i < relatedTopics.length; i++) {
                    Der title und die description sowie das label werden nur                                  String href = relatedTopics[i].getHref();
                    für die Darstellung in der Hilfe-Sidebar verwendet. Wir                                   displayHelpResource(href);
                    interessieren uns hier nur für den Knoten <topic href                                   }
                    =""/>. Hier kann zu jedem Topic ein URL hinterlegt                                    }
                    werden. An dieser Stelle verknüpfen wir also den Kon-
                    text mit dem im Browser anzuzeigenden URL. Dabei                                   Die Methode displayHelpResource ist dann unspek-
                    muss man etwas aufpassen: Wie man deutlich im Code                                 takulär: „Reiche URL an den Browser-Wrapper wei-
                    sieht, ist es einfach möglich, mehrere relatedTopics für                           ter“:
                    einen Kontext zu hinterlegen. Unsere momentane Im-
                    plementierung sieht vor, einfach alle zu öffnen. Wir                                  public void displayHelpResource(String href) {
                    empfehlen allerdings, es bei einem relatedTopic in der                                 try {
                    Konfiguration zu belassen und die Wikiseite mit ent-                                     externalWorkbenchBrowser.displayURL(href);
                    sprechenden Links auszustatten:                                                        } catch (Exception e) {




Listing 1                                                                                          }

    public void displayContext(IContext context, int x, int y) {                                   if (!found) {
                                                                                                     // Keine Hilfeseite gefunden, dann rekursiv die übergeordneten
        try {                                                                                        // Controls durchlaufen
          IWorkbenchWindow window =                                                                  Composite parentControl = control.getParent();
                                PlatformUI.getWorkbench().getActiveWorkbenchWindow();                if (parentControl != null) {
          Shell activeShell = PlatformUI.getWorkbench().getDisplay().getActiveShell();                 tryAndShowHelp(parentControl);
          // Haben wir gerade eine Shell?                                                            } else {
          if (window != null && activeShell != null &&                                                 //letzter Versuch mit dem Context_Missing
                                                    activeShell.equals(window.getShell())) {           IContext context = HelpSystem.getContext("org.eclipse.ui.missing");
            if (window.getActivePage() != null) {                                                      if (context != null) {
              Control control = window.getShell().getDisplay().getFocusControl();                        IHelpResource[] relatedTopics = context.getRelatedTopics();
              tryAndShowHelp(control);                                                                   for (int i = 0; i < relatedTopics.length; i++) {
            }                                                                                              String href = relatedTopics[i].getHref();
          }                                                                                                displayHelpResource(href);
        } catch (Exception e) {                                                                          }
          e.printStackTrace();                                                                         }
        }                                                                                            }
    }                                                                                              }
                                                                                               }
    private void tryAndShowHelp(Control control) throws Exception, IOException {
     // Abfrage des Help-Hooks                                                                 private boolean checkUrl(String href) throws HttpException, IOException {
     String data = (String) control.getData("org.eclipse.ui.help");                             HttpClient client = new HttpClient();
     boolean found = false;
     if (data != null && !data.isEmpty()) {                                                        // Eine HTTP-Get-Methode erzeugen
       // HelpSystem nach dem Context befragen                                                     GetMethod method = new GetMethod(href);
       IContext context = HelpSystem.getContext(data);                                             method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
       if (context != null) {                                                                         new DefaultHttpMethodRetryHandler(3, false));

             IHelpResource[] relatedTopics = context.getRelatedTopics();                           try {
             for (int i = 0; i < relatedTopics.length; i++) {                                        // GET ausführen
               String href = relatedTopics[i].getHref();                                             int statusCode = client.executeMethod(method);
               // Steckt hinter dem URL auch eine HTML-Seite?                                        // Wurde die Seite gefunden, wird TRUE zurückgegeben
               if (checkUrl(href)) {                                                                 return statusCode == HttpStatus.SC_OK;
                 // Anzeige der Seite                                                              } finally {
                 displayHelpResource(href);                                                          // Freigeben der Verbindung.
                 found = true;                                                                       method.releaseConnection();
                 break;                                                                            }
               }                                                                               }
             }
         }




6              eclipse magazin      6.10                               © Software & Support Verlag GmbH                                                       www.eclipse-magazin.de
Sonderdruck
          throw new RuntimeException("Fehler beim Öffnen des Browsers", e);          <topic href="http://www.eclipse.org#WichtigesThema" label="Wichtiges
      }                                                                                                                                         Thema "/>
  }
                                                                                 Auf diese Weise wird dem Benutzer im Browser sofort
Das DefaultHelpUI bzw. dessen Oberklasse Abstract­                               die richtige Stelle im Hilfetext angezeigt. Allerdings führt
HelpUI bietet noch eine weitere Funktionalität an, die für                       dies unter Umständen zu sehr langen Hilfeseiten.
uns keinen Nutzen hat. Eine Suche ist über den Browser                             Bei der zweiten Variante kann jedes Control einen
und im Wiki selber möglich, also ist das Implementieren                          Kontext mit eigenem URL bekommen. Jedoch über-
der Methoden rund um die Suche überflüssig (search und                           prüft die Klasse BrowserHelpUI, ob die Seite existiert.
displaySearch). Dynamic Context Help [8] ist von uns                             Dazu änderten wir die displayContext-Methode (Listing
noch nicht umgesetzt worden. Es ist wahrscheinlich auch                          1) in der Art ab, dass wir zuerst überprüfen, ob hin-
nicht sinnvoll, Dynamic Context Help mit dem Browser                             ter dem angegebenen URL im Kontext überhaupt eine
zu verbinden. Das Öffnen eines Browserfensters bei je-                           HTML-Seite vorhanden ist. Dazu wird per HTTPClient
dem Feuern eines SelectionChanged-Events einer Drop-                             von Apache-Commons [9] eine Verbindung aufgebaut
Down-Box ist wahrscheinlich nicht praktikabel. Somit                             und ein GET auf die Hilfeseite aufgerufen. Anhand des
implementieren wir die Methode displayDynamicHelp                                Rückgabewerts der GET-Methode (HTTP 200 OK)
nicht. Schlussendlich finden wir in der Klasse Default­                          kann festgestellt werden, ob der URL valide war. Ist die
HelpUI noch eine ganze Reihe Methoden vor, die sich mit                          gewünschte Wikiseite nicht vorhanden, wird das Cont-
der Darstellung der Hilfe in der RCP-Anwendung befas-                            rol gesucht, in das das Ausgangs-Control (Parent) ein-
sen. Diese benötigen wir aufgrund unserer Anforderun-                            gebettet ist. Von diesem Control wird beim HelpSystem
gen nicht. Alles in allem wird unsere resultierende Klasse                       der Kontext erfragt und wiederum der Help-URL über-
BrowserHelpUI schön schlank. Unser neues HelpUI muss                             prüft. Hat dies keinen Erfolg, wird es weiter rekursiv
noch dem System bekannt gemacht werden. Dazu wird                                aufgerufen. Irgendwann landet man bei einem Control,
der Extension-Point org.eclipse.ui.helpSupport bedient:                          das eine existierende Seite repräsentiert. Wird kein ent-
                                                                                 sprechendes Control gefunden, wird vom Help-System
 <extension                                                                      der URL des Context_Missing geholt und aufgerufen.
       point="org.eclipse.ui.helpSupport">                                         Geschafft! Wir haben somit erreicht, dass die Hilfein-
     <config                                                                     halte nicht mehr in der Anwendung selber, sondern im
         class="net.iksgmbh.beispielApplikation.app.BrowserHelpUI">              Browser dargestellt werden. Wie erwähnt, gibt es ein
     </config>                                                                   paar kleinere Einschränkungen, aber diese können vom
   </extension>                                                                  verwendeten Wiki aufgefangen werden (Suchfunktion,
                                                                                 Indizierungen). Die einfache Integration des Hilfesys-
Das Plug-in org.eclipse.help.ui muss dann als Abhän-                             tems in die Anwendung (Stichwort F1) und das Verwen-
gigkeit entfernt werden, da es den Extension Point org.                          den von Kontexten bleiben aber bestehen. Somit stellt
eclipse.ui.helpSupport blockiert. Wie bereits erwähnt,                           dieser Ansatz für uns die zurzeit optimale Lösung dar.
darf es davon nur eine Implementierung in der Appli-
kation geben. Die Abhängigkeiten findet man im Mani-                             4. Fazit
fest des App-Plug-ins. Auch aus der Run-Config ist sie                           Wie man gesehen hat, war es mit relativ wenigen Hand-
zu entfernen, sofern vorhanden. Unser gestelltes Ziel ist                        griffen möglich, das Eclipse-Hilfesystem unseren An-
somit erreicht: Das Hilfesystem ist nun vollständig vom
Deployment-Zyklus unserer Applikation getrennt, und
wir ermöglichen, wie in Teil 1 erwähnt, den Zugriff pro
                                                                                   Das F1-Problem
Top-Level-Composite auf eine Hilfeseite im Wiki.
   Doch befriedigend ist die Lösung noch nicht. Ist der                            Noch nicht allgemein bekannt ist die Tatsache, dass die Hil-
Hilfetext umfangreich, wird es für den Benutzer unüber-                            fetaste F1 unter Windows fest mit der Kontexthilfe verdrahtet
sichtlich und er muss den für ihn interessanten Teil erst                          ist. Da wir SWT verwenden und SWT direkt auf OS-Ressourcen
suchen. Abhilfe würde die Vorgehensweise schaffen, für                             zugreift, gibt es leider keine Chance, dies auf elegante Art und
jedes Control einen eigenen Kontext zu erstellen. Wir                              Weise zu ändern. In der Eclipse-Implementierung wird dem
fanden es allerdings wenig praktikabel, für jeden Kon-                             Control, dem wir unseren Kontext zuweisen, ein Workbench-
text auch eine eigene Seite im Wiki zur Verfügung zu                               HelpListener hinzugefügt. Das Control ruft dann bei Bedarf die
stellen. Also suchten wir einen Weg, wie dies umgangen                             Methode helpRequested auf. In den RCP Sourcen ist uns keine
werden konnte. Hierbei mussten wir zwischen zwei Va-                               weitere Möglichkeit aufgefallen, dies anzupassen. Schluss-
rianten wählen. Bei der ersten Möglichkeit wird im Kon-                            endlich haben wir nach dem Studium der Klasse org.eclipse.
text des Controls derselbe URL angegeben wie bei dem                               ui.internal.actions.DynamicHelpAction und der Methode ap-
Top-Level-Composites, ergänzt durch einen Anker:                                   pendAccelerator aufgegeben. Der Kommentar besagt ebendies.
                                                                                   Anders sieht es bei einem einfachen Aufruf der Hilfefunktion
   <context id="wichtiges_thema" title="Wichtiges Thema">                          ohne Kontext aus, dies lässt sich über Key Binding anpassen.
     <description>Dies ist ein Link zu Eclipse in Wikipedia</description>




www.eclipse-magazin.de                                               © Software & Support Verlag GmbH                                  eclipse magazin      6.10   7
Sonderdruck

        forderungen anzupassen. Dies hat mehrere Gründe:                                Links & Literatur
        Zum einen bringt die Standardfunktionalität schon ei-
        nen vernünftigen Satz an Möglichkeiten mit, die mit-                            [1] Imrie, Alexandra; Lörke, Achim (Teil 2 des Tutorials „RCP-Usability“):
        tels Konfiguration sehr weit angepasst werden können.                               „Hilfe naht“, in: Eclipse Magazin 3.10
        Zum anderen können durch Austausch des UI-Teils der                             [2] Eclipse Rich Client Platform: Designing, Coding, and Packaging Java
        Hilfe per Extension Point relativ einfach Veränderun-                               Applications, ISBN: 978-0321603784
        gen am Look and Feel der Hilfe vorgenommen werden.                              [3] Die Eclipse Rich Client Platform: Entwicklung von erweiterbaren
        Unsere Lösung mag einfach erscheinen, der Weg dahin                                 Anwendungen mit RCP, ISBN: 978-3939084914
        allerdings war recht steinig. Die Dokumentation über                            [4] Adding Help Support to a Rich Client Platform (RCP) Application:
        die Anpassung des Hilfesystems im Web und in Eclipse                                http://www.eclipse.org/articles/article.php?file=Article-
        ist verbesserungswürdig. Vielleicht kann dieser Artikel                             AddingHelpToRCP/index.html
        diesen Punkt etwas abmildern.                                                   [5] Eclipse-Hilfe: http://www.ralfebert.de/rcpbuch/help/

                   Holger Grosse-Plankermann, Diplom-Informatiker, ist als IT-Be-       [6] http://download.eclipse.org/eclipse/downloads/
                   rater bei der iks Gesellschaft für Informations- und Kommunikati-        drops/R-3.6-201006080911/index.php#RCPRuntime
                   onssysteme mbH tätig. Er beschäftigt sich seit vielen Jahren mit     [7] http://help.eclipse.org/helios/index.jsp?topic=/
                   verteilten JEE-Systemen, Web-2.0-Technologien sowie Rich-Client-
                   Architekturen und deren Umsetzung mit Eclipse RCP. Kontakt:              org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm
        h.grosse-plankermann@iks-gmbh.com                                               [8] Dynamic Context Help: http://help.eclipse.org/helios/
                                                                                            index.jsp?topic=/org.eclipse.platform.doc.isv/guide/
                   Jörg Meister arbeitet seit vielen Jahren als freiberuflicher Soft-       ua_help_context_dynamic.htmI
                   wareentwickler und Berater. Seine Schwerpunkte sind Rich-Client-
                   Architekturen und JEE-Systeme. Kontakt: jm@joergmeister.de           [9] http://hc.apache.org/httpclient-3.x
                                                                                        [10] Die Beispielprojekte: http://www.iks-gmbh.com/rcp




8   eclipse magazin   6.10                              © Software & Support Verlag GmbH                                                     www.eclipse-magazin.de

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (11)

Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetproTest-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
Test-Automation mit Selenium WebDriver - ein Artikel der iks im dotnetpro
 
Mehr Softwarequalität: Softwarequalität ist steuerbar
Mehr Softwarequalität: Softwarequalität ist steuerbarMehr Softwarequalität: Softwarequalität ist steuerbar
Mehr Softwarequalität: Softwarequalität ist steuerbar
 
iks auf der Jax 2010: Provisioning unter OSGi für Test und Betrieb
iks auf der Jax 2010: Provisioning unter OSGi für Test und Betrieb iks auf der Jax 2010: Provisioning unter OSGi für Test und Betrieb
iks auf der Jax 2010: Provisioning unter OSGi für Test und Betrieb
 
Mehr Softwarequalität: Team-Cleancoding
Mehr Softwarequalität: Team-CleancodingMehr Softwarequalität: Team-Cleancoding
Mehr Softwarequalität: Team-Cleancoding
 
Micro, Nano, Mono - Microservices verständlich erklärt.
Micro, Nano, Mono  - Microservices verständlich erklärt.Micro, Nano, Mono  - Microservices verständlich erklärt.
Micro, Nano, Mono - Microservices verständlich erklärt.
 
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
Softwarequalität: Definitionen, Grenzen, Wünsche - Vortrag IKS-Meeting im Jan...
 
Mehr Softwarequalität: Technische Schulden
Mehr Softwarequalität: Technische SchuldenMehr Softwarequalität: Technische Schulden
Mehr Softwarequalität: Technische Schulden
 
Mehr Softwarequalität: Qualität als Treiber
Mehr Softwarequalität: Qualität als TreiberMehr Softwarequalität: Qualität als Treiber
Mehr Softwarequalität: Qualität als Treiber
 
Agiles Arbeiten - Mythen, Trends und Best Practices
Agiles Arbeiten  - Mythen, Trends und Best PracticesAgiles Arbeiten  - Mythen, Trends und Best Practices
Agiles Arbeiten - Mythen, Trends und Best Practices
 
Ist Ihr Unternehmen reif für Microservices?
Ist Ihr Unternehmen reif für Microservices?Ist Ihr Unternehmen reif für Microservices?
Ist Ihr Unternehmen reif für Microservices?
 
Service goes green
Service goes greenService goes green
Service goes green
 

Ähnlich wie "RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010

Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiHeiko Seeberger
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009Andreas Schulte
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxHeiko Seeberger
 
xPages Erfahrungen Wünsch AG
xPages Erfahrungen Wünsch AGxPages Erfahrungen Wünsch AG
xPages Erfahrungen Wünsch AGWünsch AG
 
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...Univention GmbH
 
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJohannes Hohenbichler
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigerThomas Kratz
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcarePeter Affolter
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitStefan Witwicki
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenAndreas Schreiber
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsAndreas Schulte
 
Script hydroinformatik i
Script hydroinformatik iScript hydroinformatik i
Script hydroinformatik icuitla68
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollWolfgang Weigend
 
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...d.velop international
 

Ähnlich wie "RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010 (20)

Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
 
B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009B1 Acocon Lotus Day 08.09.2009
B1 Acocon Lotus Day 08.09.2009
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on Equinox
 
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-TestsIks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
Iks Sonderdruck Eclipse Magazin Mai 2010: Automatisierte SWTBot-Tests
 
xPages Erfahrungen Wünsch AG
xPages Erfahrungen Wünsch AGxPages Erfahrungen Wünsch AG
xPages Erfahrungen Wünsch AG
 
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...
Erfahrungen bei der Integration von„OpenCms for UCS“ auf OpenStack - Univenti...
 
Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit LiftJava Magazin 5 / 2010 - Twitter nachgebaut mit Lift
Java Magazin 5 / 2010 - Twitter nachgebaut mit Lift
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleunigermagnolia mit thymeleaf - ein agiler prozess-beschleuniger
magnolia mit thymeleaf - ein agiler prozess-beschleuniger
 
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für HealthcareArtikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
Artikel eHealthcare Kompendium: Service Orientierte Architekturen für Healthcare
 
C++ kompakt
C++ kompaktC++ kompakt
C++ kompakt
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - Hochverfügbarkeit
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 
B3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite ApplicationsB3 Lotus Expeditor Und Composite Applications
B3 Lotus Expeditor Und Composite Applications
 
Script hydroinformatik i
Script hydroinformatik iScript hydroinformatik i
Script hydroinformatik i
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
SQL Developer 4.x - Tipps für "faule" Entwickler
SQL Developer 4.x - Tipps für "faule" EntwicklerSQL Developer 4.x - Tipps für "faule" Entwickler
SQL Developer 4.x - Tipps für "faule" Entwickler
 
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...
[ecspw2013] Session Executive 01: ecspand 3.0 - Vorgangsbearbeitung für den S...
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 

Mehr von IKS Gesellschaft für Informations- und Kommunikationssysteme mbH

Mehr von IKS Gesellschaft für Informations- und Kommunikationssysteme mbH (20)

Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingtEs wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
Es wird Zeit KI zu nutzen - Wie es mit Azure KI Services und .NET MAUI gelingt
 
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
Thementag 2023 06 Dieses Mal machen wir alles richtig - 9 Hacks für wandelbar...
 
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdf
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdfThementag 2023 04 Lindern, heilen oder gar fit machen.pdf
Thementag 2023 04 Lindern, heilen oder gar fit machen.pdf
 
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
Thementag 2023 05 Wer zu spät kommt, den bestraft das Leben - Modernisierung ...
 
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdfThementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
Thementag 2023 01 Mut zur Modernisierung - ein Praxisbeispiel.pdf
 
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdf
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdfThementag 2023 03 Einführung in die Softwaremodernisierung.pdf
Thementag 2023 03 Einführung in die Softwaremodernisierung.pdf
 
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdfThementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
Thementag 2022 01 Verpassen Sie nicht den Anschluss.pdf
 
Thementag 2022 04 ML auf die Schiene gebracht.pdf
Thementag 2022 04 ML auf die Schiene gebracht.pdfThementag 2022 04 ML auf die Schiene gebracht.pdf
Thementag 2022 04 ML auf die Schiene gebracht.pdf
 
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdfThementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
Thementag 2022 03 Ein Modell ist trainiert - und jetzt.pdf
 
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdfThementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
Thementag 2022 02 Der Deutschen Bahn in die Karten geschaut.pdf
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
Erste Schritte in die neue Welt-So gelingt der Einstieg in Big Data und Machi...
 
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
 
Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?
 
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
Erste Schritte in die neue Welt - So gelingt der Einstieg in Big Data und Mac...
 
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
Darf es ein bisschen mehr sein - Konzepte Strategien zur Bewältigung großer u...
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?Big Data und Machine Learning - Wer braucht das schon!?
Big Data und Machine Learning - Wer braucht das schon!?
 
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine LearningDaten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
Daten / Information / Wissen - Möglichkeiten und Grenzen des Machine Learning
 
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
Darf es ein bisschen mehr sein - Konzepte und Strategien zur Bewältigung groß...
 

"RCP-Hilfe-System" - Ein Artikel im Eclipse Magazin 6/2010

  • 1. Plus CD! Umfrage Eclipse in Lehre und Forschung >> 31 6.10 www.eclipse-magazin.de 10 Hef t! Eclipse & Alle Infos im Boris Bokowski: Adopting e4 Academia Von der Wissenschaft Eclipse SDK 4.0 >> 18 in die Wirtschaft Von den Grundlagen bis zur erdruck lauffähigen e4-Anwendung BIRT Chart API >> 42 Sond Business Intelligence à la Eclipse Von EMF auf CDO >> 88 Zentrale Speicherung von Editormodellen RCP-Hilfe und Enterprise-Wikis >> 8 Wiki-Texte mit RCP-Anwendungen verheiraten Goodbye XML: Befreiungsakt mit Xtext >> 67 Warum man in den meisten Fällen auf XML verzichten kann
  • 2. Sonderdruck Erweiterung des Einsatzgebiets RCP-Hilfesystem und Enterprise-Wikis Am Anfang unseres Projekts stand der Wunsch unserer Fachabteilung, ihre im Wiki ge- sammelten Informationen und Hilfetexte direkt mit unserer RCP-Anwendung zu verheira- ten. Wir haben reflexartig entgegnet: „Kein Problem, mit Eclipse geht so etwas leicht!“. Wie sich im Projektverlauf herausstellte, ist dieses Unterfangen doch nicht ganz so trivial, wie es anfangs schien. Viele Kleinigkeiten standen dem eigentlich klaren Ziel im Weg, und die vorhandene Eclipse-Dokumentation schwieg sich zu diesem wichtigen Thema doch be- harrlich aus. Wir möchten in diesem Artikel unseren Weg zu einer gar nicht mal so komple- xen Lösung skizzieren und hoffen, die erwähnte Dokumentationslücke etwas zu schließen. von Holger Grosse-Plankermann und Jörg Meister wand verbunden. Es ist somit nicht unbedingt ratsam, für Änderungen in Hilfetexten einen solchen Prozess Der Artikel wird sich mit der Erweiterung und An- durchzuführen. Ein Abtrennen der Hilfetexte vom Pro- passung des Eclipse-Hilfesystems im Hinblick auf eine gramm ist somit notwendig. Anforderung war, dass vorhandene Infrastruktur zur Dokumentation in Form Hilfetexte zu bestimmten Bereichen der Anwendung auf eines Wikis befassen. Entstanden ist der Sourcecode in Knopfdruck verfügbar sein sollen. Die kontextsensitive einem Projekt im Enterprise-Umfeld. Ein Deployment- Hilfe von Eclipse bietet hierfür bereits sehr gute Mög- Prozess ist im Enterprise-Umfeld oft mit hohem Auf- lichkeiten. Da die Dokumentation im Wiki entwickelt 2 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de
  • 3. Sonderdruck wird, entstand der Wunsch, auf diese aus der Anwendung heraus zugreifen zu können. Im Idealfall hätte man somit eine Trennung von Hilfetexten und RCP-An- wendung, sodass die Texte unabhängig von der Anwendung pflegbar sind. Dies ist out-of-the-Box nicht direkt möglich. Zunächst haben wir versucht, Eclipse- Bordmittel und die mächtige Konfigura- tion des Hilfesystems zu verwenden, um uns diesen Anforderungen zu nähern. Das wird in den Punkten 1 und 2 beschrieben. Die beschriebenen Wege sind durchaus gangbar, haben uns allerdings nicht voll- ständig zufrieden gestellt. Schlussendlich haben wir einen programmatischen An- Abb. 1: Das Standardverhalten des Eclipse Help UI am Beispiel des Mail-Templates satz gewählt, wie er in Punkt 3 skizziert ist. Dieser Artikel ist eher Erfahrungsbericht als Tutorial. <contexts> Wir gehen davon aus, dass Sie dem hier vorkommenden <context id="form_top" title="Eclipse"> Sourcecode leicht folgen können, wenn Sie sich schon ein <description>Dies ist ein Link zu Eclipse in Wikipedia</description> wenig mit der RCP-Entwicklung beschäftigt haben und <topic href="http://de.wikipedia.org/wiki/Eclipse_%28IDE%29" auch mit dem Eclipse-Hilfesystem in Berührung gekom- label="Eclipse"/> men sind. Als gute Einführung in das Thema sei unter </context> anderem auf [1] verwiesen. </contexts> 1. Eingebaute Hilfe Als erster Weg wurde die Standardhilfe verwendet, wie Die Kontexte werden anschließend mittels der plugin. sie in diversen Artikeln und Büchern [1-5] beschrieben xml verdrahtet: wird. Diese umfasst die aus der Eclipse IDE bekannte Help-Sidebar. Die Help-Sidebar kann eine Zusammen- <plugin> fassung des Hilfethemas und Links auf das Wiki ent- <extension halten. Das bedeutet, dass ein Nutzer bei Druck auf point="org.eclipse.help.contexts"> F1 auf einem Control zunächst diese Sidebar sieht und <contexts dann den Link auf das Wiki auswählen kann. Als Basis file="contexts.xml" benutzten wir für diesen Artikel eine leicht angepasste plugin="beispielApplikation.app"> Version des RCP-Mail-Templates. Dieses ist über den </contexts> Wizard für ein neues Plugin-Project zu erstellen. Das <contexts Einbinden des Eclipse-Hilfesystems ist in der Literatur file="contexts_missing.xml" bereits ausführlich behandelt worden. Daher beschrei- plugin="org.eclipse.ui"> </contexts> ben wir an dieser Stelle den Weg nur schematisch (Kas- </extension> ten: „Die Beispielprojekte“). </plugin> Das RCP-Mail-Template wurde so abgeändert, dass es ein Help-Plug-in enthält. Als Basis kann man hier ebenfalls den Wizard für ein neues Plugin-Project ver- Wie man hier sehen kann, gehen wir in unserem Beispiel wenden, indem man das Template Plugin With Sam- noch ein kleines Stückchen weiter und richten einen Fall- ple HelpContent verwendet. Wir haben allerdings alle back-Kontext ein, den so genannten Context_missing. für unseren Zweck überflüssigen TOCs entfernt. Ausge- Dieser wird benutzt, wenn Eclipse bei Druck auf F1 kei- hend von diesem RCP-Mail-Template haben wir einige nen passenden Kontext findet. Er ist somit prädestiniert Anpassungen vorgenommen. Für unseren Kunden war dafür, auf die Hilfestartseite zu verweisen. Selektiert es ausreichend, dass es pro Bildschirmseite nur einen man nun das Textfeld mit der E-Mail und drückt auf Hilfekontext gibt. Hier bietet es sich an, den Kontext F1, öffnet sich die Sidebar mit dem Link auf Wikipedia an das oberste Composite (Top-Level-Composite) der (Abb. 1). Fokussiert man den linken Navigationsbereich Form zu binden. In unserem Beispiel wurde in View.java und drückt F1, greift der Context_missing. die Zeile PlatformUI.getWorkbench().getHelpSystem(). Die Standardhilfe bietet darüber hinaus weitere Mög- setHelp(top,"beispielApplikation.app.form_top") hin- lichkeiten, zum Beispiel die eingebaute Suche und die zugefügt und somit HelpSystem und Composite verbun- Indizierung, die allerdings in unserem Projekt nicht er- den. Nun wurden noch in der contexts.xml Kontexte wünscht waren. Zum einen sind sie schwer anpassbar, angelegt: zum anderen sind viele Anwender ohne technischen www.eclipse-magazin.de © Software & Support Verlag GmbH eclipse magazin 6.10 3
  • 4. Sonderdruck se-Bereitstellungsmechanismus p2 erledigt werden. Ein Update zu Programmstart ist sicherlich ein gangbarer Weg. Leider konnte p2 allerdings in unserem Projekt nicht eingesetzt werden, da eine bereits im Unternehmen vorhan- dene Softwareverteilung benutzt werden musste. Von diesem Um- stand können sicherlich viele RCP- Entwickler ein Lied singen. Da wir p2 nicht einsetzen konnten, wäre bei Änderungen der Hilfetexte ein komplettes Deployment er- forderlich gewesen. Dies war der Zeitpunkt, an dem wir uns nach Alternativen umschauen mussten. 2. Infocenter Die zweite Idee war das Verwen- den des Infocenters (Abb. 2). Das Infocenter ist eine abgespeckte Eclipse-Version, die mittels des Abb. 2: Infocenter der Eclipse-Hilfe auf www.eclipse.org eingebauten Jetty als Webserver fungiert [6]. Somit kann der Nut- Background von diesen Möglichkeiten oft schlichtweg zer mit einem Webbrowser über Intra- oder Internet überfordert. Dass der Nutzer nur über den Umweg des auf die Hilfeseiten zugreifen. Allerdings bietet das Info- Hilfefensters zur Information im Wiki gelangt, wurde center nicht alle Features des Built-in-Help-Systems. Es zunächst toleriert, richtig zufrieden war man mit der fehlt die Unterstützung für Context Help, Active Help Lösung jedoch nicht. Eine Aktualisierung der Doku- und Command Support [7]. Vorteil des Infocenters ist mentation ist hier ebenfalls schwieriger als nötig. Die be- das separate Deployment des Hilfesystems auf einem troffenen Kontexte müssen separat von der eigentlichen Application-Server. Die Anwendung selber ist somit un- Dokumentation angepasst werden. Änderungen müssen abhängig von Hilfe-Updates. Eine Änderung der Hilfe dann auf irgendeine Art auf alle installierten Clients ge- kann also separat ausgeliefert werden und ist für alle langen. Dies könnte über Featureupdates und den Eclip- Nutzer sofort verfügbar. Das Infocenter kam den Anforderungen im Unter- nehmen schon recht nahe, da bei Änderungen an den Hilfetexten keine Neuauslieferung der Clientsoftware Die Beispielprojekte erforderlich ist. Der Nachteil, dass die Kontexthilfe vom Um dem Text leichter folgen zu können, haben wir zwei Beispielprojekte Infocenter nicht out-of-the-Box unterstützt wird, war erstellt. Diese befinden sich als ZIP-Datei unter [10] und auf der beilie- für die Nutzer allerdings so gravierend, dass wir diese genden CD. Die ZIP-Datei enthält zwei Verzeichnisse: Lösung verwerfen mussten. ■ Abschnitt1 enthält die Sourcen von Abschnitt 1, ■ Abschnitt3 enthält die Sourcen von Abschnitt 3. 3. Programmatische Anpassung des Hilfesystems Nachdem uns die beiden Standardansätze nicht zufrie- Die Verzeichnisse enthalten jeweils zwei Projekte: den stellten, fingen wir an, einen Weg zu suchen, das Ver- ■ net.iksgmbh.beispielApplikation.app halten des Hilfesystems stärker beeinflussen zu können. ■ net.iksgmbh.beispielApplikation.help Die Internetrecherche war leider nicht sehr erfolgreich. So blieb (wie so häufig) nur die Möglichkeit, den Sour- Das *help-Plug-in enthält die Hilfetexte und das *app-Plug-in die eigent- cecode zu analysieren und schrittweise zu durchlaufen. liche Programmlogik. In einem echten Projekt würde man diese Auftei- Erneut hilfreich beim Verständnis der Funktionsweise lung sicher noch feingranularer vornehmen. Die Projekte können Sie wie der Eclipse-Hilfe war hier die Möglichkeit des Tracings gewohnt über File|import… laden. Beim Erstellen der Run Configuration in der Run-Configuration, um herauszufinden, welche ist darauf zu achten, dass auf dem Reiter main unter run a product die die am Hilfesystem beteiligten Klassen und Plug-ins sind Product-ID net.iksgmbh.beispielApplikation.app.product ausgewählt ist (Abb. 3). Als Einstieg boten sich die Plug-ins org.eclipse. und auf dem Reiter plug-ins die beiden Plug-ins angehakt sind. Nach help und org.eclipse.help.ui an. einem Klick auf add required plugins ist die Konfiguration abgeschlossen. Wir stießen so relativ schnell auf die Klasse WorkbenchHelpSystem. Dort findet sich mit dem 4 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de
  • 5. Sonderdruck WorkbenchHelpListener und der Methode helpRequested(HelpEvent event) der Ein- stiegspunkt in das Eclipse-Hilfesystem. Über die Methoden displayHelp und getHelpUI kamen wir dem Mysterium Eclipse-Hilfe mehr und mehr auf die Schliche. Die Stan- dard-UI-Funktionalität der Hilfe verbirgt sich in der Klasse DefaultHelpUI. Das Ja- vaDoc der Basisklasse AbstractHelpUI er- klärte die Funktionsweise der Hilfe dann schließlich. Der UI-Teil der Hilfe ist über den Extension-Point org.eclipse.ui.helpSupport austauschbar. Wichtig ist, dass es nur eine Help-UI-Implementierung im System geben darf. Die Standardimplementierung ist also irgendwie zu entfernen. Wie ist nun weiter vorzugehen? Zur Er- innerung: Die Aufgabe besteht darin, bei Druck auf F1 auf einem fokussierten Control Abb. 3: An den Run Configurations hat man die Möglichkeit, Tracings einzurichten einen Wiki-URL in einem Webbrowser auf- zurufen. Wie wir gesehen haben, ist die Verwaltung des public void displayHelp() { Hilfesystems (WorkbenchHelpSystem) getrennt von der displayHelpResource("http://de.wikipedia.org"); Präsentation (DefaultHelpUI). Das spielt uns an dieser } Stelle in die Karten: Die Funktionalität der Kontexte und das Finden von F1 sind schließlich durchaus erwünscht Die Methode displayContext wird eigentlich dafür ver- (Kasten: „Das F1-Problem“). wendet, den übergebenen Hilfekontext an der ebenfalls Als Ausgangspunkt für unsere Klasse BrowserHelpUI übermittelten Position anzuzeigen. Die Position interes- kopierten wir die Klasse DefaultHelpUI aus dem Plug-in siert uns an dieser Stelle nicht, da die Hilfe außerhalb org.eclipse.help.ui und entfernten allen für uns unnöti- des Anwendungsfensters der Applikation dargestellt gen Ballast. Es mussten noch die Plug-ins org.eclipse.help wird. Interessant ist hier der Zugriff auf die Konfigura- und org.eclipse.help.base als Dependency hinzugefügt tion der Hilfekontexte. An dieser Stelle zur Erinnerung werden. Übrig geblieben in BrowserHelpUI ist die inne- ein Ausschnitt aus einer contexts.xml-Datei: re Klasse ExternalWorkbenchBrowser, die einen kleinen Wrapper um die Browserfunktionalität darstellt, sowie <contexts> einige Methoden, die wir entsprechend unseren Wün- <context id="form_top" title="Eclipse"> schen angepasst haben und im Folgenden beschreiben. <description>Dies ist ein Link zu Eclipse in Wikipedia</description> Die Methode displayHelp wird für das statische Auf- <topic href="http://de.wikipedia.org/wiki/Eclipse_%28IDE%29" rufen des Hilfesystems verwendet. Dieses ist in unserem label="Eclipse"/> Use Case ja durchaus erwünscht. An dieser Stelle sollte </context> möglichst die Startseite des Wikis aufgerufen werden. </contexts> Hilfearten in Eclipse RCP Hier sind die unterschiedlichen Wege der Aktivierung der Eclipse-Hilfe zusammengefasst, die einem Eclipse-Entwickler zur Verfügung stehen, wenn er die Hilfe wie skizziert mit der Anwendung verbindet. Begriff Erklärung Help Hilfe, die beim Betätigen der Hilfetaste oder eines Menüpunkts erscheint. Üblicherweise öffnet sich dann die Hilfeübersicht in einem Fenster der RCP-Anwendung. Context/Kontext Umgebung, in der ein Hilfebereich gültig ist. Oft ein bestimmtes Control, das den Focus besitzt. Context Help Hilfe, die bei Druck auf die Hilfetaste (unter Windows: F1) den Kontext berücksichtigt. Dynamic Context Help Context Help, deren Kontexte dynamisch aufgebaut werden. So können beispielsweise einzelnen Elementen einer Combobox spezielle Hilfethemen zugeordnet werden. Nicht Thema dieses Artikels. Active Help/Command Support Möglichkeit, Code aus dem Inhalt der Hilfe aufzurufen. Tabelle 1: Die Möglichkeiten der Hilfe in Eclipse RCP www.eclipse-magazin.de © Software & Support Verlag GmbH eclipse magazin 6.10 5
  • 6. Sonderdruck Für das Hilfesystem ist hier zunächst nur die ID wichtig, public void displayContext(IContext context, int x, int y) { auf die später im Code referenziert wird (siehe hierzu IHelpResource[] relatedTopics = context.getRelatedTopics(); die Hilfeverknüpfung in View.java im ersten Abschnitt). for (int i = 0; i < relatedTopics.length; i++) { Der title und die description sowie das label werden nur String href = relatedTopics[i].getHref(); für die Darstellung in der Hilfe-Sidebar verwendet. Wir displayHelpResource(href); interessieren uns hier nur für den Knoten <topic href } =""/>. Hier kann zu jedem Topic ein URL hinterlegt } werden. An dieser Stelle verknüpfen wir also den Kon- text mit dem im Browser anzuzeigenden URL. Dabei Die Methode displayHelpResource ist dann unspek- muss man etwas aufpassen: Wie man deutlich im Code takulär: „Reiche URL an den Browser-Wrapper wei- sieht, ist es einfach möglich, mehrere relatedTopics für ter“: einen Kontext zu hinterlegen. Unsere momentane Im- plementierung sieht vor, einfach alle zu öffnen. Wir public void displayHelpResource(String href) { empfehlen allerdings, es bei einem relatedTopic in der try { Konfiguration zu belassen und die Wikiseite mit ent- externalWorkbenchBrowser.displayURL(href); sprechenden Links auszustatten: } catch (Exception e) { Listing 1 } public void displayContext(IContext context, int x, int y) { if (!found) { // Keine Hilfeseite gefunden, dann rekursiv die übergeordneten try { // Controls durchlaufen IWorkbenchWindow window = Composite parentControl = control.getParent(); PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (parentControl != null) { Shell activeShell = PlatformUI.getWorkbench().getDisplay().getActiveShell(); tryAndShowHelp(parentControl); // Haben wir gerade eine Shell? } else { if (window != null && activeShell != null && //letzter Versuch mit dem Context_Missing activeShell.equals(window.getShell())) { IContext context = HelpSystem.getContext("org.eclipse.ui.missing"); if (window.getActivePage() != null) { if (context != null) { Control control = window.getShell().getDisplay().getFocusControl(); IHelpResource[] relatedTopics = context.getRelatedTopics(); tryAndShowHelp(control); for (int i = 0; i < relatedTopics.length; i++) { } String href = relatedTopics[i].getHref(); } displayHelpResource(href); } catch (Exception e) { } e.printStackTrace(); } } } } } } private void tryAndShowHelp(Control control) throws Exception, IOException { // Abfrage des Help-Hooks private boolean checkUrl(String href) throws HttpException, IOException { String data = (String) control.getData("org.eclipse.ui.help"); HttpClient client = new HttpClient(); boolean found = false; if (data != null && !data.isEmpty()) { // Eine HTTP-Get-Methode erzeugen // HelpSystem nach dem Context befragen GetMethod method = new GetMethod(href); IContext context = HelpSystem.getContext(data); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, if (context != null) { new DefaultHttpMethodRetryHandler(3, false)); IHelpResource[] relatedTopics = context.getRelatedTopics(); try { for (int i = 0; i < relatedTopics.length; i++) { // GET ausführen String href = relatedTopics[i].getHref(); int statusCode = client.executeMethod(method); // Steckt hinter dem URL auch eine HTML-Seite? // Wurde die Seite gefunden, wird TRUE zurückgegeben if (checkUrl(href)) { return statusCode == HttpStatus.SC_OK; // Anzeige der Seite } finally { displayHelpResource(href); // Freigeben der Verbindung. found = true; method.releaseConnection(); break; } } } } } 6 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de
  • 7. Sonderdruck throw new RuntimeException("Fehler beim Öffnen des Browsers", e); <topic href="http://www.eclipse.org#WichtigesThema" label="Wichtiges } Thema "/> } Auf diese Weise wird dem Benutzer im Browser sofort Das DefaultHelpUI bzw. dessen Oberklasse Abstract­ die richtige Stelle im Hilfetext angezeigt. Allerdings führt HelpUI bietet noch eine weitere Funktionalität an, die für dies unter Umständen zu sehr langen Hilfeseiten. uns keinen Nutzen hat. Eine Suche ist über den Browser Bei der zweiten Variante kann jedes Control einen und im Wiki selber möglich, also ist das Implementieren Kontext mit eigenem URL bekommen. Jedoch über- der Methoden rund um die Suche überflüssig (search und prüft die Klasse BrowserHelpUI, ob die Seite existiert. displaySearch). Dynamic Context Help [8] ist von uns Dazu änderten wir die displayContext-Methode (Listing noch nicht umgesetzt worden. Es ist wahrscheinlich auch 1) in der Art ab, dass wir zuerst überprüfen, ob hin- nicht sinnvoll, Dynamic Context Help mit dem Browser ter dem angegebenen URL im Kontext überhaupt eine zu verbinden. Das Öffnen eines Browserfensters bei je- HTML-Seite vorhanden ist. Dazu wird per HTTPClient dem Feuern eines SelectionChanged-Events einer Drop- von Apache-Commons [9] eine Verbindung aufgebaut Down-Box ist wahrscheinlich nicht praktikabel. Somit und ein GET auf die Hilfeseite aufgerufen. Anhand des implementieren wir die Methode displayDynamicHelp Rückgabewerts der GET-Methode (HTTP 200 OK) nicht. Schlussendlich finden wir in der Klasse Default­ kann festgestellt werden, ob der URL valide war. Ist die HelpUI noch eine ganze Reihe Methoden vor, die sich mit gewünschte Wikiseite nicht vorhanden, wird das Cont- der Darstellung der Hilfe in der RCP-Anwendung befas- rol gesucht, in das das Ausgangs-Control (Parent) ein- sen. Diese benötigen wir aufgrund unserer Anforderun- gebettet ist. Von diesem Control wird beim HelpSystem gen nicht. Alles in allem wird unsere resultierende Klasse der Kontext erfragt und wiederum der Help-URL über- BrowserHelpUI schön schlank. Unser neues HelpUI muss prüft. Hat dies keinen Erfolg, wird es weiter rekursiv noch dem System bekannt gemacht werden. Dazu wird aufgerufen. Irgendwann landet man bei einem Control, der Extension-Point org.eclipse.ui.helpSupport bedient: das eine existierende Seite repräsentiert. Wird kein ent- sprechendes Control gefunden, wird vom Help-System <extension der URL des Context_Missing geholt und aufgerufen. point="org.eclipse.ui.helpSupport"> Geschafft! Wir haben somit erreicht, dass die Hilfein- <config halte nicht mehr in der Anwendung selber, sondern im class="net.iksgmbh.beispielApplikation.app.BrowserHelpUI"> Browser dargestellt werden. Wie erwähnt, gibt es ein </config> paar kleinere Einschränkungen, aber diese können vom </extension> verwendeten Wiki aufgefangen werden (Suchfunktion, Indizierungen). Die einfache Integration des Hilfesys- Das Plug-in org.eclipse.help.ui muss dann als Abhän- tems in die Anwendung (Stichwort F1) und das Verwen- gigkeit entfernt werden, da es den Extension Point org. den von Kontexten bleiben aber bestehen. Somit stellt eclipse.ui.helpSupport blockiert. Wie bereits erwähnt, dieser Ansatz für uns die zurzeit optimale Lösung dar. darf es davon nur eine Implementierung in der Appli- kation geben. Die Abhängigkeiten findet man im Mani- 4. Fazit fest des App-Plug-ins. Auch aus der Run-Config ist sie Wie man gesehen hat, war es mit relativ wenigen Hand- zu entfernen, sofern vorhanden. Unser gestelltes Ziel ist griffen möglich, das Eclipse-Hilfesystem unseren An- somit erreicht: Das Hilfesystem ist nun vollständig vom Deployment-Zyklus unserer Applikation getrennt, und wir ermöglichen, wie in Teil 1 erwähnt, den Zugriff pro Das F1-Problem Top-Level-Composite auf eine Hilfeseite im Wiki. Doch befriedigend ist die Lösung noch nicht. Ist der Noch nicht allgemein bekannt ist die Tatsache, dass die Hil- Hilfetext umfangreich, wird es für den Benutzer unüber- fetaste F1 unter Windows fest mit der Kontexthilfe verdrahtet sichtlich und er muss den für ihn interessanten Teil erst ist. Da wir SWT verwenden und SWT direkt auf OS-Ressourcen suchen. Abhilfe würde die Vorgehensweise schaffen, für zugreift, gibt es leider keine Chance, dies auf elegante Art und jedes Control einen eigenen Kontext zu erstellen. Wir Weise zu ändern. In der Eclipse-Implementierung wird dem fanden es allerdings wenig praktikabel, für jeden Kon- Control, dem wir unseren Kontext zuweisen, ein Workbench- text auch eine eigene Seite im Wiki zur Verfügung zu HelpListener hinzugefügt. Das Control ruft dann bei Bedarf die stellen. Also suchten wir einen Weg, wie dies umgangen Methode helpRequested auf. In den RCP Sourcen ist uns keine werden konnte. Hierbei mussten wir zwischen zwei Va- weitere Möglichkeit aufgefallen, dies anzupassen. Schluss- rianten wählen. Bei der ersten Möglichkeit wird im Kon- endlich haben wir nach dem Studium der Klasse org.eclipse. text des Controls derselbe URL angegeben wie bei dem ui.internal.actions.DynamicHelpAction und der Methode ap- Top-Level-Composites, ergänzt durch einen Anker: pendAccelerator aufgegeben. Der Kommentar besagt ebendies. Anders sieht es bei einem einfachen Aufruf der Hilfefunktion <context id="wichtiges_thema" title="Wichtiges Thema"> ohne Kontext aus, dies lässt sich über Key Binding anpassen. <description>Dies ist ein Link zu Eclipse in Wikipedia</description> www.eclipse-magazin.de © Software & Support Verlag GmbH eclipse magazin 6.10 7
  • 8. Sonderdruck forderungen anzupassen. Dies hat mehrere Gründe: Links & Literatur Zum einen bringt die Standardfunktionalität schon ei- nen vernünftigen Satz an Möglichkeiten mit, die mit- [1] Imrie, Alexandra; Lörke, Achim (Teil 2 des Tutorials „RCP-Usability“): tels Konfiguration sehr weit angepasst werden können. „Hilfe naht“, in: Eclipse Magazin 3.10 Zum anderen können durch Austausch des UI-Teils der [2] Eclipse Rich Client Platform: Designing, Coding, and Packaging Java Hilfe per Extension Point relativ einfach Veränderun- Applications, ISBN: 978-0321603784 gen am Look and Feel der Hilfe vorgenommen werden. [3] Die Eclipse Rich Client Platform: Entwicklung von erweiterbaren Unsere Lösung mag einfach erscheinen, der Weg dahin Anwendungen mit RCP, ISBN: 978-3939084914 allerdings war recht steinig. Die Dokumentation über [4] Adding Help Support to a Rich Client Platform (RCP) Application: die Anpassung des Hilfesystems im Web und in Eclipse http://www.eclipse.org/articles/article.php?file=Article- ist verbesserungswürdig. Vielleicht kann dieser Artikel AddingHelpToRCP/index.html diesen Punkt etwas abmildern. [5] Eclipse-Hilfe: http://www.ralfebert.de/rcpbuch/help/ Holger Grosse-Plankermann, Diplom-Informatiker, ist als IT-Be- [6] http://download.eclipse.org/eclipse/downloads/ rater bei der iks Gesellschaft für Informations- und Kommunikati- drops/R-3.6-201006080911/index.php#RCPRuntime onssysteme mbH tätig. Er beschäftigt sich seit vielen Jahren mit [7] http://help.eclipse.org/helios/index.jsp?topic=/ verteilten JEE-Systemen, Web-2.0-Technologien sowie Rich-Client- Architekturen und deren Umsetzung mit Eclipse RCP. Kontakt: org.eclipse.platform.doc.isv/guide/ua_help_setup_infocenter.htm h.grosse-plankermann@iks-gmbh.com [8] Dynamic Context Help: http://help.eclipse.org/helios/ index.jsp?topic=/org.eclipse.platform.doc.isv/guide/ Jörg Meister arbeitet seit vielen Jahren als freiberuflicher Soft- ua_help_context_dynamic.htmI wareentwickler und Berater. Seine Schwerpunkte sind Rich-Client- Architekturen und JEE-Systeme. Kontakt: jm@joergmeister.de [9] http://hc.apache.org/httpclient-3.x [10] Die Beispielprojekte: http://www.iks-gmbh.com/rcp 8 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de