Pakken org.eclipse.core.runtime.preferences inneholder infrastruktur for lagring av preferanser for en plugin-modul. Preferanser er vanligvis knyttet til innstillinger som brukeren angir på siden Preferanser, selv om den underliggende infrastrukturen ikke krever dette. Plugin-preferanser er nøkkel/verdi-par der nøkkelen beskriver navnet på preferansen og verdien kan være en av følgende ulike typer (boolean, double, float, int, long eller string). Plattformen kan lagre og hente preferanser fra filsystemet. Den nøyaktige plasseringen av de lagrede preferansene avhenger av preferansens omfang.
Forestill deg det overordnede preferanselageret som et hierarki over noder der hver hovedgren i hierarkiet representerer et bestemt omfang. Hvilke noder som er underordnet en bestemt node, avhenger av hvordan omfanget er definert. For forekomst- og konfigurasjonsomfang er de underordnede nodene preferansene for en bestemt plugin-modul som er angitt av en preferansekvalifikator, vanligvis plugin-modulens ID.
Du trenger ikke å bekymre deg om alt dette høres forvirrende ut. Hvis du ikke bryr deg om omfang og noder, behøver du ikke å bekymre deg over et bestemt omfang eller over hvilken node i treet som inneholder preferanseverdien. Programmeringsgrensesnittet for preferanser gjennomgår automatisk nodene i riktig rekkefølge (forekomst, konfigurasjon, standard) når du utfører en spørring etter en preferanseverdi og bruker den oppgitte kvalifikatoren og preferansenavnet til å finne noden som inneholder verdien.
Du får tilgang til preferanser ved å bruke protokollen IPreferencesService. Du får tilgang til plattformens standardtjeneste for preferanser ved å bruke klassen Platform.
... IPreferencesService service = Platform.getPreferencesService(); ...
Når du har tilgang til denne tjenesten, kan du utføre spørringer etter preferanseverdier per navn ved å bruke en av get...-metodene som er oppgitt i IPreferencesService. For eksempel utfører følgende snutt spørringer etter verdien i preferansen "MyPreference" i plugin-modulen "com.example.myplugin".
... IPreferencesService service = Platform.getPreferencesService(); boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null); //do something with the value. ...
Den siste parameteren i spørringsmetoden er en matrise over omfangskontekster som skal brukes når du søker etter preferansenoden. Hvis null oppgis, forutsetter plattformen at standard rekkefølge for søking etter omfang skal brukes, og gjetter seg til en egnet preferansenode. Hvis det sendes en matrise over omfangskontekster, vil dette avgjøre rekkefølgen for omfangssøking som skal brukes til å finne preferansenoden. Standardrekkefølgen for søking etter omfang brukes alltid hvis det ikke blir funnet en node med de angitte omfangene.
Hvis en plugin-modul trenger mer detaljert styring over rekkefølgen for omfangssøking, kan du bruke klasser som representerer omfangene for å få tilgang til noden som representerer preferansen i et bestemt omfang. På denne måten kan det opprettes en matrise over noder som angir den bestemte søkerekkefølgen som kreves. Følgende snutt sender en forespørsel til preferansetjenesten om samme preferanse som den som brukes ovenfor, men søker i konfigurasjonsomfanget for plugin-modulen, etterfulgt av forekomstomfanget. Når nodene angis for søkerekkefølgen, tas det ikke hensyn til standardomfanget. Dette betyr at plattformen bare søker etter de eksakte nodene som er oppgitt.
... 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); //do something with the value. ...
En plugin-modul kan også implementere sin egen gjennomgang av nodene i preferansetreet. Rotnoden i preferansetreet kan hentes fra preferansetjenesten. Det er mulig å bruke omfangsklassene til videre gjennomgang av treet. Følgende snutt går til en bestemt node og henter preferanseverdien 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"); //do something with the value. } ...
Plugin-moduler kan definere sine egne spesialomfang ved hjelp av utvidelsen org.eclipse.core.runtime.preferences. I denne utvidelsen definerer plugin-modulen navnet på det nye omfanget samt en klasse som kan opprette preferansenoder for det nye omfanget. Den kan eventuelt også angi navnet på en klasse som initialiserer standard preferanseverdier ved det omfanget. Når en plugin-modul definerer et nytt omfang, avgjør plugin-modulen om den skal bruke rekkefølgen for gjennomgang på nye omfang sammenlignet med plattformens gjennomgangsrekkefølge. Vi skal se nærmere på denne funksjonaliteten gjennom et eksempel på Prosjektomfangsbaserte preferanser.