TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria:

Samankaltaiset tiedostot
Toteutusdokumentti. Kotkat-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ylläpitodokumentti. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria:

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria:

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria:

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Käyttöohje. Tiput-ryhmä Ohjelmistotuotantoprojekti

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Suunnitteludokumentti

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Käyttöohje. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria: Helsinki,

Lohtu-projekti. Testiraportti. Versiohistoria: syklin toteutuksen testit. 1. ajo Virve

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Action Request System

Lohtu-projekti. Testaussuunnitelma

Suunnitteludokumentti

Metodien tekeminen Javalla

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Toimittajaportaalin pikaohje

9. Periytyminen Javassa 9.1

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden

Sisällysluettelo 1 Johdanto Root, koko Opalan pääkäyttäjä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Fingridin säätösähkötarjousohje. Vaksin käyttöohjeet

Toimittajaportaalin pikaohje

Olio-ohjelmointi Javalla

Raporttiarkiston (RATKI) käyttöohjeet Ohjeet

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Suunnitteludokumentti

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Tietokannat II -kurssin harjoitustyö

Ohjelmoinnin jatkokurssi, kurssikoe

Käyttöohje. Kotkat-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri

15. Ohjelmoinnin tekniikkaa 15.1

OHJE KILPIEN LISÄÄMISESTÄ ATJN KILPIVARASTOON

LoCCaM. LoCCaM Cam laitteiston ohjaaminen. Dimag Ky dimag.fi

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

KÄYTTÖLIITTYMÄ SÄÄKSIEN PESIMÄTIETOJEN TIETOKANTAAN Käyttöohje

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Käyttöohje. Visy Access Net UPM

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

Syötetään haettavan tai lisättävän henkilön henkilötunnus, keinohenkilötunnus, K-tunnus tai asiakasnumero.

Tilastokeskuksen rajapintapalveluiden käyttöönotto MapInfo - ohjelmistossa Ohjeita laatiessa on käytetty MapInfon versiota 11.5.

Javan perusteita. Janne Käki

18. Abstraktit tietotyypit 18.1

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

HAME PostGIS-tietokanta

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

5. HelloWorld-ohjelma 5.1

Käyttöohje. Versiohistoria: versio Mari Kommenttien perusteella korjattu versio

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ylläpito-ohje. Matematiikan oppifoorumi. Carl Johansson Jukka Kariola Outi Marttila Helena Venäläinen Sampsa Virtanen. Ohjaaja.

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

KÄYTTÖLIITTYMÄ SÄÄKSIEN PESIMÄTIETOJEN TIETOKANTAAN Ylläpitodokumentti

Graafinen käyttöliittymä lintujen rengastusjärjestelmään. Vaatimusdokumentti

KÄYTTÖVALTUUSHALLINTA (KVH) 1 (14) Käyttöohje rekisterinpidon yhteyshenkilölle

RATKI 1.0 Talousraportin käyttäjän ohje

KÄYTTÖLIITTYMÄ SÄÄKSIEN PESIMÄTIETOJEN TIETOKANTAAN Suunnitteludokumentti

20. Javan omat luokat 20.1

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Käyttöohje. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Listarakenne (ArrayList-luokka)

Asiointipalvelun ohje

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

9. Periytyminen Javassa 9.1

7. Näytölle tulostaminen 7.1

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Opintokohteiden muokkaus

Graafinen käyttöliittymä lintujen rengastusjärjestelmään

Uuden Peda.netin käyttöönotto

Tietokanta (database)

Testausdokumentti. Sivu: 1 / 10. Ohjelmistotuotantoprojekti Sheeple Helsingin yliopisto. Versiohistoria

Opintokohteiden muokkaus

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Työsähköpostin sisällön siirto uuteen postijärjestelmään

OHJE 1 (14) Peruskoulun ensimmäiselle luokalle ilmoittautuminen Wilmassa

Toteutusdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Java-API, rajapinnat, poikkeukset, UML,...

Office 365 palvelujen käyttöohje Sisällys

Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä

UTIFLEET-VARAUSJÄRJESTELMÄ KÄYTTÄJÄN OHJE. Gospel Flight ry

1. Omat operaatiot 1.1

Transkriptio:

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 0.1 10.4.2003 Ensimmäinen luonnos Ari 0.2 16.4.2003 Lisätty otsikot Ari 0.3 4.5.2003 Lisätty tekstejä Ari, Katja 0.4 5.5.2003 Lisätty ja muuteltu tekstejä Ari, Katja 1.0 9.5.2003 Koostettu tiedot yhteen Ari 1.1 10.5.2003 Lisätty Katja osuus Katja Helsinki, 10.5.2003 Outi Annala Ari Keränen Katja Korpela Topi Laamanen Riikka Pihlajamäki Mikael Puolakka HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ohjelmistotuotantoprojekti Hali

