Graafinen käyttöliittymä lintujen rengastusjärjestelmään Toteutusdokumentti Versiohistoria: 0.1 19.04.2002 Ensimmäinen luonnos. Peter Lindroos 0.2 26.04.2002 Toinen luonnos. Vesa Teikari 0.3 02.05.2002 Kolmas luonnos. Peter Lindroos 0.4 04.05.2002 Neljäs luonnos. Vesa Teikari 0.5 05.05.2002 Viides luonnos. Peter Lindroos 0.6 06.05.2002 Vähäisiä korjauksia edelliseen luonnokseen. Vesa Teikari 0.7 07.05.2002 Korjauksia: kielioppia ja tekstin rakennetta. Vesa Teikari 0.8 11.05.2002 Lisää tekstiä Peter Lindroos 1.0 12.05.2002 Selvennyksiä tekstiin, perusteellista selvittelyä. Peter Lindroos Helsinki, 12. toukokuuta 2002 Markus Päivinen Mari Jaakkola Peter Lindroos Tarja Rauste Simo Salmensuu Vesa Teikari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ohjelmistotuotantoprojekti Haukka
Sisältö 1 Johdanto 1 1.1 Dokumentin tarkoitus........................ 1 1.2 Tekninen sanasto ja käytetyt lyhenteet............... 1 2 Vaatimusmäärittely, suunnittelu ja niihin tehdyt muutokset 2 3 Toteutusratkaisut 3 3.1 Toteutuksen yleiskuva........................ 3 3.2 Tiedostojen sijainti......................... 3 3.3 Näyttöjen tekninen toteutus..................... 4 4 Järjestelmään toteutetut uudet luokat 7 4.1 tipu.servlet.renpal.................... 7 4.2 tipu.servlet.retyyllapito............... 8 4.3 tipu.servlet.lasarjat................... 8 4.4 tipu.servlet.renkir.................... 9 4.5 tipu.servlet.krselaus................... 9 4.6 tipu.servlet.varejakelu................. 9 4.7 tipu.servlet.rehirrus................... 10 4.8 tipu.servlet.rengastajat................ 10 4.9 tipu.servlet.maat...................... 10 4.10 tipu.servlet.laanit.................... 10 4.11 tipu.servlet.lylalue................... 10 4.12 tipu.servlet.euring.................... 10 4.13 tipu.servlet.renkesupd.................. 11 4.14 tipu.servlet.lajiupd................... 11
2 4.15 tipu.servlet.sanasto................... 11 4.16 tipu.servlet.lintuasemat................ 11 4.17 tipu.servlet.rvhajoitus................. 11 5 Toteuttamatta jääneet piirteet ja parannusehdotukset 12
1 1 Johdanto 1.1 Dokumentin tarkoitus Ohjelmistotuotantoprojekti Haukka jatkoi Tipu4- ja Tintti-projektien työtä graafisen käyttöliittymän, WWW-Tipun, toteuttamiseksi lintujenrengastusjärjestelmään. Järjestelmä on käytössä Helsingin yliopiston Luonnontieteellisen keskusmuseon Rengastustoimistossa. Haukka-projektissa seurattiin Tipu4:n käyttöliittymäsuunnitelmaa ja toteutusmallia ja jatkettiin WWW-Tipu:n kehitystä Tintti-projektin mallin mukaisesti. Tässä dokumentissa kuvataan Haukka-projektin tekemät lisäykset ja muutokset lintujenrengastusjärjestelmän WWW-käyttöliittymään. Muiden osien dokumentaatio on kuvattu Tipu4- [1] ja Tintti-projektin [2] dokumenteissa. 1.2 Tekninen sanasto ja käytetyt lyhenteet Check - Fortran kielinen ohjelma, joka huolehtii rengastuksiin ja tapaamisiin liittyvien tietojen tarkastuksista. Connection pool - ohjelmointiratkaisu, jolla voidaan rajata yhteydet johonkin tiettyyn resurssiin. Näitä yhteyksiä luodaan ja jaetaan asiakkaille dynaamisesti. JDBC-ajuri Java DataBase Connectivity - ajuri, mahdollistaa tietokantakutsut palvelinsovelmista. Mallipohja - käyttöliittymänäytön runko (Template), johon voidaan lisätä ohjelmallisesti vaihtuvia arvoja. Näyttö - Käyttöliittymän näyttö viittaa siihen mallipohjaan ja servletiin, joka on ko. hetkellä selaimessa.
2 Servlet - Javalla kirjoitettu ohjelmamoduuli, joka suoritetaan palvelimella, palvelinsovelma. SQL Structured Query Language - standardi kyselykieli, jolla määrittetään erilaisia tietokantaoperaatioita. Tipukanta - eläinmuseossa käytettävä relaatiotietokanta rengastustietojen säilyttämiseen. WWW-Tipu - Tässä dokumentissa kuvattu graafinen käyttöliittymä lintujen rengastustietokannalle. 2 Vaatimusmäärittely, suunnittelu ja niihin tehdyt muutokset Projektin vaatimukset ovat määritelty dokumentissa Graafinen käyttöliittymä lintujen rengastusjärjestelmään Vaatimusdokumentti (versio 1.2) [5]. Suunnittelu on kuvattu dokumentissa Graafinen käyttöliittymä lintujen rengastusjärjestelmään Suunnitteludokumentti (versio 1.4) [6]. Suunnittelu on tehty Vaatimusdokumentin määrittelyjen mukaan. Käytettyjen renkaiden selaus: näyttöön on lisätty palauta-toiminto. Rengasvälin hajoitus: näyttöön on lisätty palauta-toiminto. LYL-Alueiden ylläpito: kenttä LYL-Alue toteutettiin numeerisena kenttänä, ei alasvetovalikkona. Lajien ylläpito: näytöstä jätetty Peruuta-painike pois tarpeettomana. Lintuasemien ylläpito: alasvetovalikot Asema ja Kunta on vaihdettu normaaleiksi tekstikentiksi, joissa on popup-valikko.
3 3 Toteutusratkaisut 3.1 Toteutuksen yleiskuva Kuhunkin käyttöliittymän näyttöön liittyy yksi mallipohja, Java-Servlet sekä JavaScriptkoodi. Servlet-ohjelma vastaa toiminnallisuudesta ja palauttaa tietoa käyttäjälle. Tähän servlet käyttää apunaan mallipohjaa lomakkeen muodostamiseen johon servletin tuottama tieto ripustetaan. Lomakkeen ulkoasun määrittelyyn käytetään css-tyylimäärittelyjä, jotka liitetään lomakkeeseen käyttäjän selaimessa. Ennen lomakkeelle syötettyjen tietojen lähettämistä takaisin servletille tehdään tarkistus JavaScript-funktioilla. Ohjelmaan kuuluu myös yleiskäyttöisiä moduuleja, joilla hoidetaan mm. yhteydet tietokantaan [1]. Servletit kirjoitettiin Java 1.2 -standardin mukaisesti. Lähdekoodi kommentoitiin siten, että siitä voidaan generoida Javadoc [3] -dokumentaatio. Selaimessa tehtävät tarkistukset ja alasvetovalikko on toteutettu JavaScriptillä. Näytöt laadittiin ilmaisen (GPL) FreeMarker-kirjaston avulla [4]. Alasvetovalikko on toteutettu osoitteesta http://www.brainjar.com saatavissa olevalla Navigation Bar -sovelluksella, jonka lähdekoodi ja dokumentaatio ovat tiedostossa navbar.zip. Oracle 8i:n JDBC-ajurista on käytössä versio 8.1.7 for Java 1.2.x. 3.2 Tiedostojen sijainti Www-Tipu sovellus käynnistyy URL:ista http://www.cs.helsinki.fi/group/haukka/www-tipu): Tiedostot Alkokrunni palvelimella:
4 /home/local/haukka/jserv/servlets - Haukka-projektin lähdekoodi nyt toteutetuista näytöistä. /home/local/haukka/jserv/servlets/tipu/servlet - käännetyt (.class) tiedostot. /home/local/haukka/template - Mallipohjatiedostot /home/local/haukka/etc - Konfigurointitiedostot /home/local/haukka/src/ - Aikaisempien projektien lähdekoodi. Tiedostot Melkki palvelimella (http://www.cs.helsinki.fi/group/haukka/www-tipu): /home/group/haukka/public_html/www-tipu - WWW-Tipun Html ja JavaScript tiedostot 3.3 Näyttöjen tekninen toteutus Yliluokka tipu.servlet.tipuservlet on abstrakti luokka, jossa on toteutettu kaikkien servlettien yleinen toiminnallisuus eli haku, lisäys, poisto ja päivitys -operaatiot. TipuServlet Luokassa on kuvattu metodit, jotka käynnistetään aina ennen tai jälkeen, kun käyttäjä tekee jonkin valinnan lomakkeelta. Esim. metodi dosearchpre- Hook käynnistetään käyttäjän painettua Hae-painiketta, tämän jälkeen suoritetaan tietokantaoperaatio (tässä tapauksessa haku eli SELECT operaatio), joka on toteutettu valmiiksi TipuServlet yliluokassa. Haun jälkeen suoritetaan dosearchpost- Hook. Muut toiminnot on toteutettu vastaavilla metodeilla.
5 Jokaisella do<toiminto><pre/post>hook metodi välittää parametrina Map values tyyppisen hajautustaulun. Tämä on Freemarker [4] tietorakenne, joka sisältää lomakkeen kentissä olevat muuttujien arvot, sekä TipuServlet yliluokan ohjaamiseen tarvittavat muuttujat. Yliluokka käyttää rakennetta välittämään tietoa käyttäjältä (mallipohjalta) itselleen ja yliluokalta käyttäjälle (takaisin mallipohjalle), muokkaamalla rakenteen tietoja tarkoituksenmukaisella tavalla. Näytön toteuttaja voi vaikuttaa näiden (em.) jäljempänä kuvattavien metodien sisällä siihen mitä ruudulle tulostuu ja mitä tietoja tarkistetaan. Pyytämällä mallipohjalta tarvittavaa kenttää, esim. komennolla String arvo=values.get("koodi") tämä komento palauttaisi nyt tietorakenteessa olevan (myös näytöllä) koodi kentän arvon muuttujaan arvo. Tätä arvoa voitaisiin nyt muuttaa ja sitten asettaa se takaisin tietorakenteeseen (menee siis myös mallipohjalle) lauseella values.put("koodi", arvo). Käyttäjä voi do<toiminto>prehook metodissa ohjata TipuServlet -luokan toimintaa komennoilla : values.put("skip",) kertoo yliluokalle, että tietokantaoperaatio (insert, delete, update, search) ohitetaan, eli sitä ei toteuteta, mutta jatketaan muuten suoritusta normaalisti. Voidaan käyttää kun on esim. havaittu virhe käyttäjän syöttämissä tiedoissa tai halutaan itse tehdä tietokantaoperaatiot. values.remove("ppvm") poistaa kentän PPVM values tietorakenteesta, esim. ennen hakuoperaation toteutusta, jotta yliluokka ei käyttäisi PPVM kenttää toteuttaessaan tietokantahakua käyttäjän antamin ehdoin. puterror(values, "Virheilmoitus!") antaa yliluokalle virheilmoituksen, joka näytetään näytön yläosassa. values.put("notices","huomautus!") on ylimääräinen huomautus käyttäjälle ja näkyy näytön yläosassa.
6 Kun WWW-Tipuun toteutetaan uusia näyttöjä, tulee TipuServlet-luokasta luoda aliluokka, ja ylikirjoittaa tarvittavat metodit. Jokaiseen aliluokkaan eli servletiin tulee kirjoittaa vähintään seuraavat metodit: void initialize() Metodi joka käynnistetään, kun tämä aliluokka ladataan ensimmäistä kertaa muistiin. Tässä voidaan hakea luokan tarvitsemaa staattista tietoa tietokannasta, esim. alasvetovalikoihin sijoitettavaa tietoa. String getsearchkey() Metodi jonka ainoa tehtävä on palauttaa se tietokannan kenttä, jonka mukaan tulosrelaatiot halutaan järjestää näytöllä. protected SimpleHash getindexrow(map values) Metodi palauttaa hakutuloslistan rivin SimpleHash-kenttinä. Tähän metodiin kuvataan ne kentät, jotka käyttäjä haluaa näkyväksi hakutuloslistassa. Tarkempi kuvaus metodin käytöstä löytyy ohjelmakoodista. Valinnaiset metodit, joita ei ole pakko toteuttaa: void doposthook() Suoritetaan aina kun käyttäjä on painanut mitä tahansa painiketta juuri ennen mallipohjan tulostamista näytölle. Tässä metodissa voidaan tehdä tarkistuksia jotka tehdään toiminnoista riippumatta. void dosearchprehook(map values), void dosearchposthook(map values), void doinsertprehook(map values), doinsertpost- Hook(Map values), void dodeleteprehook(map values), void dodeleteposthook(map values), doupdateprehook(map values), void doupdateposthook(map values) Metodeja, jotka suoritetaan aina ko. operaatiota ennen PreHook tai jälkeen PostHook.
7 Haukka -projektissa tehtäväksi jäi mallipohjien laatiminen ja näiden ennen ja jälkeen tietokantaoperaatioiden tapahtuvien metodien kirjoitus, eli tietokantaan vietävän tiedon tarkistus ja muokkaamminen. Luokka on kuvattu tarkemmin Tipu4-projektin toteutusdokumentissa [1, Kappale 3.9]. 4 Järjestelmään toteutetut uudet luokat Kaikki projektin toteuttamat luokat ovat laajennuksia tipu.servlet.tipuservlet yläluokkaan. Tässä kappaleessa kuvataan tarkemmin vain ne ratkaisut, jotka poikkeavat yliluokan tarjoamista palveluista. 4.1 tipu.servlet.renpal Luokka RenPal huolehtii rengastajille jaettujen renkaiden selailusta ja käyttämättä jättämien sarjojen palautuksesta. Kohdetauluna on JAKELU. Palautuksen yhteydessä tarkastetaan ettei yhtäkään palautetuista renkaista ole käytetty, ja että kyseiset renkaat on todella jaettu palauttajalleen. Luokka on toteutettu sikäli muista näytöistä poikkeavasti, että siinä palautus-painikkeen painaminen suorittaa aina doupdateprehook metodin, jossa yliluokan suorittama tietokantaoperaatio eli tässä tapauksessa update, kuitenkin ohitetaan suorittamalla values.put"skip",-lause 3.3,5. Tämä joudutaan tekemään siksi, että yliluokka ei tarjoa mahdollisuutta tehdä samaan aikaan enempää kuin yhden tietokanta-operaation. Tässä luokassa tarvitaan kuitenkin yksi update- ja yksi insert-operaatio siinä tapauksessa, että rengastaja palauttaa renkaita hänelle jaetun sarjan keskeltä. Tuolloin joudutaan päivittämään
8 jo kannassa oleva sarja niin, että siitä tulee uusi alkupuolen sarja (vanhat renkaat palautettavan sarja 1. rengas - 1) ja lisäämään uusi sarja kopiona vanhasta (palautettavan sarjan viimeinen rengas + 1 vanhan sarjan loppu). Palautuksen onnistumisesta ilmoitetaan values.put("notices", «ilmoitus>")3.3 komennon avulla yliluokalle. 4.2 tipu.servlet.retyyllapito Luokka ReTyYllapito huolehtii rengassarjojen hausta, lisäyksestä, poistosta ja ylläpidosta. Kohdetauluna on RENGAS. Tarkistetaan etteivät lisättävät tai päivitettävät rengassarjat sarjat mene vanhojen kanssa päällekkäin RENGAS-taulussa. Poiston yhteydessä tarkistetaan, ettei jotakin välin rengasta ole jo jaettu jollekin rengastajalle JAKELU-taulusta tai, ettei rengasta ole jo rengastettu (RENGASTETTUtaulu). 4.3 tipu.servlet.lasarjat Luokka LaSarjat huolehtii lajeille sallittujen sarjojen hausta, lisäyksestä ja päivityksestä. Kohdetaulu on RSARJA. Luokan initialize()3.3 -metodissa haetaan kaikki sarjat tietokantakyselyllä: select distinct substr(rgtunnus1, 1, 2) from RENGAS order by substr(rgtunnus1, 1, 2) ja asetetaan ne values tietokantarakenteeseen, jotta ne voidaan näyttää näytöllä alasvetovalikossa.
9 Alasvetovalikkoratkaisuun päädyttiin siksi, että ei tarvistsisi erikseen tarkistaa sarjan kelvollisuutta, lisäys operaation yhteydessä. Lisäyksen yhteydessä tarkistetaan, että käyttäjän syöttämä laji löytyy LAJI-tietokantataulusta. 4.4 tipu.servlet.renkir Luokka RenKir huolehtii rengastajille jaettujen renkaiden selauksesta ja hävinneiden tuohoutuneiden renkaiden merkitsemisestä. Kohdetaulu on RENGASTUS. Luokassa tarkistetaan että hävinneet/tuhotut on jaettu ilmoittajalle (JAKELU-taulusta) ja ettei kyseisiä renkaita jo ole käytetty (RENGASTETTU-taulusta). Tätä näyttöä ei ole saatu implementoitua toimivaksi. Ongelmia on ollut siinä, että ei ole osattu ratkaista yliluokan useampien tietokantaoperaatioiden suorituksen rajoitusta, joka on kuvattu luokan RenPal toteutuskuvauksessa??renpal). 4.5 tipu.servlet.krselaus Luokka Krselaus huolehtii kaytettyjen renkaiden selauksesta. Kohdetaulu on REN- GASTETTU. 4.6 tipu.servlet.varejakelu Luokka VaReJakelu huolehtii värirenkaiden jakelusta. Käyttäjän syöttäessä uuden jakelun tarkistetaan, että lajin lyhenne läytyy LAJItaulusta, ja että rengastaja löytyy RENGASTAJA-taulusta sekä, että jakopäivämäärä on menneisyydessä. Kohdetaulu on VRENGAS.
10 4.7 tipu.servlet.rehirrus Luokka ReHirrus huolehtii rengastusten hirrustietojen ylläpidosta. Kohdetaulu on RHIRRUS. 4.8 tipu.servlet.rengastajat Luokka rengastajat huolehtii rengastajatietojen ylläpidosta. Kohdetaulu on REN- GASTAJA. 4.9 tipu.servlet.maat Luokka Maat huolehtii maiden hausta, lisäyksestä, päivityksestä ja poistosta. Kohdetaulu on OSOITEMAA. 4.10 tipu.servlet.laanit Luokka Laanit huolehtii läänitietojen ylläpidosta. Kohdetaulu on LAANI, johon myös kaikki tietokantaoperaatiot kohdistuvat. 4.11 tipu.servlet.lylalue Luokka Lylalue huolehtii Lyl-alueiden ylläpidosta. Kohdetaulu on LYL_ALUE. 4.12 tipu.servlet.euring Luokka Euring huolehtii maiden hausta, lisäyksestä, päivityksestä ja poistosta. Kohdetaulu on ULKOMAINEN_PAIKKA.
11 4.13 tipu.servlet.renkesupd Luokka RenKesUpd huolehtii rengaskeskusten hausta, lisäyksestä, päivityksestä ja poistosta. Kohdetaulu on RENGASTUSKESKUS. Luokasta puuttuu maatietojen tarkistus OSOITEMAA-taulusta. 4.14 tipu.servlet.lajiupd Luokka LajiUpd huolehtii lajien hausta, lisäyksestä, päivityksestä ja poistosta. Kohdetaulu on LAJI. 4.15 tipu.servlet.sanasto Luokka Sanasto huolehtii SANASTO tietokantataulun tietueiden ylläpidosta. 4.16 tipu.servlet.lintuasemat Luokka Lintuasemat huolehtii LINTUASEMA tietokantataulun tietueiden ylläpidosta. 4.17 tipu.servlet.rvhajoitus Luokka on toteutettu sikäli muista näytöistä poikkeavasti, että siinä Pilko-painikkeen painaminen suorittaa aina doupdateprehook metodin, jossa yliluokan suorittama tietokantaoperaatio eli tässä tapauksessa update, kuitenkin ohitetaan suorittamalla values.put"skip",-lause 3.3,5. Tämä joudutaan tekemään siksi, että yliluokka ei tarjoa mahdollisuutta tehdä samaan aikaan enemmän kuin yhden tietokanta-operaation. Tässä luokassa tarvitaan
12 kuitenkin useampi insert-operaatio jokaista hajoitettavan RENGASTUS-taulun hajoitettavaa rengasta kohti. Hajoituksen onnistumisesta ilmoitetaan values.put("notices", «ilmoitus>")3.3 komennon avulla yliluokalle. 5 Toteuttamatta jääneet piirteet ja parannusehdotukset Projektin aikana tuli esille useita parannusehdotuksia ja joitakin edellisten projektien huomaamattajääneitä virheitä, joita ei ajanpuutteen vuoksi kyetty korjaamaan. Valikon todettiin toimivan väärin Internet Explorer 6.0:n eri versioilla, joten se ehdotettiin vaihdettavaksi uuteen (HV Menu Ger Versluis 2000) ja määriteltiin sen parametrit muistuttamaan vanhaa valikkoa mahdollisimman paljon. Menun rengastukset ja apurekisterit valikot tulostuvat liian ylös, eikä niitä saatu ajoissa kohdallen. Valikko koostuu tiedostoista: /www-tipu/index.uus.html - WWW-sivu josta menua kutsutaan JavaScript-komennolla go() /www-tipu/js/menu.js.uus - Itse menun rajapintaluokka /www-tipu/js/menuitems.js.uus - Menutiedosto, jossa kuvataan menu ja sen parametrit. Tähän tiedostoon tulee tehdä menua koskevat ulkoasumuutokset. Popup-valikon katsottiin olevan liian hidas latautumaan. Lisäksi se, että popup-servletti hakee kaikki koskaan tarvitsemansa tiedot kerralla muistiin, todettiin olevan huono ratkaisu silloin, kun on juuri lisätty uusi
13 tietue ja pitäisi saada se popup-listaukseen. Tähän ehdotettiin ratkaisuksi uudelleenohjelmointia, jossa tietokannan tiedot haettaisiin aina kyselyn yhteydessä vain siitä taulusta johon kysely kohdistuu. Popup-valikko on kokonaisuudessaan tiedostossa Popup.java. Popup-luokka ei ole TipuServletin alaluokka vaan itsenäinen servlet. Kun hakutulosten listauksessa saadaan yli 100 tietuetta, pitäisi lause "löytyi 100 sanaa"korvata lauseella "löytyi xx sanaa, joista 100 näytetään". Yliluokan TipuServlet ohjelmakoodia tulee muuttaa siten, että se laskee koko tietokantahaun tulosten määrän ja ilmoittaa sen mallipohjalla toteutuksessa kuvatulla tavalla. Siniset viivat (HTML:n <HR> elementit) pitää vaihtaa siniseen viiva-imageen (sini.gif). Erityisesti Hakutulosten selauksessa <HR> elementtejä on vielä jäljellä. Asiakkaalle järjestetyssä demo-tilaisuudessa asiakas toivoi, että värirenkaiden jakeluun pitää lisätä 80 merkkiä pitkä kommenttikenttä. Kommenttikenttä tulee lisätä VRENGAS-tietokantatauluun. Asiakkaalle järjestetyssä demo-tilaisuudessa asiakas toivoi, että Värirengastusten kommenttikenttää pitää pidentää ja lisätä uusina kenttinä jalkarenkaan rengastajan numero ja nimi, sekä värirenkaan rengastajan numero ja nimi. Renkaiden merkintä hävinneeksi-näytön Merkintä hävinneeksi-toimintoa ei saatu ajoissa valmiiksi, selvitetty tarkemmin edellä kappaleessa 4.4). Testausdokumentista löytyvät toteuttamatta jääneet kohdat[7]. Päivämääräkentät on poistettava hakutuloksista (values.remove("pvmkentännimi") toiminnolla??) koska niiden mukaan haku, edellyttäisi päivämääräkenttien valmistelua
14 tietokannanhallintajärjestelmän ymmärtämään muotoon, ja tähän ei projektin käytettävissä oleva aika riittänyt. Rengastusten syöttö -lomakkeessa alempi Pvm kenttä on väärän muotoinen. Taulujen INPUT-kentät näkyvät IE 6.0:ssa keskitettynä. Testausdokumentin Rengastajien ylläpito-lomakkeen (rengastajat.java) ja Värirenkaiden jakelu-lomakkeen (VaReJakelu.java) ei huomautukset ja Käytettyjen renkaiden selaus-lomakkeen (Krselaus.java) huomautus Hae toiminnon kohdalla, johtuvat siitä, että servleteissä ei ole poistettu PVM kenttää hakutuloksista edellä (kappaleessa 3) kuvatulla tavalla. Testausdokumentin Rengastuskeskusten ylläpito-lomakkeen huomautus siitä, että maatietoja ei tarkisteta, johtuu siitä, että tarkistus puuttuu kokonaan Rengastuskeskusten ylläpidosta (RenKesUpd.java (kappale (??)). Testausdokumentin Sanasto-lomakkeen huomautus Hausta kun kaikki kentät on täytetty, johtuu luultavasti siitä, että SANASTO-taulun sateksti kenttä on alunperin tallennettu pieniä kirjaimia käyttäen ja nyt TipuServlet-yliluokka muuttaa haussa kaikki merkit isoiksi. Tietokantataulut Ohjelmakoodit (A) liitteenä omissa tiedostoissaan: alkokrunni@/home/local/haukka/jserv/servlet/*.java
15 Viitteet [1] Tipu4-projekti Toteutusdokumentti http://www.cs.helsinki.fi/group/tipu4/implementationspec/ [2] Tintti-projekti Toteutusdokumentti http://www.cs.helsinki.fi/group/tintti/documents/toteutus.pdf [3] Javadoc 1.2 http://java.sun.com/products/jdk/1.2/docs/tooldocs/javadoc/ [4] Freemarker http://freemarker.sourceforge.net/ [5] Haukka-projekti Vaatimusdokumentti http://www.cs.helsinki.fi/group/haukka/dokumentit/vaatimus.pdf [6] Haukka-projekti Suunnitteludokumentti http://www.cs.helsinki.fi/group/haukka/dokumentit/2003-suun.pdf [7] Haukka-projekti Testausdokumentti http://www.cs.helsinki.fi/group/haukka/dokumentit/0705-testaus.pdf