Rich Clients met Eclipse RCP (deel 3)
In deel 1 en deel 2 van deze blog reeks heb ik laten zien hoe je Eclipse RCP kan inzetten om een desktop applicatie mee te bouwen. Dit laatste deel zet de spreekwoordelijke puntjes op de i. Wanneer de business logica en de bijbehorende grafische interface geïmplementeerd zijn, hoe zorg ik dat verschillende gebruikersgroepen mijn applicatie daadwerkelijk kunnen gebruiken?
Ter illustratie zal ik uitleggen hoe je de interface kan vertalen, zodat de applicaties mensen van over de hele wereld in hun moedertaal toe spreekt, oftewel internationalisatie. Vooral de beginnende gebruiker zal een uitgebreid help systeem kunnen warderen. Maar voordat een gebruiker van je RCP applicatie gebruik kan maken, zal hij eerst een distributie moeten downloaden. De diverse mogelijkheden die het platform biedt om je applicatie te distribueren te maken zal ik daarom toelichten.
Internationalisatie
Ondersteuning van meerdere talen wordt meestal opgelost met resource bundles. Eclipse en RCP zijn hierop geen uitzondering. Er is echter een verschil met het gebruik van resources bundles in web-applicaties: omdat we een desktop applicatie bouwen, is er maar een gebruiker. Dit buit het platform uit door de bundel maar een keer uit te lezen.
public final class Messages extends org.eclipse.osgi.util.NLS { public static String menuFile; public static String menuEdit; public static String menuHelp; static { initializeMessages("bundle.name", Messages.class); } }
Omdat een RCP applicatie voor een groot gedeelte uit meta-data bestaat, en hier juist ook veel UI tekst in gedefinieerd wordt, zal dit ook vertaald moeten worden. In de OSGI manifest kan je daarom een bundel opgeven (zie afbeelding 1).
Het up-to-date houden van resource bundles is een vervelend nauwkeurig werkje. Gelukkig kan de compiler zo ingesteld worden dat er gewaarschuwd wordt voor niet vertaalde tekst. Vanaf Eclipse 3.4 zal zelfs je meta-data gecontroleerd worden!
![]() |
![]() |
| Afbeelding 1: De compiler waarschuwt voor niet vertaalde UI tekst | |
Help
Ook al is je gebruikersinterface nog zo intuïtief, sommige functies vereisen nadere uitleg. Om de gebruiker te gemoed te komen kan je een help functie aanbieden. Je hoeft dit niet zelf te verzinnen. Dankzij RCP krijg je de help-engine gratis. Je hoeft alleen de daadwerkelijke tekst te schijven en eerlijk is eerlijk: dat is al moeilijk genoeg.
Hulp kan je op twee niveaus aanbieden:
| globaal: | de gebruiker zoekt zelf door de voor hem interessante artikelen |
| context: | het systeem ondersteund de gebruiker actief, door te kijken welke functie momenteel actief is. |
Voor beide functies zal je een table of contents (TOC) moeten maken. De TOC is de inhoudsopgave van de help. De daadwerkelijke help pagina’s kan je gewoon in HTML schrijven en opmaken.
<toc label="Getting Started" link_to="toc.xml#gettingstarted"> <topic label="Main Topic"> <topic label="Sub Topic"> </topic> <topic label="Main Topic 2"> <topic label="Sub Topic 2"> </topic> </topic> </topic></toc>
Wanneer de gebruiker de globale help functie start, zal een interne webserver de TOC gebruiken om een overzicht van de beschikbare help te tonen. Om de gebruiker met context help te ondersteunen is nauwelijks meer werk. De programmeur hoeft alleen aan te geven welk topic aan welke control gekoppeld moeten worden.
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchHelpSystem help = workbench.getHelpSystem(); help.setHelp(someControl, "com.finalist.rcp.ui.book");
Het RCP help systeem is goed gedocumenteerd. Voor implementatie specifieke vragen kan je het beste in de Eclipse help (!) kijken of dit uitgebreide artikel doorlezen.
Distributie
Wanneer je applicatie dan eindelijk code complete is, zal een distribueerbare versie gebouwd moeten worden. Dit proces is niet ingewikkelder dan het selecteren van de resource files en het activeren van een een wizard. Het bouwproces zelf is verder geautomatiseerd.
Wanneer je applicatie op meerdere platforms moet draaien, zul je tegen de beperking van SWT aanlopen, namelijk platform afhankelijkheid. Eclipse wordt standaard voor een platform gedistribueerd. Op een Linux OS kan je daarom out-of-the-box geen RCP applicaties voor MS Windows of omgekeerd. Door het Delta pakket te installeren krijg je de mogelijkheid wel. Je vindt dit bestand op de Eclipse download site.
![]() ![]() |
![]() |
| Afbeelding 2: Selecteer per plug-in je resource files en activeer de export wizard (optioneel naar meerdere platforms). |
|
Conclusie
Het RCP platform is een solide basis om desktop applicaties op te ontwikkelen. Veel functionaliteit waar je niet over na wil denken krijg je in de vorm van het framework. Je kan je daarom concentreren op de specifieke logica, wat hopelijk de kwaliteit van je applicatie ten goede komt. Ook al was het RCP platform al meer dan volwassen, toch zitten in de aankomende Eclipse versie 3.4 (eind juni) weer ontelbaar verbeteringen. En het mooie is dat al deze verbeteringen ook automatisch in je RCP applicatie worden meegebouwd!
Ik hoop dat ik met deze blog reeks mensen heb kunnen overtuigen om een keer te spelen met Eclipse RCP. Gebruik dan de code van de voorbeeld applicatie om te zien hoe je algemene dingen kan implementeren.