Sisällys 1 JOHDANTO... 1 1.1 ERIKOISSANASTO JA KÄYTETYT LYHENTEET... 1 2 TOTEUTUKSEN RAJOITTEET... 2 2.1 OHJELMAN SERVLETTIYMPÄRISTÖ... 2 2.2 OHJELMOINTIKIELI JA -TYYLI... 2 3 TIEDOSTOJEN SIJAINTI... 3 3.1 KÄYNNISTYS URL... 3 3.2 TIEDOSTOT ALKOKRUNNI PALVELIMELLA:... 3 4 OSAJÄRJESTELMIEN TOTEUTUSPOIKKEAMAT... 4 4.1 PAKKAUS HALI.DB... 4 4.1.1 ConnectionPool... 4 4.1.2 Table... 4 4.1.3 OperationResults... 4 4.1.4 SearchResults... 4 4.1.5 DatabaseOperation... 4 4.1.6 SearchOperation... 5 4.1.7 InsertOperation... 5 4.1.8 UpdateOperation... 5 4.1.9 DeleteOperation... 5 4.2 PAKKAUS HALI.SERVLET... 5 4.2.1 HaliServlet... 5 4.2.2 Hali... 6 4.2.3 Haku... 7 4.2.4 UusiPesa... 8 4.3 PAKKAUS HALI.GENERAL... 11 4.3.1 HaliProperties... 11 4.3.2 Tarkista... 11 4.4 MUUT TIEDOSTOT... 11 4.4.1 Template-tiedostot... 11 4.4.1.1 navi.ftl... 11 4.4.1.2 hali.ftl... 11 4.4.1.3 haku.ftl... 12 4.4.1.4 pesa.ftl... 12 4.4.2 Properties-tiedostot... 13 4.4.2.1 Kielituen tiedostot... 13 4.4.3 Tyylitiedosto... 13 4.4.4 Staattiset html-tiedostot... 13 4.4.5 Poikasen ikatiedosto... 13 5 KÄYTTÖLIITTYMÄ... 14 5.1 KÄYTTÄJÄN SISÄÄNKIRJAUTUMINEN... 14 5.2 HAKU... 14 5.3 UUDEN PESÄN LISÄÄMINEN... 14 6 TOTEUTTAMATTA JÄÄNEET PIIRTEET... 14 6.1 PAKKAUS HALI.SERVLET... 15 6.2 PAKKAUS HALI.GENERAL... 15 6.3 MUUT TIEDOSTOT... 15 7 PARANNUSEHDOTUKSET... 15

1 1 Johdanto Tämä toteutusdokumentti kuvaa toteutettavan Haliaeetus-järjestelmän teknisen toteutuksen niiltä osin, kun on poikettu suunnitteludokumentista. 1.1 Erikoissanasto ja käytetyt lyhenteet CVS Concurrent Versions System. Versionhallintaohjelmisto, joka on luotu helpottamaan ohjelmistojen versionhallintaa. Haliaeetus järjestelmä, järjestelmä Näillä tarkoitetaan koko toteutettavaa järjestelmää, joka sisältää käyttöliittymän, tietokannan ja näiden välillä olevat toiminnallisuudet. HTML HTTP HTTPS Istunto Java HyperText Markup Language. World Wide Webin eli WWW:n julkaisukieli. Hypertext Transfer Protocol. Siirtokäytäntö eli protokolla, jonka varaan WWW rakentuu. Hypertekstidokumenttien siirtoa verkossa tukeva komentokieli. HTTP over Secure Sockets Layer. HTTP:n salakirjoitettu versio. Samalta selaimelta tuleva sarja kyselyjä, jotka tapahtuvat määrätyssä ajanjaksossa. Ohjelmointikieli, jota käytetään projektin toteutuksessa. JDBC-ajuri Java DataBase Connectivity -ajuri, mahdollistaa tietokantakutsut palvelinsovelmista. JDBC-yhteys Hoitaa yhteyden tietokantaan, jonne järjestelmän tiedot on talletettu. Käyttöliittymä Se osa järjestelmästä, joka näkyy loppukäyttäjälle ja jolla järjestelmää käytetään. Luokka Java-ohjelmointikielessä yksi kokonaisuus, kuten taulu tietokannassa. Mallipohja Sama kuin template. Dokumentin runko, joka sisältää tietyllä tavalla merkittyjä kohtia, joihin voidaan ohjelmallisesti lisätä vaihtuvia arvoja. Metodi Java-luokan sisällä oleva aliohjelma, jota voidaan kutsua itse luokasta tai toisesta Java-luokasta.

Olio Servlet SQL Java-luokan ilmentymä. Java-ohjelmointikielellä kirjoitettu palvelinsovelma, servletti. Structured Query Language. Standardi kieli, jolla voidaan määrittää erilaisia tietokantaoperaatioita. 2 Tarkastus Pesille tehdään tarkastuskäyntejä muutaman kerran vuodessa, jolloin saadaan tietoa mm. poikasten määrästä ja pesässä vallitsevista olosuhteista. Template Sama kuin mallipohja. Dokumentin runko, joka sisältää tietyllä tavalla merkittyjä kohtia, joihin voidaan ohjelmallisesti lisätä vaihtuvia arvoja. Tietokanta Jotain käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja. Tietokannan teknisiä ominaisuuksia ovat mm. tiedon riippumattomuus sitä käsittelevistä ohjelmista, tietojen samanaikainen käyttö, monipuoliset tiedonhakumahdollisuudet, tietojen suojaus, mutkikkaat riippuvuudet tietojen välillä ja automaattinen varmistus ja elpyminen häiriöistä. TKTL Helsingin yliopisto, Tietojenkäsittelytieteen laitos. 2 Toteutuksen rajoitteet Tässä kappaleessa kerrotaan, miltä osin suunnitellut rajoitteet poikkeavat suunnitteludokumentissa määritellyistä toteutusta koskevista rajoitteista. 2.1 Ohjelman servlettiympäristö Toteutusympäristönä käytettiin vanhentunutta jserv-ympäristöä. Näin ollen Hali-servletissä servletin kutsuminen toteutetulla tapaa ei todennäköisesti tule toimimaan ympäristöissä, joissa on käytössä Servlet API 2.1 tai uudempi. Uudemmissa ympäristöissä servletin kutsu tulee korvata RequestDispatcher-rajapinnan toiminnoilla. 2.2 Ohjelmointikieli ja -tyyli Versionhallintaan ei käytetä TKTL:n CVS-versionhallintajärjestelmää. Versionhallinta suoritetaan nimeämällä tiedosto versionumerolla ja muuttajan nimikirjaimilla ja sijoittamalla tiedostot erilliseen backup-kansioon.

