I Runtime-inställningar tittade vi på infrastrukturen för definition och lagring av inställningar med olika omfång. Vi såg också att utökningen org.eclipse.core.runtime.preferences kan användas till att definiera ytterligare omfång för inställningar. Insticksprogrammet för plattformsresursen definierar sitt eget inställningsomfång, som kallas "Projekt", så att projektomfångsbaserade inställningar kan definieras. Projektomfångsbaserade inställningar lagras i en fil som finns inuti projektet. På så sätt blir det enkelt lagra en uppsättning inställningar och utbyta dem med andra användare med hjälp av resursorienterade mekanismer, till exempel ett versionskontrollsystem.
Definitionen för nya omfång är ganska enkel. Insticksprogrammet definierar namnet på omfånget, liksom den klass som implementerar det. Resursens insticksprogram definierar projektomfånget enligt följande:
<extension id="inställningar" point="org.eclipse.core.runtime.preferences" name="inställningar"> <scope name="projekt" class="org.eclipse.core.internal.resources.ProjectPreferences"/> </extension>
Den angivna klassen måste implementera gränssnittet IScope, vilket innebär att den måste kunna skapa inställningsnoder för omfånget.
Eftersom projektomfånget för inställningar inte är något av standardomfången i runtime-miljön måste den nod som representerar en projektnivå hämtas specifikt. Från rotnoden för inställningen måste du navigera till den projektomfångsbaserade inställningen. Det kan du göra med hjälp av ProjectScope:
IScopeContext projectScope = new ProjectScope(MyProject);
När projektomfånget för ett viss projekt har hittats kan inställningsvärdet hämtas med samma mekanismer som vi har sett tidigare. Inställningarna namnges med hjälp av inställningens strängnamn. Namnet får en annan sträng som namnled (ofta ett insticksprogram-ID) som är inställningens namnområde. Med följande kodexempel hämtar du en inställningsnod från projektomfånget. När du har fått rätt omfång kommer du att märka att arbetet med de här noderna inte skiljer sig från arbete med noder från andra omfång.
... Preferences projectNode = projectScope.node("com.example.myplugin"); if (projectNode != null) { value = node.getBoolean("MyPreference", "true"); //gör ingenting med värdet. } ...
Noden töms så att värdet sparas i en fil i projektet. Resursens insticksprogram hanterar logistiken för administrationen av inställningsfilen på projektnivå.
projectNode.flush();