La API de la UI de JDT proporciona clases que le permiten presentar el modelo Java o partes de él en un visor JFace estándar. Esta funcionalidad se suministra principalmente mediante:
Los proveedores de contenido y etiquetas de los visores JFace se describen detalladamente en el tema Visores de JFace.
Si comprende el mecanismo básico de la plataforma, le resultará muy fácil reunir los proveedores de contenido y etiquetas Java:... TreeViewer viewer= new TreeViewer(parent); // Proporcionar miembros de una unidad de compilación o archivo de clase, pero no elementos de copia de trabajo ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false); viewer.setContentProvider(contentProvider); // Existen más distintivos definidos en la clase JavaElementLabelProvider ILabelProvider labelProvider= new JavaElementLabelProvider( JavaElementLabelProvider.SHOW_DEFAULT | JavaElementLabelProvider.SHOW_QUALIFIED | JavaElementLabelProvider.SHOW_ROOT); viewer.setLabelProvider(labelProvider); // Usar el modelo Java como los datos de entrada de los visores presentan los proyectos Java en el primer nivel. viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot())); ...
El ejemplo anterior utiliza el modelo Java (IJavaModel) como elemento de entrada del visor. La clase StandardJavaElementContentProvider también da soporte a las interfaces IJavaProject, IPackageFragmentRoot, IPackageFragment y IFolder como elementos de entrada:
La clase JavaElementImageDescriptor permite crear una imagen tomando como base un descriptor de imágenes base arbitrario y un conjunto de distintivos que indiquen los adornos específicos de Java (es decir, estático, final, sincronizado, ...) que deben superponerse a la imagen.
... DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator()); viewer.setLabelProvider(decorator); ...
Del mismo modo, puede utilizarse la clase OverrideIndicatorLabelDecorator para decorar un proveedor de etiquetas habitual con el fin de mostrar los indicadores de implementación y alteración temporal de los métodos.
Ni la clase OverrideIndicatorLabelDecorator ni la clase ProblemsLabelDecorator están a la escucha de los cambios de modelo. Por lo tanto, el visor no actualiza su presentación si cambia el modelo de marcador de recursos o Java. La razón de trasladar la actualización al cliente con respecto a estas clases es que aún no existe una implementación genérica que satisfaga todos los requisitos del rendimiento. El manejo de la inspección de deltas del modelo Java y de la renovación de visores en cada decoración o proveedor de etiquetas conduciría a múltiples inspecciones de deltas y a actualizaciones de visor innecesarias.
Por lo tanto, ¿qué debe hacer el cliente para poder actualizar sus visores?
ProblemTreeViewer.handleLabelProviderChanged
de las clases internas. Por las mismas razones que las enumeradas para los decoradores de etiquetas, la clase StandardJavaElementContentProvider no está a la escucha de los cambios de modelo. Si el visor debe actualizar su presentación de acuerdo con los cambios de modelo Java, el cliente debe añadir un escucha que se corresponda con JavaCore. Si el cambio descrito por el delta invalida la estructura de los elementos presentados en el visor, el cliente debe actualizar el visor utilizando la API de JFace estándar (consulte los métodos refresh de StructuredViewer y los métodos add y remove de TableViewer y AbstractTreeViewer).
Para ordenar los elementos Java según el estilo de ordenación de la UI Java, se puede conectar la clase JavaElementSorter a un visor JFace.