Comment présenter des éléments Java dans un afficheur JFace standard

L'API de l'interface utilisateur du JDT fournit plusieurs classes permettant de présenter le modèle Java ou des parties du modèle dans un afficheur JFace standard. Cette fonctionnalité est fournie principalement par :

Assembler les différents éléments est une opération facile :
	...
IJavaProject jProject= ...;

TreeViewer viewer= new TreeViewer(parent);
// Fournit les membres d'une unité de compilation ou d'un fichier de classe, mais aucun élément de copie de travail
ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
viewer.setContentProvider(contentProvider);
// Aucun indicateur n'est défini dans la classe JavaElementLabelProvider
ILabelProvider labelProvider= new JavaElementLabelProvider(
JavaElementLabelProvider.SHOW_DEFAULT |
JavaElementLabelProvider.SHOW_QUALIFIED |
JavaElementLabelProvider.SHOW_ROOT);
viewer.setLabelProvider(labelProvider);

// Utilisation du modèle Java, les afficheurs présentant les projets Java au premier niveau.
viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
...

En plus du modèle Java, la classe StandardJavaElementContentProvider prend en charge les types d'élément d'entrée suivants : IJavaProject, IPackageFragmentRoot, IPackageFragment et IFolder.

Ajout de décorateurs indiquant les incidents et les remplacements

Lorsqu'un afficheur doit inclure des annotations liées aux incidents, un élément DecoratingLabelProvider associé à l'élément ProblemsLabelDecorator est utilisé. Vous trouverez ci-dessous un fragment de code qui met en évidence l'utilisation d'un décorateur de libellé d'incident :
	...
DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
viewer.setLabelProvider(decorator);
...


De même, l'élément OverrideIndicatorLabelDecorator permet de décorer un fournisseur de libellé normal afin d'afficher les indicateurs d'implémentation et de remplacement pour les méthodes.

Mise à jour de la présentation des modifications du modèle

Ni l'élément OverrideIndicatorLabelDecorator, ni l'élément ProblemsLabelDecorator ne tient compte des modifications apportées au modèle. Par conséquent, l'afficheur ne met pas à jour sa présentation si le modèle Java ou le modèle de marqueur de ressource change. La raison pour laquelle il est judicieux de mettre à jour le client pour ces classes est qu'il n'existe pas encore d'implémentation générique répondant à tous les problèmes de performance. L'exécution de l'inspection delta du modèle Java et du rafraîchissement des afficheurs dans chaque décorateur de libellé ou dans chaque fournisseur entraînerait de nombreuses inspections delta et des mises à jour d'afficheurs inutiles.

Que doit faire le client pour mettre à jour les afficheurs ?
Pour les mêmes raisons que les décorateurs de libellés, StandardJavaElementContentProvider ne tient pas compte des modifications apportées au modèle. Si l'afficheur doit mettre à jour sa présentation en fonction des modifications apportées au modèle Java, le client doit ajouter un programme d'écoute approprié à JavaCore. Si la modification décrite par le delta invalide la structure des éléments présentés dans l'afficheur, le client doit mettre à jour l'afficheur à l'aide de l'API JFace standard (voir les méthodes de rafraîchissement dans StructuredViewer et les méthodes d'ajout et de suppression dans TableViewer et AbstractTreeViewer).

Copyright IBM Corporation and others 2000, 2002. All Rights Reserved.