3 Tiedostojen sijainti 3 Tässä luvussa kuvataan järjestelmän käynnistys url ja järjestelmän käyttämien tiedostojen sijainnit. Järjestelmän käyttämät tiedostot sijaitsevat palvelimella alkokrunni.cs.helsinki.fi. 3.1 Käynnistys URL Sovellus käynnistyy URL:ista https://db.cs.helsinki.fi/s/tkt_hali/hali.servlet.hali 3.2 Tiedostot alkokrunni palvelimella: Hali-projektin tiedostot ja lähdekoodi toteutetuista näytöistä ja toiminnallisuuksista. Juurihakemisto alkokrunnissa: /home/tkt_hali./jserv: Testauksessa käytetyt tulostustiedostot../jserv/etc: Konfigurointitiedostot: environment haliaeetus.config tabledata tkt_hali.properties Poikasen iän laskemiseen käytettävä tiedosto: poikanen_ika./jserv/servlets: Tiedostot:.htaccess haliresources_en.properties haliresources_fi.properties haliresources_sv.properties./jserv/servlets/backup: Pakkauksen hali.servlet edelliset versiot../jserv/servlets/hali/db: Pakkauksen hali.db lähdekodit (.java) ja käännetyt (.class) tiedostot../jserv/servlets/hali/db/backup: Pakkauksen hali.db edelliset versiot../jserv/servlets/hali/general:

Pakkauksen hali.general lähdekodit (.java) ja käännetyt (.class) tiedostot. 4./jserv/servlets/hali/general/backup: Pakkauksen hali.general edelliset versiot../jserv/servlets/hali/servlet: Pakkauksen hali.servlet lähdekodit (.java) ja käännetyt (.class) tiedostot../jserv/servlets/hali/servlet/backup:./jserv/servlets/hali/template: Template- ja tyylitiedostot../jserv/servlets/hali/template/backup: Template- ja tyylitiedostojen edelliset versiot. 4 Osajärjestelmien toteutuspoikkeamat Tässä luvussa kuvataan ne osat toteutetusta järjestelmästä, joiden toteutuksessa on poikettu suunnitteludokumentissa tehdyistä määrityksistä. 4.1 Pakkaus hali.db Pakkauksen hali.db toteutuksessa on poikettu suunnitellusta ainoastaan luokan UpdateOperation kohdalla. 4.1.1 ConnectionPool 4.1.2 Table 4.1.3 OperationResults 4.1.4 SearchResults 4.1.5 DatabaseOperation

4.1.6 SearchOperation 5 4.1.7 InsertOperation 4.1.8 UpdateOperation Yksityiset metodit: private void setparameters(preparedstatement stmt, Map values, String rowid) Kopioi uudet attribuuttien arvot sekä rowid:n kyselylausekkeeseen. Annetut arvot korvaavat vain ne arvot, jotka löytyvät arvokartasta values. Muita arvoja ei päivitetä, vaan ne jätetään ennalleen. 4.1.9 DeleteOperation 4.2 Pakkaus hali.servlet Kaikkia servlettejä koskien suunnitteludokumentissa kuvatut tarkastatiedot() -metodit on poistettu ja korvattu suorilla luokan Tarkista metodikutsuilla. 4.2.1 HaliServlet HaliServlettiin on lisätty muuttuja protected int [][]ikataulu Taulukko poikasen iän valitsemiseksi. Lisätty metodin toiminnallisuutta: public void init(servletconfig config) Metodiin on lisätty muuttujan ikataulu alustus, jossa muuttujaan luetaan arvot tiedostosta poikanen_ika. Kaikki servletit eivät tarvitse tätä muuttujaa, mutta ainakin ne, jotka lisäävät tai muuttavat tietoa tietokantatauluun POIKANEN. Toteutus ei ole lopullinen. Tämä toteutus kaataa järjestelmän, jos tiedostossa /etc/poikanen_ika on eri määrä rivejä kuin 61.

Lisätty metodit: 6 protected HashMap haearvot(httpservletrequest request, Table taulu) Hakee parametrista request parametrin taulu avulla tarvittavat tiedot ja palauttaa ne HashMap-oliona. (Parametri taulu sisältää kuvauksen jostain tietokannan taulusta). Jos tietoja ei löydy tai ne sisältävät pelkkiä tyhjiä merkkejä, niitä ei lisätä palautettavaan olioon. Jos mitään tietoja ei löydy palauttaa metodi tyhjän HashMap-olion. public String getservletinfo() Palauttaa tietoja tästä servletistä. Julkiset metodit, muutokset: public void init(servletconfig config) Metodia täydennetty lisäksi alustetaan muuttuja ikätaulu, jota käytetään poikasten iän laskennassa. Pakkausnäkyvyyden metodit, muutokset: protected void doget(httpservletrequest request, HttpServletResponse response) Metodi toteutettu tyhjänä korvataan aliluokassa. protected void dopost(httpservletrequest request, HttpServletResponse response) Metodi toteutettu tyhjänä korvataan aliluokassa. HaliServlet-yläluokasta poistettu metodi: protected void lisaatekstit(map datamalli, ResourceBundle kieli, String tiedosto, String template) Metodi toteutetaan aliluokissa muodossa protected void lisaatekstit(map datamalli, ResourceBundle kieli). 4.2.2 Hali Täsmennys suunnitteludokumentin tekstiin: Metodi dopost() luo ensinnäkin sisäänkirjautumisnäytön mahdollisine ilmoituksineen. Jos käyttäjä on syöttänyt tunnuksensa, metodi yrittää vain tällöin luoda yhteyden tietokantaan. Jos tunnukset olivat oikein, kutsutaan Haku-servletin dopost()-metodia.

