Aktivitäten

Eine Aktivität ist eine logische Gruppierung von Funktionen, die mit der Ausführung einer bestimmten Task zusammenhängen. Die Entwicklung von Java-Software ist beispielsweise eine Aktivität, die häufig von Benutzern der Plattform ausgeführt wird, und JDT definiert viele Benutzerschnittstellenergänzungen (Sichten, Editoren, Perspektiven, Benutzervorgaben, etc.), die nur für die Ausführung dieser Aktivität nützlich sind. Bevor die Vorgehensweise bei der Definition einer Aktivität erläutert wird, soll in einem ersten Schritt dargestellt werden, wie diese Elemente verwendet werden, um die Benutzerschnittstelle "aufzuräumen".

Das Konzept einer Aktivität ist für den Benutzer offengelegt, auch wenn es dem ungeübten Benutzer noch nicht so offensichtlich erscheinen mag. Wenn eine Aktivität in der Plattform aktiviert wird, werden die Benutzerschnittstellenergänzungen, die dieser Aktivität zugeordnet sind, angezeigt. Wenn eine Aktivität in der Plattform gesperrt ist, werden die Benutzerschnittstellenergänzungen nicht angezeigt. Benutzer können Aktivitäten über die Benutzervorgabenseite Workbench>Funktionalität je nach Bedarf aktivieren oder sperren. (Aktivitäten werden in der Benutzerschnittstelle als "Funktionen" bezeichnet, obwohl in der API der Ausdruck "Aktivität" verwendet wird).

Bestimmte Benutzeroperationen fungieren als Auslösepunkte für die Aktivierung einer Aktivität. Die Erstellung eines neuen Java-Projekts könnte beispielsweise die Aktivierung der Java-Entwicklungsaktivität auslösen. Auf diese Art werden Benutzer mit neuen Funktionen erst dann vertraut gemacht, wenn sie sie tatsächlich benötigen. Auf diese Art lernen sie mehr über verfügbare Aktivitäten und deren Einfluss auf die Benutzerschnittstelle. Wenn ein Benutzer die Plattform zum ersten Mal startet, sollten so viele Aktivitäten wie möglich gesperrt sein, damit die Anwendung so einfach wie möglich ist. Über Auswahlmöglichkeiten auf der Begrüßungsseite kann bestimmt werden, welche Aktivitäten aktiviert werden sollten.

Aktivitäten und Perspektiven

Es wurde bereits (unter Perspektiven) dargestellt, wie Perspektiven verwendet werden, um verschiedene Sichtlayouts und Aktionssets zu Tasks zu organisieren. Wozu werden also Aktivitäten benötigt? Perspektiven und Aktivitäten definieren zwar ähnliche Arten von Tasks, sie unterscheiden sich aber darin, wie ihnen Benutzerschnittstellenergänzungen für ein Plug-in zugeordnet werden. Benutzerschnittstellenergänzungen werden Perspektiven in der Erweiterungsdefinition der Ergänzung zugeordnet. Dies bedeutet, dass ein Plug-in bestimmt, zu welchen Perspektiven seine Sichten und Aktionssets gehören. Plug-ins haben auch die Freiheit, ihre eigenen Perspektiven zu definieren. Auch wenn eine Perspektive nicht aktiv ist, kann der Benutzer auf die der Perspektive zugeordneten Sichten und Aktionen über Befehle wie z.B. Show View zugreifen.

Aktivitäten stellen eine höhere Ebene der Organisation dar. Einzelne Benutzerschnittstellenergänzungen sind nicht über Aktivitäten unterrichtet und verweisen in ihren Erweiterungsdefinitionen nicht auf Aktivitäten. Es wird vielmehr davon ausgegangen, dass Aktivitäten auf einer höheren Ebene konfiguriert werden, z.B. bei der Integration oder Konfigurierung der Plattform oder der Installation eines Produkts. Einzelne Plug-ins definieren normalerweise keine neuen Aktivitäten, es sei denn, bei dem Plug-in handel es sich um ein Plug-in auf Systemebene, das durch einen Systemintegrator definiert wurde. In einem typischen Szenario bestimmt ein Systemintegrator, wie Funktionalität zu Aktivitäten gruppiert wird und welche Funktionen standardmäßig aktiviert sein sollen. Aktivitäten werden Benutzerschnittstellenergänzungen über Aktivitätsmusterbindings zugeordnet. Dies sind Muster, die mit den IDs der durch Plug-ins erstellten Benutzerschnittstellenergänzungen abgeglichen werden. Zur Erläuterung dieser Konzepte wird ein Beispiel hinzugezogen.

