Java-elementtien esittäminen JFace-katseluohjelmassa

JDT UI -sovellusohjelmaliittymässä on luokkia, joiden avulla voi esittää Java-mallin tai sen osia tavallisessa JFace-katseluohjelmassa. Tämän toiminnon tuottavat ensisijaisesti

JFace-katseluohjelmien sisällön ja otsikoiden toimittajat on kuvattu tarkemmin ohjeaiheessa JFace-katseluohjelmat.

Jos ymmärrät käyttöjärjestelmän perustoimintatavan, Javan sisällön ja otsikoiden toimittajien yhdistäminen on melko helppoa:
    ...
    TreeViewer viewer= new TreeViewer(parent);
    // Toimittaa käännösyksikön tai luokkatiedoston jäsenet, mutta ei työskentelykopion elementtejä
    ITreeContentProvider contentProvider= new StandardJavaElementContentProvider(true, false);
    viewer.setContentProvider(contentProvider);
    // Luokassa JavaElementLabelProvider kuvattuja määritteitä on enemmän
    ILabelProvider labelProvider= new JavaElementLabelProvider(
        JavaElementLabelProvider.SHOW_DEFAULT |
        JavaElementLabelProvider.SHOW_QUALIFIED |
        JavaElementLabelProvider.SHOW_ROOT);
    viewer.setLabelProvider(labelProvider);
    // Esittää ensimmäisen tason Java-projektit käyttämällä Java-mallia katseluohjelmien syötteenä.
    viewer.setInput(JavaCore.create(ResourcesPlugin.getWorkspace().getRoot()));
    ...

Edellä kuvatussa esimerkissä katseluohjelman syöte-elementtinä käytetään Java-mallia (IJavaModel).  StandardJavaElementContentProvider tukee syöte-elementteinä myös rajapintoja IJavaProject, IPackageFragmentRoot, IPackageFragment ja IFolder:

Kuvien päällekirjoitus Java-tiedoilla

JavaElementImageDescriptor-luokan avulla voi luoda kuvan, joka perustuu sattumanvaraiseen peruskuvan kuvaajaan ja joukkoon määritteitä, jotka määrittävät, mitä Java-kohtaisia koristeluja (esim. staattinen, lopullinen, synkronoitu...) asetetaan kuvan päälle.

Häiriö- ja ohituskoristelutoimintojen lisäys

Kun katseluohjelman oletetaan sisällyttävän häiriöhuomautukset, käytetään JFace DecoratingLabelProvider -luokkaa yhdessä ProblemsLabelDecorator-luokan kanssa. Seuraava katkelma kuvaa häiriöotsikon koristelutoimintoa.
    ...
    DecoratingLabelProvider decorator= new DecoratingLabelProvider(labelProvider, new ProblemsLabelDecorator());
    viewer.setLabelProvider(decorator);
    ...

Samalla tavalla OverrideIndicatorLabelDecorator-luokan avulla voidaan koristella tavallinen otsikon toimittaja näyttämään metodien toteutus- ja ohitusilmaisimet.

Mallimuutosten esityksen päivitys

OverrideIndicatorLabelDecorator ja ProblemsLabelDecorator eivät kumpikaan kuuntele mallin muutoksia. Niinpä katseluohjelma ei päivitä esitystään, jos Java- tai resurssimerkintämalli muuttuu. Syy päivityksen työntämiseen työasemaan näiden luokkien osalta on, ettei toistaiseksi ole yleistä toteutusta, joka täyttäisi kaikki toimintahuolet. Java-mallin deltatarkastuksen käsittely ja katseluohjelman verestys jokaisessa nimiön koristelutoiminnossa tai toimittajassa johtaisi useaan deltatarkastukseen ja tarpeettomiin katseluohjelman päivityksiin.

Mitä työaseman pitää sitten tehdä katseluohjelmien päivitystä varten?

StandardJavaElementContentProviderei kuuntele mallin muutoksia samoista syistä, jotka on esitetty nimiön koristelutoimintojen suhteen. Jos katseluohjelman pitää päivittää esityksensä Java-mallin muutosten mukaisesti, työaseman on lisättävä vastaava kuuntelutoiminto JavaCore-ydinosaan. Jos deltan kuvaama muutos mitätöi katseluohjelmassa esitettyjen elementtien rakenteen, työaseman tulee päivittää katseluohjelma tavallisen JFace-sovellusohjelmaliittymän avulla (lisätietoja on StructuredViewer-päivitysmetodien ja TableViewer- ja AbstractTreeViewer-lisäysmetodien ja -poistometodien kohdalla).

Katseluohjelman lajittelu

Java-elementit voi lajitella Java-käyttöliittymän lajittelutyylin mukaan kytkemällä JavaElementSorter-luokan JFace-katseluohjelmaan.