Die Einführungsunterstützung ist eine Gruppe von Erweiterungspunkten und Workbench-Komponenten, über die Plug-ins spezielle Seiten definieren können, die neuen Benutzern ein Plattformprodukt vorstellen. Die Einführungsinformation wird normalerweise beim erstmaligen Start eines Produkts angezeigt. Die Einführungsunterstützung wird normalerweise auf Produktebene konfiguriert, obwohl es auch möglich ist, über einzelne Plug-ins Einführungsinformationen zu bekannten Produkteinführungskonfigurationen hinzuzufügen.
Aus Sicht der Workbench ist das Stammelement der Einführungsunterstützung die Intro-Komponente. Diese Komponente wird in einer Erweiterungsdefinition spezifiziert. Bei der Initialisierung erstellt die Workbench eine Einführungssite, die Platz für die Einführungsseiten reserviert. Die Implementierung der Intro-Komponente wird über die Produktkonfigurationsinformation bestimmt. Nachdem eine Intro-Komponente angezeigt wurde, kann sie zwei verschiedene Modi annehmen:
Sobald eine Intro-Komponente erstellt wurde, muss sie mit Einführungsinformationen konfiguriert werden. Dies wird über die Einführungskonfiguration erreicht, die auch über eine Erweiterung ergänzt wird. Einzelne Plug-ins können ihre eigenen Erweiterungen verwenden, um die ursprüngliche Produkteinführungskonfiguration zu ergänzen.
Um ein besseres Verständnis dieser Konzepte zu erlangen, wird im Folgenden die SDK-Einführungsseite der Plattform untersucht.
Der generische Mechanismus zur Erstellung einer eigenen Einführungsunterstützung für ein gegebenes Produkt setzt sich aus der Schnittstelle IIntroPart und dem Erweiterungspunkt org.eclipse.ui.intro zusammen. Hauptzweck dieser Erweiterung ist die Definition einer Klasse, die IIntroPart implementiert, sowie die Spezifikation eines Verknüpfung zwischen einer Produkt-ID und einer Intro-Komponente. Die folgende Ergänzung definiert beispielsweise eine hypothetische Intro-Komponente, die beim Systemstart in der Workbench angezeigt werden soll:
<extension point="org.eclipse.ui.intro"> <intro class="com.example.SampleIntroPart" id="someId"> icon="someIcon.gif" </intro> <introProductBinding introId="someId" productId="com.example.someProductId"> </introProductBinding> </extension>Diese Ergänzung definiert zunächst die Intro-Komponente und weist Ihr die ID "someId" zu. Danach verbindet sie diese Intro-Komponente mit einem Produkt mit der ID "com.example.someProductId". Wenn die Plattform hochgefahren wird, erstellt die Workbench ein Exemplar der im Attribut class bestimmten Klasse, das dem Benutzer als Einführung für das Produkt dargestellt wird. Dies ist eine Integration auf niedrigster Ebene mit der Schnittstelle IIntroPart.
Die Plattform liefert eine eigene Implementierung von IIntroPart mit Namen CustomizableIntroPart, über die Inhalt und Darstellung der Einführung angepasst werden können. Der folgende Ausschnitt definiert die Intro-Komponente für die Workbench. Auf die Vorgehensweise bei der Implementierung einer Intro-Komponente soll hier nicht näher eingegangen werden, da der Schwerpunkt hier auf der Definition des Inhalts der Einführung liegt. (Detaillierte Informationen finden Sie bei Bedarf der Dokumentation und Javadoc-Datei für Erweiterungspunkte, auf die weiter oben verwiesen wurde.)
<extension point="org.eclipse.ui.intro"> <intro class="org.eclipse.ui.intro.config.CustomizableIntroPart" id="org.eclipse.platform.intro"> </intro> <introProductBinding introId="org.eclipse.platform.intro" productId="org.eclipse.platform"> </introProductBinding> </extension>Die voranstehende Ergänzung definiert die Komponente CustomizableIntroPart als Intro-Komponente, die für die Eclipse-SDK-Plattform verwendet werden soll. Der Rest dieser Erläuterung zeigt, wie diese Komponente verwendet und erweitert werden kann.
Über die Komponente CustomizableIntroPart der Plattform können Inhalt und Darstellung der Einführung unter Verwendung des Erweiterungspunkts org.eclipse.ui.intro.config angepasst werden. (Diese Einführungskonfiguration kann über den Erweiterungspunkt org.eclipse.ui.intro.configExtension erweitert werden.) Mithilfe dieser Struktur können Plug-in-Entwickler sich auf die Entwicklung ihrer Einführung konzentrieren und müssen kein Intro-Komponentenschema von Grund auf implementieren. Wird eine andere Einführungsklasse bestimmt, so werden diese beiden Erweiterungspunkte nicht verwendet und die angegebene Klasse muss ein eigenes Schema für Inhaltsformat und -konfiguration implementieren.
org.eclipse.ui.intro.config beschreibt die ID der Einführungskonfiguration, in der der neue Inhalt angezeigt werden soll, sowie den Namen der XML-Datei, in der die spezielle Definition des Einführungsinhalts enthalten ist. Für eine gegebene Komponente CustomizableIntroPart sollte jeweils nur eine Einführungskonfiguration definiert werden. (Nur die erste gefundene Einführungskonfiguration wird in in einer Komponente des Typs CustomizableIntroPart angezeigt.)
<extension id="intro" point="org.eclipse.ui.intro.config"> <config introId="org.eclipse.platform.intro" id="org.eclipse.platform.introConfig" content="$nl$/introContent.xml"> <presentation home-page-id="root" standby-page-id="standby"> <implementation ws="win32" style="css/shared.css" kind="html" os="win32"> </implementation> <implementation kind="swt"> </implementation> </presentation> </config> </extension>Der Pfad der Datei wird relativ zum Verzeichnis des Plug-ins angegeben. (Beachten Sie die Verwendung der Variable$nl$ im Verzeichnisnamen, was bedeutet, dass die Datei in einem Verzeichnis untergebracht wird, das der Landessprache der Zielumgebung vorbehalten ist.)
Über die Konfigurierungserweiterung können Sie sowohl Inhalt als auch Darstellung des Inhalts bestimmen. Während der Schwerpunkt des Elements content auf der Definition von Seiten liegt, beschreibt das Element presentation darstellungsbezogene Attribute, über die beschrieben wird, wie Seiten angezeigt werden sollen. Die Seiten-ID der Einführungsstartseite muss (im vollen Modus) angegeben werden, die ID der Bereitschaftsseite (im Bereitschaftsmodus) ist optional. Die Startseite ist die Seite, die beim ersten Start des Produkts angezeigt wird. Eine Darstellung kann eine oder mehrere Implementierungen für die Anzeige von Seiten angeben. Implementierungen beziehen sich jeweils auf eine Plattform oder ein Fenstertechniksystem, wodurch plattformspezifische Komponenten bei der Darstellung von Inhalten verwendet werden können. Für die Windows-Plattform wird beispielsweise eine HTML-basierte Implementierung für Einführungsinhalte verwendet, da sie über ein leistungsfähiges HTML-Browser-Fensterobjekt verfügt. Andere Plattformen, denen diese Funktion fehlt, verwenden eine SWT-basierte Implementierung, die Seitenbeschreibung einem SWT-basierten Formular zuordnet. Eine Implementierung, die weder ein Fenstertechniksystem noch ein Betriebssystem bestimmt, wird als generische Implementierung betrachtet; eine solche Implementierung muss unbedingt definiert werden, um sicherzustellen, dass auf allen Plattformen eine Einführung angezeigt wird. Die Workbench sucht zunächst nach einer Implementierung, die mit dem aktuellen Betriebs- und Fenstertechniksystem übereinstimmt. Wird keine gefunden, so greift sie auf die generische Implementierung zu. Da die meisten Details in diesem Zusammenhang auf Produktkonfigurationsebene gehandhabt werden, werden sie an dieser Stelle nicht weiter erläutert werden.
Nun wird der Inhalt selbst unter die Lupe genommen. Inhalt wird in der Form von Seiten beschrieben. Alle Seiten verfügen über ein Attribut id. Dies ist die ID, die bei der Definition der Start- und Bereitschaftsseiten verwendet wird, ebenso wie an allen anderen Stellen, an denen auf eine bestimmte Seite verwiesen wird. Ansonsten hängen die relevanten Attribute von der Art der definierten Seite ab. Für Seiten gibt es zwei Grundtypen:
Einen Eindruck vom Format der Inhaltsdefinitionen verschaffen Sie sich am besten, indem Sie die Implementierungen in der SDK untersuchen. Der folgende Ausschnitt zeigt lediglich den ersten Teil des Inhalts einer SDK-Stammseite. Dies ist die erste angezeigte Einführungsseite.
<introContent> <page alt-style="css/root_swt.properties" style="css/root.css" id="root" style-id="page"> <title style-id="intro-header">Welcome to Eclipse Platform 3.0</title> <group id="links-background"> <group id="page-links"> <link label="Overview" url="http://org.eclipse.ui.intro/showPage?id=overview" id="overview" style-id="left"> <text>Find out what Eclipse is all about</text> </link> <link label="Tutorials" url="http://org.eclipse.ui.intro/showPage?id=tutorials" id="tutorials" style-id="left"> <text>Let us guide you through Eclipse end-to-end tutorials</text> </link> <link label="Samples" url="http://org.eclipse.ui.intro/showPage?id=samples" id="samples" style-id="right"> <text>Explore Eclipse development through code samples</text> </link> <link label="Whats New" url="http://org.eclipse.ui.intro/showPage?id=news" id="news" style-id="right"> <text>Find out what is new in this release</text> </link> </group> </group>
Elemente einer Seite können auch über die Funktion filteredFrom aus einer bestimmten Implementierung herausgefiltert werden. Auf diese Art können Seitenentwickler das Design in Hinblick auf bestimmte Plattformen entwerfen. Viele andere leistungsfähige Attribute stehen für die Beschreibung einer Seite und ihrer Inhalte zur Verfügung. Eine vollständige Übersicht über gültige Elemente, Unterelemente und ihre Attribute finden Sie in der Dokumentation für Erweiterungspunkte unter org.eclipse.ui.intro.config und der entsprechenden Formatspezifikation der Einleitungsinhaltsdatei.
Eine Einführungskonfiguration kann auf drei Arten erweitert werden:
Plug-ins können den Einführungsinhalt einer Seite, die an anderer Stelle definiert ist, ergänzen. Die definierende Seite muss allerdings ein Attribut anchor definieren, das als Positionsplatzhalter für neuen Inhalt fungiert. Die SDK-Übersichtsseite definiert zwei Attribute des Typs 'anchor', über die JDT- und PDE-bezogene Elemente zur Übersichtsseite hinzugefügt werden können.
<group id="page-content"> <text style-id="page-title" id="page-title">OVERVIEW</text> <text style-id="page-description" id="page-description">Eclipse ist eine Art universelle Tool-Plattform - eine offene, erweiterbare IDE für alles und gar nichts. Sie stellt eine mit vielen Features ausgestattete Entwicklungsumgebung zur Verfügung, mit der Anwendungsentwickler effizient Tools erstellen können, die sich nahtlos in die Eclipse-Plattform integrieren lassen.</text> <group id="overview-links"> <link label="Workbench basics" url="http://org.eclipse.ui.intro/showHelpTopic?id=/org.eclipse.platform.doc.user/concepts/concepts-2.htm" id="basics"> <text>Learn about basic Eclipse workbench concepts</text> </link> <link label="Team support" url="http://org.eclipse.ui.intro/showHelpTopic?id=/org.eclipse.platform.doc.user/concepts/concepts-26.htm" id="team"> <text>Find out how to collaborate with other developers</text> </link> <anchor id="jdtAnchor"/> <anchor id="pdeAnchor"/> </group> </group>Plug-ins, die Inhalt zur Seite hinzufügen, können auf diese Attribute des Typs 'anchor' verweisen. Inhalt wird über die Erweiterung org.eclipse.ui.intro.configExtension hinzugefügt. Dieser Erweiterungspunkt erweitert nicht nur den Inhalt der Seite, sondern bietet auch die Möglichkeit, Bereitschaftsinhaltskomponenten und angepasste Aktionen zu ergänzen.
Zur Erweiterung einer bestehende Einführungskonfiguration kann das Element configExtension verwendet werden. In diesem Element bestimmen Sie die configId der zu ergänzenden Einführungskonfiguration sowie die Inhaltsdatei, die den neuen Inhalt beschreibt.
<extension point="org.eclipse.ui.intro.configExtension"> <configExtension configId="org.eclipse.platform.introConfig" content="$nl$/overviewExtensionContent.xml"/> ... </extension>Das Format der Inhaltsdatei ähnelt stark der Datei mit dem Einführungskonfigurationsinhalt. Der einzige Unterschied besteht darin, dass sie ein Element extensionContent enthalten muss, das den Pfad zum Anker definiert, an dem der Erweiterungsinhalt eingefügt werden soll.
<introContent> <extensionContent alt-style="css/swt.properties" style="css/overview.css" path="overview/page-content/overview-links/jdtAnchor"> <link label="Java development" url="http://org.eclipse.ui.intro/showHelpTopic?id=/org.eclipse.jdt.doc.user/gettingStarted/qs-BasicTutorial.htm" id="java"> <text>Get familiar with developing Java programs using Eclipse</text> </link> </extensionContent> </introContent>Nachdem ein Produkt angepassten Inhalt an den vordefinierten Ankerpunkte einer Einführung ergänzt hat, kann es sich an diese Einführung über den oben besprochenen Erweiterungspunkt org.eclipse.ui.intro binden. Wenn das Produkt ausgeführt wird, wird die erweiterte Einführung mit dem zusätzlichen Inhalt angezeigt. Hierdurch kann ein Produkt sein eigenes Branding und produktspezifische Informationen bieten, und dafürdie Einführung eines ähnlichen Produkts in Kombination mit eigenen Schlüsselinhalten verwenden.
Ein Intro könnte auch selektiv Teile der Einführung eines zusammengehörigen Produkts einbinden. In diesem Fall würde das Produkt seine eigene Einführung und Einführungskonfiguration definieren und dann auf wichtige Elemente verweisen, die in der Konfiguration einer anderen Einführung definiert sind, indem es ein Element include in der Inhaltsdatei verwendet. Dieser Mechanismus ist in Situationen nützlich, in denen zusammengehörige Produkte aufeinander aufbauen und Benutzer der Produkte auf einer höheren Ebene in wesentliche Konzepte eingeführt werden müssen.
Plug-ins können auch eine Komponente implementieren, die alternativen Inhalt anzeigt, wenn sich die Einführungsseite im Bereitschaftsmodus befindet. Die Plattform definiert beispielsweise eine Bereitschaftskomponente, die einen Spickzettel für verwandte Einführungsinhalte anzeigt. Die Komponente wird über einen Link auf die Seite mit einer speziellen URL gestartet. Bereitschaftskomponenten werden über eine URL gestartet, die einen speziellen Befehl für die Anzeige einer Bereitschaftskomponente enthält, z.B. http://org.eclipse.ui.intro/showStandby?partId=somePartId. Die Komponente ist im Unterelement standbyContentPart der Erweiterung org.eclipse.ui.intro.configExtension definiert. Für die Komponente müssen die Attribute id, pluginId und class angegeben werden. Die Klasse muss IStandbyContentPart implementieren. Der folgende Ausschnitt zeigt, wie die Plattform eine Bereitschaftskomponente für die Anzeige von Spickzetteln definiert.
<extension point="org.eclipse.ui.intro.configExtension"> <standbyContentPart id="org.eclipse.platform.cheatsheet" class="org.eclipse.platform.internal.CheatSheetStandbyContent" pluginId="org.eclipse.platform"/> </extension>Dieser Spickzettel könnte von einer Einführungsseite über ein Unterelement link mit der URL http://org.eclipse.ui.intro/showStandby?partId=org.eclipse.platform.cheatsheet&input=org.eclipse.pde.helloworld gestartet werden. Diese IntroURL würde die Bereitschaftsinhaltskomponente "org.eclipse.platform.cheatsheet" starten und die entsprechende Eingabe auf "org.eclipse.pde.helloworld" setzen. Die detaillierte Vorgehensweise bei der Implementierung einer Bereitschaftskomponente würde den Rahmen dieser Erläuterung sprengen. Weitere Informationen finden Sie unter IStandbyContentPart und den verwandten Klassen.
Über den Erweiterungspunkt org.eclipse.ui.intro.configExtension können Plug-ins ihre eigenen angepassten Aktionen ergänzen, die dann als URL-Wert für ein Link-Element in einer Seite verwendet werden können. Betrachten Sie beispielsweise den folgenden Link:
http://org.eclipse.ui.intro/runAction?pluginId=org.eclipse.pde.ui&class=org.eclipse.pde.ui.internal.samples.ShowSampleAction&id=org.eclipse.sdk.samples.swt.examples
Diese IntroURL führt eine Aktionsklasse mit Namen ShowSampleAction aus, die sich in einem Paket "org.eclipse.pde.ui.internal.samples" im Plug-in "org.eclipse.pde.ui" befindet. Die ID der auszuführenden Probe ist "org.eclipse.sdk.samples.swt.examples".
Um eine angepasste Version dieser Einführungs-URL zu definieren, können Sie das folgende Befehlsformat verwendet:
<extension point="org.eclipse.ui.intro.configExtension"> <action name="myCommand" replaces="runAction?pluginID=org.eclipse.pde.ui&class=org.eclipse.pde.ui.internal.samples.ShowSampleAction"> </action> </extension>Mit der voranstehenden Erweiterung können Sie nun die folgende URL verwenden, um dieselbe Aktion auszuführen:
http://org.eclipse.ui.intro/myCommand?id=org.eclipse.sdk.samples.swt.examples
Die Aktion "myCommand" wird durch den Wert des Attributs replaces ersetzt, und alle übrigen URL-Parameter werden am Ende angefügt. Nachdem die Ersetzung durchgeführt wurde, wird die resultierende URL wieder folgendermaßen erweitert:
http://org.eclipse.ui.intro/runAction?pluginId=org.eclipse.pde.ui&class=org.eclipse.pde.ui.internal.samples.ShowSampleAction&id=org.eclipse.sdk.samples.swt.examples