I Kjøretidspreferanser så vi på infrastrukturen for definering og lagring av preferanser med ulike omfang. Vi såg også at utvidelsen org.eclipse.core.runtime.preferences kan brukes til å definere ytterligere preferanseomfang. Plattformens plugin-modul for ressurser definerer sitt eget preferanseomfang, "prosjekt", for å definere prosjektomfangsbaserte preferanser. Prosjektomfangsbaserte preferanser lagres i en fil som ligger i prosjektet. Dette gjør det enkelt å lagre et sett med preferanser og utveksle dem med andre brukere ved hjelp av ressursorienterte mekanismer som et versjonskontrollsystem.
Definisjonen av nye omfang er ganske enkel. Plugin-modulen definerer navnet på omfanget samt klassen som implementer det. Plugin-modulen for ressurser definerer prosjektomfanget på følgende måte:
<extension id="preferences" point="org.eclipse.core.runtime.preferences" name="preferences"> <scope name="project" class="org.eclipse.core.internal.resources.ProjectPreferences"/> </extension>
Den angitte klassen må implementere IScope-grensesnittet, som betyr at det kan opprettes preferansenoder for omfanget.
Siden prosjektomfanget for preferanser ikke er et standard kjøretidsomfang, må noden som representerer en preferanse på prosjektnivå hentes spesifikt. Fra rotpreferansenoden må du navigere til den prosjektomfangsbaserte preferansen. Dette gjøres ved hjelp av ProjectScope:
IScopeContext projectScope = new ProjectScope(MyProject);
Når prosjektomfanget for et bestemt prosjekt er funnet, hentes preferanseverdiene ved hjelp av de samme mekanismene som vi har sett tidligere. Preferanser navngis etter strengnavnet på preferansen. Navnene kvalifiseres med en annen streng (gjerne en plugin-ID) som kvalifiserer navneområdet til preferansen. Følgende snutt henter en preferansenode fra prosjektomfanget. Når det riktige omfanget er hentet, er det ikke annerledes å arbeide med disse nodene enn med andre noder fra andre omfang.
... Preferences projectNode = projectScope.node("com.example.myplugin"); if (projectNode != null) { value = node.getBoolean("MyPreference", "true"); //do something with the value. } ...
Noden tømmes for å lagre verdien i en fil i prosjektet. Plugin-modulen for ressurser håndterer logistikk for håndtering av preferansefiler på prosjektnivå.
projectNode.flush();