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

2.277 Aufrufe

Veröffentlicht am

Immer mehr Unternehmen dokumentieren interne Arbeitsabläufe in einer Wiki. Schnell entsteht der Wunsch, aus unternehmensinterner Software heraus möglichst einfach auf diese Dokumentation zugreifen zu können. Ideal ist eine kontextsensitive Verknüpfung zwischen Software und Wiki mit der F1-Taste.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.277
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
5
Aktionen
Geteilt
0
Downloads
7
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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

  1. 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 WissenschaftEclipse SDK 4.0 >> 18 in die WirtschaftVon den Grundlagen bis zur erdrucklauffähigen e4-AnwendungBIRT Chart API >> 42 SondBusiness Intelligence à la EclipseVon EMF auf CDO >> 88Zentrale 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. 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 entwickelt2 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de
  3. 3. Sonderdruckwird, entstand der Wunsch, auf dieseaus der Anwendung heraus zugreifen zukönnen. Im Idealfall hätte man somit eineTrennung von Hilfetexten und RCP-An-wendung, sodass die Texte unabhängigvon der Anwendung pflegbar sind. Diesist 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, umuns diesen Anforderungen zu nähern. Daswird in den Punkten 1 und 2 beschrieben.Die beschriebenen Wege sind durchausgangbar, haben uns allerdings nicht voll-ständig zufrieden gestellt. Schlussendlichhaben wir einen programmatischen An- Abb. 1: Das Standardverhalten des Eclipse Help UI am Beispiel des Mail-Templatessatz gewählt, wie er in Punkt 3 skizziertist. 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 HilfeAls 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 bekannteHelp-Sidebar. Die Help-Sidebar kann eine Zusammen- <plugin>fassung des Hilfethemas und Links auf das Wiki ent- <extensionhalten. Das bedeutet, dass ein Nutzer bei Druck auf point="org.eclipse.help.contexts">F1 auf einem Control zunächst diese Sidebar sieht und <contextsdann 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 <contextsEinbinden 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, dasses ein Help-Plug-in enthält. Als Basis kann man hierebenfalls den Wizard für ein neues Plugin-Project ver- Wie man hier sehen kann, gehen wir in unserem Beispielwenden, 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ädestiniertAnpassungen vorgenommen. Für unseren Kunden war dafür, auf die Hilfestartseite zu verweisen. Selektiertes ausreichend, dass es pro Bildschirmseite nur einen man nun das Textfeld mit der E-Mail und drückt aufHilfekontext gibt. Hier bietet es sich an, den Kontext F1, öffnet sich die Sidebar mit dem Link auf Wikipediaan das oberste Composite (Top-Level-Composite) der (Abb. 1). Fokussiert man den linken NavigationsbereichForm 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 diezugefü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 technischenwww.eclipse-magazin.de © Software & Support Verlag GmbH eclipse magazin 6.10 3
  4. 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 desAbb. 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 dem4 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de
  5. 5. SonderdruckWorkbenchHelpListener und der MethodehelpRequested(HelpEvent event) der Ein-stiegspunkt in das Eclipse-Hilfesystem. Überdie Methoden displayHelp und getHelpUIkamen wir dem Mysterium Eclipse-Hilfemehr und mehr auf die Schliche. Die Stan-dard-UI-Funktionalität der Hilfe verbirgtsich in der Klasse DefaultHelpUI. Das Ja-vaDoc der Basisklasse AbstractHelpUI er-klärte die Funktionsweise der Hilfe dannschließlich. Der UI-Teil der Hilfe ist über denExtension-Point org.eclipse.ui.helpSupportaustauschbar. Wichtig ist, dass es nur eineHelp-UI-Implementierung im System gebendarf. Die Standardimplementierung ist alsoirgendwie zu entfernen. Wie ist nun weiter vorzugehen? Zur Er-innerung: Die Aufgabe besteht darin, beiDruck auf F1 auf einem fokussierten Control Abb. 3: An den Run Configurations hat man die Möglichkeit, Tracings einzurichteneinen 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 unddas 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ßerhalborg.eclipse.help.ui und entfernten allen für uns unnöti- des Anwendungsfensters der Applikation dargestelltgen 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 Erinnerungwerden. Übrig geblieben in BrowserHelpUI ist die inne- ein Ausschnitt aus einer contexts.xml-Datei:re Klasse ExternalWorkbenchBrowser, die einen kleinenWrapper 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 RCPwww.eclipse-magazin.de © Software & Support Verlag GmbH eclipse magazin 6.10 5
  6. 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. 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 sofortDas DefaultHelpUI bzw. dessen Oberklasse Abstract­ die richtige Stelle im Hilfetext angezeigt. Allerdings führtHelpUI 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 einenund 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 (Listingnoch 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 einezu verbinden. Das Öffnen eines Browserfensters bei je- HTML-Seite vorhanden ist. Dazu wird per HTTPClientdem Feuern eines SelectionChanged-Events einer Drop- von Apache-Commons [9] eine Verbindung aufgebautDown-Box ist wahrscheinlich nicht praktikabel. Somit und ein GET auf die Hilfeseite aufgerufen. Anhand desimplementieren 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 dieHelpUI 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 HelpSystemgen 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 rekursivnoch 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 stellteclipse.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. Fazitfest 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 vomDeployment-Zyklus unserer Applikation getrennt, undwir ermöglichen, wie in Teil 1 erwähnt, den Zugriff pro Das F1-ProblemTop-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 verdrahtetsichtlich und er muss den für ihn interessanten Teil erst ist. Da wir SWT verwenden und SWT direkt auf OS-Ressourcensuchen. Abhilfe würde die Vorgehensweise schaffen, für zugreift, gibt es leider keine Chance, dies auf elegante Art undjedes Control einen eigenen Kontext zu erstellen. Wir Weise zu ändern. In der Eclipse-Implementierung wird demfanden 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 diestellen. Also suchten wir einen Weg, wie dies umgangen Methode helpRequested auf. In den RCP Sourcen ist uns keinewerden 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. 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/rcp8 eclipse magazin 6.10 © Software & Support Verlag GmbH www.eclipse-magazin.de

×