Aktivität definieren

Aktivitäten werden über den Erweiterungspunkt org.eclipse.ui.activities definiert. Das Beispiel stellt in vereinfachter Form dar, wie das Eclipse-SDK-Plug-in zwei Aktivitäten definiert - eine für die Entwicklung von Java-Software, die andere für die Entwicklung von Plug-ins.

<extension
	point="org.eclipse.ui.activities">
	<activity
		name="Java-Aktivität"
		description="Java-Software entwickeln"
		id="org.eclipse.javaDevelopment">
	</activity>
	
	<activity
		name="Plug-in-Aktivität"
		description="Eclipse-Plug-ins entwickeln"
		id="org.eclipse.plugInDevelopment">
	</activity>
	...

Aktivitäten werden ein Name und eine Beschreibung zugeordnet, die dem Benutzer angezeigt werden können, wenn er Aktivitäten aktiviert oder sperrt, oder in einem anderen Zusammenhang Informationen über eine Aktivität angezeigt bekommt. Die ID der Aktivität wird bei der Definition von Musterbindings und anderen Beziehungen zwischen Aktivitäten verwendet. Es kann beispielsweise bestimmt werden, dass eine Aktivität eine andere erfordert.

<activityRequirementBinding
	activityId="org.eclipse.plugInDevelopment"
	requiredActivityId="org.eclipse.javaDevelopment">
</activityRequirementBinding>

Das Anforderungsbinding bestimmt, dass die Plug-in-Entwicklungsaktivität nur dann aktiviert werden kann, wenn die Java-Entwicklungsaktivität aktiv ist. Zusammengehörige Aktivitäten können auch zu Kategorien zusammengefasst werden, die dem Benutzer angezeigt werden, wenn er mit Aktivitäten arbeitet.

<category
	name="Entwicklung"
	description="Software-Entwicklung"
	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>

Die Kategorie gruppiert die zusammengehörigen Entwicklungsaktivitäten. Diese Kategorie wird dem Benutzer angezeigt, wenn er Aktivitäten manuell konfiguriert.

Verknüpfung von Aktivitäten und Benutzerschnittstellenergänzungen

Aktivitäten werden Benutzerschnittstellenergänzungen über Mustererkennung zugeordnet. Die in Aktivitätsmusterbindings verwendete Mustererkennung folgt den Regeln, die im Paket java.util.regex für reguläre Ausdrücke beschrieben sind. Die von der Workbench verwendeten Muster setzen sich aus zwei Teilen zusammen. Der erste Teil verwendet die Kennung des Plug-ins, das die Benutzerschnittstellenerweiterung ergänzt. Der zweite Teil ist die ID, die das Plug-in selbst bei der Definition der Ergänzung verwendet (die ID des Plug-ins kann, muss aber nicht Teil der Kennung sein). Folgendes Format wird verwendet:

Plug-in-Kennung + "/" + lokale-Kennung
Das folgende Aktivitätsmusterbinding bestimmt beispielsweise, dass eine Benutzerschnittstellenergänzung einer beliebigen JDT-Plug-in-ID (org.eclipse.jdt.*) der Java-Entwicklungsaktivität unabhängig von seiner lokalen Kennung (.*) zugeordnet wird.
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
Das nächste Binding ist etwas spezifischer. Es gibt an, dass die im JDT-Kern (org.eclipse.jdt.core) definierte Ergänzung namens javanature der Java-Entwicklungsaktivität zugeordnet wird.
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\.core/javanature">
</activityPatternBinding>
Wie Sie sehen, können Aktivitätsmusterbindings verwendet werden, um große Gruppen von Ergänzungen oder auch sehr spezielle Ergänzungen einer bestimmten Aktivität zuzuordnen. Die folgenden Ergänzungen werden durch Aktivitäten beeinflusst:

Über die von der Workbench verwendete Konvention (Plug-in-ID + lokale ID) können leicht Bindings zu Plug-ins erstellt werden, die nicht unbedingt die Benennungspraxis befolgen, gemäß der die Kennung des Plug-ins als Präfix für die Kennung der Benutzerschnittstellenergänzung verwendet werden soll. Plug-ins, die direkt mit der Aktivitäts-API interagieren, können ein eigenes Format verwendet, um Ergänzungen zu identifizieren und eine Mustererkennung auf diese Namen durchzuführen.

Aktivitäten mit Hilfsergänzungen verknüpfen

