Une activité est un groupement logique de fonctions articulé autour d'un type de tâche déterminé. Par exemple, le développement de logiciels Java est une activité généralement réalisée par les utilisateurs de la plate-forme et l'outil JDT définissent un grand nombre de contributions à l'interface utilisateur (vues, éditeurs, perspectives, préférences, etc.) qui ne sont utiles que pour réaliser cette activité. Avant d'observer les mécanismes de définition d'une activité, examinons comment ils servent à "démêler" l'interface utilisateur.
Le concept d'activité est présenté à l'utilisateur, même s'il n'est peut-être par apparent pour un nouvel utilisateur. Lorsqu'une activité est activée sur la plate-forme, les contributions à l'interface utilisateur associées à cette activité sont affichées. Lorsqu'une activité est désactivée sur la plate-forme, ses contributions à l'interface utilisateur ne sont pas affichées. Les utilisateurs peuvent activer et désactiver des activités lorsque cela est nécessaire à l'aide de la page de préférences accessible en sélectionnant Plan de travail>Fonctions (les activités sont appelées "fonctions" dans l'interface utilisateur mais nous utilisons le terme "activité" dans l'API).
Certaines opérations utilisateur servent de points de déclenchement pour activer une activité. Par exemple, la création d'un projet Java peut déclencher l'activation de l'activité de développement Java. Ainsi, les utilisateurs découvrent la nouvelle fonction lorsqu'ils en ont besoin, apprennent progressivement que ces fonctions sont disponibles et distinguent la manière dont elles affectent l'interface utilisateur. Lorsqu'un utilisateur démarre la plate-forme pour la première fois, il est souhaitable que le plus grand nombre possible d'activités soient désactivé, afin que l'application soit aussi simple que possible. Les choix opérés dans la page d'accueil peuvent déterminer les activités à activer.
Nous avons vu (dans la section Perspectives) comment les perspectives sont utilisées pour organiser les différentes présentations des vues et les ensembles d'actions dans les tâches. A quoi servent les activités ? Les perspectives et les activités définissent des sortes de tâches similaires, la principale différence étant la manière dont les contributions à l'interface utilisateur d'un plug-in sont associées à ces perspectives et activités. Les contributions à l'interface utilisateur sont associées à des perspectives dans la définition des extensions de la contribution. En d'autres termes, un plug-in est chargé de déterminer les perspectives affichées et les ensembles d'actions auxquels elles appartiennent. Les plug-ins sont également libres de définir leurs propres perspectives. Même lorsqu'une perspective n'est pas active, l'utilisateur peut accéder aux vues et aux actions associées à la perspective par le biais des commandes comme Afficher la vue.
Les activités constituent un niveau d'organisation plus important. Les contributions individuelles à l'interface utilisateur ne connaissent pas les activités et ne font pas références à ces activités dans la définition de leurs extensions. Au lieu de cela, les activités doivent être configurées à un niveau supérieur comme dans l'intégration/la configuration de la plate-forme ou l'installation du produit. Les plug-ins individuels ne définissent généralement pas de nouvelles activités, sauf si le plug-in est un plug-in de niveau système défini par un intégrateur de systèmes. Dans un scénario classique, un intégrateur de systèmes détermine comment les fonctions sont regroupées pour former des activités et définit les activités qui sont activées par défaut. Les activités sont associées aux contributions à l'interface utilisateur à l'aide de liaisons de motif d'activité, les motifs étant comparés à l'ID des contributions à l'interface utilisateur réalisées par les plug-ins. Ces concepts vont être illustrés dans un exemple.
Les activités sont définies à l'aide du point d'extension org.eclipse.ui.activities. Observons, de manière simplifiée, comment le plug-in de kit SDK Eclipse définit deux activités, l'une pour développer des logiciels Java et l'autre pour développer des plug-ins :
<extension point="org.eclipse.ui.activities"> <activity name="Java Activity" description="Developing Java Software" id="org.eclipse.javaDevelopment"> </activity> <activity name="Plug-in Activity" description="Developing Eclipse Plug-ins" id="org.eclipse.plugInDevelopment"> </activity> ...
Les activités reçoivent un nom et une description qui peuvent être affichés à l'attention de l'utilisateur lorsque celui-ci active et désactive des activités. Il peut arriver autrement que des informations relatives à une activité soient affichées. L'ID de l'activité est utilisé lors de la définition des liaisons de motif ou d'autres relations entre des activités. Par exemple, vous pouvez décider qu'une activité nécessite une autre activité.
<activityRequirementBinding activityId="org.eclipse.plugInDevelopment" requiredActivityId="org.eclipse.javaDevelopment"> </activityRequirementBinding>
La liaison de la configuration requise indique que l'activité de développement de plug-ins ne peut être activée que lorsque l'activité de développement Java est activée. Les activités associées peuvent également être liées dans des catégories, qui sont affichées à l'attention de l'utilisateur lorsque celui-ci utilise des activités.
<category name="Development" description="Software Development" id="org.eclipse.categories.developmentCategory"> </category> <categoryActivityBinding activityId="org.eclipse.javaDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding> <categoryActivityBinding activityId="org.eclipse.plugInDevelopment" categoryId="org.eclipse.categories.developmentCategory"> </categoryActivityBinding>
La catégorie regroupe les activités de développement associées. Cette catégorie est affichée à l'attention de l'utilisateur lorsque celui-ci configure manuellement les activités.
Les activités sont associées aux contributions à l'interface utilisateur à l'aide de la mise en correspondance des motifs. La mise en correspondance des motifs utilisée dans les liaisons de motif d'activité respecte les règles décrites dans le package java.util.regex pour les expressions régulières. Les motifs utilisés par le plan de travail comprennent deux parties. La première partie utilise l'identifiant du plug-in qui fournit l'extension de l'interface utilisateur. La seconde partie est l'ID utilisé par le plug-in proprement dit pour définir la contribution (qui peut inclure ou non l'ID plug-in dans l'identifiant). Le format utilisé est le suivant :
plug-in-identifier + "/" + local-identifierPar exemple, la liaison d'activité ci-dessous indique qu'une contribution à l'interface utilisateur à partir d'un ID plug-in d'outils JDT (org.eclipse.jdt.*) est associée à l'activité de développement Java quel que soit son identifiant local (.*).
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>La liaison suivante est plus spécifique. Elle indique que la contribution appelée javanature définie dans le core JDT (org.eclipse.jdt.core) est associée à l'activité de développement Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\.core/javanature"> </activityPatternBinding>Comme vous pouvez le constater, les liaisons de motif d'activité peuvent être utilisées pour associer des groupes importants de contributions à une activité déterminée ou des contributions très spécifiques à une activité. Les contributions ci-dessous sont affectées par des activités :
La convention utilisée par le plan de travail (ID plug-in + ID local) permet des liaisons aisées aux plug-ins, sans que les dénominations suivent forcément les règles de préfixation des identifiants de contribution à l'interface utilisateur avec l'identifiant de leur plug-in. Les plug-ins qui agissent directement en interaction avec l'API d'activité sont libres d'utiliser leur propre format pour identifier les contributions et pour la mise en correspondance des motifs avec ces noms.
Les activités sont associées pour faciliter les contributions à l'aide de la structure de mise en correspondance utilisée pour les contributions à l'interface utilisateur. La seconde partie de l'identifiant (l'identifiant local) indique le nom du fichier de table des matières. Par exemple, la liaison de motif d'activité ci-dessous associe tous les fichiers de la table des matières fournis par les plug-ins des outils JDT (org.eclipse.jdt.*) à l'activité de développement Java :
<activityPatternBinding activityId="org.eclipse.javaDevelopment" pattern="org\.eclipse\.jdt\..*/.*"> </activityPatternBinding>Lorsque l'activité de développement Java est désactivée, les livres fournis par les plug-ins d'outil JDT ou les sous-livres (fichiers de table des matières simplement liés, ou liés par des livres JDT), même si la contribution provient d'un autre plug-in, ne s'affichent pas dans l'interface utilisateur de l'aide. Les rubriques définies dans ces livres ne s'affichent pas non plus dans les résultats de recherche. Dans le cas où des fichiers de table des matières ne seraient pas affichés comme fichiers de table des matières principaux, mais liés à partir d'un autre fichier de table des matières pour s'afficher sous forme de sous-arborescences dans un livre, la désactivation de l'activité JDT a pour effet de masquer les sous-arborescences. Le livre maître s'affiche pour définir moins de rubriques dans l'interface utilisateur.
Grâce à une liaison plus spécifique, il est possible d'associer des activités à des fichiers de table des matières sélectionnés à partir de plug-ins qui contribuent à plusieurs fichiers de table des matières dans le système d'aide. Par exemple, la liaison de motif d'activité associe les "exemples" de fichiers de table des matières à l'activité d'exemples de développement Java.
<activityPatternBinding activityId="org.eclipse.javaDevelopmentExamples" pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml"> </activityPatternBinding>Avec ce type de liaison de motif, la désactivation de l'activité d'exemples de développement Java masque la section "Exemples" du document "JDT Plug-in Developer Guide".
La prise en charge de l'activité de plan de travail inclut une API permettant d'utiliser les activités définies et de modifier l'état activé. Cette API ne concerne pas la plupart des plug-ins, mais elle est utile pour implémenter une fonction qui permet à l'utilisateur d'utiliser des activités ou pour implémenter les points de déclenchement qui activent une activité déterminée. Il est établi que tout plug-in qui manipule des activités par le biais d'une API connaît plus ou moins bien les manières dont les activités sont configurées pour un produit particulier. Par exemple, le plan de travail lui-même utilise l'API pour déclencher l'activation des activités comme le développement Java. Nous allons découvrir comment le plan de travail utilise l'API d'activité générique pour implémenter des déclencheurs.
Le pilier de toute l'activité dans le plan de travail est IWorkbenchActivitySupport. La prise en charge de l'activité fonctionne en tandem avec IActivityManager. Les plug-ins peuvent obtenir l'instance de prise en charge de l'activité à partir du plan de travail et le gestionnaire d'activités à partir de ce niveau.
IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport(); IActivityManager activityManager = workbenchActivitySupport.getActivityManager();Le fragment de code ci-dessous active l'activité de développement Java (si elle n'est pas déjà activée). Il présente une version simplifiée d'un déclencheur.
... // l'utilisateur a effectué une opération liée à Java. Permet d'activer l'activité Java. Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds()); if (enabledIds.add("org.eclipse.javaDevelopment")) workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);
IActivityManager définit également le protocole permettant d'extraire tous les ID activité et catégorie définis et d'extraire IActivity ou ICategory pour un ID particulier. Ces objets peuvent être utilisés pour balayer la définition d'une activité ou d'une catégorie dans l'API, comme l'extraction des liaisons de motif ou les liaisons de configuration requise. Les modules d'écoute peuvent être enregistrés dans le gestionnaire d'activités ou dans les activités et catégories même afin de détecter les modifications apportées dans la définition d'une activité déterminée ou dans le gestionnaire d'activités lui-même. Pour plus d'informations, reportez-vous au package org.eclipse.ui.activities.