Harjoitteluosajärjestelmän modularisointi


Kuvassa on harjoitteluosajärjestelmä modularisoituna, niin että uusien tehtävätyyppien lisääminen olisi mahdollisimman helppoa.

Kuvan osien selitykset

OStatusInfo

Tehtävälistan luova sivu.

TaskPresenter

Servletti vastaa harjoittelukäyttöliittymän yleisten osien tulostamisesta ja oikean tehtäväkohtaisen luokan metodien kutsumisesta käyttöliittymän tehtäväkohtaisen osan tulostamisen ja vastauksen analysointiin. Metodit:

doPost(HttpServletRequest req, HttpServletResponse res)
Metodia kutsutaan, kun käyttäjä lähettää HTML-lomakkeen. Parametrit: req::userId - käyttäjän tunniste, req::taskId - tehtävän tunniste, req::groupId - tehtäväryhmän tunniste.

TaskTypeSpecificClass(es)

Tehtävätyyppikohtainen luokka, joka vastaa tehtäväkäyttöliittymän tehtäväkohtaisesta osuudesta ja vastauksen analysoinninsta. (Huom! analysaattori ja käyttöliittymän luova luokka voivat olla eri luokkia).

Alla kuvattujen metodien lisäksi luokalla pitää olla parametriton konstruktori. Metodit:

analyze(Conection conn, Request req, Task task, PrintWriter out);
Analysoi käyttäjän vastauksen ja tulostaa käyttöliittymään käyttäjän vastauksen tuloksen (esim. SQL-kyselyn palauttamat rivit) ja mahdolliset virheilmoitukset ja ohjeet. Metodi palauttaa rajapinnan TaskAnalyzer mukaisen olion.
createUI(Task task, PrintWriter out, int answerNbr);
Luokka luo käyttäjälle tietyn tehtävätyypin mukaisen käyttöliittymän yhden tehtävän tekemiseen. Mikäli parametri answerNbr > 0 metodin on osattava alustaa käyttöliittymä vanhan vastauksen tiedoilla. Metodin luoma käyttöliittymä tulee FORM-elemntin sisään, mutta metodin ei tarvitse huolehtia, kuin tehtävätyppin vaatimien syötekenttien ja mahdollisten ohjeiden tulostamisesta.

Rajapinta TaskAnalyzer

Rajapinta kuvaa analysoidun tehtävän tietoja. Rajapinnan toteuttava luokka toteuttaa seuraavat metodit:

int getStatus()
Metodi palauttaa tiedon tehtävän onnistumisesta
String getAnswer()
Metodi palauttaa käytäjän vastauksen sellaisessa muodossa, että se voidaan tallettaa kantaan. (Tällä hetkellä 1000 merkkiä pitkä String)