Runtimevoorkeuren

Het pakket org.eclipse.core.runtime.preferences biedt de infrastructuur voor het opslaan van pluginvoorkeuren. Voorkeuren zijn meestal gekoppeld aan instellingen die door de gebruiker worden beheerd op de pagina Voorkeuren, hoewel dit door de onderliggende infrastructuur niet wordt vereist. Pluginvoorkeuren zijn sleutel/waarde-paren. De sleutel beschrijft de naam van de voorkeur en de waarde is een van de verschillende typen (boolean, double, float, int, long, of string). Voorkeuren kunnen worden opgeslagen en door het platform worden opgehaald uit het bestandssysteem. De locatie van de opgeslagen gegevens is afhankelijk van het bereik van de voorkeuren.

Voorkeurenbereik

Het bereik van een voorkeur is nauw verbonden met de locatie van de voorkeur. Pluginontwikkelaars kunnen bepalen welk standaardbereik van toepassing is op hun voorkeuren. Ook kunnen ze nieuwe bereiken definiëren die nuttig voor de plugin zijn. Om te beginnen worden de bereiken besproken die worden gedefinieerd door de platformruntime:

U kunt zich de opslag van voorkeuren voorstellen als een hiërarchie van knooppunten, waarbij iedere hoofdtak een bepaald bereik voorstelt. De onderliggende items van een bepaald knooppunt zijn afhankelijk van de manier waarop het bereik is gedefinieerd. Bij instance- en configuratiebereiken zijn onderliggende knooppunten de voorkeuren voor een bepaalde plugin die zijn opgegeven door de voorkeurenqualifier, meestal het ID van de plugin.

He is niet erg als dit wat verwarrend overkomt. Als u niet bent geïnteresseerd in bereiken en knooppunten, hoeft u zich niet druk te maken over een bepaald bereik of over het knooppunt in de boomstructuur dat de voorkeurenwaarde bevat. De voorkeuren-API doorloopt automatisch de knooppunten in de juiste volgorde (instance, configuratie, standaard) als u naar een voorkeurenwaarde zoekt en de geleverde qualifier en voorkeurennaam gebruikt om het knooppunt met de waarde te vinden.

U krijgt toegang tot voorkeuren met het protocol IPreferencesService. U kunt toegang krijgen tot de standaardvoorkeurenservice van het platform met de klasse Platform.

	...
	IPreferencesService service = Platform.getPreferencesService();
	...

Als de voorkeurenservice is opgehaald, kunt u voorkeurenwaarden op naam zoeken met een van de get...-methoden in IPreferencesService. In het volgende codefragment wordt de waarde van de voorkeur "MyPreference" gezocht in de plugin "com.example.myplugin".

	...
	IPreferencesService service = Platform.getPreferencesService();
	boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null);
		//iets doen met de waarde.
	...

De laatste parameter in de zoekopdracht is een array met bereikcontexten die u kunt gebruiken als u het voorkeurenknooppunt zoekt. Als de array null is, neemt het platform aan dat de standaardvolgorde voor zoeken in het bereik gebruikt moet worden en leidt het juiste voorkeurenknooppunt af. Als een array met bereikcontexten wordt doorgegeven, bepaalt deze de volgorde voor het zoeken van het voorkeurenknooppunt. De standaardzoekvolgorde in het bereik wordt altijd geraadpleegd als er geen knooppunt is gevonden met de opgegeven bereiken.

Bereiken en knooppunten gebruiken

Als een plugin een preciezer beheer nodig heeft voor de zoekvolgorde in het bereik, kunnen klassen die het bereik aangeven worden gebruikt voor toegang tot het eigenlijke knooppunt dat de voorkeur in een bepaald bereik aangeeft. Op deze manier kunt u een array met knooppunten maken waarin een bepaalde zoekvolgorde is vereist. In het volgende codefragment wordt in de voorkeurenservice gezocht naar dezelfde voorkeur als in het bovenstaande voorbeeld. In dit geval wordt echter in het configuratiebereik en daarna het instancebereik gezocht. Al u knooppunten hebt opgegeven voor de zoekvolgorde, wordt geen rekening gehouden met het standaardbereik. Dat wil zeggen dat het platform alleen de knooppunten doorzoekt die u hebt opgegeven.

	...
	IPreferencesService service = Platform.getPreferencesService();
	Preferences configurationNode = new ConfigurationScope().getNode("com.example.myplugin");
	Preferences instanceNode = new InstanceScope().getNode("com.example.myplugin");
	Preferences[] nodes = new Preferences[] {configurationNode, instanceNode};
	stringValue = service.get("MyPreference", "true", nodes);
		//iets doen met de waarde.
	...

In een plugin kan ook de eigen route door de voorkeurenknooppunten worden geïmplementeerd. Het hoofdknooppunt van de voorkeurenstructuur kan worden opgehaald uit de voorkeurenservice. U kunt de bereikklassen gebruiken om de structuur verder te onderzoeken. In het volgende codefragment wordt een specifiek knooppunt onderzocht en de voorkeurenwaarde uit het knooppunt zelf opgehaald.

	...
	IPreferencesService service = Platform.getPreferencesService();
	Preferences root = service.getRootNode();
	Preferences myInstanceNode = root.node(InstanceScope.SCOPE).node("com.example.myplugin");
	if (myInstanceNode != null) {
		value = node.getBoolean("MyPreference", "true");
		//iets doen met de waarde.
	}
	...

De bereiken uitbreiden

Plugins kunnen hun eigen specifieke bereik definiëren met de extensie org.eclipse.core.runtime.preferences. In deze extensie definieert de plugin de naam van het nieuwe bereik en een klasse die voorkeurenknooppunten voor het nieuwe bereik kan maken. De plugin kan optioneel de naam van de klasse opgeven waarin de standaardvoorkeurenwaarden voor het bereik worden geïnitialiseerd. Als een plugin een nieuw bereik definieert, moet de plugin de route voor een nieuw bereik ten opzichte van de platformroute implementeren. Deze mogelijkheden worden nader besproken aan de hand van een voorbeeld in Projectvoorkeursinstellingen.