Für die Zuordnung von Hilfsergänzungen zu Aktivitäten wird das gleiche Mustererkennungsschema verwendet, wie für Benutzerschnittstellenergänzungen. Der zweite Teil der Kennung (die lokale Kennung) gibt den Namen der Inhaltsverzeichnisdatei (TOC) an. Das folgende Aktivitätsmusterbinding ordnet beispielsweise alle von JDT-Plug-ins (org.eclipse.jdt.*) ergänzten TOC-Dateien der Java-Entwicklungsaktivität zu:

<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
Wenn die Java-Entwicklungsaktivität nicht aktiviert ist, werden durch JDT-Plug-ins ergänzte Hilfetexte oder untergeordnete Handbücher (mit oder durch JDT-Handbücher verlinkte TOC-Dateien) nicht in der Hilfsbenutzerschnittstelle angezeigt, selbst wenn sie durch ein anderes Plug-in ergänzt wurden. Die in diesen Handbüchern definierten Themen werden auch nicht in den Suchergebnissen angezeigt. Im Fall, dass JDT-TOC-Dateien nicht als primäre TOC-Dateien angezeigt wurden, sondern von einer anderen TOC-Datei so verlinkt wurden, dass sie als untergeordnete Baumstrukturen eines Handbuchs erscheinen, führt die Deaktivierung der JDT-Aktivität dazu, dass diese untergeordneten Bäume nicht angezeigt werden. Das Handbuch, das diese Bäume enthält, wird mit wenigeren Abschnitten in der Benutzerschnittstelle dargestellt.

Durch die Verwendung von spezifischeren Bindings ist es möglich, ausgewählte TOC-Dateien aus Plug-ins, die mehrere TOC-Dateien im Hilfesystem ergänzen, mit Aktivitäten zu verknüpfen. Das folgende Aktivitätsmusterbinding ordnet beispielsweise die TOC-Datei "Examples" der Java-Entwicklungsaktivität "Examples" zu.

<activityPatternBinding
	activityId="org.eclipse.javaDevelopmentExamples"
	pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml">
</activityPatternBinding>
Mit einem solchen Musterbinding wird der Abschnitt "Examples" im "JDT-Plug-in-Entwicklerhandbuch" nur dann angezeigt, wenn die Java-Entwicklungsaktivität "Examples" aktiviert ist.

Verwendung der Aktivitäten-API

Die Aktivitätsunterstützung der Workbench enthält API für den Umgang mit definierten Aktivitäten und die Änderung ihres Aktivierungsstatus. Für die meisten Plug-ins ist diese API nicht von Bedeutung. Sie ist allerdings sehr nützlich, wenn Funktionalität implementiert werden soll, über die der Benutzer mit Aktivitäten arbeiten kann, sowie bei der Implementierung von Auslösepunkte, die bestimmte Aktivitäten aktivieren. Es wird davon ausgegangen, dass Plug-ins, die Aktivitäten über API bearbeiten, darüber informiert sind, wie Aktivitäten für ein bestimmtes Produkt konfiguriert werden. Die Workbench selbst verwendet beispielsweise API, um die Aktivierung von Aktivitäten wie z.B. Java-Entwicklung auszulösen. Im Folgenden wird untersucht, wie die Workbench die generische Aktivitäts-API verwendet, um Auslöser zu implementieren.

Die Zentrale aller Aktivitäten in der Workbench ist IWorkbenchActivitySupport. Die Aktivitätsunterstützung agiert zusammen mit dem IActivityManager. Plug-ins können das Exemplar der Aktivitätsunterstützung und den Aktivitätsmanager von der Workbench abrufen.

IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
IActivityManager activityManager = workbenchActivitySupport.getActivityManager();
Der folgende Ausschnitt aktiviert die Java-Entwicklungsaktivität (falls sie noch nicht aktiviert ist). Er stellt eine vereinfachte Version eines Auslösers dar.
...
//Der Benutzer hat etwas mit Java unternommen.  Java-Aktivität aktivieren.
Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());
if (enabledIds.add("org.eclipse.javaDevelopment"))
	workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);

IActivityManager definiert ein Protokoll, über das alle definierten oder aktivierten Kontext-IDs abgerufen werden können, ebenso wie die zugeordneten IActivity oder ICategory einer bestimmten ID. Diese Objekte können für die Traversierung der Definition einer Aktivität oder Kategorie in API verwendet werden, wie z.B. Abruf von Musterbindings oder Anforderungsbindings. Listener-Funktionen können mit dem Aktivitätenmanager oder den Aktivitäten selbst registriert werden, um Änderungen an der Definition einer bestimmten Aktivität oder am Aktivitätenmanager selbst zu aufzuspüren. Weitere Informationen hierzu finden Sie im Paket org.eclipse.ui.activities.