Samassa yhteydessä luodaan istunto käyttäjälle. Istunnon tiedoissa kulkevat käyttäjän tunnus ja salasana sekä kielivalinta. Uloskirjautumisen yhteydessä invalidoidaan istunto. 7 Lisätty metodit: public String getservletinfo() Palauttaa tietoja tästä servletistä. protected void lisaatekstit(map datamalli, ResourceBundle kieli) Metodi lisää resurssikimpun kieli avulla staattiset tekstit parametrina annettuun Map-olioon datamalli. 4.2.3 Haku Pakkausnäkyvyyden metodit: protected void alusta() Alustaa servletin. Alustustoimissa haetaan servletin tarvitsema Haku-template perittyyn muuttujaan tmpl. Lisäksi mallipohjiin liittyvät kolme datamallia (perityt muuttujat: datamallifi, datamallisv ja datamallien) alustetaan lisaatekstit()-metodilla tuettavien kielten mukaisilla, Haku-templaten tarvitsemilla staattisilla teksteillä. protected void lisaatekstit(map datamalli, ResourceBundle kieli) Lisää resurssikimpun kieli sisältämät staattiset tekstit ja virheilmoitukset annettuun Map-olioon datamalli. Yksityiset metodit: private void lisaavalikot(connection con, Map datamalli) Tekee jokaista alasvetovalikkoa kohden SQL-kyselyn tietokantaan käyttäen tietokantayhteyttä con. Kyselyn onnistuessa lisää alasvetovalikoiden sisällön annettuun Map-olioon datamalli. private void lisaahakutulokset(connection con, String kysely, Map datamalli, ResourceBundle kieli)

Laittaa annettuun Map-olioon datamalli merkin staattisten hakutuloksiin liittyvien tekstien näyttämisestä selaimella. Suorittaa SQL-kyselyn kysely tietokantaan. Kyselyn onnistuessa lisää kyselyn tuloksen annettuun Map-olioon datamalli. Jos haun tulosjoukko on tyhjä, lisää Map-olioon datamalli tiedon, ettei hakuehdoilla löytynyt tietoja. Kyselyn epäonnistuessa lisää Mapolioon datamalli virheilmoituksen ja kyselyn hakuehtoina olleet tiedot. private String hankiparametri(string nimi, HttpServletRequest request) Palauttaa pyynnön request parametrin nimi arvon String-oliona. Jos parametria ei ole olemassa tai se sisältää pelkkiä tyhjiä merkkejä, palauttaa tyhjän String-olion. private String hankihakuehdot(connection con, Map arvosolmu) Hankkii hakuoperaatiota varten käyttäjän syöttämät hakuehdot, jotka on talletettu Map-olioon arvosolmu, ja palauttaa ne SQL-kyselyn WHERE-osaan sijoitettavana merkkijonona. private String escapequotes(string s) Muuntaa merkkijonon s yksinkertaiset lainausmerkit kahdennettuun muotoon SQL-kyselyä varten. Mikäli syöte on esim. j'aime Oracle, palauttaa j''aime Oracle. private Set haekuntaliitokset(connection con, String kunta) Hakee tietokannasta kaikki ne taulun KUNTA attribuutin KUNTA_ID arvot, jotka vastaavat sellaisia kuntaliitoksia joihin kunta kuuluu, ja palauttaa ne Set-olioon tallennettuina Integer-olioina. private String hankiselite(connection con, String taulu, String attribuutti, String arvo) Hankkii tietokannasta taulun taulu attribuutin attribuutti arvon arvo selitteen. Palauttaa tyhjän merkkijonon, mikäli haluttua selitettä ei ole olemassa. private double muunnadesimaalimuotoiseksi(int min, int sek) Yhdistää desimaalimuotoisten astekoordinaattien min- ja sek-osat yhdeksi desimaaliluvuksi. 8 4.2.4 UusiPesa Lomakkeelle syötettyjen tietojen tarkastuttamista luokalla Tarkista ei ole toteutettu UusiPesa-servletissä. Lisäksi, UusiPesa-servletin lisäysoperaation toteutus jäi kesken toimii kyllä osittain. Kaikkiin tauluihin ei vielä voi viedä

