Předvolby v rozsahu projektu

V Běhových předvolbách jsme se zabývali infrastrukturou pro definování a ukládání předvoleb různého rozsahu. Také jsme viděli, že rozšíření org.eclipse.core.runtime.preferences lze použít k definování dalších rozsahů předvoleb. Modul plug-in prostředků platformy definuje vlastní rozsah předvoleb, který se nazývá "Projekt," aby definoval předvolby na úrovni projektu. Tyto předvolby platné pro celý projekt jsou uloženy uvnitř projektu. Snadno tak lze uložit sadu předvoleb a vyměňovat si ji s jinými uživateli za pomoci prostředkově orientovaných mechanizmů, jako např. systému pro správu verzí.

Určení rozsahu

Definice nových rozsahů je velmi jednoduchá. Modul plug-in definuje název rozsahu a třídu, která jej implementuje. Modul plug-in prostředků definuje rozsah projektu následovně:

	<extension id="preferences" point="org.eclipse.core.runtime.preferences" name="preferences">
		<scope name="project" class="org.eclipse.core.internal.resources.ProjectPreferences"/>
	</extension>

Zadaná třída musí implementovat rozhraní IScope, což znamená, že musí být schopna pro daný rozsah vytvořit uzly předvoleb.

Uzly předvoleb v rozsahu projektu

Jelikož rozsah projektu pro předvolby není jedním ze standardních běhových rozsahů, je nutno uzel představující předvolbu na úrovni projektu získat specifickým způsobem. Z uzlu předvoleb pro kořenový adresář musíte přejít do předvolby na úrovni projektu. To lze provést použitím příkazu ProjectScope:

	IScopeContext projectScope = new ProjectScope(MyProject);

Jakmile je nalezen rozsah pro konkrétní projekt, hodnoty předvoleb je možno získat stejnými mechanizmy, jaké jsme si již ukázali. Předvolby se pojmenovávají za použití názvu řetězce předvolby. Názvy se označují dalším řetězcem (často je to ID modulu plug-in), který stanoví obor názvů dané předvolby. Následující úsek kódu slouží k získání uzlu předvolby z rozsahu projektu. Všimněte si, že jakmile je získán správný rozsah, práce s těmito uzly se pak již nijak neliší od práce s uzly z jiných rozsahů.

	...
	Preferences projectNode = projectScope.node("com.example.myplugin");
	if (projectNode != null) {
		value = node.getBoolean("MyPreference", "true");
		//provést něco s hodnotou.
	}
	...

Aby se hodnota uložila do souboru v projektu, uzel se vyprázdní. Modul plug-in prostředků ošetřuje logistiku pro správu souboru předvoleb na úrovni projektu.

	projectNode.flush();