dimanche, mai 31, 2009

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées ces dernières semaines.

Eclipse
  • Mise à jour : Angelo Zerr propose de nouveaux billets concernant sa série Conception d'un Editeur Eclipse de Workflow XML (billet 1, billet 2, billet 3, billet 4 et billet 5).
  • Les sources du projet Ribbon avaient été donnés à la fondation Eclipse, mais pas sur que cela soit intégré au projet Nebula à cause de clauses Microsoft.
  • Une discussion en cours pour changer le nom d'Eclipse RCP pour les prochaines versions d'Eclipse.

lundi, mai 25, 2009

J'ai besoin de ... connecter plusieurs Viewers d'une même vue au service de sélection

Dans la série des J'ai besoin de ... je m'intéresse dans ce billet à la manière de connecter plusieurs SelectionProvider d'une même vue au service de sélection. Les SelectionProvider désignent tous les objets de type Viewer (TableViewer, TreeViewer, ListViewer, ...).

La connexion au service du sélection est obtenue par l'intermédiaire du site de la vue (le site peut être vue comme un pont entre la vue et le Workbench). Le code suivant se trouve généralement dans la méthode createPartControl de la ViewPart de la vue :
getSite().setSelectionProvider(tableViewer)
Comme vous pouvez le constater, la méthode qui consiste à "connecter" le composant TableViewer ne permet pas d'ajouter plusieurs composants de type SelectionProvider. Par ailleurs, la plateforme Eclipse n'autorise pas la modification dynamique du SelectionProvider d'une vue au service de sélection. Je me suis trouvé dans le cas où j'avais plusieurs composants TableViewer dans une même vue : cette vue contient deux composants de type TableViewer.

Une solution est proposée dans cet article qui décrit l'utilisation du service de sélection. L'auteur propose notamment d'utiliser la classe SelectionProviderIntermediate pour gérer plusieurs composants de type SelectionProvider dans une même vue. Cet objet est connecté au service de sélection puisqu'il est de type SelectionProvider. En fait, cette classe joue le rôle de classe de délégation. Associé à un viewer, l'objet SelectionProviderIntermediate délègue les modifications de sélection du viewer au service de sélection. L'intérêt est de fixer l'objet de type SelectionProviderIntermediate et de lui associer dynamiquement les composants SelectionProvider (ici des composants de type TableViewer).

Dans la suite, je vous montre comment utiliser cette classe à partir de deux composants TableViewer. Tout ce qui va être présenté se trouve dans la méthode createPartControl.

Ci-dessous, le code utilisé pour ajouter les deux composants TableViewer à la vue :
public void createPartControl(Composite parent) {
viewer1 = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
viewer1.setContentProvider(new ViewContentProvider());
viewer1.setLabelProvider(new ViewLabelProvider());
viewer1.setInput(getViewSite());
viewer2 = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
viewer2.setContentProvider(new ViewContentProvider());
viewer2.setLabelProvider(new ViewLabelProvider());
viewer2.setInput(getViewSite());
Ci-dessous, le code utilisé pour instancier le SelectionProvider qui délègue les modifications de sélection d'un viewer au service de sélection.
 final SelectionProviderIntermediate selectionProviderIntermediate = new SelectionProviderIntermediate();
this.getSite().setSelectionProvider(selectionProviderIntermediate);
Enfin, la notification du changement de la sélection locale de chaque composant TableViewer est utilisée pour modifier le SelectionProvider actif dans l'objet SelectionProviderIntermediate.
 viewer1.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
selectionProviderIntermediate.setSelectionProviderDelegate(viewer1);
}
});
viewer1.addPostSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
selectionProviderIntermediate.setSelectionProviderDelegate(viewer1);
}
});

viewer2.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
selectionProviderIntermediate.setSelectionProviderDelegate(viewer2);
}
});
viewer2.addPostSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
selectionProviderIntermediate.setSelectionProviderDelegate(viewer2);
}
});
}
Vous pouvez télécharger le code source de cet exemple ici. Cet exemple fait parti du cours sur le Workbench Eclipse que je suis en train de préparer.

dimanche, mai 24, 2009

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées ces dernières semaines.

Eclipse
  • Un billet qui présente comment customiser les fenêtres sous Vista avec des composants SWT.
  • Eclipse 3.5 RC1 est sortie, page de téléchargement.
Java
  • Un App Store pour les applications Java est en train de se préparer (billet de Jonathan Schwartz). En attendant l'annonce officielle lors de Java One 2009.