tietoja, koska tiettyjen ehtojen voimassaolo pitäisi ensin tarkistaa. HUOM! Johtuen lisäysoperaation keskeneräisyydestä, servletin dopost()-metodi sisältää kovakoodattua tietoa, joka tulee ehdottomasti korvata jatkokehityksessä. Kovakoodattua tietoa käytettiin, jotta pystyttiin testaamaan metodin toimintaa edes jollain tapaa. 9 UusiPesa-servlettiin on lisätty seuraavat metodit: Pakkausnäkyvyyden metodit: protected void doget(httpservletrequest request, HttpServletResponse response) Kutsuu servletin dopost()-metodia. protected String haepvm(httpservletrequest request, String tyyppi) Metodi hakee parametrista request päivämäärään tarvittavat tiedot ja palauttaa ne merkkijonona muodossa pp.kk.vvvv. Parametri tyyppi kertoo templatessa olevan vaihtuvan päivämäärämuuttujan nimen alkuosan. Jos tietoja ei löydy tai ne sisältävät pelkkiä tyhjiä merkkejä, metodi palauttaa tyhjän String-olion. protected String haekoordinaatti(httpservletrequest request, String tyyppi) Hakee parametrista request koordinaattiin tarvittavat tiedot ja palauttaa ne merkkijonona. Jos tietoja ei löydy tai ne sisältävät pelkkiä tyhjiä merkkejä, metodi palauttaa tyhjän String-olion. protected HashMap haepoikanenarvot(httpservletrequest request, Table taulu, int i) Hakee parametrista request parametrien taulu ja i avulla tietokantatauluun POIKANEN tarvittavat tiedot ja palauttaa Ne HashMap-oliona. Jos tietoja ei löydy tai ne sisältävät pelkkiä tyhjiä merkkejä, niitä ei lisätä palautettavaan olioon. Jos mitään tietoja ei löydy, metodi palauttaa tyhjän HashMap-olion. protected void haeaikunenarvot(httpservletrequest request, HashMap pesatarkastusarvot) Hakee parametrista request aikuisia lintuja koskevat tiedot ja laittaa ne parametrinaan saamaan HashMap-olioon. Jos tietoja ei löydy tai ne sisältävät pelkkiä tyhjiä merkkejä, niitä ei lisätä parametrina saatuun HashMap-olioon pesatarkastusarvot. protected String haenakyvyys(httpservletrequest request, String suunta)

Hakee parametrista request näkyvyyteen tarvittavat tiedot ja palauttaa ne merkkijonona. Jos tietoja ei löydy, metodi palauttaa tyhjän String-olion. Tietokantaan tulevat arvot ovat KOVAKOODATTU tässä. Parametrista request tulee ainoastaan tieto, lisätäänkö arvo palautettavaan merkkijonoon. protected void lisaatekstit(map datamalli, ResourceBundle kieli) Metodi lisää resurssikimpun kieli avulla staattiset tekstit ja navi-valikon annettuun Map-olioon datamalli. 10 Yksityiset metodit: private String hankiparametri(string nimi, HttpServletRequest request) Metodi palauttaa pyynnön request parametrin nimi arvon String-oliona. Jos parametria ei ole olemassa tai se sisältää pelkkiä tyhjiä merkkejä, metodi palauttaa tyhjän String-olion. private void lisaavalikot(connection con, Map datamalli) Metodi tekee jokaista alasvetovalikkoa kohden SQL-kyselyn tietokantaan käyttäen parametrina annettavaa tietokantayhteyttä con. Valikoita haetaan apuja reviiritauluista. Kyselyn onnistuessa lisää alasvetovalikoiden sisällön annettuun Map-olioon datamalli. Julkiset metodit: public String getservletinfo() Palauttaa tietoja tästä servletistä. Muutokset: protected void dopost(httpservletrequest request, HttpServletResponse response) Suunnitteludokumentissa mainittua tarkastatiedot()-metodia ei käytetä dopost()-metodissa. Poistettu metodi: protected boolean tarkistatiedot(table taulu, Map arvot, Map datamalli) Korvataan jatkossa Tarkista-luokan metodin käytöllä.

4.3 Pakkaus hali.general 11 Pakkauksen hali.general toteutuksessa on poikettu suunnitellusta luokan Tarkista kohdalla. 4.3.1 HaliProperties 4.3.2 Tarkista Tarkista-luokkaa kutsuva servletti välittää luokalle parametrit seuraavasti (Map arvot, SimpleSequence sekvenssi, ResourceBundle kieli) Suunnitteludokumentissa mainittu Map datamalli on korvattu SimpleSequence sekvenssi:llä ja parametreihin on lisätty ResourceBundle kieli 4.4 Muut tiedostot Tässä luvussa kuvataan muihin tiedostoihin tehdyt muutokset ja lisätyt uudet tiedostot. Uutena tiedostona on poikasen iän laskemiseksi tarvittava aputiedosto, joka on kuvattu luvussa 4.4.5. 4.4.1 Template-tiedostot Seuraavissa kappaleissa kuvataan yksityiskohtaisesti toteutettujen templatetiedostojen rakenne ja sisältö. 4.4.1.1 navi.ftl (juuri) +- teksti +=navi_haku, navi_uusi_pesa, navi_reviirit, navi_raportit, navi_aputaulut, navi_kunnat, navi_tarkastajat, navi_ulos +- kutsuja 4.4.1.2 hali.ftl (juuri) +- teksti +=hali_otsikko, hali_h1, hali_tunnus, hali_salasana, hali_sisaan +- ilmoitus +- syy (sekvenssi!) += 0, 1 += teksti, boolean +- arvo += tunnus, kieli

