Presentar elementos Java en un visor JFace

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: 

Recubrir imágenes con información Java

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.

Añadir decoradores de problemas y alteración temporal

Cuando está previsto que un visor incluya anotaciones de problemas, se utiliza la clase DecoratingLabelProvider de JFace, junto con la clase ProblemsLabelDecorator. El siguiente fragmento de código ilustra el uso de un decorador de etiquetas de problemas.
    ...
    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.

Actualizar la presentación en cambios de modelo

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?

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).

Ordenar el visor

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.

Copyright IBM Corporation y otras empresas 2000, 2003. Reservados todos los derechos.