Punkty rozszerzeń i rejestr

Jakkolwiek aspekty związane z pakunkiem modułu dodatkowego mogą odgrywać pewną rolę dla tego modułu i narzędzi środowiska w czasie wykonywania modułu, zdecydowanie częściej kod modułu dodatkowego koncentruje się na punktach rozszerzeń definiowanych przez inne moduły oraz na wnoszonych przez nie rozszerzeniach. Informacje te są zapisane w rejestrze rozszerzeń platformy o nazwie IExtensionRegistry.

Dlaczego lista obecnych rozszerzeń może być interesująca z punktu widzenia modułu dodatkowego? Znaczenie tej informacji oraz sposób jej pozyskiwania zostanie pokazany na konkretnym przykładzie.

Za przykład posłuży okno dialogowe Pokaż widok w środowisku roboczym, zawierające wszystkie dostępne widoki zainstalowane na platformie.

Okno dialogowe Pokaż widok z wpisem Hello

Wiadomo, że nazwy kategorii i nazwy widoków wszystkich widoków są definiowane w pliku plugin.xml każdego modułu dodatkowego, który wnosi rozszerzenie dla punktu rozszerzenia org.eclipse.ui.views. W jaki sposób środowisko robocze odczytuje te informacje? Z rejestru rozszerzeń platformy. Poniżej przedstawiono uproszczony fragment kodu, bazujący na implementacji okna dialogowego Pokaż widok w środowisku roboczym:

	...
 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]);  //pobranie informacji o każdym rozszerzeniu
	...

Jak widać na przykładzie, treść rejestru można odczytać przy użyciu klasy Platform. Protokół w interfejsie IExtensionRegistry jest używany w celu odszukania punktu rozszerzenia o nazwie org.eclipse.ui.views. Zawarte w rejestrze informacje na temat określonych punktów rozszerzeń i samych rozszerzeń można odczytać za pomocą protokołów zdefiniowanych w interfejsach IExtensionRegistry, IExtensionPoint i IExtension. Dołączona do tych klas dokumentacja javadoc zawiera szczegółowe informacje na temat protokołu obsługi rejestru.

Po znalezieniu informacji na temat odpowiedniego rozszerzenia można użyć protokołu zdefiniowanego w interfejsie IConfigurationElement w celu poznania poszczególnych atrybutów tego rozszerzenia.