4.4.1.3 haku.ftl 12 (juuri) +- teksti += haku_otsikko, haku_h1, haku_hakuehdot, haku_pesa, haku_reviiri, haku_nimi, haku_kunta, haku_id, haku_suuralue, haku_ymp_keskus, haku_koordinaatit, haku_yhtenais, haku_aste, haku_pituus, haku_leveys, haku_hae_pesat, haku_haetut_pesat +- tulos += olemassa, haku_tulos_numero, haku_tulos_nimi, haku_tulos_reviiri, haku_tulos_kunta, uusi_tarkastus +-joukko (sekvenssi!) += 0,.., n +=numero, nimi, reviiri, kunta +- ilmoitus +- syy (sekvenssi!) += 0..n +-teksti +- olemassa +- valikko += suuralue, ymparistokeskus (sekvenssejä!) += 0..n += arvo, valittu +- arvo +=pesa_nimi, pesa_kunta, pesa_id, reviiri_nimi, reviiri_kunta, reviiri_id, yht_pituus, yht_leveys, aste,_pit_ast, aste_pit_min, aste_pit_sek, aste,_lev_ast, aste_lev_min, aste_lev_sek +- navi (kuvattu muualla!) 4.4.1.4 pesa.ftl (juuri) +- kutsuja +-tamavuosi +- teksti += pesa_otsikko_uusi_tarkastus, pesa_otsikko_uusi_pesa, pesa_otsikko_pesatiedot, pesa_h1_uusi_tarkastus, pesa_h1_uusi_pesa, pesa_h1_pesatiedot, pesa_muutpesat, pesa_muutpesat_uusi, pesa_tarkastusvuodet, pesa_saaliit, pesa_myrkky. pesa_historiapesa, pesa_tark_paiva, pesa_tark_pvm_tark, pesa_kirj_paiva, pesa_tarkastaja, pesa_tarkastaja_sukunimi, pesa_tarkastaja_etunimi, pesa_pesa, pesa_nimi, pesa_kunta, pesa_suuralue, pesa_ymp_keskus, pesa_reviiri, pesa_reviiri_vanhanro, pesa_id, pesa_koordinaatit, pesa_koordinaatit_yhtenais, pesa_koordinaatit_pituus, pesa_leveys, pesa_aste, pesa_pituus, pesa_mittaustapa, pesa_tarkkuus, pesa_rakentamisvuosi, pesa_tarkkuus, pesa_loytymisvuosi, pesa_taulu, pesa_kiinnityspvm, pesa_kieli, pesa_taulunro, pesa_ekalaji, pesa_valokuva, pesa_pesap_laji, pesa_elavyys, pesa_sijainti, pesa_sijainti_tarkka, pesa_komm_pvakio, pesa_h3_pesap_mitat, pesa_korkeus, pesa_pesa_ylapinta, pesa_latvasta, pesa_1m, pesa_ymparys, pesa_halkaisija, pesa_pesap_mitat_tark, pesa_pesan_alla, pesa_h3_pesamitat, pesa_pinnan_halkaisija, pesa_suurin_halk, pesa_pienin_halk, pesa_h3_etaisyys, pesa_etaisyys_meri, pesa_etaisyys_jarvi, pesa_etaisyys_avosuo, pesa_etaisyys_asunto, pesa_etaisyys_tie, pesa_etaisyys_kalanviljely, pesa_etaisyys_johto, pesa_etaisyys_pelto, pesa_etaisyys_metsa, pesa_etaisyys_metsa_tyyppi, pesa_etaisyys_pesa_puu, pesa_etaisyys_korppi, pesa_etaisyys_varis, pesa_h3_ymparisto, pesa_puustotyyppi, pesa_kasittely, pesa_puusto_ika, pesa_maastotyyppi, pesa_saarityyppi, pesa_rno, pesa_rauhoitus, pesa_kesa_1000, pesa_kesa_500, pesa_uhat, pesa_h3_nakyvyys, pesa_nakyvyys_tie, pesa_nakyvyys_vesi, pesa_nakyvyys_rakennus, pesa_nakyvyys_metsa, pesa_nakyvyys_kommentti_pesam, pesa_h3_tarkastus, pesa_tark_vuosi, pesa_tark_tapa, pesa_muu_laji, pesa_tulos, pesa_epaonni, pesa_kunto, pesa_merkit, pesa_munien_lkm, pesa_munien_pvm, pesa_kuor_munia, pesa_kuolleita_poik, pesa_elavia, pesa_rengastusika, pesa_lento, pesa_h3_aikuiset, pesa_lkm, pesa_sukupuoli, pesa_nahty, pesa_rengas_v, pesa_vari, pesa_rengas_o, pesa_tunnus, pesa_kommentti_tark, pesa_h3_poikaset, pesa_siipi, pesa_menetelma, pesa_nilkka, pesa_nilkka_max, pesa_nilkka_min, pesa_nokan_pit, pesa_nokan_kork, pesa_paino, pesa_kupu, pesa_dna, pesa_kommentti_poik, pesa_h3_lahetetty, pesa_sulk_hoy, pesa_munia, pesa_siruja, pesa_kuolleita_poika, pesa_kuolleita_aik, pesa_saalisnaytteita, pesa_oksennus, pesa_lisaa, pesa_muuta +- arvo +=kirjauspvm, muutospvm, rak_vuosi, loyt_vuosi, tuh_vuosi, tarkka_sijainti, pesavakio_kommentti +- tarkastuspaiva += pp, kk, vvvv +- tarkastaja += id, sukunimi, etunimi +- pesa += nimi, id +- reviiri += vanha, id +- koordinaatit +=yht_pituus, yht_leveys, ast_pituus_aste, ast_pituus_min, ast_pituus_sek, ast_leveys_aste, ast_leveys_min, ast_leveys_sek +- rauhoitustaulu +=pp, kk, vvvv, nro +- pesapuu +=korkeus, et_maasta, et_latvasta, tyviymparys, tyvihalkaisija, s_tyvihalkaisija, p_tyvihalkaisija, latvaymparys, latvahalkaisija +- pesamitat +=korkeus, halkaisija, halk_max, halk_min +- etaisyys += meri, jarvi, avosuo, as, tie, kalaviljely, ilmajohto, viljapelto, lahi_reuna, korppi, varis +- ymparisto

