Extension de l'introduction universelle

Lorsque vous lancez la page de bienvenue universelle, qui est configurée comme indiqué précédemment, vous remarquerez que tous les éléments de la page de second niveau qui est branchée à la page racine possèdent une zone de contenu vide. Cela s'explique par le fait que la page de bienvenue partagée ne possède pas de contenu propre. Ces zones sont alimentées à l'aide des extensions de configuration d'introduction.

La manière classique de contribuer des extensions de configuration consiste à indiquer un chemin d'accès complet à l'élément d'ancrage situé dans la page cible. Cette méthode est encore prise en charge, mais s'est avérée quelque peu fragile. Comme cela a été mentionné précédemment, l'indication d'un emplacement précis pour l'extension dans la cible est prématurée pour les créateurs d'extensions. Ils risquent de ne pas connaître tous les produits dans lesquels leur extension sera utilisée. Par conséquent, ils ne savent pas où ils doivent apparaître en selon l'objectif de chaque produit. Dans la page de bienvenue universelle, cette décision est laissée aux créateurs de produits. Les créateurs d'extension ont désormais la possibilité d'indiquer un chemin cible incomplet, ce qui permet au créateur d'un produit de compléter les zones vides.

Les extensions de configuration souhaitant utiliser une résolution de chemin tardive doivent remplir les trois conditions suivantes :

  1. L'extension de configuration doit indiquer un identificateur unique à l'aide de l'attribut 'id'. Les extensions sans id seront ignorées. Ceci est important car l'ID sera utilisé pour désigner l'extension par le créateur du produit.
  2. L'extension de configuration doit indiquer un nom convivial à l'aide de l'attribut 'name'. Ceci est important si la préférence de personnalisation est utilisée car les extensions s'afficheront dans l'interface utilisateur.
  3. Le chemin cible doit respecter le format suivant : "page_id/@" où 'page_id' correspond à l'identificateur de la page cible. Lorsque '/@' est détecté dans le chemin cible, une tentative de résolution dynamique du chemin sera effectuée dans la forme complète attendue.

La capacité à résoudre les chemins cible d'extension est une nouvelle fonction de support d'introduction dans Eclipse 3.2, ajoutée pour rendre la page de bienvenue universelle plus performante. La fonction proprement dite est générique dans le sens où elle peut être utilisée dans d'autres implémentations de page de bienvenue, pas seulement la page de bienvenue universelle. Dans Eclipse 3.2, CustomizableIntroPart peut accepter une classe de personnaliseur d'introduction facultative qui peut affecter son comportement de différentes manières. L'un des rôles du personnaliseur est d'effectuer une résolution de chemin cible tardive. Bien entendu, en ce qui concerne les créateurs de produits, il ne s'agit qu'un détail d'implémentation car dans l'implémentation de la page de bienvenue, la résolution de chemin cible tardive s'effectue à l'aide du fichier de données mentionné précédemment. Ce fichier est enregistré à l'aide de la préférence org.eclipse.ui.intro/INTRO_DATA.

Le fichier 'INTRO_DATA' utilise le format XML et permet aux créateurs de produit de contrôler le contenu des pages de bienvenue principales. Les créateurs de contribution d'accueil sont invités à indiquer uniquement l'ID de page dans leurs chemins cible. Le reste est défini dans ce fichier. Le fichier contient une suite d'éléments 'page', chacun possédant un nombre d'éléments 'group'. Les éléments de groupe indiquent le chemin relatif à la page et comportent des contributions pour les éléments enfant. Les éléments de contribution permettent d'indiquer deux aspects :

   <extensions>
      <page id="overview">
         <group path="page-content/top-left">
            <extension id="foo1" importance="high"/>
            <extension id="bar"  importance="high"/>
            <extension id="foo2" importance="medium"/>
         </group>
         <group path="page-content/top-right">
            <extension id="foo3" importance="low"/>
            <extension id="foo4" importance="low"/>
            <extension id="foo5" importance="callout"/>
         </group>
         <hidden>
            <extension id="foo6"/>
            <extension id="foo7"/>
         </hidden>
      </page>
      <page id="whatsnew">
      ...
      </page>
   </extensions>

Dans l'exemple ci-dessus, les contributions 'foo1', 'bar' et foo2' seront situées à gauche et 'foo3', 'foo4' et 'foo5' seront situées dans la colonne de droite de la page. L'ordre relatif des contributions est également extrait de ce fichier. Par ailleurs, les contributions sont classées selon l'attribut importance qui peut avoir quatre valeurs possibles : high, medium, low et callout, low étant la valeur par défaut. A chaque valeur correspond une présentation qui la positionne sur la page. Les trois premières valeurs sont simplement des niveaux d'importance différents en fonction du créateur du produit (notez qu'une même contribution peut recevoir une classification d'importance différente dans deux produits distincts). La dernière valeur (callout) est utilisée pour distinguer les contributions de nature complètement différente (par exemple, une contribution qui offre des liens vers des vidéos ou une animation).

Les contributions qui ne sont pas répertoriées sont ajoutées à la fin de la liste des contributions et reçoivent une valeur de faible importance. Ceci est important pour les contributions ajoutées après la commercialisation du produit. Elles doivent encore s'afficher.

Les contributions qui ne sont pas utiles pour le projet peuvent être masquées en les répertoriant de manière explicite en tant qu'enfants de l'élément 'masqué'.

Contribution dans des extensions

Une extension ajoutée à l'une des pages racine peut également contenir des ancrages, permettant ainsi à d'autres d'ajouter du contenu. Cette situation pose problème dans la mesure où le chemin résolu final du contenu de l'extension n'est pas connu à l'avance. Pour cette raison, les chemins cible du contenu dans les extensions qui utilisent la résolution de chemin tardive doivent eux-mêmes être résolus :

<?xml version="1.0" encoding="utf-8" ?>
<introContent>
   <extensionContent id="extra" name="Extra" alt-style="css/swt.properties" style="css/overview.css" path="overview/@">
      <group id="extra-group" style-id="content-group">
         <link label="Extra Overview link" url="http://org.eclipse.ui.intro/showPage?id=extraOverview" 
					  id="extra-overview">
      	    <text>Showing the third-level extra page for overview</text>

         </link>
         <anchor id="additions"/>
      </group>
   	</extensionContent>
</introContent>

Pour contribuer dans l'ancrage 'additions' dans l'extension précédente, nous devons utiliser le chemin suivant : "overview/@extra/extra-group/additions". Le segment '@extra' sera remplacé avec le chemin résolu de l'extension par l'élément 'extra' d'ID dans la page 'overview'. Par exemple, si l'extension est placée dans le segment supérieur gauche de la page, le chemin résolu sera : "overview/page-content/upper-left/extra-group/additions".