Rozszerzanie uniwersalnego wprowadzenia

Przy uruchamianiu uniwersalnego powitania skonfigurowanego w sposób opisany powyżej można zauważyć, że całość stron drugiego poziomu, które stanowią rozgałęzienie strony głównej, ma pusty obszar treści. Wynika to z faktu, że współużytkowane powitanie nie ma własnej treści. Obszary te są wypełniane przy użyciu rozszerzeń konfiguracji wprowadzenia.

Tradycyjnym sposobem wnoszenia rozszerzeń konfiguracji jest określanie pełnej ścieżki elementu zakotwiczenia na stronie docelowej. Ta metoda jest nadal obsługiwana, ale okazała się zbyt delikatna. Jak wcześniej wspomniano, określanie dokładnego miejsca, w którym znajdzie się rozszerzenie na stronie docelowej, jest przedwczesne z punktu widzenia autorów rozszerzeń. Autorzy mogą nie wiedzieć, w jakich produktach znajdą się ich rozszerzenia, a więc nie są świadomi, gdzie powinny być one wyświetlane, albowiem będzie to zależało od koncepcji danego produktu. W uniwersalnym powitaniu tę decyzję podejmują autorzy produktu. Autorzy rozszerzeń mogą teraz określić niepełną ścieżkę docelową, co pozwoli autorom produktu wypełnić puste miejsca.

Rozszerzenia konfiguracji, które chcą użyć późnego rozwiązywania ścieżki docelowej, muszą spełniać trzy warunki:

  1. Rozszerzenie konfiguracji musi określić unikalny identyfikator przy użyciu atrybutu 'id'. Rozszerzenia bez identyfikatora będą ignorowane. Jest to istotne, ponieważ za pomocą identyfikatora autorzy produktów będą odwoływać się do rozszerzenia.
  2. Rozszerzenie konfiguracji musi określić przyjazną dla użytkownika nazwę przy użyciu atrybutu 'name'. Jest to istotne, jeśli wykorzystywana będzie strona preferencji dostosowywania, ponieważ rozszerzenia będą widoczne w interfejsie użytkownika.
  3. Ścieżka docelowa powinna mieć format: "id_strony/@", gdzie 'id_strony' jest identyfikatorem strony docelowej. Jeśli w ścieżce docelowej wykryty zostanie łańcuch '/@', system spróbuje dynamicznie rozwiązać ścieżkę, aby otrzymać oczekiwaną formę pełną.

Możliwość rozwiązywania ścieżek docelowych rozszerzeń jest nową cechą Eclipse dodaną w wersji 3.2, aby uniwersalne powitalnie oferowało większe możliwości użytkownikowi. Cecha sama w sobie jest ogólna, tak więc może być wykorzystywana w innych implementacjach stron powitania, a nie tylko w uniwersalnym wprowadzeniu. W wersji 3.2 platformy Eclipse klasa CustomizableIntroPart może przyjmować opcjonalną klasę dostosowywania wprowadzenia, która z kolei może wpływać na zachowanie macierzystej klasy na kilka sposobów. Jedną z ról klasy dostosowywania jest realizowanie opóźnionego rozwiązywania ścieżki docelowej. Oczywiście z punktu widzenia autorów produktów jest to jedynie szczegół implementacji, ponieważ w implementacji uniwersalnego powitania opóźnione rozwiązywanie ścieżki docelowej jest zrealizowane za pomocą opisanego wcześniej pliku danych. Plik ten jest zapisywany przy użyciu preferencji org.eclipse.ui.intro/INTRO_DATA preference.

Plik 'INTRO_DATA' wykorzystuje format XML i umożliwia autorom produktów sterowanie treścią głównych stron powitania. Autorzy elementów wnoszonych na strony powitania muszą jedynie określić identyfikator strony w swoich ścieżkach docelowych. Pozostałe dane są definiowane w tym pliku. Zawiera on sekwencję elementów 'page', z których każdy zawiera pewną liczbę elementów 'group'. Elementy grup określają ścieżkę względem strony oraz zawierają elementy wnoszone do obiektów potomnych. Elementy wnoszone służą do określania dwóch aspektów:

   <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>

W powyższym przykładzie elementy wnoszone 'foo1', 'bar' i 'foo2' będą umieszczone w lewej kolumnie, zaś 'foo3', 'foo4' i 'foo5' w prawej kolumnie strony. Kolejność elementów wnoszonych jest również pobierana z opisywanego pliku. Elementy wnoszone są dodatkowo klasyfikowane na podstawie atrybutu importance, który może przyjmować cztery wartości: high, medium, low i callout, przy czym wartość low jest wartością domyślną. Każda wartość jest przypisana do sposobu prezentacji, który wyświetla element na stronie w określony sposób. Pierwsze trzy wartości to po prostu różne poziomy ważności według autora produktu (należy zauważyć, że ten sam element wnoszony może otrzymać inną klasyfikację ważności w dwóch różnych produktach). Ostatnia wartość (callout) służy do wyróżnienia elementów wnoszonych zupełnie innego rodzaju (na przykład oferujących odsyłacze do filmów wideo lub animacji).

Elementy wnoszone, których nie ma na liście, są dopisywane po tych, które się na niej znajdują, i otrzymują niską ważność. Jest to istotne w przypadku elementów wnoszonych dodanych po dostarczeniu produktu - one też muszą być wyświetlane.

Elementy wnoszone niezwiązane z projektem można ukryć, jawnie definiując je jako elementy potomne elementu 'hidden'.

Wnoszenie elementów do rozszerzeń

Rozszerzenie wnoszone do jednej ze stron głównych samo może zawierać zakotwiczenia umożliwiające innym dodawanie treści. Powoduje to problemy, ponieważ ostateczna rozwiązana ścieżka treści w rozszerzeniu nie jest z góry znana. Z tego względu ścieżki docelowe treści w rozszerzeniach, które korzystają z opóźnionego rozwiązywania ścieżek, same też muszą zostać rozwiązane:

<?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="Odsyłacz do dodatkowego przeglądu" url="http://org.eclipse.ui.intro/showPage?id=extraOverview"
					  id="extra-overview">
      	    <text>Wyświetlanie dodatkowej strony trzeciego poziomu</text>

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

Aby wnieść elementy do zakotwiczenia 'additions' w powyższym rozszerzeniu, należy użyć następującej ścieżki: "overview/@extra/extra-group/additions". Segment '@extra' zostanie zastąpiony rozwiązaną ścieżką rozszerzenia z identyfikatorem 'extra' na stronie 'overview'. Jeśli na przykład rozszerzenie zostanie umieszczone w lewym górnym segmencie strony, rozwiązaną ścieżką będzie: "overview/page-content/upper-left/extra-group/additions".