Minimales Plug-in

Aussehen und Funktionsweise von "Hello World" in herkömmlichen unformatierten Java-Code ohne die Verwendung einer Benutzerschnittstelle oder eines anderen Gerüsts sind relativ bekannt.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Wie verhält sich dieser Klassiker jetzt im Kontext der Eclipse-Plattform? In diesem Fall darf man sich "Hello World" nicht als in sich selbst enthaltenes Programm vorstellen, sondern muss es als eine Erweiterung der Plattform begreifen. Da mit diesem Plug-in eine Begrüßung ("Hello World!") erfolgen soll, muss ein Konzept entwickelt werden, wie die Workbench mit dieser Begrüßung erweitert werden kann.

Indem die Benutzerschnittstellenkomponenten der Plattform in diesem Zusammenhang intensiver erläutert werden, erhalten Sie umfassende Beschreibungen der Methoden, mit denen Sie die Benutzerschnittstelle der Workbench erweitern und anpassen können. Zunächst soll eine der einfachsten Workbench-Erweiterungen vorgestellt werden: eine Sicht.

Das Workbench-Fenster kann mit einer Art Rahmen für unterschiedliche optische Bestandteile verglichen werden. Diese Bestandteile lassen sich in zwei Hauptkategorien, nämlich Sichten und Editoren (letztere werden später behandelt), untergliedern. Sichten enthalten Informationen über ein Objekt, mit dem der Benutzer in der Workbench arbeitet. Sie ändern häufig ihren Inhalt, und zwar abhängig davon, welche anderen Objekte der Benutzer in der Workbench auswählt.

Sicht "Hello World"

Für das Plug-in "Hello World" soll nun eine eigene Sicht implementiert werden, die den Benutzer mit den Worten "Hello World" begrüßt.

Das Paket org.eclipse.ui und seine Unterpakete enthalten die öffentlichen Schnittstellen, mit denen die Workbench-API für Benutzerschnittstellen definiert wird. Viele diese Schnittstellen sind mit Standardimplementierungsklassen ausgestattet, durch deren Erweiterung Sie einfache Änderungen am System vornehmen können. Im Beispiel von "Hello World" wird die Workbench-Sicht durch eine Anzeigenobjekt erweitert, das eine Begrüßung ausgibt.

Die entsprechende Schnittstelle hierbei ist die Schnittstelle IViewPart. Sie definiert die Methoden, die implementiert werden müssen, um die Workbench durch eine Sicht zu ergänzen. Die Klasse ViewPart stellt eine Standardimplementierung dieser Schnittstelle zur Verfügung. In einer Nutshell ist der Sichtabschnitt für die Erstellung der Fensterobjekte zuständig, die zum Anzeigen der Sicht erforderlich sind.

Die Standardsichten in der Workbench zeigen häufig bestimmte Informationen zu einem Objekt an, das ein Benutzer ausgewählt hat oder in dem er navigiert. Sichten aktualisieren ihren Inhalt gemäß der Aktionen, die in der Workbench stattfinden. Im vorliegenden Fall soll lediglich die Begrüßung "Hello World" ausgegeben werden, daher ist die Sicht relativ einfach strukturiert.

package org.eclipse.examples.helloworld;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;

import org.eclipse.ui.part.ViewPart;



public class HelloWorldView extends ViewPart {
    Label label;
    public HelloWorldView() {
    }
    public void createPartControl(Composite parent) {
        label = new Label(parent, SWT.WRAP);
        label.setText("Hello World");
    }
    public void setFocus() {
        // Mein Fensterobjekt fokussieren.  Bei einem Anzeigenobjekt ist dies nicht sehr
        // sinnvoll, bei einer komplexeren Gruppe von Fensterobjekten
        // sollten Sie jedoch festlegen, welches Objekt fokussiert werden soll.
    }

}

Der Sichtabschnitt erstellt die Fensterobjekte, durch die die Sicht dargestellt wird, in der Methode createPartControl. Im vorliegenden Beispiel wird ein SWT-Anzeigenobjekt erstellt und mit dem Text "Hello World" gefüllt. 

Die Codierungsarbeiten sind hiermit bereits beendet. Die neue Klasse kann jetzt kompiliert werden (bitte vergewissern Sie sich zuvor, dass die JAR-Dateien der Plattform in der IDE- oder Compiler-Umgebung sichtbar sind, damit das Plug-in kompiliert werden kann). Sie müssen jedoch noch definieren, wie die neue Sicht ausgeführt werden soll.

