Zobrazování prvků Java v prohlížeči JFace

Uživatelské rozhraní API JDT poskytuje třídy, které umožňují zobrazovat model Java nebo jeho součásti ve standardním prohlížeči JFace. Příslušné funkce zajišťují především tyto metody:

Poskytovatelé obsahu a štítku pro prohlížeče JFace jsou podrobně popsány v Prohlížeče JFace.

Rozumíte-li základním mechanizmům platformy, je pro vás sestavení poskytovatelů obsahu a štítku Java velmi snadné:
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Poskytnout členy kompilační jednotky nebo souboru třídy, nikoli však prvky pracovní kopie
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Další příznaky jsou definovány ve třídě JavaElementLabelProvider
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Použití modelu Java tak, aby vstup prohlížečů představoval projekty Java na první úrovni.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

Výše uvedený příklad používá model Java (IJavaModel) jako vstupní prvek prohlížeče.  StandardJavaElementContentProvider podporuje jako vstupní prvky rovněž IJavaProject, IPackageFragmentRoot, IPackageFragment a IFolder:

Překrývání obrázků informací Java

JavaElementImageDescriptor lze použít k vytvoření obrázku s použitím povinného deskriptoru základního obrázku a sady příznaků, které určují javovské ozdoby (např. static, final, synchronized,...) k překrytí obrázku.

Přidávání dekorátorů problému a potlačení

Má-li prohlížeč přidat anotace problému, použijte JFace DecoratingLabelProvider společně s ProblemsLabelDecorator. Následující úsek zdrojového kódu předvádí použití dekorátoru štítku problému.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

Stejným způsobem lze použít OverrideIndicatorLabelDecorator k dekoraci normálního poskytovatele štítku za účelem zobrazení indikátorů implementace a potlačení metod.

Aktualizace prezentace při změnách modelu

Změnám modelu nenaslouchá OverrideIndicatorLabelDecorator ani ProblemsLabelDecorator. Proto prohlížeč při změně modelu Java nebo modelu značkovače prostředků neaktualizuje své zobrazení. Důvodem přesunu odpovědnosti za aktualizaci těchto tříd na klienta je skutečnost, že dosud neexistuje obecná implementace, která by plnila veškeré výkonové požadavky. Použití prohlížení rozdílových dat modelu Java a obnovení prohlížeče pro jednotlivé dekorátory nebo poskytovatele štítků vyvolává řadu prohlížení rozdílových dat a nadbytečné aktualizace prohlížeče.

Co tedy musí klient provést, chce-li aktualizovat své prohlížeče?

Z důvodů uvedených pro dekorátory štítků StandardJavaElementContentProvider nenaslouchá změnám modelu. Potřebuje-li prohlížeč aktualizovat své zobrazení dle změn modelu Java, měl by klient přidat do JavaCore příslušný listener. Pokud změna popisovaná rozdílovými daty zneplatňuje strukturu prvků zobrazených v prohlížeči, klient by měl aktualizovat prohlížeč s použitím standardního rozhraní API JFace (viz metody obnovení prohlížeče StructuredViewer a přidávání a odebírání metod objektů TableViewer a AbstractTreeViewer).

Řazení prohlížeče

Do prohlížeče JFace lze připojit JavaElementSorter za účelem třídění prvků Java podle stylu třídění Java UI.