+= rno, as_1000, as_500, uhat, pesamuuttuva_kommentti +- nakyvyys +- tie += n, ne, e, se, s, sw, w, nw, metri += vesi, rakennus, metsa (kuten tie!) +- tarkastus += vuosi, munia_lkm, pp, kk, vvvv, kuor_munia_lkm, kuolleita_lkm, elavia_lkm, reng_poik_lkm, lentopoik_lkm, tarkastus_kommentti +- aikuiset += rengas_vasen_1, rengas_vasen_2, rengas_oikea_1, rengas_oikea_2 +- poikaset +- eka +=rengas_vasen, rengas_oikea, siipi, nilkka, nilkka_max, nilkka_min, nokka_tyvi, nokka_pituus, paino += toka, kolmas, neljas (kuten eka!) +- lahetetty +=nayte_i, nayte_m, nayte_s, nayte_p, nayte_a, nayte_r +-valikko (kaikki solmut sekvenssejä, paitsi mainitut. Jokaisella sekvenssin alkiolla lisäksi muuttuja valittu ja teksti!) += tark_pvm_tark, kunta_tunnus, suuralue, ymp_keskus, r_kunta_tunnus, koord_mittaus, koord_tark, rak_vuosi_tarkkuus, r_taulu_kieli, rak_laji, valokuva, puulaji, elavyys, sijainti, lahi_reuna_t, et_lahipuu, reviirinimi +- pesapuu (lapset ovat sekvenssejä!) += korkeus_tark, et_maasta_tark, et_latvasta_tark, tyvihalk_tark, latvahalk_tark +- ymparisto (lapset ovat sekvenssejä!) += puusto, puusto_kasittely, puusto_ika, maastotyyppi, saarityyppi, palsta_rauhoitus +- tarkastus (lapset ovat sekvenssejä!) += taso, muulaji, tulos, tarkkuus, epaonni_syy, epaonni_tark, kunto, merkit +- aikuiset (lapset ovat sekvenssejä!) += lkm, sukupuoli_a1, sukupuoli_a2, rengas_a1, rengaas_a2, v_vari_a1, v_vari_a2, o_vari_a1, o_vari_a2 +- poikaset (lapset ovat sekvenssejä!) += v_vari_p1, v_vari_p2, v_vari_p3, v_vari_p4, o_vari_p1, o_vari_p2, o_vari_p3, o_vari_p4, siipi_pituus_m_p1, siipi_pituus_m_p2, siipi_pituus_m_p3, siipi_pituus_m_p4, kupu_p1, kupu_p2, kupu_p3, kupu_p4, sukupuoli_p1, sukupuoli_p2, sukupuoli_p3, sukupuoli_p4, dna_p1, dna_p2, dna_p3, dna_p4 +- vaihtopesa += 0,.., n +- teksti +- tarkastusvuodet += 0,.., n +- teksti +- ilmoitus +- syy (sekvenssi!) += 0,.., n +- navi (kuvattu muualla!) 13 4.4.2 Properties-tiedostot Properties-tiedostot toteutettiin suunnitelman mukaisesti. 4.4.2.1 Kielituen tiedostot 4.4.3 Tyylitiedosto 4.4.4 Staattiset html-tiedostot Ei toteutettu/tarvittu. 4.4.5 Poikasen ikatiedosto Palvelimelle alkokrunni kansioon /jserv/etc/ on lisätty tiedosto poikanen_ika, josta servlet pystyy hakemaan tiedot poikasen iän laskemiseksi poikasen siiven pituuden perusteella. Tiedostossa poikasen siiven

pituus on ilmaistu millimetreinä ja ikä vuorokausina. Tiedostossa on erikseen siiven pituudet koiraalle, tuntemattomalle ja naaraalle. Erottelumerkkinä on käytetty kaksoispistettä siten että esim. 14 Ikä (vrk) koiras tuntematon naaras 10 25-33 40-48 52-59 on esitetty muodossa 10:25:33:40:48:52:49. Jokainen tällainen seitsemän alkion ryhmä on omalla rivillään. 5 Käyttöliittymä Tässä luvussa kerrotaan käyttöliittymään toteutusvaiheessa tehdyistä muutoksista. 5.1 Käyttäjän sisäänkirjautuminen 5.2 Haku Hakuehtoihin on lisätty pesän ja kunnan ID. Lisäksi hakuehtojen järjestystä on muutettu. 5.3 Uuden pesän lisääminen Kenttien järjestystä on muokattu vastaamaan raportti Q:ta (uusi maastossa täytettävä tarkastuslomake), tai muuten järkevöitetty (mm. lähetetyt näytteet lisätty lomakkeen loppuun). Lisätty kenttä pesän vanha numero. Lisäksi kenttien selitetekstejä on muokattu selkeämmiksi. Myös kommenttikenttien paikkoja on muutettu. Uuden pesän lisäämiseen liittyvää arvojen tarkastusta ei saatu valmiiksi asti. Ainoastaan epäonnistunut tietokantaoperaatio aiheuttaa virheilmoituksen. 6 Toteuttamatta jääneet piirteet Tässä luvussa luetellaan suunnitteludokumentissa toteutettavaksi suunnitellut järjestelmän osat, joita ei ole toteutettu.