Die neue Sicht sollte in etwa so aussehen:

Wie wird diese Sicht jetzt zur Plattform hinzugefügt?

Plug-in "Hello World"

Die Plattform muss darüber informiert werden, dass sie durch eine Sicht ergänzt werden soll. Zu diesem Zweck wird der Erweiterungspunkt org.eclipse.ui.views erweitert. Die Erweiterung wird durch die Angabe einer Manifestdatei namens plugin.xml registriert, die das Plug-in (inklusive der Position seines Codes) und die hinzugefügte Erweiterung beschreibt.

<?xml version="1.0" ?>
<plugin
    name="Hello World-Beispiel" 
    id="org.eclipse.examples.helloworld"
    version="1.0"
    provider-name="Object Technology International, Inc.">
    <requires>
        <import plugin="org.eclipse.ui" />
    </requires>
    <runtime>
        <library name="helloworld.jar" />
    </runtime>
    <extension point="org.eclipse.ui.views">
        <category 
            id="org.eclipse.examples.helloworld.hello"
            name="Hello" />
        <view 
            id="org.eclipse.examples.helloworld.helloworldview"
            name="Hello Greetings"
            category="org.eclipse.examples.helloworld.hello"
            class="org.eclipse.examples.helloworld.HelloWorldView" />
    </extension>
</plugin>

In dieser Datei werden die Attribute name, id, version und provider-name (Herstellername) für das Plug-in definiert.

Außerdem müssen die erforderlichen Plug-ins aufgelistet werden. Da in Ihrem Plug-in die Workbench und die SWT-API verwendet werden, muss org.eclipse.ui aufgeführt sein. Des Weiteren müssen Sie angeben, wo sich der ausführbare Code befindet. Im Beispiel soll der Code in der Datei helloworld.jar gepackt werden.

Abschließend muss deklariert werden, welchen Erweiterungspunkt das Plug-in ergänzt. Die Erweiterung org.eclipse.ui.views umfasst mehrere unterschiedliche Konfigurationsparameter. Zunächst werden die Parameter vorgestellt, die im Manifest angegeben wurden.

Als Erstes wird eine Kategorie für die Sichterweiterung deklariert. Mit Hilfe von Kategorien werden verwandte Sichten im Workbench-Dialog Sicht anzeigen gruppiert. Im Beispiel wird die eigene Kategorie "Hello" definiert, damit die Sicht in einer eigenen Gruppe angezeigt wird.

Für die Sicht wird dann eine eindeutige ID deklariert, und der Name der Klasse, die die Implementierung der Sicht bereitstellt, muss angegeben werden. Außerdem wird ein Name für die Sicht ("Hello Greetings") definiert, der im Dialog "Sicht anzeigen" und in der Titelleiste der Sicht angezeigt wird.

IDs von Plug-ins

In der Manifestdatei eines Plug-ins werden viele IDs verwendet. Einzelne Erweiterungspunkte definieren häufig Konfigurationsparameter, die IDs benötigen (z. B. die oben verwendete Kategorie-ID des Erweiterungspunktes für Sichten). Außerdem wird eine ID für das Plug-in definiert. Im Allgemeinen sollten Sie für alle Ihre IDs die Präfixe der Java-Paketnamen verwenden, um die Eindeutigkeit unter allen installierten Plug-ins zu gewährleisten.

Der spezifische Name, der nach dem Präfix verwendet wird, kann frei gewählt werden. Wenn das Präfix der Plug-in-ID jedoch mit dem Namen eines Ihrer Pakete identisch ist, sollten Sie die Verwendung von Klassennamen aus diesem Paket vermeiden. Andernfalls können Sie nur schwer erkennen, ob es sich bei einem angezeigten Wert um einen ID-Namen oder einen Klassennamen handelt.

Auch die Verwendung derselben ID für unterschiedliche Konfigurationsparameter des Erweiterungspunktes sollte vermieden werden. Im oben dargestellten Manifest wurde ein gemeinsames Präfix für die ID verwendet (org.eclipse.examples.helloworld), alle IDs selbst sind jedoch eindeutig. Durch diesen Benennungsansatz können Sie die Datei leichter lesen und einfacher feststellen, welche IDs zusammengehören.