Prezentowanie elementów Java w przeglądarce JFace

Interfejs API interfejsu użytkownika środowiska JDT udostępnia klasy umożliwiające prezentację modelu Java lub jego części w standardowej przeglądarce JFace. Ta funkcja jest udostępniana głównie przez:

Dostawcy treści i etykiet dla przeglądarek JFace są bardziej szczegółowo opisani w sekcji Przeglądarki JFace.

Po zrozumieniu podstawowego mechanizmu działania platformy złożenie dostawców treści Java i etykiet jest całkiem proste:
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Dostarcza elementy jednostki kompilacji lub pliku klasy, ale nie elementy działającej kopii
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Więcej flag definiuje klasa JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Używanie modelu Java jako danych wejściowych przeglądarki prezentuje projekty Java na pierwszym poziomie.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

W powyższym przykładzie używany jest model Java (IJavaModel) jako element danych wejściowych przeglądarki.  Klasa StandardJavaElementContentProvider obsługuje również interfejsy IJavaProject, IPackageFragmentRoot, IPackageFragment i IFolder jako elementy danych wejściowych:

Nakładanie informacji Java na obrazy

Klasa JavaElementImageDescriptor może być używana do tworzenia obrazów na podstawie deskryptora podstawowego obrazu i zbioru flag określających, które specyficzne symbole Java (np. static, final, synchronized itd.) mają być nałożone na obraz.

Dodawanie dekoratorów problemów i przesłaniania

Jeśli w przeglądarce mają być wyświetlane adnotacje problemów, używana jest klasa przeglądarki JFace DecoratingLabelProvider wraz z klasą ProblemsLabelDecorator. Poniższy fragment kodu ilustruje użycie dekoratora etykiet problemów.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

Klasa OverrideIndicatorLabelDecorator może być używana w podobny sposób do dekorowania zwykłego dostawcy etykiet w celu wyświetlenia indykatorów implementowania i przesłaniania dla metod.

Aktualizowanie prezentacji po zmianach modelu

Ani klasa OverrideIndicatorLabelDecorator, ani klasa ProblemsLabelDecorator nie nasłuchują zmian w modelu. W związku z tym przeglądarka nie aktualizuje prezentowanych danych, jeśli model Java lub model znacznika zasobów ulega zmianom. W przypadku tych klas przyczyną przeniesienia obowiązku aktualizacji na klienta jest to, że nie istnieje jeszcze ogólna implementacja spełniająca wszystkie wymagania dotyczące wydajności. Obsługiwanie kontroli zmian modelu Java i odświeżanie przeglądarki dla każdego dekoratora lub dostawcy etykiet prowadziłoby do wielokrotnych kontroli zmian i zbędnych aktualizacji przeglądarki.

Co zatem muszą zrobić klienci, aby zaktualizować swoje przeglądarki?

Z tych samych przyczyn, które zostały wymienione dla dekoratorów etykiet, klasa StandardJavaElementContentProvider nie nasłuchuje zmian modelu. Jeśli przeglądarka musi zaktualizować wyświetlane dane zgodnie ze zmianami w modelu Java, klient powinien dodać odpowiedni obiekt nasłuchujący do klasy JavaCore. Jeśli zmiana opisana przez deltę unieważnia strukturę elementów prezentowaną przez przeglądarkę, klient powinien zaktualizować przeglądarkę za pomocą standardowego interfejsu API JFace (patrz metody odświeżania klasy StructuredViewer oraz metody dodawania i usuwania klas TableViewer i AbstractTreeViewer).

Sortowanie w przeglądarce

Klasa JavaElementSorter może zostać przyłączona do przeglądarki JFace, aby sortować elementy Java zgodnie ze stylem sortowania interfejsu użytkownika Java.