Pakken org.eclipse.core.runtime.preferences indeholder infrastrukturen til opbevaring af en plugins indstillinger. Indstillingerne tilknyttes typisk vha. mapping til indstillinger, der styres af brugeren på siden Indstillinger, selvom dette ikke kræves af det underliggende system. Plugin-indstillinger består af nøgle/værdipar, hvor nøglen beskriver navnet på indstillingen, og værdien er en af flere mulige typer (boolesk, dobbelt, flyd, heltal, lang eller streng). Indstillinger kan lagres og hentes af platformen fra filsystemet. Den præcise placering af de gemte indstillinger afhænger af indstillingens omfang.
Det overordnede indstillingslager kan betragtes som et nodehierarki, hvor hver hovedgren i hierarkiet repræsenterer et bestemt omfang. De underordnede elementer til en node er afhængige af, hvordan det pågældende omfang er defineret. Når det drejer sig om forekomst- og konfigurationsomfang er de underordnede noder indstillingerne for en bestemt plugin, som er angivet af en præferencekvalifikator, hvilket som regel er plugin'ens id.
Hvis du ikke interesserer dig for omfang og noder, skal du ikke bekymre dig om, hvilket omfang eller hvilken node i træstrukturen der faktisk indeholder indstillingsværdien. Indstillings-API'et gennemgår automatisk noderne i den korrekte rækkefølge (forekomst, konfiguration, standard), når du forespørger på en indstillingsværdi og bruger den leverede kvalifikator og indstillingsnavnet til at finde den node, der helt nøjagtigt indeholder værdien.
Du opnår adgang til indstillinger vha. protokollen IPreferencesService. Du får adgang til platformens standardserviceprogram til indstillinger vha. klassen Platform.
... IPreferencesService service = Platform.getPreferencesService(); ...
Når først serviceprogrammet til indstillinger er hentet, kan du forespørge på indstillingsværdier efter navn vha. en af de get...-metoder, der findes i IPreferencesService. F.eks. forespørger følgende stykke kode på værdien af indstillingen "MyPreference" i plugin'ens "com.example.myplugin".
... IPreferencesService service = Platform.getPreferencesService(); boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null); //gør noget med værdien. ...
Den sidste parameter i forespørgselsmetoden er en array af omfangskontekster, der skal bruges ved søgning efter indstillingsnoden. Hvis arrayet er null, antager platformen, at standardrækkefølgen for omfang skal benyttes, og denne anslår den relevante indstillingsnode. Hvis der overføres et array af omfangskontekster, afgør dette, hvilken opslagsrækkefølge for omfang der skal bruges til at finde indstillingsnoden. Standardrækkefølgen for omfang konsulteres altid, hvis der ikke er fundet en node vha. de angivne omfang.
Hvis en plugin har brug for yderligere kontrol over søgerækkefølgen for omfang, kan de klasser, der repræsenterer omfangene, benyttes til at få adgang til den node, der faktisk repræsenterer indstillingen for et bestemt omfang. På denne måde kan der oprettes et array af noder, der angiver den søgerækkefølge, der skal bruges. Følgende stykke kode forespørger på serviceprogrammet til indstillinger for den samme indstilling, som er benyttet ovenfor, men søger i konfigurationsomfanget efter plugin'en efterfulgt af forekomstomfanget for plugin'en. Når der er angivet noder for søgerækkefølgen, benyttes standardomfanget ikke. Det vil sige, at platformen kun søger i de noder, der er angivet.
... 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); //gør noget med værdien. ...
En plugin kan også implementere sit eget gennemsyn via noderne i træstrukturen for indstillinger. Indstillingstræstrukturen for rodnoden kan hentes fra serviceprogrammet til indstillinger. Omfangsklasserne kan bruges til at gennemgå træstrukturen yderligere. Følgende stykke kode når frem til en bestemt node og henter indstillngsværdien fra selve noden.
... 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"); //gør noget med værdien. } ...
Plugins kan definere deres egne specialiserede omfang vha. udvidelsen org.eclipse.core.runtime.preferences. I denne udvidelse definerer plugin'en navnet på det nye omfang samt en klasse, der kan oprette indstillingsnoder for det nye omfang. Den kan også angive navnet på en klasse, der initialiserer standardindstillingsværdierne for det pågældende omfang. Når en plugin definerer et nyt omfang, er det op til plugin'en at implementere gennemgangsrækkefølgen for nye omfang i forhold til platformens gennemgangsrækkefølge. Denne egenskab gennemgås mere detaljeret vha. eksemplet i Indstillinger, hvis omfang er projektbaseret.