Aktiviteter

En aktivitet er en logisk funktionsgruppering, som er centreret om en bestemt opgavetype. Udvikling af Java-software er f.eks. en aktivitet, som jævnligt udføres af brugerne af platformen, og JDT'en definerer mange bidrag til brugergrænsefladen (oversigter, editorer, perspektiver, indstillinger, osv.), som kun er nyttige, når denne aktivitet udføres. Før vi ser på mekanismerne i definitionen af en aktivitet, skal vi se på, hvordan de bruges til at bringe orden i brugergrænsefladen.

Konceptet for en aktivitet vises for brugeren, selvom det muligvis ikke er åbenbart for en ny bruger. Når en aktivitet aktiveres på platformen, vises de bidrag til brugergrænsefladen, som er knyttet til aktiviteten. Når en aktivitet deaktiveres på platformen, vises dens bidrag til brugergrænsefladen ikke. Brugerne kan aktivere og deaktivere aktiviteterne efter behov med indstillingssiden Generelt > Muligheder. Aktiviteter kaldes "muligheder" i brugergrænsefladen, selvom der bruges aktivitetsterminologi i API'et.

Visse brugerfunktioner fungerer som udløserpunkter for aktivering af en aktivitet. Oprettelsen af et nyt Java-projekt udløser f.eks. aktiveringen af Java-udviklingsaktiviteten. På den måde vises den nye funktion for brugerne, når der er behov for det, så de gradvist kan lære de tilgængelige aktiviteter at kende og lære, hvordan de påvirker brugergrænsefladen. Når en bruger starter platformen for første gang, er det ønskeligt, at så mange aktiviteter som muligt er deaktiveret, så programmet er så let tilgængelig som muligt. Valgene på velkomstsiden kan hjælpe med at beslutte, hvilke aktiviteter der skal aktiveres.

Aktiviteter versus perspektiver

Det er i afsnittet Perspektiver beskrevet, hvordan perspektiver bruges til at organisere forskellige oversigtslayout og funktionssæt i opgaver. Hvorfor er der brug for aktiviteter? Selvom perspektiver og aktiviteter definerer lignende opgavetyper, er hovedforskellen, hvordan bidragene til brugergrænsefladen for en plugin er knyttet til dem. Brugergrænsefladebidrag knyttes til perspektiver i udvidelsesdefinitionen af bidraget. Det vil sige, at en plugin bestemmer de perspektiver, som dens oversigter og funktionssæt tilhører. Plugins har også mulighed for at definere deres egne perspektiver. Selv når et perspektiv ikke er aktivt, kan brugeren få adgang til de oversigter og funktioner, der er knyttet til perspektivet, ved at bruge kommandoer som f.eks. Vis oversigt.

Aktiviteter er et højere niveau af organisering. De enkelte brugergrænsefladebidrag er ikke vidende om aktiviteter og refererer ikke til aktiviteterne i deres udvidelsesdefinitioner. Aktiviteterne forventes i stedet at være konfigureret på et højere niveau som f.eks. en platformsintegration/-konfiguration eller en produktinstallation. De enkelte plugins definerer typisk ikke nye aktiviteter, medmindre plugin'en er en plugin på systemniveau, som er defineret af en systemintegrator. I et typisk scenarie bestemmer en systemintegrator, hvordan funktionen grupperes i aktiviteter, og hvilke der som standard er aktiveret. Aktiviteter er knyttet til brugergrænsefladebidrag med aktivitetsmønsterbindinger, som er mønstre, der sammenlignes med id'en for de brugergrænsefladebidrag, som kommer fra plugins. Et eksempel hjælper med at vise disse begreber.

Definér en aktivitet

Aktiviteter defineres med udvidelsespunktet org.eclipse.ui.activities. I de følgende vises en forenklet version af, hvordan Eclipse SDK-plugin'en definerer to aktiviteter: en til udvikling af Java-software og en til udvikling af plugins:

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

Aktiviteter tildeles et navn og en beskrivelse, der kan vises for brugere, når brugeren aktiverer og deaktiverer aktiviteter eller på anden måde får vist oplysninger om en aktivitet. Aktivitetens id bruges, når der defineres mønsterbindinger eller andre relationer mellem aktiviteter. Man kan f.eks. beslutte, at én aktivitet kræver en anden aktivitet.

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

Kravsbindingen (requirement binding) betyder, at pluginudviklingsaktiviteten kun kan aktiveres, når Java-udviklingsaktiviteten er aktiveret. Relaterede aktiviteter kan også bindes i kategorier, der vises for brugeren, når brugeren arbejder med aktiviteter.

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

Kategorien grupperer de relaterede udviklingsaktiviteter. Kategorien vises for brugeren, når brugeren konfigurerer aktiviteterne manuelt.

Bind aktiviteter til brugergrænsefladebidrag

Aktiviteter knyttes til brugergrænsefladebidrag med mønstermatch. Den mønstermatch, der bruges i aktivitetsmønsterbindinger, følger de regler, der er beskrevet i java.util.regex-pakken for almindelige udtryk. Ds mønstre, som arbejdsbænken bruger, består af to dele. Den første del bruger id'en for den plugin, der bidrager til brugergrænsefladeudvidelsen. Den er del er den id, som plugin'en selv bruger ved definitionen af bidraget, som kan eller ikke kan inkludere plugin-id'en som del af id'en. Følgende format bruges:

