Nas Preferências de tempo de execução, vimos a infra-estrutura para definir e armazenar preferências com diferentes âmbitos. Também vimos que se pode utilizar a extensão org.eclipse.core.runtime.preferences para definir âmbitos adicionais para preferências. O plug-in de recursos de plataforma definir o seu próprio âmbito de preferências, chamado "Projecto", para poder definir preferências por âmbito de projecto. As preferências por âmbito de projecto são armazenadas num ficheiro que se encontra dentro do projecto. Assim se facilita o armazenamento de um conjunto de preferências e a respectiva troca com outros utilizadores, por meio de mecanismos orientados para recursos como, por exemplo, sistema de controlo de versões.
A definição para novos âmbitos é muito simples. O plug-in define o nome do âmbito, bem como a classe que o implementa. O plug-in de recursos define o âmbito do projecto como se segue:
<extension id="preferences" point="org.eclipse.core.runtime.preferences" name="preferences"> <scope name="project" class="org.eclipse.core.internal.resources.ProjectPreferences"/> </extension>
A classe especificada deve implementar a interface IScope, o que implica ser capaz de criar nós de preferências para o âmbito.
Dado que o âmbito de projecto para preferências não é um dos âmbitos de tempo de execução padrão, o nó que representa uma preferência de nível de projecto deve ser obtido especificamente. A partir do nó de preferência raiz, é preciso navegar até à preferência por âmbito de projecto. Tal realiza-se com o ProjectScope:
IScopeContext projectScope = new ProjectScope(oMeuProjecto);
Uma vez detectado o âmbito de projecto de determinado projecto, os valores de preferências podem ser obtidos com os mesmos mecanismos vistos anteriormente. As preferências são denominadas com o nome de cadeia de caracteres da preferência. Os nomes são qualificados com outra cadeia de caracteres (geralmente um ID de plug-in) que qualifica o espaço de nome da preferência. A porção de código seguinte obtém um nó de preferências do âmbito de projecto. Irá reparar que uma vez obtido o âmbito correcto, o trabalho com os nós não difere dos nós de outros âmbitos.
... Preferences projectNode = projectScope.node("com.exemplo.omeuplugin"); if (projectNode != null) { value = node.getBoolean("aMinhaPreferência", "true"); //fazer algo com o valor. } ...
Para guardar o valor num ficheiro no projecto, o nó é esvaziado. O plug-in de recursos trata da logística de gerir o ficheiro de preferências a nível do projecto.
projectNode.flush();