W sekcji Preferencje dotyczące środowiska wykonawczego przedstawiono infrastrukturę służącą do definiowania i przechowywania preferencji o zróżnicowanych zasięgach. Opisano również możliwość użycia rozszerzenia org.eclipse.core.runtime.preferences w celu zdefiniowania dodatkowych zasięgów dla preferencji. Moduł dodatkowy zasobów platformy definiuje własny zasięg preferencji o nazwie "Project" do definiowania preferencji dotyczących projektu. Preferencje te przechowywane są w pliku znajdującym się w obrębie projektu. Ułatwia to przechowywanie zestawu preferencji i ich wymianę z innymi użytkownikami za pomocą mechanizmów operujących na zasobach, takich jak system kontroli wersji.
Definiowanie nowych zasięgów nie jest skomplikowane. Moduł dodatkowy określa nazwę zasięgu, a także klasę, która go implementuje. Moduł dodatkowy zasobów definiuje zasięg projektu w następujący sposób:
<extension id="preferences" point="org.eclipse.core.runtime.preferences" name="preferences"> <scope name="project" class="org.eclipse.core.internal.resources.ProjectPreferences"/> </extension>
Określona klasa musi implementować interfejs IScope, co oznacza, że musi oferować możliwość tworzenia węzłów preferencji dla zasięgu.
Ponieważ zasięg projektu dotyczący preferencji nie należy do standardowych zasięgów środowiska wykonawczego, węzeł reprezentujący preferencje na poziomie projektu należy uzyskać oddzielnie. Z głównego węzła preferencji należy przejść do preferencji dotyczących projektu. W tym celu można użyć metody ProjectScope:
IScopeContext projectScope = new ProjectScope(MyProject);
Po odnalezieniu zasięgu dla określonego projektu można pobrać wartości preferencji przy użyciu tych samych mechanizmów, które omówiono wcześniej. Nazwy preferencji określa się przy użyciu odpowiednich łańcuchów nazw. Nazwy są kwalifikowane za pomocą dodatkowych łańcuchów (często jest to identyfikator modułu dodatkowego), które dookreślają przestrzeń nazw preferencji. Przedstawiony dalej fragment kodu pobiera węzeł preferencji z zasięgu projektu. Należy zauważyć, że po uzyskaniu odpowiedniego zasięgu praca z jego węzłami nie różni się niczym od pracy z węzłami z innych zasięgów.
... Preferences projectNode = projectScope.node("com.example.myplugin"); if (projectNode != null) { value = node.getBoolean("MyPreference", "true"); //operacje na odczytanej wartości. } ...
Aby zapisać wartość w pliku w projekcie, węzeł jest opróżniany. Moduł dodatkowy zasobów obsługuje zarządzanie plikiem preferencji na poziomie projektu.
projectNode.flush();