plugin-id + "/" + lokal-id
Følgende aktivitetsmønsterbinding angiver f.eks, at et brugergrænsefladebidrag fra en JDT-plugin-id (org.eclipse.jdt.*) er knyttet til Java-udviklingsaktiviteten uanset dens lokale id (.*).
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
Den næste binding er mere specifik. Den angiver, at bidraget ved navn javanature, som er defineret i JDT-kernen (org.eclipse.jdt.core), er knyttet til Java-udviklingsaktiviteten.
<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\.core/javanature">
</activityPatternBinding>
Som du kan se, kan aktivitetsmønsterbindinger bruges til at knytte store grupper af bidrag til en bestemt aktivitet eller til at knytte meget specifikke bidrag til en aktivitet. Følgende bidrag påvirkes af aktiviteter:

Den navnestandard, som arbejdsbænken bruger (plugin-id + lokal id), gør det let at oprette binding til plugins, som ikke nødvendigvis overholder navngivningsstandarden, hvor deres plugin-id'er bruges som præfiks for deres id'er for brugergrænsefladebidrag. Plugins, som arbejder sammen med aktivitets-API'et, kan bruge deres eget format til at identificere bidrag og til mønstermatch med disse navne.

Bind aktiviteter til hjælpebidrag

Aktiviteter er knyttet til hjælpebidrag ved hjælp af det samme mønstermatchskema, som der bruges til brugergrænsefladebidrag. Den anden del af id'en (den lokale id) angiver navnet på filen med indholdsfortegnelsen (TOC). Følgende aktivitetsmønsterbinding knytter f.eks. alle TOC-filer, der kommer fra JDT-plugins (org.eclipse.jdt.*), til Java-udviklingsaktiviteten:

<activityPatternBinding
	activityId="org.eclipse.javaDevelopment"
	pattern="org\.eclipse\.jdt\..*/.*">
</activityPatternBinding>
Når Java-udviklingsaktiviteten er deaktiveret, vises hjælpebøger, der kommer fra JDT-plugins, og alle underbøger (TOC'er, der er linket til eller linket af JDT-bøger) - også selvom en anden plugin bidrager med dem - ikke i hjælpebrugergrænsefladen. De emner, der er defineret i bøgerne, vises heller ikke i søgeresultaterne. I det tilfælde, hvor JDT TOC'er ikke vises som primære TOC'er, men hvor der linkes til dem fra en anden TOC, så de vises som undertræstrukturer i en bog, vil undertræstrukturene blive skjult, hvis JDT-aktiviteten deaktiveres. Bogen med indholdet vil synes at definere færre emner i brugergrænsefladen.

Du kan bruge mere specifik binding til at knytte aktiviteter til udvalgte TOC'er fra plugins, som bidrager med flere TOC'er til hjælpen. Følgende aktivitetsmønsterbinding knytter f.eks. TOC'en "Examples" til eksempelaktiviteten vedrørende Java-udvikling.

<activityPatternBinding
	activityId="org.eclipse.javaDevelopmentExamples"
	pattern="org\.eclipse\.jdt\.doc\.isv\.topics_Samples.xml">
</activityPatternBinding>
Når du bruger denne type mønsterbinding, skjules afsnittet "Eksempler" i bogen "Vejledning til udvikling af JDT-plugin", hvis du deaktiverer eksempelaktiviteten vedrørende Java-udvikling.

Brug af aktivitet-API'et

Aktivitetsunderstøttelse på arbejdsbænken omfatter et API til at arbejde med de definerede aktiviteter og ændre deres aktiverede tilstand. De fleste plugins behøver ikke at bruge dette API, men det er nyttigt ved implementering af funktioner, som giver brugeren mulighed for at arbejde med aktiviteter, eller ved implementering af udløserpunkter, som aktiverer en bestemt aktivitet. Det antages, at en plugin, som styrer aktiviteter gennem API, er opmærksom på de måder, som aktiviteter er konfigureret for et bestemt produkt. Selve arbejdsbænken f.eks. bruger API'et til at udløse aktiveringen af aktiviteter så som Java-udvikling. Der bliver set nærmere på, hvordan arbejdsbænken bruger det generiske aktivitets-API til at implementere udløsere.

Centrum for alle aktiviteter på arbejdsbænken er IWorkbenchActivitySupport. Aktivitetsstøtten arbejder sammen med en IActivityManager. Plugins kan hente aktivitetsstøtteforekomsten fra arbejdsbænken og derfra hente aktivitetsstyringen.

IWorkbenchActivitySupport workbenchActivitySupport = PlatformUI.getWorkbench().getActivitySupport();
IActivityManager activityManager = workbenchActivitySupport.getActivityManager();
Følgende kodestykke aktiverer Java-udviklingsaktiviteten, hvis den ikke allerede er aktiveret. Det viser en forenklet version af en udløser.
...
//brugeren gjorde noget Java-relateret. Aktivér Java-aktiviteten.
Set enabledActivityIds = new HashSet(activityManager.getEnabledActivityIds());
if (enabledIds.add("org.eclipse.javaDevelopment"))
	workbenchActivitySupport.setEnabledActivityIds(enabledActivityIds);

IActivityManager definerer også protokol for hentning af alle definerede aktivitets- og kategori-id'er og for hentning af den tilknyttede IActivity eller ICategory for en bestemt id. Objekterne kan bruges til at gennemløbe definitionen af en aktivitet eller kategori i API, så som hentning af mønsterbindingerne eller kravsbindingerne. Der kan registreres lyttere på aktivitetsstyringen eller på selve aktiviteterne og kategorierne for at finde ændringer i definitionen af en bestemt aktivitet eller i selve aktivitetsstyringen. Der er flere oplysninger i pakken org.eclipse.ui.activities.