org.eclipse.ui.elementFactories

Les fabriques d'éléments sont utilisées pour recréer les objets modèles du plan de travail à partir des données sauvegardée au cours de l'arrêt du plan de travail.

Avant de regarder en détails l'extension d'une fabrique d'éléments, nous devons revoir une technique générale utilisée dans la plateforme pour ajouter un comportement spécifique au plug-in à des objets modèles de plateforme courants.

IAdaptables et adaptateurs de plan de travail

Si vous parcourez les diverses classes du plan de travail, vous remarquerez que de nombreuses interfaces du plan de travail étendent l'interface IAdaptable.

Les plug-in utilisent des adaptateurs pour ajouter un comportement spécifique aux types préexistants dans le système. Par exemple, le plan de travail peut nécessiter des ressources répondant à un intitulé et une image dans le but d'un affichage. Nous savons que le fait d'ajouter un comportement spécifique de l'interface utilisateur à des objets de faible niveau n'est pas une bonne conception, aussi comment pouvons-nous ajouter ce comportement aux types de ressources ?

Les plug-in peuvent enregistrer des adaptateurs ajoutant un comportement à des types préexistants. Le code de l'application peut interroger un objet pour un adaptateur particulier. Si un adaptateur est enregistré pour cet objet, l'application peut l'obtenir et utiliser les nouveaux comportements qu'il définit.

En fournissant une fonctionnalité permettant d'interroger de façon dynamique un objet, nous pouvons améliorer la flexibilité du système au fur et à mesure de son évolution. De nouveaux adaptateurs peuvent être enregistrés pour des types de plateforme par de nouveaux plug-in sans devoir modifier les définitions des types d'origine. Le schéma consiste à demander à un objet un adaptateur particulier, comme suit :

   //prenons un objet o, nous voulons lui attribuer des actions de "plan de travail".
   if (!(o instanceof IAdaptable)) {
      return null;
   }
   IWorkbenchAdapter adapter = (IWorkbenchAdapter)o.getAdapter(IWorkbenchAdapter.class);
   if (adapter == null)
      return null;
   // o peut désormais être traité comme IWorkbenchAdapter
   ...

Si aucun adaptateur est enregistré pour l'objet en question, la valeur "null" est retournée comme adaptateur. Les clients doit être préparés à traiter ce cas. Dans certains cas, un adaptateur attendu n'a pas été enregistré.

Le plan de travail utilise des adaptateurs pour obtenir des informations de l'interface utilisateur à partir des types de plateforme de base, tel que IResource. Les adaptateurs isolent les types de base d'une connaissance particulière de l'interface utilisateur et permet au plan de travail de faire évoluer ses interfaces sans modifier les définitions de la base.

Sans adaptateurs, tout classe pouvant être transmise dans l'API du plan de travail doit implémenter les interfaces utilisateur, ce qui augmente le nombre de définitions de classes, entraîne un fort couplage et crée des dépendances en boucle entre la base et les classes d'interfaces. Avec des adaptateurs, chaque classe implémente IAdaptable et utilise le registre des adaptateurs pour permettre aux plug-in d'étendre le comportement des types de base.

Dans tout le code du plan de travail, vous verrez des cas où un type principal de plateforme est demandé pour un adaptateur. La requête sert à obtenir un objet sachant comment répondre par des informations orientées interface sur le type.

Fabriques d'éléments

Lorsque le plan de travail est fermé par l'utilisateur, il doit enregistrer l'état actuel des objets IAdaptable affichés. Un état est stocké en enregistrant les paramètres de données primitives de l'objet dans un format spécial, à savoir IMemento. L'ID d'une fabrique qui peut recréer l'objet à partir d'un IMemento est également stocké et les données sont enregistrées dans le système de fichiers.

Au redémarrage de la plateforme, le plan de travail détecte la fabrique d'éléments associée à l'ID de fabrique du IMemento. Il recherche la fabrique en vérifiant le registre du plug-in pour les contributions à l'extension org.eclipse.ui.elementFactories.

Les marques sont très simples. Il suffit de spécifier l'ID de la fabrique et la classe correspondante qui implémente cette dernière.

Le fragment de code ci-dessous est extrait du plugin.xml du plan de travail.

<extension
         point="org.eclipse.ui.elementFactories">
      <factory
            class="org.eclipse.ui.internal.model.ResourceFactory"
            id="org.eclipse.ui.internal.model.ResourceFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.model.WorkspaceFactory"
            id="org.eclipse.ui.internal.model.WorkspaceFactory">
      </factory>
      <factory
            class="org.eclipse.ui.part.FileEditorInputFactory"
            id="org.eclipse.ui.part.FileEditorInputFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory"
            id="org.eclipse.ui.internal.dialogs.WelcomeEditorInputFactory">
      </factory>
      <factory
            class="org.eclipse.ui.internal.WorkingSetFactory"
            id="org.eclipse.ui.internal.WorkingSetFactory">
      </factory>
</extension>

Copyright IBM Corporation and others 2000, 2003.