15 Suurin osa suunnitelluista järjestelmän näytöistä (servleteistä) jäi toteuttamatta, mikä oli hyvin odotettavissa johtuen suunniteltujen näyttöjen lukumäärästä (14). Toteuttamatta jääneet näytöt ovat pääsääntöisesti yksinkertaisia ja monimutkaisemmat näytöt Uusi tarkastus ja Pesätiedot ovat pääosin identtisiä näytön Uusi pesä kanssa, joten niiden toteuttaminen tulee todennäköisesti sujumaan suhteellisen vaivattomasti. 6.1 Pakkaus hali.servlet Seuraavia suunnitteludokumentissa mainittuja kohtia ei ole toteutettu. Uusi Tarkastus Pesätiedot Myrkky Saaliit Historia Reviiri Kunnat Tarkastajat Aputaulut Raportti 6.2 Pakkaus hali.general Tiedosto Tallennus - kohta jäi toteuttamatta. 6.3 Muut tiedostot Seuraavat template-tiedostot jäävät toteuttamatta. myrkyt.ftl saalis vanhat.ftl saalis yllapito.ftl historia.ftl reviirit.ftl kunnat,ftl tarkastajat.ftl aputaulut.ftl raportit.ftl 7 Parannusehdotukset Keskeneräisessä tuotteessa isoin parannus olisi tehdä se valmiiksi tai edes melkein valmiiksi.

Uuden pesän lisäämisen virheilmoitukset puuttuvat. Ainoa virheilmoitus on tietokantaoperaatio epäonnistui, jonka syystä on välillä vaikea sanoa mitään. Pesän lisäys-operaatio ei siis toimi aivan täydellisesti. Näytöillä voisi harkita tarkastajan id:n laittamista alasvetovalikkoon. Kyseessä on pakollinen tieto tietokannassa ja tiedon on lisäksi oltava oikein eli tiedon on oltava jo olemassa tietokannassa. Virheellinen tieto johtaa väistämättä lisäysopertaation epäonnistumiseen. Ennen lisäystä tietokantatauluun olisi myös hyvä tarkastaa, että lomakkeelta on haettu jotain lisättäviä arvoja eikä lisätä tyhjää riviä. Istunnon invalidoinnin jälkeen käyttäjä pääsee vielä ilman tunnuksia järjestelmään sisään painamalla selaimen Takaisin-painiketta. Toiminnot eivät kuitenkaan onnistu enää, niin kuin tarkoitus onkin, tästä kuitenkin saadaan aikaan Internal Server Error. Parempi ratkaisu olisi, että jos käyttäjälle Takaisinpainiketta painettaessa tulostuisi sivu, jossa ilmoitettaisiin, että käyttäjän tulee kirjautua järjestelmään. Loppukäyttäjän ei tulisi joutua käynnistämään servlettimoottoria, tai sen voisi tehdä etusivulta löytyvällä napilla. Pesän nimen tulisi olla uniikki/reviiri. Nyt on mahdollista lisätä saman niminen pesä useaan otteeseen samalle reviirille. Tämä liittynee epävakaaseen insertoperaatioon. Sysdaten käyttö. Sysdaten tai vastaavan päiväysfunktion käytön voi mahdollisesti lisätä InsertOperation-luokkaan. Kun sisäänkirjautumissivulla on jo syöttänyt käyttäjätunnuksen ja salasanan ja päättääkin vaihtaa kieltä, syötetyt tekstit katoavat lomakkeen kentistä. Voisi olla hyvä, jos ne eivät katoaisi tässä yhteydessä, vaan pysyisivät lomakkeen kentissä vaikka kieli vaihtuukin. Tutkitaan kaikissa servleteissä, käytetäänkö yhä HTTPS-protokollaa. Jos ei käytetä, ohjataan vaikka takaisin sisäänkirjautumissivulle tai annetaan kehotus siirtyä käyttämään HTTPS-protokollaa. Joku metodi yliluokkaan? Ideana on kuitenkin se, että kaikki tietoliikenne tapahtuu salatusti. Jos näin ei tapahdu, järjestelmä ei suostu toimimaan. Jos jossain vaiheessa käyttäjätunnus ja salasana eivät ole kunnossa, ohjataan kontrolli sisäänkirjautumisservletille. Näin esimerkiksi silloin, kun yritetään suoraan kirjoittaa selaimen osoitekenttään jonkin muun kuin Hali-servletin osoite. Jonkinlainen ilmoitus hakuarvojen puuttumisesta Haku-servlettiin olisi paikallaan. Nyt servletti vain ilmoittaa: "Hakuehtojen mukaisia pesiä ei löytynyt", mikä ei kerro paljoakaan hakuehtojen puuttumisesta. Haku-näytölle voisi laittaa Tyhjennä-painikkeen, joka tyhjentäisi luonnollisesti vain hakuehdot, ei tuloksia. 16

Haku voisi olla case insensitive. Tällä hetkellä tämän taitaa estää itse Oracletietokanta. 17 Tarkista-luokan tarkistusmetodit ovat servlettikohtaisia. Saattaisi olla paikallaan muuttaa ne taulukohtaiseksi. Lisäysoperaatioiden keskeneräisyyden takia parasta tapaa ei ole vielä voitu määritellä tai testata. Valikoiden arvojen haun voisi sijoittaa alusta()-metodiin ja käyttää jotain muuttujaa apuna, joka kertoisi, onko tietokantataulun APUTAULU tietoja muutettu. Jos tietoja on muutettu, voidaan servlettiä kutsuttaessa kutsua uudelleen alusta()-metodia, joka päivittää valikoiden arvot. Poikasen iän laskentaan käytettävän muuttujan ikataulu alustustoiminto HaliServlet-servletin init()-metodissa on syytä tehdä uudestaan, niin että muutos luettavassa tiedostossa ei aiheuta ohjelman kaatumista.