Divers
  • Du côté Flex, il y aurait du changement pour la prochaine version. L'outil de développement s'appelerait Flash Builder au lien de Flex Builder.

samedi, mai 16, 2009

Bilan soirée RIA / RDA du JUG Poitou Charentes

Comme indiqué sur ce billet, j'étais présent à la soirée RIA / RDA (Rich Internet Application et Rich Desktop Application) organisée pour le JUG Poitou-Charentes. Pour cette session, le JUG s'était déplacé dans la ville de Niort.

Trois présentations d'une durée moyenne de quarante minutes ont été données autour de trois technologies : GWT (Google Web Toolkit), Flex et Eclipse RCP. Les orateurs (Antony Quinault, Jérome Creignou et Alexandre Borgoltz) sont du métier : du chef de projet à l'architecte technique. Ils travaillent principalement pour de grandes mutuelles niortaises. Le contexte est clair, ces présentations sont dispensées par des personnes ayant de forts retours d'expériences et surtout ce sont des technologies employées et déjà utilisées en production. Au niveau de la structure de ces présentations, elles ont pratiquement suivi la même trame : le contexte de l'entreprise, la justification du choix de cette technologie par rapport à d'autres (des comparatifs précis ont été donnés), une présentation rapide de la technologie et un retour d'expérience.

