Udvidelsespunkter og registreringsdatabase

Mens "bundtaspekterne" af en plugin er interessante for runtime-plugin'en og runtime-værktøjerne, er det meget mere almindeligt, at en plugin beskæftiger sig med, hvilke udvidelsespunkter der er defineret af plugins, og hvilke udvidelser der er leveret af plugins. Disse oplysninger stilles til rådighed af platformens registreringsdatabase for udvidelser IExtensionRegistry.

Hvorfor skal en plugin vide, hvilke udvidelser der er til stede? Et konkret eksempel kan vise behovet for disse oplysninger og protokollen, der henter dem.

Arbejdsbænkens dialogboks Vis oversigt viser alle de tilgængelige oversigter, der er installeret på platformen.

Dialogboksen Vis oversigt med Hello-tekst

Vi ved, at kategorinavnet og oversigtsnavne på alle leverede oversigter er angivet i filen plugin.xml for enhver plugin, der leverer en udvidelse for org.eclipse.ui.views. Men hvordan finder arbejdsbænken ud af disse oplysninger? Fra platformens udvidelsesregistreringsdatabase. Følgende kode er et forenklet stykke kode, der er baseret på arbejdsbænkens implementering af dialogboksen Vis oversigt:

	...
	IExtensionRegistry registry = Platform.getExtensionRegistry();
	IExtensionPoint point = registry.getExtensionPoint("org.eclipse.ui.views");
	if (point == null) return;
	IExtension[] extensions = point.getExtensions();
	for (int i = 0; i < extensions.length; i++)
		readExtension(extensions[i]);  //henter oplysninger om hver udvidelse
	...

Ud fra ovenstående kan vi se, at registreringsdatabasen kan hentes fra klassen Platform. Protokollen i IExtensionRegistry bruges til at finde udvidelsespunktet, der hedder org.eclipse.ui.views. Oplysningerne i registreringsdatabasen om særlige udvidelsespunkter eller udvidelser kan findes vha. protokol, der er defineret i IExtensionRegistry, IExtensionPoint og IExtension. Javadoc for disse klasser stiller detaljerede oplysninger til rådighed om registreringsdatabasens protokol.

Når den relevante udvidelsesdefinition er fundet, kan protokollen i IConfigurationElement bruges til at undersøge de individuelle attributter i en udvidelse.