Pitkäkestoisten eli yli sekunnin kestävien töiden on raportoitava tilannetiedot IProgressMonitor-kohteeseen, joka välitetään työn run-metodille. Työympäristön tilannetietonäkymä näyttää kaikki tilannetietosanomat ja valmiit työyksiköt, jotka tälle valvontaohjelmalle on annettu.
Tilannetietojen valvontaohjelmaa on käytettävä myös tilannetietonäkymästä tehtyjen peruutuspyyntöjen tarkistukseen. Kun käyttäjä (tai lisäosa, joka käyttää työn sovellusohjelmaliittymää) yrittää peruuttaa työn, IProgressMonitor-kohteen isCanceled()-metodi palauttaa arvon true. On työn vastuulla tarkistaa työn peruutustila usein ja vastata peruutukseen lopettamalla run-metodi niin pian kuin mahdollista, kun se havaitsee peruutuksen. Seuraava run-metodi raportoi tilannetiedot ja vastaa työn peruutukseen:
public IStatus run(IProgressMonitor monitor) { final int ticks = 6000; monitor.beginTask("Doing some work", ticks); try { for (int i = 0; i < ticks; i++) { if (monitor.isCanceled()) return Status.CANCEL_STATUS; monitor.subTask("Processing tick #" + i); //... tee jokin työ ... monitor.worked(1); } } finally { monitor.done(); } return Status.OK_STATUS;
}
Metodin beginTask avulla nimetään vastaavassa tilannetietonäkymässä oleva tehtävä ja selvitetään tehtävän työn kokonaismäärä, jotta näkymä voi laskea tilannetiedot. Tilannetietorakenteen aliobjekteina tulee näkyviin subTask-sanomia, kun työtä tehdään. Tilannetietonäkymä laskee työn valmiusasteen prosentteina worked-kutsuissa ilmoitetun työmäärän perusteella ja tuo sen näkyviin.
IProgressMonitor-luokka on
suunniteltu vastaava käyttöliittymän tuki huomioon ottaen. Ympäristön käyttöliittymän
lisäosassa on tuki, jonka avulla työympäristö voi näyttää ajossa olevien
töiden tilannetiedot. Voit pitää tämän mielessä määrittäessäsi töitä,
jotta voit hallita niiden esitystapaa.
Kohdassa Työympäristön samanaikaisuustuki
on kuvattu töiden tilannetietojen esitykseen käytettävissä olevat sovellusohjelmaliittymät.
Entä jos työ on matalan tason toteutus, jota et halua näyttää käyttäjille? Voit merkitä työn järjestelmän työksi. Järjestelmän työ on aivan kuin mikä tahansa työ, paitsi että vastaava käyttöjärjestelmän tuki ei määritä tilannetietonäkymää tai näytä muita käyttöjärjestelmän käyttövihjeitä, jotka liittyvät työn ajoon. Jos työ ei ole käyttäjän suoraan aloittama tai säännöllisesti ajettava tehtävä, jonka käyttäjä voi määrittää, työn tulee olla järjestelmän työ. Järjestelmän työn määrityskäytäntö on yksinkertainen:
class TrivialJob extends Job { public TrivialJob() { super("Trivial Job"); setSystem(true); } ... }
Kutsu setSystem on tehtävä, ennen kuin työ ajoitetaan. Jos yrität käyttää tätä kutsua työhön, joka on parhaillaan odotustilassa, lepotilassa tai ajossa, liipaistaan poikkeus.
Jos työ on käyttäjän aloittama pitkäkestoinen työ, se on merkittävä käyttäjän työksi. Käyttäjän työ näkyy modaalisessa tilannetietojen valintaikkunassa, jossa olevan painikkeen avulla voit siirtää valintaikkunan taustalle. Työympäristö määrittää käyttäjän oletusasetuksen, jolla hallitaan sitä, ovatko nämä valintaikkunat koskaan modaalisia. Kun työ määritetään käyttäjän työksi tilannetietojen palaute mukautuu automaattisesti tilannetietojen tarkastelua koskevaan käyttäjän oletusasetukseen. Käyttäjän työn määrityskäytäntö on samankaltainen:
class TrivialJob extends Job { public TrivialJob() { super("Trivial Job"); setUser(true); } ... }
Myös setUser-kutsu on tehtävä ennen työn ajoitusta.
Tilannetietoryhmät ovat toinen keino, jonka avulla voi vaikuttaa siihen, kuinka työ näytetään käyttöliittymässä. Kun on tarkoituksenmukaista näyttää kooste useiden toisiinsa liittyvien töiden tilannetiedoista käyttöliittymässä, voidaan luoda erityinen IProgressMonitor-kohde, joka edustaa joukkoa toisiinsa liittyviä töitä. Tämä valvontaohjelma luodaan IJobManager-käytännön avulla. Seuraava katkelma kuvaa, kuinka tilannetietoryhmä luodaan ja liitetään työhön.
... IJobManager jobMan = Platform.getJobManager(); myGroup = jobMan.createProgressGroup(); job.setProgressGroup(myGroup, 600); // määritä työyksiköt, jotka työn on näytettävä. job.schedule() ...
Ryhmätoiminto mahdollistaa sen, että lisäosat voivat tarvittaessa pilkkoa tehtäviä useiksi töiksi, mutta raportoida ne käyttäjälle kuin ne olisivat yksi tehtävä. Tilannetietoryhmän valvontaohjelma käsittelee valmiusasteen prosenttiosuuden laskennan suhteessa ryhmän kaikkiin töihin.
Työ on asetettava tilannetietoryhmään, ennen kuin se ajoitetaan. Kun työ on valmis, sen viittaus tilannetietoryhmään menetetään. Jos työ halutaan ajoittaa uudelleen, se on määritettävä ryhmään uudelleen, ennen kuin se ajoitetaan.