Suite à ces présentations et aux questions que j'ai pu être amené à poser, je constate que, du moins pour GWT et Flex, ces technologies sont très puissantes mais malheureusement je regrette qu'il n'y ait pas assez d'outillage pour le développement de la couche graphique. Où sont ces environnements de construction d'IHMs (ces fameux GUI-Builders) qui facilitent grandement les développements des interfaces? C'est un fait dans le monde Java, l'habitude est de construire les interfaces graphiques de manière programmatique et ce besoin d'outils n'est pas une priorité. Pour nuancer, il y a tout de même des outils comme Netbeans avec le GUI-Builder Matisse, FlexBuilder pour le développement d'IHMs autour de Flex ou WindowBuilder pour le développement d'IHMs autour de GWT ou des technologies de la plateforme Eclipse (SWT, JFace, Eclipse Form, ...). Toutefois, soit ce sont des outils incomplets soit ils sont payants. Mais bon, face à un Microsoft Visual Studio .NET qui décrit les interfaces en XAML permettant ainsi de couvrir toutes sortes de technologies différentes, les outils cités précédemment ne font pas le poids. Certes ces outils ne sont pas indispensables mais si on souhaite que ces technologies dédiées aux interfaces homme-machine puissent s'imposer (facilité d'utilisation et gain de productivité) il faut pouvoir fournir aux développeurs qui le souhaitent ce type d'outils.

L'avenir est peut être à la modélisation de haut niveau des interfaces, comme l'a précisé Antony Quinault lors de la session GWT. Dans ce sens, je peux citer le framework eFace de la société Soyatec. eFace permet aux développeurs de décrire ces interfaces homme-machine en XAML. Le framework s'occupe alors de générer en SWT, Swing ou autre. Un des avantages pourrait être alors d'utiliser le GUI Builder de Visual Studio pour décrire les IHMs. A noter également que des membres de Soyatec sont contributeurs de la nouvelle version d'Eclipse e4 en cours de développement. Je vous laisse donc imaginer la suite ...

Pour revenir à la soirée du JUG Poitou Charentes, la société SERLI sponsor de l'événement et SUN France ont généreusement offert des présents et tout s'est terminé autour du buffet où de nombreux échanges d'expériences ont pu être réalisés.

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées ces dernières semaines.

Eclipse

samedi, mai 09, 2009

Liens pratiques de la semaine

Vous trouverez ici une sélection de liens pratiques autour des technologies Java qui m'ont particulièrement intéressées ces dernières semaines.

Eclipse
  • Angelo Zerr propose la suite de sa série de billets sur la conception d'un Editeur Eclipse de Workflow XML (billet 1 et billet 2).
  • Eclipse 3.5 M7 est sortie (page de téléchargement, liste des nouveautés).
Divers
  • Sur le blog de Xebia, un billet intéressant sur Maven qui présente quelques règles de bonne conduite.

JUG Poitou-Charentes : technologies RIA / RDA

Le JUG Poitou-Charentes pour sa deuxième session organise un événement IHM autour des technologies RIA (Rich Internet Applications) et RDA (Rich Development Applications). Les technologies présentées seront GWT, Flex et Eclipse RCP.

L'événement a lieu le jeudi 14 main à Niort (Salle de la place du port). Donc, si vous êtes dans le coin, n'hésitez pas (lien pour les détails et l'inscription).

J'y serai bien entendu et je vous ferai un compte rendu de la soirée.

vendredi, mai 08, 2009

Premier essai avec Tycho

Ce billet a pour but de mettre en œuvre l'outil de build Tycho qui est une sorte de portage de Maven 2 pour les applications basées sur OSGi. Dans ce cadre précis le développement de plugins Eclipse est concerné.

Je tiens à préciser que Tycho est en cours de développement. Je me suis fortement basé sur le billet de Jason Van Zyl de Sonatype. Cette mise en oeuvre a été réalisée sous Windows XP.

Installation de Tycho
  • Télécharger Tycho à l'adresse suivante : http://repository.sonatype.org/content/repositories/tycho-pseudo-releases/org/codehaus/tycho/tycho-distribution/0.4.0-DEV-2233/ . Parmi la multitude de fichiers, j'ai choisi l'archive ZIP.
  • Décompresser l'archive (c:\tycho).
  • En regardant la structure des répertoires obtenue, vous remarquerez que cela ressemble fortement à la structure d'une installation Maven.
  • Ajouter une variable d'environnement TYCHO_HOME qui pointe sur le répertoire d'installation de Tycho (TYCHO_HOME=C:\tycho).
  • Si vous avez déjà installé Maven, modifier la variable d'environnement M2_HOME pour pointer également sur le répertoire d'installation de Tycho (M2_HOME=c:\tycho).
Télécharger l'exemple RCP
  • Créer un nouveau répertoire qui contiendra les sources de l'exemple RCP (c:\RCPExample).
  • Récupérer à partir d'un client SVN, les sources de l'exemple RCP à l'adresse suivante (http://svn.sonatype.org/m2eclipse/tycho/trunk/tycho-demo/itp01). Par exemple, en ligne de commande svn co http://svn.sonatype.org/m2eclipse/tycho/trunk/tycho-demo/itp01.
Démarrer le Build
  • Se placer à la racine du répertoire c:\RCPExample\itp01
  • Exécuter la ligne de commande %TYCHO%\bin\mvn clean install -Dtycho.resolver=p2
Ce premier Build est très long puisque toutes les dépendances nécessaires à la compilation de RCPExample sont téléchargées dans le référentiel local. Pour information et par défaut, le référentiel Tycho est positionné dans c:\Documents and settings\[user]\.m2\repository

A la fin du téléchargement, nous remarquons plusieurs étapes
  • Démarrage du conteneur OSGi à partir du Bundle org.eclipse.equinox.app
  • Compilation de RCPExample.
  • Installation de l'example dans le référentiel local (un des aspects le plus important, le plugin est construit et est disponible).
  • Compilation des tests de RCPExample.
  • Exécution des tests. Ici, le test consiste à activer une action de l'exemple. Pour se faire, un Workbench Window est ouvert puis réalisation de l'action (toutes les dépendances sont ainsi réalisées puisqu'un "mini Eclipse" a pu s'exécuter). A préciser finalement que le jar de RCPExample est situé dans le référentiel local et que le plugin de test effectue sans problème la dépendance.
Bilan

Ce première tentative est une bonne nouvelle
  • Dépendance vers les plugins Eclipse;
  • Téléchargement des plugins Eclipse dans le référentiel local;
  • Installation des plugins construits dans le référentiel distant.
Toutefois, j'ai de nombreuses interrogations
  • Un Product Eclipse sera-il considéré comme une sorte d'Assembly Maven ? Comment générer mon exécutable et choisir ma plateforme cible.
  • Choisir la version de la distribution de la plateforme Eclipse. Faire un build sur Europa, Ganymede ou Gallileo est-ce possible ? je l'espère très fortement.
  • Intégration de Tycho dans un outil d'intégration continue comme Hudson par exemple.
  • Tycho par rapport à Maven 2 ? Tycho est-il le futur Maven 3 ? Les plugins Tycho suivent quel modèle ?
  • Qu'en pense la fondation Eclipse ? A part sur les groupes de discutions de la fondation qui en parle, il n'y a pas à mon avis de volonté d'intégrer un outil de Build type Maven pour la conception de plugins.
En tout cas, je vais suivre ce projet avec attention ...