En la sección Preferencias de entorno de ejecución hemos observado la infraestructura que sirve para definir y almacenar preferencias con diferentes ámbitos. También hemos visto que puede utilizarse la extensión org.eclipse.core.runtime.preferences para definir ámbitos adicionales para las preferencias. El conector de recursos de la plataforma define su propio ámbito de preferencias, denominado "Proyecto", para definir preferencias centradas en el ámbito. Las preferencias centradas en el ámbito del proyecto se almacenan en un archivo ubicado dentro del proyecto. Esto facilita la posibilidad de almacenar un conjunto de preferencias e intercambiarlas con otros usuarios mediante mecanismos orientados a recursos, como por ejemplo un sistema de control de versiones.
la definición de ámbitos nuevos es bastante sencilla. El conector define el nombre del ámbito, así como la clase que lo implementa. El conector de recursos define el ámbito del proyecto de la forma siguiente:
<extension id="preferences" point="org.eclipse.core.runtime.preferences" name="preferences"> <scope name="project" class="org.eclipse.core.internal.resources.ProjectPreferences"/> </extension>
La clase especificada debe implementar la interfaz IScope, lo que significa que debe ser capaz de crear nodos de preferencias para el ámbito.
Dado que el ámbito de proyecto para las preferencias no es uno de los ámbitos de entorno de ejecución estándar, el nodo que representa una preferencia a nivel de proyecto debe obtenerse explícitamente. Desde el nodo de preferencias raíz, debe navegar a la preferencia centrada en el proyecto. Esta operación puede realizarse mediante ProjectScope:
IScopeContext projectScope = new ProjectScope(MyProject);
Una vez encontrado el ámbito de un proyecto determinado, pueden obtenerse los valores de preferencias utilizando los mismos mecanismos vistos anteriormente. Las preferencias se nombran utilizando el nombre de serie de la preferencia. Los nombres están calificados con otra serie (con frecuencia un ID de conector) que califica el espacio de nombres de la preferencia. El siguiente fragmento de código obtiene un nodo de preferencias del ámbito del proyecto. Observará que, una vez obtenido el ámbito correcto, el trabajo con los nodos no es diferente al realizado con los nodos de otros ámbitos.
... Preferences projectNode = projectScope.node("com.example.myplugin"); if (projectNode != null) { value = node.getBoolean("MyPreference", "true"); //realizar alguna acción con el valor. } ...
Para guardar el valor en un archivo del proyecto, el nodo se elimina. El conector de recursos maneja la logística de gestión del archivo de preferencias a nivel de proyecto.
projectNode.flush();