TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria:

Koko: px
Aloita esitys sivulta:

Download "TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria:"

Transkriptio

1 TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti Versiohistoria: Versio Päivämäärä Kuvaus Tekijä Ensimmäinen luonnos Topi Laamanen Lisätty käyttötapaukset Topi Laamanen Lisätty sanastoa ja otsakkeita Katja Korpela Muutettu riviväliä ja muokattu käyttötapauksia Topi Laamanen Lisätty kuvasarjat Topi Laamanen Muokattu koko dokumenttia Katja Korpela Muokattu koko dokumenttia Katja Korpela Pieniä muutoksia Topi Laamanen Muutettu lukua 5 (Käyttöliittymä) Topi Laamanen Muutettu lukua 4 Katja Korpela Muokattu koko dokumenttia Katja Korpela, Topi Laamanen Helsinki, Outi Annala Ari Keränen Katja Korpela Topi Laamanen Riikka Pihlajamäki Mikael Puolakka HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ohjelmistotuotantoprojekti Hali

2 Sisällys 1 JOHDANTO TUOTTEEN TAUSTA JA TARKOITUS TÄRKEIMMÄT VAATIMUKSET ERIKOISSANASTO JA KÄYTETYT LYHENTEET SUUNNITTELUN JA TOTEUTUKSEN RAJOITTEET NOUDATETTAVAT STANDARDIT JA TARVITTAVAT OHJELMAT LUOKKAKIRJASTOT JA AJURIT OHJELMOINTIKIELI JA -TYYLI JÄRJESTELMÄN YLEISKUVAUS ARKKITEHTUURIKUVAUS KOMPONENTTIEN VÄLISET SUHTEET LUOKKIEN VÄLISET SUHTEET Luokkakaavio PAKKAUS HALI.DB ConnectionPool Table OperationResults SearchResults DatabaseOperation SearchOperation InsertOperation UpdateOperation DeleteOperation PAKKAUS HALI.SERVLET HaliServlet Hali Haku UusiPesa UusiTarkastus Pesatiedot Myrkky Saaliit Historia Reviiri Kunnat Tarkastajat Aputaulut Raportti PAKKAUS HALI.GENERAL HaliProperties Tarkista TiedostoTallennus MUUT TIEDOSTOT Template-tiedostot navi.ftl hali.ftl haku.ftl pesa.ftl myrkyt.ftl saalis_vanhat.ftl saalis_yllapito.ftl historia.ftl reviirit.ftl kunnat.ftl tarkastajat.ftl aputaulut.ftl raportit.ftl Kielituen properties-tiedostot... 50

3 4.6.3 Tarkista-luokan properties-tiedostot Tyylitiedosto Staattiset html-tiedostot KÄYTTÖLIITTYMÄ KÄYTTÖTAPAUKSET Käyttötapaus 1: Käyttäjän sisäänkirjautuminen Käyttötapaus 2: Uuden pesän lisääminen Variaatio käyttötapauksesta Käyttötapaus 3: Tiedossa olevan reviirin tarkastus Käyttötapaus 4: Raportin toimittaminen Käyttötapaus 5: Pesän hakeminen KUVASARJAT Käyttäjän sisäänkirjautuminen Uuden pesän lisääminen Aputaulun päivitys Vanhan pesän tarkastus Raportin toimittaminen Pesän hakeminen Historia-näyttö Kunnat-näyttö Myrkyt-näyttö Saaliit-näytöt Tarkastajat-näyttö Reviirit-näyttö TESTAUSSUUNNITELMA KOMPONENTTITESTAUS INTEGROINTITESTAUS JÄRJESTELMÄTESTAUS LÄHTEET

4 1 1 Johdanto Tämä suunnitteludokumentti kuvaa toteutettavan Haliaeetus-järjestelmän teknisen toteutuksen näkökulmasta. Dokumentin perusteella kuka tahansa teknisesti osaava henkilö voisi toteuttaa kuvatun järjestelmän. Suunnitteludokumentti on siis ohje siitä, kuinka järjestelmä tulisi kasata. Dokumentti kuvaa järjestelmän luokkarakenteen ja käyttöliittymän. Toteutusvaihe aloitetaan tämän dokumentin hyväksymisen jälkeen. 1.1 Tuotteen tausta ja tarkoitus WWF:n merikotkatyöryhmän johtama suojelutyö merikotkan pelastamiseksi Suomessa sukupuuton partaalta elinvoimaisiksi populaatioksi saaristossa ja Pohjois-Suomessa on eräs luonnonsuojelun menestystarinoita. Merikotkakannan romahduksen jälkeen pesimätietoja alettiin kerätä 1960-luvulla yksittäisten tutkijoiden toimesta. WWF:n merikotkatyöryhmän perustamisen jälkeen 1972 pesimätietojen kerääminen muuttui systemaattiseksi. Kolmenkymmenen vuoden aikana on tunnetut merikotkan pesät tarkastettu vuosittain. Tarkastuksen yhteydessä on kerätty tietoja mm. pesimistuloksesta, pesinnän epäonnistumisen syistä, poikasista, pesäpuusta ja -paikasta sekä kerätty kuoriutumattomia munia ja muita näytteitä myrkkyanalyysejä varten. Merikotkille tarkoitettuja tekopesiä on rakennettu eri puolille Suomea pesien tahattoman häirinnän minimoimiseksi pesinnän herkimmissä vaiheissa. Merikotkien pesimäpiirit ovat verraten pysyviä. Kannan kasvaessa merikotkat perustavat uusia elinpiirejä vuosittain sekä aiemmin merikotkien asuttamille alueille että uusille seuduille. Seuranta jatkuu. Tuotteen avulla Luonnontieteellisessä keskusmuseossa syötetään ja ylläpidetään merikotkatietoja. Tiedoista kootaan raportteja tutkijoiden sekä suojelu- ja muiden viranomaisten käyttöön Ohjelmistotuotantoprojektiryhmän tarkoituksena on suunnitella ja toteuttaa merikotkien pesätarkastusten yhteydessä kerättyjen tietojen tallettamiseen ja käyttöön soveltuva tietokanta sekä käyttöliittymä tietokantaan. Pesätarkastusten tiedot on kerätty lomakkeilla. Talletettavat tiedot selviävät lomakkeilta ja asiakasta haastattelemalla. Käyttöliittymä tarjoaa rajapinnan tietokannan tauluihin, tarkistaa syötetyt tiedot ja tallettaa tiedot tietokantaan. Käyttöliittymän kautta tuotetaan säännönmukaisia raportteja tutkijoiden ja viranomaisten käyttöön. Tietokantajärjestelmää laadittaessa otetaan huomioon laajennusmahdollisuus muiden petolintujen pesätarkastusten tallettamiseen. Käyttöönottovaiheessa oleva vastaava sääksijärjestelmä tarjoaa suunnittelulle lähtökohdan. Järjestelmä asennetaan Helsingin yliopiston atk-osaston tietokonejärjestelmään tuotantokäyttöä varten.

5 1.2 Tärkeimmät vaatimukset 2 Järjestelmän on oltava turvallinen niin, että järjestelmään pääsee vain tunnuksella ja salasanalla. Tietokannasta on pystyttävä hakemaan, lisäämään ja muuttamaan tietoa ja lisäksi on pystyttävä tuottamaan lukuisa määrä erilaisia raportteja. Käyttöliittymän tulee olla mahdollisimman selkeä ja helppokäyttöinen ja loppukäyttäjältä ei voida odottaa teknisen arkkitehtuurin tuntemusta eikä muutakaan teknistä osaamista. Lisäksi järjestelmän täytyy toimia oikeellisesti myös silloin kun käyttäjä tekee virheen, esim. niin että järjestelmä ei hyväksy virheellistä syötettä. Tarkemmin järjestelmän vaatimukset on kuvattu vaatimusdokumentissa. 1.3 Erikoissanasto ja käytetyt lyhenteet Black-box Testausmenetelmä, jossa testaus tehdään ohjelmiston spesifikaation perusteella. 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. 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. Käyttötapaus

6 3 Käyttötapauksessa kuvataan käyttäjän tavoite jonkin päämäärän saavuttamiseksi, ja mahdollisimman yksityiskohtaiset tiedot tilanteen taustoista (tilatiedot). Käyttötapauksessa ei oteta mitään kantaa tekniseen toteutukseen. Käyttötapaukset ovat olennainen osa käyttöliittymäsuunnittelua. Luokka Java-ohjelmointikielessä yksi kokonaisuus, kuten taulu tietokannassa. Luokkarakenne Kuvaa järjestelmän teknisen (luokkien väliset suhteet) rakenteen korkealla tasolla. Mallipohja Sama kuin template. Dokumentin runko, joka sisältää tietyllä tavalla merkittyjä kohtia, joihin voidaan ohjelmallisesti lisätä vaihtuvia arvoja. Merikotka Merikotka (Haliaeetus albicilla) on Suomen suurin petolintu. Sen siipien väli on cm ja pituus cm. Merikotkalla on tasaruskea höyhenpuku ja suorakaiteen muotoiset siivet, jotka harottavat kärjistään. Pyrstö on lyhyt ja kiilamainen ja vanhoilla linnuilla valkea. Merikotkakanta Merikotkan biologinen kanta. Merikotkatyöryhmä Merikotkatyöryhmä on Torsten Stjernbergin johtama merikotkien tutkimusta ja suojelua tekevä työryhmä Maailman Luonnonsäätiössä (WWF). Metodi Olio Pakkaus Pesä Reviiri Servlet SQL Java-luokan sisällä oleva aliohjelma, jota voidaan kutsua itse luokasta tai toisesta Java-luokasta. Java-luokan ilmentymä. Pakkaus on tapa kerätä yhteen toisiinsa jollain tavalla liittyvät ohjelmaluokat. Merikotkan pesä on hyvin kookas risupesä suuren puun latvassa tai kallionkielekkeellä. Pesä voi olla myös vaihtopesä tai tekopesä. Yhdellä reviirillä elää yksi merikotkapariskunta, jolla saattaa olla useampikin pesä reviirinsä alueella. Java-ohjelmointikielellä kirjoitettu palvelinsovelma, servletti. Structured Query Language. Standardoitu kieli, jolla voidaan määrittää erilaisia tietokantaoperaatioita. Tarkastus Pesille tehdään tarkastuskäyntejä muutaman kerran vuodessa, jolloin saadaan tietoa mm. poikasten määrästä ja pesällä vallitsevista olosuhteista.

7 4 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ä. Tilatieto TKTL Käyttötapauksissa tilatiedot kertovat kaikki taustatekijät, jotka vaikuttavat käyttäjän tavoitteen saavuttamiseen. Helsingin yliopisto, Tietojenkäsittelytieteen laitos. White-box Rakenteellinen testausmenetelmä, eli testaus tehdään ohjelmiston sisäisen rakenteen perusteella. WWF WWF (World Wildlife Fund) eli Maailman Luonnonsäätiö on maailmanlaajuinen luonnonsuojelujärjestö, joka työskentelee luonnon monimuotoisuuden suojelemiseksi ja ekologisten toimintojen ylläpitämiseksi. 2 Suunnittelun ja toteutuksen rajoitteet Tässä luvussa määritellään rajoitukset suunnittelulle ja toteutukselle. Rajoitukset koskevat teknistä toimintaympäristöä ja eräitä standardeja. Lisäksi on huomattava asiakkaan vaatimus siitä, ettei mitään merikotkiin liittyvää kriittistä suojelutietoa vuoda ulkopuolisille esim. dokumenttien kautta. 2.1 Noudatettavat standardit ja tarvittavat ohjelmat Käyttäjän selaimen ja WWW-palvelimen välinen kommunikointi tapahtuu suojatulla HTTPS-protokollalla [1]. Käyttäjälle näkyvissä HTML-sivuissa käytetään W3C:n [8] määrittelemää HTML 4.01-spesifikaatiota [9]. Loppukäyttäjän työasemasta on oltava tietoliikenneyhteys palvelimelle, jossa Java-servletit ajetaan. Käyttöliittymä toimii IE 6.0 (tai uudempi) selaimella [15]. Lisäksi työasemassa on oltava Java- ja Oracle 9i -ympäristöt. Palvelimen tietokantana on kyseinen Oracle 9i [10]. 2.2 Luokkakirjastot ja ajurit Templatet on toteutettu FreeMarker-kirjastolla [2], joka on julkaistu GNU General Public License:n [6] alla.

8 5 Oracle 9i:n JDBC-ajurista [4] käytetään toteutusvaiheessa versiota 9.x for Java 1.4.x. 2.3 Ohjelmointikieli ja -tyyli Ohjelmisto kirjoitetaan Sunin kehittämällä Java-ohjelmointikielellä [11]. Koodin ulkoasussa pyritään noudattamaan Java Code Conventions spesifikaatiota [12]. Koodi kommentoidaan niin, siitä voidaan generoida Javadocdokumentaatio [13]. Dokumentointi- ja kommentointikieli on suomi. Koska käyttöliittymä ja tietokanta on toteutettu suomeksi päädyttiin Java-luokissa käyttämään suomea ja englantia kuitenkin niin, että jos luokan nimi on englanniksi on myös muuttujien ja metodien kielenä englanti ja jos luokan nimi on suomeksi on myös muuttujien ja metodien kielenä suomi. Servleteissä luokkien, muuttujien ja metodien kielenä on suomi. Versionhallintaan käytetään TKTL:n CVS-versionhallintajärjestelmää [14]. 3 Järjestelmän yleiskuvaus (Käyttöliittymä) Internet Explorer selain Taso 1 Palvelupyynnöt Rajatut pyynnöt Järjestelmä perustuu käyttäjän selaimen, servlet-palvelimen ja tietokantapalvelimen väliseen vuorovaikutukseen (Kuva 1). Yhteys käyttöliittymän ja tietokannan välillä toteutetaan kolmitasoisella arkkitehtuurilla. Käyttöliittymä on kuvattu tämän dokumentin luvussa 5 ja tietokanta on kuvattu projektin vaatimusdokumentissa. konfigurointitiedostot propertiestiedostot templatetiedostot Jserv Servlet Tietokantapyynnöt Operaation tulokset Apache (www-palvelin) htmltiedostot Haliaeetus-tietokanta (Tietokannanhallintajärjestelmä, DBMS) Taso 2 Taso 3 Kuva 1: Yleiskuva järjestelmän Haliaeetus toiminnasta

9 6 Taso 1: Tasolla 1 oleva selain on vuorovaikutuksessa sekä käyttäjän että tasolla 2 olevan ohjelmiston kanssa. Taso 2: Palvelinkoneella alkokrunni.cs.helsinki.fi (alias db.cs.helsinki.fi), pyörii Apache WWW-palvelin sekä JServ servlet-palvelin [3]. Palvelimella sijaitsevat JDBC-ajuri, servletit, JDBC-tietokantaluokat, Freemarker [2] kirjastoluokat sekä staattiset template-,html- ja properties- tiedostot. Apache-Jserv pari käyttää HTTPS-protokollaa [1] kommunikoidessaan käyttäjän selaimen kanssa ja JDBC-ajuria [4] kommunikoidessaan Haliaeetustietokannan kanssa. Tietokanta on koneella bodbacka.cs.helsinki.fi. Servletit [5] käyttävät tietokantaa JDBC-tietokantaluokkien avustuksella. Servletit myöskin generoivat dynaamista HTML:ää ja kommunikoivat käyttäjän selaimen kanssa. Servletit saavat tulostamiensa HTML-sivujen rungot templatetiedostoista, ja esitettävät tiedot Haliaeetus-tietokannasta. Taso 3 Tasolla 3 on Haliaeetus-tietokanta, jossa täytyy olla vastaava JDBC-ajuri, joka tukee JDBC API:a. 4 Arkkitehtuurikuvaus Tässä luvussa kuvataan ohjelmiston käyttämät tiedostot, niiden keskinäiset suhteet ja sijainti järjestelmässä. Ohjelmisto koostuu kolmesta pakkauksesta: hali.db, hali.servlet ja hali.general ja muista tiedostoista, joita käytetään html-sivujen tuottamiseen, kielitukeen ja talletettavien arvojen oikeellisuuden tarkistamisessa. 4.1 Komponenttien väliset suhteet Käyttäjän syöttämä informaatio lähetetään selaimen toimintopainikkeista pakkauksen hali.servlet servlet-luokille. Servletit jäsentävät tiedon ja tarkistavat arvojen oikeellisuuden käyttäen apunaan pakkauksen hali.general luokkia. Servletit välittävät operaation pakkauksessa hali.db sijaitseville tietokantaluokalle. Suoritettava toimenpide voi olla haku-, lisäys-, muokkaus- tai poistooperaatio. Tietokantaoperaatiota varten tarvitsemansa metadatan (Luku 4.3.2) servletit saavat luomalla ilmentymän Table-luokasta. Servletit palauttavat tietokantaluokilta saamansa vastauksen käyttäjälle generoimalla selaimelle uuden näytön. Näytön luonnissa servletit käyttävät apuna valmiita mallipohjia sivun ulkoasun määrittelemisessä ja tietojen oikeaan kent-

10 7 tään kohdentamisessa. Servletit käyttävät myös properties tiedostoja (Luku 4.6.2) kielituen toteuttamisessa. 4.2 Luokkien väliset suhteet Pakkauksen hali.servlet luokat voivat vapaasti käyttää pakkauksen hali.db ja hali.general palveluja. Servletit suorittavat saamalleen tiedolle tarkistuksia luokan Tarkista avulla. Servleteistä otetaan tietokantayhteys pakkauksen hali.db luokan ConnectionPool avulla. Pakkauksen hali.db luokat huolehtivat operaatioista tietokantaan ja palauttavat operaation tuloksen kutsuvalle servletille. Tietokantaluokat käyttävät pakkauksen hali.general luokan HaliProperties palveluja Luokkakaavio Luokkakaaviosta (kuva 2) näkee, mihin pakkaukseen luokat kuuluvat ja mitä luokkia ne perivät. Kaikki pakkauksen hali.servlet luokat käyttävät luokkaa ConnectionPool ja useimmat käyttävät myös luokkaa Tarkista. Sen sijaan luokkaa TiedostoTallennus ei käytä kuin servletti Raportti. Pakkauksen hali.db luokista ainoastaan luokka SearchResults käyttää luokkaa ConnectionPool. hali.db ConnectionPool DatabaseOperation hali.general HaliProperties SearchOperation InsertOperation UpdateOperation DeleteOperation Tarkista TiedostoTallennus OperationResults Table 1 1..n FieldInfo SearchResults hali.servlet HaliServlet Hali Haku UusiPesa UusiTarkastus Pesatiedot Myrkky Saaliit Historia Reviiri Kunnat Tarkastajat Aputaulut Raportti

11 8 Kuva 2: Luokkien väliset suhteet 4.3 Pakkaus hali.db Pakkaus hali.db pitää sisällään tietokantaluokat (kuva 3), jotka suorittavat JDBC-yhteyden avulla haku, lisäys, muokkaus tai poisto operaatioita tietokantaan. Operaatiot on toteutettu luokissa SearchOperation, InsertOperation, UpdateOperation ja DeleteOperation, jotka periytyvät yhteisestä abstraktista yliluokasta DatabaseOperation. ConnectionPool Kuva 3: Tietokantaoperaatioiden luokkarakene ja tulostyypit. Operaatiot palauttavat kutsujalleen lisäys-, muokkaus- ja poistotapauksissa totuusarvon, joka indikoi halutun operaation onnistumista. Haku-operaatio palauttaa erillisen SearchResults-olion, jolla hakutuloksia voidaan tarkastella lähemmin. Myös JDBC-yhteys tietokantaan hoidetaan tietokantaluokkien avulla. Yhteyksiä jaetaan yhteysvarannon (connection pool) avulla. Luokka DatabaseOperation tarjoaa tuen luokan ConnectionPool dynaamiselle yhteysjaolle. Tietokantaluokat on otettu tipu4:stä [7]. Luokan HaliProperties pohjana on tipu4:n TipuProperties, josta on poistettu joitain metodeja. Myös muita luokkia on hieman muutettu. Ainoastaan luokat DatabaseOperation ja Delete- Operation ovat muuttamattomina tipu4:stä ConnectionPool ConnectionPool eli yhteysvaranto sisältää JDBC-tietokantayhteyksiä. Yhtäaikaisten yhteyksien maksimilukumäärä sekä käytettävä JDBC-ajuri ja tietokannan url ilmoitetaan tiedostossa haliaeetus.config, joka sijaitsee palvelinkoneella alkokrunni.cs.helsinki.fi.

12 9 Konstruktori: private ConnectionPool(String user, String pw) Konstruktori alustaa ja luo ConnectionPool-olion. Tarvittavia tietoja ovat muun muassa käytettävä ajuri, tietokannan url ja yhtäaikaisten yhteyksien maksimilukumäärä. Parametreina annettavat käyttäjätunnus ja salasana sijoitetaan luokan muuttujiin, joten kaikki yhteydet tietokantaan luodaan pelkästään näitä tunnuksia käyttäen. Koska servletit saavat käyttää vain luokan staattisia metodeja, konstruktori määritellään näkyvyydeltään yksityiseksi. Julkiset metodit: public static Connection requestconnection (String username, String password) Metodilla pyydetään tietokantaoperaatioon tarvittava yhteys. Metodia on tarkoitus käyttää siten, että ennen tietokantaoperaatioita servlet pyytää luokalta käyttäjälle yhteyden. Käyttäjän käyttäjätunnus ja salasana tarkistetaan joka kerta yhteyttä pyydettäessä. Jos tunnukset eivät ole kelvolliset, palautetaan null. Parametreja käyttäjätunnus ja salasana verrataan varannon tiedossa olevaan tietokannan käyttäjätunnukseen ja salasanaan. Näin ollen kaikkien käyttäjien tulee käyttää samaa tietokantatunnusta kirjautuessaan Haliaeetus-järjestelmään, koska suunnitellussa varannossa on tuki vain yksille tunnuksille. Suoritettuaan kaikki saman pyynnön aikana tehtävät tietokantaoperaatiot, servletin tulisi palauttaa yhteys varantoon. Yhteys pysyy avoimena, vaikka se luovutetaankin muiden operaatioiden käyttöön. public static void releaseconnection(connection con) Metodi palauttaa aiemmin varatun yhteyden takaisin yhteysvarantoon, jossa se on kaikkien käyttäjien käytettävissä. public void run() Säikeen tarvitsema metodi. Yksityiset metodit: private synchronized Connection getconnection() Metodi hankkii yhteyden jollakin seuraavista keinoista: 1. Vapaita yhteyksiä löytyy varannosta: otetaan ensimmäinen vapaa yhteys sieltä käyttöön. Jos saatu yhteys oli ajurin puolesta suljettu, luodaan tilalle uusi yhteys ja yhteyden varausta yritetään uudelleen. Tässä tapauksessa yhteyden

13 10 pyytäjä joutuu kilpailemaan muidenkin yhteyttä pyytämään tulleiden käyttäjien kanssa tasavertaisesti. 2. Vapaita yhteyksiä ei ole varannossa: Jos yhteyksien maksimimäärää ei ole vielä ylitetty, luodaan uusi yhteys ja kilpailutetaan se käyttäjien kesken. Jos yhteyksiä on jo maksimimäärä, jäädään odottamaan yhteyden vapautumista. private void makebackgroundconnection() Metodi käynnistää säikeen muodostamaan yhteyttä silloin, kun yhteyksiä ei ole vapaana. Yhteyden muodostus tapahtuu säikeessä, koska yhteyden luominen voi kestää useamman sekunnin. Kun toiminto suoritetaan taustalla, voidaan palvella muita yhteyden pyytäjiä ja vapauttajia rinnalla. private Connection makenewconnection() Metodi luo uuden yhteyden tietokantaan. Jos yhteyden luonti ei onnistunut, palautetaan null. private synchronized void free(connection connection) Metodi palauttaa yhteysvarantoon kuuluvan yhteyden. Yhteys siirretään vapaiden yhteyksien joukkoon ja yhteyttä mahdollisesti odottaville ilmoitetaan vapautuneesta yhteydestä. private synchronized int totalconnections() Metodi laskee vapaiden ja käytettyjen yhteyksien lukumäärän. private boolean checkuser(string user, String pw) Metodi tarkastaa, että käyttäjän tunnus ja salasana vastaavat yhteysvarannon tiedossa olevaa käyttäjätunnusta ja salasanaa. private synchronized void closeallconnections() Metodilla suljetaan kaikki yhteydet, niin vapaat kuin käytössä olevatkin. Metodia käytetään vain ConnectionPool olion tuhoamisen yhteydessä. private void closeconnections(set connections) Metodi sulkee kaikki annetussa yhteysjoukossa (vapaat/käytössä) olevat yhteydet. Metodia käyttää vain closeallconnections(). Pakkausnäkyvyyden metodit: protected void finalize() Lopetusmetodi kutsuu closeallconnections() metodia. Tällä tavoin varmistetaan, että ConnectionPool olion tuhoamisen yhteydessä kaikki yhteydet tulevat suljetuiksi.

14 4.3.2 Table 11 Table-luokan avulla saadaan tietokantataulujen metadata eli nimet, attribuutit ja jokaiseen attribuuttiin liittyvät tiedot tekstitiedostosta tabledata. Tiedosto tabledata sijoitetaan toteutusympäristössä palvelinkoneelle alkokrunni.cs.helsinki.fi kansioon /home/local/hali/jserv/etc/. Tiedosto sisältää taulujen tiedot siten, että jokainen tiedoston rivi sisältää yhden taulun tiedot muodossa taulu;attribuutti:avain:null:type:kommentti;attribuutti: avain: missä taulu on taulun nimi, attribuutti on taulun sarakkeen eli attribuutin nimi, avain Y jos attribuutti on taulun pääavain, muutoin N, null Y jos attribuutti voi olla null, muutoin N, type on attribuutin tyyppi (NUMBER, VARCHAR2, DATE..), kommentti on attribuuttia koskeva kommentti. Taulun nimen ja eri attribuuttien erottimena on puolipiste ja attribuuttien tietokenttien erottimena kaksoispiste. Servlet hakee käynnistyessään jokaisen kohdetaulunsa Table-olion, ja säilyttää niitä ilmentymämuuttujissaan koko elinkaarensa ajan. Sisäluokka: private static class FieldInfo FieldInfo on Table-luokan staattinen sisäluokka, joka toimii yksinkertaisena taulun attribuuttia kuvaavana tietorakenteena. Sisäluokan muuttujat: int type Muuttujan arvona on sarakkeen tyyppi. String comment Muuttujaan sijoitetaan sarakkeen kommentti. boolean key Muuttujan arvona on true, mikäli sarake on taulun pääavain. boolean nullable Muuttujan arvona on true, mikäli arvo voi olla NULL. Muuttujat:

15 12 private String tablename Muuttujassa on taulun nimi. private SortedSet attributes Muuttujassa on taulun attribuuttien nimet (String) aakkosjärjestettynä joukkona. private Map fields Muuttujassa on Kartta taulun attribuuttien tiedoista attribuuttien nimien (String) osoittamina luokan Table.FieldInfo ilmentyminä. Konstruktori: private Table(String tablename, SortedSet attributes, Map fields) Konstruktori luo Table-olion sijoittaen parametrit ilmentymämuuttujiinsa. Parametri tablename ilmoittaa tietokannan taulun nimen, attributes sisältää tietokannan attribuutin järjestyksessä ja fields kohdentaa jokaiseen attribuuttiin kyseisen attribuutin muut tiedot (avain, null, type, ja kommentti). Koska konstruktoria saa käyttää vain luokan staattinen metodi, konstruktori on näkyvyydeltään yksityinen. Julkiset metodit: public static Table gettable(string tablename) Metodi palauttaa parametria vastaavan taulun tiedot. Metodin ensimmäisellä kutsukerralla ennen taulutietojen hakua haetaan tabledata-tiedostosta taulukuvaukset. public String getname() Metodi palauttaa taulun nimen. public SortedSet getkeys() Metodi palauttaa taulun attribuuteista ne, jotka ovat taulun pääavaimia. Avain tai avaimet palautetaan järjestettynä joukkona merkkijonoja (SortedSet). Merkkijonoilla järjestys on yleensä nouseva. public SortedSet getattributes() Metodi palauttaa taulun attribuuttien nimet järjestettynä joukkona merkkijonoja. Merkkijonoilla järjestys on yleensä nouseva. public int gettype(string attr) Metodilla voi selvittää parametrina annetun attribuutin tyypin (NUMBER, VAR-

16 CHAR2, DATE ). 13 public String getcomment(string attr) Metodi palauttaa parametrina annettuun attribuuttiin liittyvän kommentin. public boolean iskey(string attr) Metodilla voidaan selvittää onko parametrina annettu attribuutti taulun avain. public boolean isnullable(string attr) Metodi palauttaa tiedon siitä, voiko parametrina annettu attribuutti olla null. Yksityiset metodit: private static FieldInfo parsefield(stringtokenizer fields) Metodi loadtabledata() käyttää tätä metodia apunaan. Metodilla saadaan koottua attribuutin muut tiedot (avain, null, type, ja kommentti) FieldInfosisäluokan ilmentymään. private static Map loadtabledata() Metodi lukee tiedostosta tabledata kaikkien tietokannassa käytettyjen taulujen kuvaukset. Tiedosto luetaan rivi riviltä, ja jokaisesta rivistä tehdään Tauluolio OperationResults OperationResults-luokkaa käytetään tietokantaoperaatioiden tulosten tutkimiseen. Tietokantaoperaatio palauttaa OperationResults-tyyppisen olion, jossa on operaation totuusarvoinen tulos ja mahdollinen virheilmoitus. Hakutuloksille luodaan oma tarkempi tulosolio, joka on tyyppiä SearchResults. Luokka SearchResults perii luokan OperationResults ominaisuudet. Konstruktori: public OperationResults() Metodi luo tulosolion, jossa virhettä ei ole tapahtunut, eli tulosoliota luotaessa oletetaan tietokantaoperaation onnistuvan. Julkiset metodit: public void seterrormessage(string msg) Jos tietokantaoperaatio ei jostain syystä onnistunut, tietokantaluokka asettaa tällä metodilla virheilmoituksen tulosolioon, ja operaatio merkitään epäonnistu-

17 neeksi. 14 public boolean succeeded() Servlet voi tämän metodin avulla selvittää tietokantaoperaation onnistumisen / epäonnistumisen. Jos metodi palauttaa false merkkinä operaation epäonnistumisesta, geterrormessage() metodia voidaan käyttää virheen tarkempaan tutkimiseen. public String geterrormessage() Tällä metodilla saa kysyttyä operaation epäonnistumisen syyn. Palautettu teksti on tarkoitettu ainoastaan virheen raportointiin SearchResults SearchResults on luokka, jolla hakuoperaation tuloksia voi selata. Luokka periytyy OperationResults-luokasta. SearchResults-luokka sisältää listan haussa löytyneiden kohdetaulujen riveistä. Servlet pääsee käsiksi hakutuloksiin luokan julkisilla metodeilla. Osa metodeista vaatii, että käyttäjän tarvitsee antaa parametreina myös tietokannan käyttäjätunnus ja salasana (koska nämä metodit puolestaan käyttävät luokkaa ConnectionPool). Konstruktori: public SearchResults(ResultSet rs, Table t) Konstruktorin tehtävänä on kutsua yliluokan konstruktoria ja asettaa tietokantaoperaation tuottaman tulosjoukon ROWID:t listaan ja operaatiossa ollut kohdetaulu SearchResults-olion tiedoiksi. Julkiset metodit: public int getrowcount() Metodi palauttaa tietokantahaussa löytyneiden rivien määrän. public int getrownumber() Metodi palauttaa sen rivin numeron, missä kursori tällä hetkellä on. Palautettu arvo on väliltä [1..n], missä n on tulosjoukon rivien lukumäärä. public SortedMap getcurrentrow(string username, String password) Metodi palauttaa tämänhetkisen vastausjoukon rivin järjestettynä karttana (attribuutti -> arvo). public SortedMap getnextrow(string username, String password)

18 Metodi palauttaa vastausjoukossa nykyistä kohtaa seuraavan rivin, ja kursoria siirretään yksi rivi eteenpäin. Jos kursori on jo viimeisellä rivillä, palautetaan null. public SortedMap getpreviousrow(string username, String password) Metodi palauttaa vastausjoukossa nykyistä kohtaa edeltävän rivin, ja kursoria siirretään yksi rivi taaksepäin. Jos kursori on jo ensimmäisellä rivillä, palautetaan null. public SortedMap getabsoluterow(int rownum, String username, String password) Metodi palauttaa vastausjoukosta parametrilla rownum määritellyn rivin. Haluttu rivi annetaan väliltä [1..n], missä n on tulosjoukon rivien lukumäärä. (Haussa löytyneiden rivien määrän saa selville luokan metodilla getrowcount()). public SortedMap getabsoluterow(string rowid, String username, String password) Metodi palauttaa vastausjoukosta parametrilla rowid määritellyn rivin. public void removerow(rowid rowid) Metodi poistaa (tietokannasta juuri poistetun) rivin myös SearchResults-olion hakutuloslistasta. Jos riviä ei ole, ei tehdä mitään. Metodia kutsutaan servletistä käsin, jotta juuri poistettu tietue ei näkyisi vastausjoukossa. public void removerow(string rowid) Metodi poistaa (tietokannasta juuri poistetun) rivin myös SearchResults-olion hakutuloslistasta. Metodi kutsuu removerow(rowid rowid):tä. Metodia kutsutaan servletistä käsin, jotta juuri poistettu tietue ei näkyisi vastausjoukossa. 15 Yksityiset metodit: private void setresultset(resultset rs) Metodi sijoittaa haussa löydettyjen rivien ROWID:t listaan. Tämän jälkeen vastauskursori suljetaan. private SortedMap getabsoluterow(rowid rowid, String username, String password) Metodi palauttaa käyttäjän määrittelemän rivin järjestettynä karttana. Luokan julkiset rivinhakumetodit käyttävät tätä metodia riviä hakiessaan.

19 4.3.5 DatabaseOperation 16 Luokka DatabaseOperation on abstrakti yleistys kaikista mahdollisista servlettien tietokantaan kohdistamista operaatioista. Jokainen tietokantaoperaatio on oltava valmisteltavissa siten, ettei joka kerta kyseistä operaatiota tiettyyn tauluun kohdistettaessa tarvitse kyselylauseketta kääntää uudestaan. Siksi jokaisen tietokantaoperaation on toteutettava tietty tietokantaoperaatioiden hallinnalle yhteinen rajapinta. Jokaisella operaatiolla (poislukien SearchOperation) oletetaan olevan yksi tiettyyn tauluun kohdistuva valmisteltu lauseke (java.sql.preparedstatement), jollaisen ilmentymää DatabaseOperation-luokka säilyttää jokaista ko. operaation suoritukseen tarjottua tietokantayhteyttä kohti. Näin täytyy tehdä, sillä valmistellut lausekkeet ovat sidottuja siihen yhteyteen, jolla valmistelu on alun perin suoritettu. Ainoa asia, mitä geneerinen tietokantaoperaatio ei voi määritellä, on SQL-lause, joka määrää mitä kyseinen operaatio käytännössä tekee. Siksi jokaisen erikoistuneen operaatioluokan on toteutettava luokan DatabaseOperation abstrakti metodi getsqlstring(). Muuttujat: protected OperationResults result Operaation tulos talletetaan muuttujaan result. Toteuttava tietokantaoperaatio voi missä tahansa vaiheessa tämän muuttujan avulla asettaa operaation tilan epäonnistuneeksi, jolloin se raportoidaan käyttäjälle. protected Table table Muuttujaan table laitetaan operaation kohdetaulun ilmentymä. private Map statementmap Muuttuja statementmap on kartta, joka sisältää jokaiselle käytössä olevalle tietokantayhteydelle (java.sql.connection) käännetyt SQL-lauseet (java.sql.preparedstatement). Konstruktori: protected DatabaseOperation(Table table) Konstruktori luo geneerisen tietokantaoperaation, joka kohdistuu tauluun table. Pakkausnäkyvyyden metodit: protected final PreparedStatement getpreparedstatement(connection con) Metodi palauttaa annetulle yhteydelle valmistellun tätä operaatiota vastaavan lausekkeen. Mikäli valmistelua ei juuri tälle yhteydelle vielä ole tehty, se tehdään

20 17 metodia kutsuttaessa ja talletetaan tämän operaation ilmentymään käytettäväksi juuri tälle yhteydelle tämän operaation tulevia suorituksia varten. protected int getresultsettype() Metodi palauttaa operaation vaatiman/salliman vastausjoukon kursorityypin, jonka tulee olla yksi luokan java.sql.resultset arvoista TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE tai TYPE_SCROLL_SENSITIVE. Oletuksena palautetaan arvo TYPE_FORWARD_ONLY. protected int getresultsetconcurrency() Metodi palauttaa operaation vaatiman/salliman tietueiden eristyneisyysasteen, jonka tulee olla toinen java.sql.resultset luokan arvoista CONCUR_READ_ONLY tai CONCUR_UPDATABLE. Oletuksena palautetaan arvo CONCUR_READ_ONLY. Abstraktit metodit: protected abstract String getsqlstring() Metodi palauttaa toteuttavan operaation SQL-kielisen lausekkeen, johon on ilmentymää luotaessa luotu valmis parametrilista annetun kohdetaulun avainjoukon avulla SearchOperation Luokka SearchOperation perii luokan DatabaseOperation. SearchOperation suorittaa SELECT-lauseella haun tietokannan tauluun annetuilla attribuuttimaskeilla ja muilla hakuehdoilla. Attribuuttimaskivertailut tehdään LIKE-operaattoreilla, joten käyttäjät voivat itse syöttää jokerimerkkejä hakukenttiin. Muissa hakuehdoissa voi käyttää mitä tahansa operaattoreita. Tulokset palautetaan erillisessä SearchResults-oliossa. Keskustelu hakuoperaation kanssa on hyvin suoraviivaista. Ensin operaatio konstruoidaan antamalla parametriksi kohdetaulu. Tämän jälkeen koostetaan hakuarvot kartaksi ja muodostetaan mahdollinen muut hakuehdot määrittelevä merkkijono ja kutsutaan niillä metodia executesearch(), joka suorittaa itse operaation. Tuloksena käyttäjä saa erillisen tulosolion SearchResults. Konstruktori: public SearchOperation(Table table) Konstruktori luo uuden, tauluun table kohdistuvan hakuoperaation. Julkiset metodit:

21 public OperationResults executesearch(connection con, Map values, String where) 18 Metodi suorittaa hakuoperaation kohdetauluun annetulla yhteydellä con käyttäen hakuehtoina hakuarvoja values ja muita hakuehtoja where. Muut hakuehdot määrittelevä merkkijono where voi sisältää mitä tahansa SQL:n WHERElauseessa sallittuja hakuehtoja. Kutsu palauttaa haun tuloksena Search- Results -olion. public OperationResults executesearch(connection con, Map values, String where, String sortkey) Metodi suorittaa hakuoperaation kohdetauluun annetulla yhteydellä con käyttäen hakuehtoina hakuarvoja values ja muita hakuehtoja where. Muut hakuehdot määrittelevä merkkijono where voi sisältää mitä tahansa SQL:n WHERElauseessa sallittuja hakuehtoja. Tulokset järjestetään kohdetaulun sarakkeen sortkey mukaan. Kutsu palauttaa haun tuloksena SearchResults-olion. Yksityiset metodit: private String escapequotes(string s) Metodi palauttaa parametrinaan saamansa merkkijonon SQL-lauseeseen sopivassa muodossa, jossa mahdolliset heittomerkit on kahdennettu, jotta niitä ei tulkittaisi merkkijonoskalaarin erottimiksi. Pakkausnäkyvyyden metodit: protected String getsqlstring(map values, String where, String sortkey) Metodi palauttaa hakulausekkeen muotoa SELECT ROWID FROM taulu WHERE attr1 LIKE 'value1' AND attr2 LIKE 'value2'... AND attrn LIKE 'valuen' AND (where) ORDER BY sortkey Kentät attr? ovat kohdetaulun attribuutteja (parametrin values avaimia). Kentät value? ovat hakuarvoja (parametrin values annettua avainta vastaavia arvoja). Merkkijono where on muut hakuehdot määrittelevä merkkijono, joka voi sisältää mitä tahansa SQL:n WHERE-lauseessa sallittuja hakuehtoja. Lause ORDER BY lisätään vain, mikäli sortkey? null.

22 4.3.7 InsertOperation 19 Luokka InsertOperation perii luokan DatabaseOperation. Lisäysoperaatiolla voidaan lisätä yksi rivi määrättyyn tietokannan tauluun. Lisäys onnistuu, mikäli taulussa ei vielä ole samoilla avaimilla varustettua tietuetta, taulun eheysja avainrajoitteet toteutuvat eikä tiedonsiirtovirheitä tapahdu. Tulokset palautetaan OperationResults-oliona. Keskustelu lisäysoperaation kanssa on hyvin suoraviivaista. Ensin operaatio konstruoidaan antamalla parametriksi kohdetaulu. Tämän jälkeen koostetaan arvot kartaksi ja kutsutaan niillä metodia executeinsert(), joka suorittaa itse operaation. Kutsu palauttaa lisäysoperaation tuloksena OperationResultsolion. Konstruktori: public InsertOperation(Table table) Konstruktori luo uuden, tauluun table kohdistuvan lisäysoperaation. Julkiset metodit: public OperationResults executeinsert(connection con, Map values) Metodi lisää rivin kohdetauluun arvoilla values. Kyseisestä arvokartasta tulee löytyä arvot ainakin kaikille pääavaimille sekä muille NOT NULL -attribuuteille. Yksityiset metodit: private void setparameters(preparedstatement stmt, Map values) Metodi kopioi annetut arvot SQL-lausekkeeseen. Tätä kutsutaan vain metodin executeinsert() sisältä. private Date StringToDate(String strdate) Koska käyttäjät ilmoittavat päiväyksen merkkijonona, tarvitaan apumetodi, joka muuntaa merkkijonona annetun päiväyksen strdate java.sql.date -olioksi. Pakkausnäkyvyyden metodit: protected String getsqlstring() Metodi palauttaa SQL-lauseen muotoa INSERT INTO taulu (attr1, attr2,..., attrn) VALUES (?,?,...,?)

23 20 Kentät attr? ovat kohdetaulun attribuutteja UpdateOperation Luokka UpdateOperation perii luokan DatabaseOperation. Päivitysoperaatio muuttaa jonkin jo olemassa olevan rivin attribuuttien arvoja. Operaatio onnistuu, mikäli kohdetaulusta löytyy annetun ROWID:n osoittama rivi eikä tiedonsiirtovirheitä tapahdu. Keskustelu päivitysoperaation kanssa on hyvin suoraviivaista. Ensin operaatio konstruoidaan antamalla parametriksi kohdetaulu. Tämän jälkeen koostetaan arvot kartaksi ja kutsutaan niillä metodia executeupdate, joka saa parametrikseen uusien attribuuttien arvojen lisäksi päivitettävän tietueen ROWID:n. Kutsu palauttaa lisäysoperaation tuloksena OperationResults-instanssin. Päivitykset tehdään vain annetuille attribuuteille. Muuttujat: private SimpleDateFormat dateformat Muuttujaan sijoitetaan tietokannassa käytettävä päiväysten esitysmuoto. Konstruktori: public UpdateOperation(Table table) Konstruktori luo uuden, tauluun table kohdistuvan päivitysoperaation. Julkiset metodit: public OperationResults executeupdate(connection con, Map values, String rowid) Metodi suorittaa päivitysoperaation taulun riville rowid muuttaen tämän rivin attribuuttien arvot kartan values mukaisiksi. Mikäli kartta values ei sisällä jonkin attribuutin arvoa, kyseinen attribuutti jätetään päivittämättä ja näin ollen sen arvo ei muutu. Yksityiset metodit: private void setparameters(preparedstatement stmt, Map values,string rowid) Metodi kopioi uudet attribuuttien arvot sekä ROWID:n kyselylausekkeeseen. Annetut arvot korvaavat kaikki vanhat arvot. Mikäli arvokartasta values ei jotain arvoa löydy, kyseiseen kohtaan asetetaan arvo NULL. Eheysrajoitteen NOT NULL sisältävien kenttien kohdalla tästä aiheutuu väistämättä poikkeus ja toiminnon epäonnistuminen.

24 Käytännössä kaikkien kenttien päivityksestä ei kuitenkaan synny ongelmaa, sillä päivitysoperaatiota suoritettaessa servletin kutsuolio javax.servlet.httpservletrequest sisältää tietueen kaikkien attribuuttien arvot myös vanhat arvot niistä kentistä, joita käyttäjä ei ole muuttanut. 21 Pakkausnäkyvyyden metodit: protected String getsqlstring() Metodi palauttaa SQL-lauseen muotoa UPDATE taulu SET attr1 =?, attr2 =?,..., attrn =? WHERE ROWID =? Kentät attr? ovat kohdetaulun attribuutteja DeleteOperation Luokka DeleteOperation perii luokan DatabaseOperation. Poistooperaatio tuhoaa yhden rivin kohdetaulusta. Operaatio onnistuu, mikäli taulusta löytyy annettu rivi eikä tiedonsiirtovirheitä tapahdu. Keskustelu poisto-operaation kanssa on hyvin suoraviivaista. Ensin operaatio konstruoidaan antamalla parametriksi kohdetaulu. Tämän jälkeen poistooperaatio käynnistetään kutsumalla metodia executedelete(), joka saa parametrinaan poistettavan rivin ROWID:n. Kutsu palauttaa poisto-operaation tuloksena OperationResults-instanssin. Luokkaa DeleteOperation ei käytetä tämän suunnitteludokumentin pohjalta toteutettavassa Haliaeetus-järjestelmän versiossa, mutta se suunnitellaan ja toteutetaan tulevaisuuden tarpeita silmälläpitäen. Konstruktori: public DeleteOperation(Table table) Konstruktori luo uuden, tauluun table kohdistuvan poisto-operaation. Julkiset metodit: public OperationResults executedelete(connection con, String rowid) Metodi poistaa kohdetaulusta rivin annetulla ROWID:llä. Yksityiset metodit:

25 22 private void setparameters(preparedstatement stmt, String rowid) Metodi kopioi ROWID:n arvon SQL-lausekkeeseen. Pakkausnäkyvyyden metodit: protected String getsqlstring() Metodi palauttaa SQL-lauseen muotoa DELETE FROM taulu WHERE ROWID =? 4.4 Pakkaus hali.servlet Html-lomakkeiden toiminnallisuus toteutetaan servlet-luokilla. Servlettejä voidaan kutsua lomakkeiden toimintopainikkeista. Lisäksi servletit voivat kutsua toisiaan ja pakkauksien hali.general ja hali.db luokkia. Servletit kutsuvat pakkauksen hali.db tietokantaluokkia tietokantaa käsitellessään ja propertiestiedostoja lukiessaan, sekä lisäksi ulkoisia kirjastoja esim. template-tiedostojen tulostamiseksi. Istunnon lopuksi servletti palauttaa selaimelle generoimansa WWW-sivun. Servlet-luokan suoritus käynnistyy, kun servlettiä kutsutaan WWW-selaimella ensimmäistä kertaa servlet-palvelimen käynnistyttyä. Tästä eteenpäin servlet on aktiivisena palvelimen muistissa niin kauan, kunnes palvelin suljetaan. Servlet käyttää säikeitä palvellakseen useita yhtäaikaisia pyyntöjä ja voi myös sisältää staattista, kaikkien pyyntöjen käytössä olevaa informaatiota. Servlet vastaanottaa informaatiota WWW-selaimelta HTTPS-protokollan[1] GET ja POST -toiminnoilla. Vastaanotettuaan lomakkeen tiedot servletti pyytää ConnectionPool-luokalta yhteyttä tietokantaan tietokantaoperaatiota varten. Saatuaan yhteyden tietokantaan servletti lähettää asianomaiselle tietokantaoperaatio-luokalle lomakkeelta saamansa tiedot tietokantaoperaatiota varten. Tietokantaoperaatio voi olla haku (SearchOperation), lisäys (InsertOperation), muokkaus (UpdateOperation) tai poisto (DeleteOperation). Servletti hakee Table-luokan avulla tiedostosta tabledata jokaisen tietokannan kohdetaulunsa kuvauksen eli metadatan (Luku 4.3.2). Servletti saa vastauksena tietokantaoperaatio-luokalta joko Operation- Results-olion, joka sisältää tiedon operaation onnistumisesta, tai hakuoperaation SearchResults-olion, joka sisältää tulosjoukon. Operaation onnistuessa ilman palautettavaa tulosjoukkoa servletti tulostaa näytölle viestin operaation onnistumisesta. Muutoin servletti tulostaa mallipohjaa eli templatea apunaan käyttäen tulosjoukon tiedot näytölle. Virhetapauksissa servletti tuottaa näytölle virheilmoituksen. Servletit voivat myös

26 23 suorittaa tarkistuksia lomakkeelta saamilleen tiedoille, mutta pääsääntöisesti servletit käyttävät pakkauksen hali.general luokkaa Tarkista lisättävien ja muutettavien tietojen oikeellisuuden tarkastamiseksi. Lisäksi servlet voi tuottaa template-tiedostojen avulla uusia näyttöjä (lomakkeita) ottamatta tietokantayhteyttä HaliServlet HaliServlet-servletti on kaikkien servlettien yliluokka, jossa toteutetetaan kaikille servleteille yhteiset muuttujat ja metodit. HaliServlet perii servletin javax.servlet.http.httpservlet. Yliluokassa alustetaan kielituki datamalliin, josta jokainen servletti saa ottaa kopion. Muuttujat protected final Template template Servletin käyttämä mallipohja. protected final HashMap datamallifi Servletin suomenkieliset staattiset tiedot sisältävä datamalli. protected final HashMap datamallisv Servletin ruotsinkieliset staattiset tiedot sisältävä datamalli. protected final HashMap datamallien Servletin englanninkieliset staattiset tiedot sisältävä datamalli. protected final ResourceBundle halifi Servletin resurssikimppu, joka sisältää tuen suomen kielelle. protected final ResourceBundle halisv Servletin resurssikimppu, joka sisältää tuen ruotsin kielelle. protected final ResourceBundle halien Servletin resurssikimppu, joka sisältää tuen englannin kielelle. protected final Locale suomi Servletin lokaaliolio, suomi. protected final Locale ruotsi Servletin lokaaliolio, ruotsi. protected final Locale englanti Servletin lokaaliolio, englanti. Julkiset metodit: public void init(servletconfig config) Tämä metodi suoritetaan jokaisen servletin latauksen yhteydessä. Metodi kutsuu yliluokan alustusmetodia parametrilla config. Lisäksi metodi sijoittaa il-

27 24 mentymämuuttujille suomi, ruotsi ja englanti arvot ja luo jokaiselle tuettavalle kielelle (suomi, ruotsi ja englanti) oman resurssikimpun (ResourceBundle-olion), jotka sijoitetaan ilmentymämuuttujiin halifi, halisv ja halien. Lopuksi metodi kutsuu aliluokassa toteutettavaa metodia alusta(). public void doget(httpservletrequest request, HttpServletResponse response) Metodi kutsuu aliluokassa toteutettavaa dopost()-metodia. Pakkausnäkyvyyden metodit: protected void lisaatekstit(map datamalli, ResourceBundle kieli, String tiedosto) Metodi lisää parametrin kieli mukaiset staattiset tekstit parametrina annettuun Map-olioon datamalli. protected boolean lisaakantaan (Table taulu, Map arvot, Map datamalli, Connection con) Metodi lisää parametrin Map-olion arvot tiedot tietokantaan, parametrin taulu määrittelemään tietokantatauluun, luokan InsertOperation avulla. Metodi lisää Map -olioon datamalli tiedon päivityksen onnistumisesta. Mikäli lisäys epäonnistuu, metodi palauttaa false. Map -olion arvot arvojen oikeellisuudet tulisti tarkistuttaa luokalla Tarkista ennen tämän metodin kutsua. protected boolean paivitakantaan (Table taulu, Map arvot, Map datamalli, Connection con) Metodi päivittää parametrin Map-olion arvot tiedot tietokantaan, parametrin taulu määrittelemään tietokantatauluun, luokan UpdateOperation avulla. Metodi lisää Map -olioon datamalli tiedon päivityksen onnistumisesta. Mikäli päivitys epäonnistuu, metodi palauttaa false. Map -olion arvot arvojen oikeellisuudet tulisti tarkistuttaa luokalla Tarkista ennen tämän metodin kutsua. protected void tulostasivu(map datamalli) Metodi generoi muuttujan template avulla näytön parametrin datamalli sisältämistä tiedoista. Abstraktit metodit:

28 protected abstract void alusta() 25 Aliluokassa toteutettavassa metodissa tulee alustaa muuttujat: template, datamallifi, datamallisv ja datamallien. public abstract void dopost(httpservletrequest request, HttpServletResponse response) Metodi toteutetaan aliluokassa Hali Hali-servletin tehtävänä on luoda Sisäänkirjautuminen-näyttö ja tarkistaa käyttäjän syöttämän tietokannan käyttäjätunnuksen ja salasanan siten, että se yrittää luoda annetuilla tunnuksilla yhteyden tietokantaan. Jos tunnukset ovat oikeat, servletti kutsuu Haku-servlettiä. Jos tunnukset eivät olleet oikeat tai sisäänkirjautuessa tapahtui virhe, servletti generoi uudestaan Sisäänkirjautuminen-näytön virheilmoituksen kera. Servlettiä kutsutaan staattiselta aloitussivulta index.shtml tai näyttöjen ylävalikossa olevalla Kirjaudu ulos painikkeella. Painiketta käytettäessä uloskirjautumiseen Hali-servletti generoi Sisäänkirjautuminen-näytön kommentilla Olet kirjautunut ulos järjestelmästä. Aina kun servlettiä kutsutaan dopost()tai doget() metodilla, ko. metodi saa kopion datamallista valitulla kielellä, jossa on jo siten valmiina staattiset tiedot kyseisellä kielellä ja johon metodi voi lisätä kuhunkin kutsukertaan liittyvät muuttuvat tiedot. Servletti käyttää Hali-templatea Sisäänkirjautuminen-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi yrittää luoda yhteyden tietokantaan käyttäjän syöttämien tunnuksilla. Jos tunnukset olivat oikeat, luotu yhteys palautetaan yhteysvarantoon ja metodi kutsuu Haku-servlettiä. Jos tunnukset olivat virheelliset, metodi lisää virheilmoituksen ja luo Sisäänkirjautuminen-näytön, jossa on lisätty virheilmoitus. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema Hali-template. Lisäksi mallipohjiin liittyvät kolme datamallia alustetaan lisaatekstit()-metodilla tuettavien kielten mukaisilla staattisilla tiedoilla.

29 4.4.3 Haku 26 Servletti generoi aina Haku-näytön ja kysyttäessä servletti suorittaa pesien haun annettujen hakuehtojen mukaisesti, jolloin servletti generoi Haku-näytölle myös hakuehdot täyttävät tiedot tai virheilmoituksen haun epäonnistumisesta. Haku-näytön generoimiseksi servlettiä Haku kutsutaan servletistä Hali tai näyttöjen navigointi-palkin painikkeella Haku. Hakutulokset sisältävän Haku-näytön generoimiseksi Haku-servlettiä kutsutaan näytön Haku painikkeella Hae Pesät. Servletti käyttää Haku-templatea Haku-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi kerää lomakkeelta tiedot ja selvittää generoidaanko pelkästään Hakunäyttö vai tehdäänkö myös haku tietokantaan ja generoidaan myös hakutulokset. Mikäli metodia kutsutaan vain Haku-näytön generoimiseen, metodi kutsuu metodejaan lisaavalikot() ja tulostasivu(). Mikäli metodia kutsutaan Haku-näytön generoimiseen ja hakutulosten tulostamiseen, metodi kutsuu metodejaan lisaavalikot(), lisaahakutulokset() ja tulostasivu(). Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema templatetiedosto Haku perittyyn muuttujaan template ja servletin tarvitsemien tietokantataulujen kuvaukset (Table-olio) servletin omiin Table-tyyppisiin ilmentymämuuttujiin. Metodi kutsuu metodia lisaatekstit(). Yksityiset metodit: private void lisaavalikot (Connection con, Map datamalli) Metodi tekee jokaista alasvetovalikkoa kohden sql-kyselyn tietokantaan. Kyselyn onnistuessa metodi lisää alasvetovalikoiden sisällön parametrina annettuun Map-olioon datamalli. Kyselyn epäonnistuessa metodi lisää merkin virheilmoituksesta parametrina annettuun Map-olioon datamalli. private void lisaahakutulokset (Connection con, Table taulu, Map hakuehdot, Map datamalli)

30 Metodi laittaa parametrina annettuun Map-olioon datamalli merkin staattisten hakutuloksiin liittyvien tekstien näyttämisestä käyttäjälle. Metodi muodostaa tarvittavan sql-kyselyn tietokantaan luokan SearchOperation. Kyselyn onnistuessa metodi lisää kyselyn tuloksen parametrina annettuun Map-olioon datamalli. Jos haun tulosjoukko on tyhjä, metodi lisää Map-olioon datamalli tiedon, ettei hakuehdoilla löytynyt tietoja. Kyselyn epäonnistuessa metodi lisää Map-olioon datamalli virheilmoituksen ja kyselyn hakuehtoina olleet tiedot UusiPesa Servletin UusiPesa tehtävänä on lisätä tietokantaan tiedot pesästä, jota ei ole aikaisemmin tallennettu tietokantaan. Servlettiä UusiPesa voi kutsua Uusi pesä -linkin välityksellä kaikilta muilta näytöiltä paitsi Sisäänkirjautuminen-näytöltä. Kutsuttaessa muualta kuin Uusi pesä - näytöltä servletti UusiPesa tuottaa Uusi pesä -näytön, jonka lomake on tyhjä. Näyttö tuotetaan template-tiedoston Pesa.ftl avulla. Servletti UusiPesa lisää uuden pesän tiedot tietokantaan seuraavasti: Aluksi servletti tallettaa HTTPSpyynnön parametreina välitetyt lisättävät arvot metodin dopost() paikalliseen muuttujaan. Sitten se tarkastaa lisättävät arvot. Jos tietokantaan yritetään lisätä virheellisiä arvoja, servletti tuottaa template-tiedoston Pesa.ftl avulla Uusi pesä näytön virheilmoitusten kanssa ja lopettaa suorituksensa. Muuten se pyytää ConnectionPoolilta tietokantayhteyttä. Tämän jälkeen servletti suorittaa jokaista alustusmetodissa luomaansa Table-ilmentymää kohti lisäysoperaation kerättyään lisättävät arvot Map-olioon. Jokainen erillinen lisäysoperaatio palauttaa tiedon tietokantaoperaation onnistumisesta. Tietojen kirjaamispäivä päivitetään automaattisesti kyseessä olevaksi päiväksi. Kun servletti on suorittanut kaikki erilliset lisäysoperaatiot, se vapauttaa tietokantayhteyden. Mikäli tietojen lisääminen tietokantaan epäonnistui, servletti tuottaa template-tiedoston Pesa.ftl avulla Uusi pesä näytön virheilmoitusten kanssa. Muuten se kutsuu Pesatiedot-servlettiä, joka puolestaan tuottaa Pesätiedot-näytön juuri lisätyillä arvoilla. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Kun tätä servlettiä kutsutaan Uusi pesä -linkin kautta miltä tahansa näytöltä, metodi tuottaa Uusi pesä näytön, jonka lomake on tyhjä. Kun kutsu tulee servletiltä itseltään, metodi kerää lomakkeelle syötetyt tiedot kartoiksi ja lähettää kartat tarkastettavaksi tarkastatiedot() metodilleen. Jos arvoissa esiintyy virheitä, tuotetaan Uusi pesä näyttö, jolla on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät tiedot ovat oikein, servletti lisää tiedot tietokantaan ja kutsuu Pesatiedot-servlettiä, joka tuottaa Pesätiedot-näytön juuri lisätyillä arvoilla.

31 Pakkausnäkyvyyden metodit: 28 protected void alusta() Alustustoimissa haetaan servletin tarvitsema Pesa-template ja talletetaan se ilmentymämuuttujaan template. Lisäksi servletti hakee käynnistyessään jokaisen kohdetaulunsa Table-olion ja säilyttää niitä ilmentymämuuttujissaan koko elinkaarensa ajan. Metodi myös hakee tietokannasta näytöllä Uusi pesä näytettävät tiedot ja tekstit (kaikki nimikkeet, otsikot, ohjetekstit, lomakkeen oletusarvot, jne.) ja sijoittaa ne datamalliin. Yksityiset metodit: private boolean tarkastatiedot(map datamalli) Metodi tarkistaa Tarkista-luokan avulla käyttäjän lomakkeelle syöttämät arvot. Metodi palauttaa true, jos tiedoissa ei ollut virheitä, muutoin false UusiTarkastus Servletin UusiTarkastus tehtävänä on lisätä tietokantaan tietyn pesän meneillään olevan vuoden uuden tarkastuksen tiedot. Kun uusi tarkastus on lisätty tietokantaan, servletti kutsuu Pesatiedot-servlettiä, joka tuottaa Pesätiedotnäytön juuri lisätyn tarkastuksen tiedoilla. Haku- ja Pesätiedot-näytöillä on Uusi tarkastus -linkki, jota klikkaamalla pääsee tekemään valitulle pesälle uuden tarkastuksen. Näiltä näytöiltä kutsuttaessa servletti UusiTarkastus tuottaa Uusi pesätarkastus näytön. Näyttö tuotetaan template-tiedoston Pesa.ftl avulla. Servletti sijoittaa näytölle valmiiksi pysyvät tiedot, kuten pesän nimen ja sijaintitiedot. Näitä tietoja ei voi muuttaa. Lisäksi servletti sijoittaa edellisen tarkastuksen tiedot näytön kenttiin oletusarvoiksi. Servletti hakee näytölle sijoitettavat tiedot tietokannasta saamansa PESA_IDattribuutin arvon avulla, joka välitetään HTTPS-pyynnön parametrina. Tietokannasta haetaan automaattisesti uusimman tarkastuksen tiedot. Servletti UusiTarkastus lisää uuden tarkastuksen tiedot tietokantaan seuraavasti: Aluksi servletti tallettaa HTTPS-pyynnön parametreina välitetyt lisättävät arvot metodin dopost() paikalliseen muuttujaan. Sitten se tarkastaa lisättävät arvot. Jos tietokantaan yritetään lisätä virheellisiä arvoja, servletti tuottaa template-tiedoston Pesa.ftl avulla Uusi pesätarkastus näytön virheilmoitusten kanssa ja lopettaa suorituksensa. Muuten se pyytää luokalta ConnectionPool tietokantayhteyttä. Tämän jälkeen servletti suorittaa jokaista alustusmetodissa luomaansa Table-ilmentymää kohti lisäysoperaation kerättyään lisättävät arvot Map-olioon. Jokainen erillinen lisäysoperaatio palauttaa tiedon tietokantaoperaation onnistumisesta. Tietojen kirjaamispäivä päivitetään automaattisesti kyseessä olevaksi päiväksi. Kun servletti on suorittanut kaikki erilliset lisäysoperaatiot, se vapauttaa tietokantayhteyden. Mikäli tietojen lisääminen tietokantaan epäonnistui, servletti tuottaa template-tiedoston Pesa.ftl avulla Uusi pesätarkastus näytön virheilmoitusten kanssa. Muuten se kutsuu Pesatiedot-servlettiä, joka puolestaan tuottaa Pesätiedot-näytön juuri lisätyillä arvoilla.

32 29 Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Kun näytöiltä Haku ja Pesätiedot kutsutaan tätä servlettiä, metodi tuottaa Uusi pesätarkastus näytön tarpeellisilla tiedoilla. Kun kutsu tulee servletiltä itseltään, metodi kerää lomakkeelle syötetyt tiedot kartoiksi ja lähettää kartat tarkastettavaksi tarkastatiedot() metodilleen. Jos arvoissa esiintyy virheitä, tuotetaan Uusi pesätarkastus näyttö, jolla on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät tiedot ovat oikein, servletti lisää tiedot tietokantaan ja kutsuu Pesatiedot-servlettiä, joka tuottaa Pesätiedot-näytön juuri lisätyillä arvoilla. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema Pesa-template ja talletetaan se ilmentymämuuttujaan template. Lisäksi servletti hakee käynnistyessään jokaisen kohdetaulunsa Table-olion ja säilyttää niitä ilmentymämuuttujissaan koko elinkaarensa ajan. Metodi myös hakee tietokannasta näytöllä Uusi tarkastus näytettävät tiedot ja tekstit (kaikki nimikkeet, otsikot, ohjetekstit, lomakkeen oletusarvot, jne.) ja sijoittaa ne datamalliin. Yksityiset metodit: private boolean tarkastatiedot(map datamalli) Metodi tarkistaa Tarkista-luokan avulla käyttäjän lomakkeelle syöttämät arvot. Metodi palauttaa true, jos tiedoissa ei ollut virheitä, muutoin false Pesatiedot Servletin Pesatiedot tehtävänä on tuottaa Pesätiedot-näyttö ja huolehtia valitun pesän tietyn vuoden tarkastustietojen päivittämisestä. Näytöiltä Haku, Uusi tarkastus, Uusi pesä, Myrkyt, Saaliit ja Historia kutsuttaessa servletti Pesatiedot tuottaa Pesätiedot-näytön. Näyttö tuotetaan templatetiedoston Pesa.ftl avulla. Servletti sijoittaa näytölle valitun pesän valitun vuoden tarkastustiedot. Mikäli servletin kutsussa ei ole määritelty mitään vuotta, sijoitetaan näytölle uusimman tarkastuksen tiedot. Servletti hakee näytölle sijoitettavat tiedot tietokannasta HTTPS-pyynnön parametreina saamiensa pesä- ja vuositiedon perusteella.

33 30 Servletti Pesatiedot päivittää pesätiedot tietokantaan seuraavasti: Aluksi servletti tallettaa HTTPS-pyynnön parametreina välitetyt arvot metodin dopost() paikalliseen muuttujaan. Sitten se tarkastaa päivitettävät arvot. Jos tietokantaan yritetään päivittää virheellisiä arvoja, servletti tuottaa template-tiedoston Pesa.ftl avulla Pesätiedot-näytön virheilmoitusten kanssa ja lopettaa suorituksensa. Muuten se pyytää luokalta ConnectionPool tietokantayhteyttä. Tämän jälkeen servletti suorittaa jokaista alustusmetodissa luomaansa Table-ilmentymää kohti päivitysoperaation kerättyään päivitettävät arvot Map-olioon. Jokainen erillinen päivitysoperaatio palauttaa tiedon tietokantaoperaation onnistumisesta. Tietojen muutospäivä päivitetään automaattisesti kyseessä olevaksi päiväksi. Kun servletti on suorittanut kaikki erilliset päivitysoperaatiot, se vapauttaa tietokantayhteyden ja tuottaa template-tiedoston Pesa.ftl avulla Pesätiedot-näytön, jolla on tieto operaation onnistumisesta. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi kerää lomakkeelle syötetyt tiedot kartoiksi ja lähettää kartat tarkastettavaksi tarkastatiedot() metodilleen. Jos arvoissa esiintyy virheitä, tuotetaan Pesätiedot-näyttö, jolla on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli päivitettävät tiedot ovat oikein, servletti päivittää tiedot tietokantaan ja tuottaa template-tiedoston Pesa.ftl avulla Pesätiedot-näytön, jolla on tieto operaation onnistumisesta. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema Pesa-template ja talletetaan se ilmentymämuuttujaan template. Lisäksi servletti hakee käynnistyessään jokaisen kohdetaulunsa Table-olion ja säilyttää niitä ilmentymämuuttujissaan koko elinkaarensa ajan. Metodi myös hakee tietokannasta näytöllä Pesätiedot näytettävät tiedot ja tekstit (kaikki nimikkeet, otsikot, ohjetekstit, lomakkeen oletusarvot, jne.) ja sijoittaa ne datamalliin. Yksityiset metodit: private boolean tarkastatiedot(map datamalli) Metodi tarkistaa Tarkista-luokan avulla käyttäjän lomakkeelle syöttämät arvot. Metodi palauttaa true, jos tiedoissa ei ollut virheitä, muutoin false.

34 4.4.7 Myrkky 31 Myrkky-servletin tehtävänä on tarkistaa käyttäjän syöttämät myrkkytiedot analysoiduista näytteistä ja viedä ne tietokantaan. Näytöllä voidaan sekä lisätä että päivittää tietyn pesän myrkkytietoja. Servlettiä kutsutaan tietyn pesän Pesätiedot-näytöltä. Lisäksi samaan pesään liittyviltä Saaliit- ja Historia-näytöiltä on myös mahdollisuus kutsua Myrkkyservlettiä. Servletti käyttää Myrkky-templatea Myrkky-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi tekee ensin tietokantahaun, jolla selvitetään, onko tietokannassa valittuun pesään ja vuoteen liittyviä myrkkytietoja. Jos on, ne tulostetaan näytölle. Jos kyseiselle vuodelle ei ole kirjattu myrkkytietoja, tulostetaan perusnäyttö. Jos käyttäjä lisää tai muuttaa tietoja, tätä metodia kutsutaan uudestaan. Metodi kerää tällöin lomakkeelle syötetyt tiedot arvot-kartaksi ja lähettää kartan tarkastettavaksi tarkastatiedot( )-metodille. Jos arvoissa esiintyy virheitä, generoidaan Myrkky-näyttö, jossa on käyttäjän syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät/päivitettävät tiedot ovat oikein, servletti pyytää tietokantayhteyden, lisää/päivittää tiedot kantaan lisaakantaan()- tai paivitakantaan()- metodilla ja vapauttaa yhteyden. Servletti generoi Myrkky-näytön, jossa on käyttäjän syöttämät uudet tiedot sekä mahdollisesti jo olleet vanhat tiedot. Lisäksi ilmoitetaan lisäys/ päivitysoperaation onnistumisesta. Pakkausnäkyvyyden metodit protected void alusta() Alustustoimissa haetaan servletin tarvitsema Myrkky-template. Lisäksi mallipohjiin liittyvät kolme datamallia alustetaan lisaatekstit()-metodilla tuettavien kielten mukaisilla staattisilla tiedoilla kuten servletissä Hali. Metadatatiedot tietokannan taulusta MYRKKY luetaan Table-luokan avulla Saaliit Saaliit-servletin tehtävänä on tarkistaa käyttäjän syöttämät tiedot kerätyistä saalisnäytteistä ja viedä ne tietokantaan. Näytöllä voidaan sekä lisätä että päivittää tietyn pesän saalisnäytetietoja. Servlettiä kutsutaan tietyn pesän Pesätiedot-näytöltä. Lisäksi samaan pesään

35 32 liittyviltä Myrkky- ja Historia-näytöiltä on myös mahdollisuus kutsua Saaliitservlettiä. Servletti käyttää saaliit-templatea Saaliit-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi tekee ensin tietokantahaun, jolla selvitetään, onko tietokannassa valittuun pesään ja vuoteen liittyviä saalistietoja. Jos on, ne tulostetaan näytölle. Jos kyseiselle vuodelle ei ole kirjattu saalistietoja, tulostetaan perusnäyttö. Jos käyttäjä lisää tai muuttaa tietoja, tätä metodia kutsutaan uudestaan. Metodi kerää lomakkeelle syötetyt tiedot arvot-kartaksi ja lähettää kartan tarkastettavaksi tarkastatiedot() metodilleen. Jos arvoissa esiintyy virheitä, generoidaan Saaliit-näyttö, jossa on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät/päivitettävät tiedot ovat oikein, servletti lisää/päivittää tiedot kantaan lisaakantaan()- tai paivitakantaan()-metodilla ja generoi Saaliitnäytön, jossa on käyttäjän syöttämät uudet tiedot sekä mahdollisesti jo olleet vanhat tiedot. Lisäksi ilmoitetaan lisäys/ päivitysoperaation onnistumisesta. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan myös servletin tarvitsema Saaliit-template. Lisäksi mallipohjiin liittyvät kolme datamallia alustetaan lisaatekstit()-metodilla tuettavien kielten mukaisilla staattisilla tiedoilla. Metadatatiedot tietokannan taulusta SAALIS luetaan Table-luokan avulla Historia Historia-servlet tallettaa tarkistusten jälkeen tietokantaan lähinnä tietoja pesistä ennen varsinaisen seurannan alkamista vuonna Uudempaakin historiatietoa on myös mahdollista lisätä. Näytöllä voidaan lisäksi päivittää tietyn pesän historiatietoja. Servlettiä kutsutaan tietyn pesän Pesätiedot-sivulta. Lisäksi samaan pesään liittyviltä Myrkky- ja Saaliit näytöiltä on myös mahdollisuus kutsua Historiaservlettiä. Servletti käyttää Historia-templatea Historia-näytön generoimisessa. Julkiset metodit:

36 public void dopost(httpservletrequest request, HttpServletResponse response) 33 Metodi tekee ensiksi tietokantahaun, jolla selvitetään, onko tietokannassa valittuun pesään liittyviä historiatietoja. Jos on, ne tulostetaan näytölle. Jos kyseiselle vuodelle ei ole kirjattu historiatietoja, tulostetaan perusnäyttö. Jos käyttäjä lisää tai muuttaa tietoja, tätä metodia kutsutaan uudestaan. Metodi kerää lomakkeelle syötetyt tiedot arvot-kartaksi ja lähettää kartan tarkastettavaksi tarkastatiedot() metodilleen. Jos arvoissa esiintyy virheitä, generoidaan Historia-näyttö, jossa on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät tiedot ovat oikein, servletti lisää tiedot kantaan lisaakantaan()- tai paivitakantaan()-metodilla ja generoi Historia-näytön, jossa on käyttäjän syöttämät uudet tiedot sekä mahdollisesti jo olleet vanhat tiedot. Lisäksi ilmoitetaan lisäys/ päivitysoperaation onnistumisesta. Pakkausnäkyvyyden metodit protected void alusta() Alustustoimissa haetaan myös servletin tarvitsema Historia-template. Lisäksi mallipohjiin liittyvät kolme datamallia alustetaan lisaatekstit()-metodilla tuettavien kielten mukaisilla staattisilla tiedoilla. Metadatatiedot tietokannan taulusta HISTORIA luetaan Table-luokan avulla Reviiri Reviiri-servletti generoi Reviiri -näytön ja suorittaa tietojen lisäämisen ja päivittämisen tietokantatauluun REVIIRI. Servlettiä Reviiri kutsutaan näyttöjen navigointi-palkin painikkeella Reviiri sekä Reviiri näytön painikkeilla Lisää ja Muuta. Servletti käyttää Reviiri-templatea Reviiri-näytön generoimisessa. Muuttujat: private Table reviiri Muuttujaan haetaan tietokantataulun REVIIRI kuvaus. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi kerää lomakkeelle syötetyt tiedot kartaksi ja selvittää, onko kyseessä

37 34 pelkästään näytön Reviiri generoiminen vai liittyykö kyselyyn lisäksi lisäys tai päivitysoperaatio. Mikäli metodi pelkästään generoi näytön Reviiri, metodi kutsuu metodejaan lisaavalikot() ja tulostasivu(). Mikäli metodi generoi näytön Reviiri ja tekee lisäyksen tietokantaan, metodi kutsuu metodejaan lisaavalikot (), lisaakantaan() ja tulostasivu(). Mikäli metodi generoi näytön Reviiri ja tekee päivityksen tietokantaan, metodi kutsuu metodejaan lisaavalikot (), paivitakantaan() ja tulostasivu(). Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema templatetiedosto Reviiri perittyyn muuttujaan template ja tietokantataulun REVIIRI kuvauksen muuttujaan reviiri. Metodi kutsuu metodia lisaatekstit(). Yksityiset metodit: private void lisaavalikot(map datamalli) Metodi ottaa yhteyden tietokantaan ja tekee kyselyn tietokantaan luokan SearchOperation avulla. Kyselyn onnistuessa metodi lisää alasvetovalikoiden sisällön parametrina annettuun Map-olioon datamalli. Kyselyn epäonnistuessa metodi lisää virheilmoituksen parametrina annettuun Map-olioon datamalli Kunnat Servletin Kunnat tehtävänä on lisätä tietokantaan uuden kunnan tiedot. Servletin avulla tietokantaan lisätään myös uusia kuntaliitoksia. Servletti Kunnat tuottaa Kunnat-näytön template-tiedoston Kunta.ftl avulla. Servletti lisää uuden kunnan tai kuntaliitoksen tiedot tietokantaan seuraavasti: Aluksi servletti tallettaa HTTPS-pyynnön parametreina välitetyt lisättävät arvot metodin dopost() paikalliseen muuttujaan. Sitten se tarkastaa lisättävät arvot. Jos tietokantaan yritetään lisätä virheellisiä arvoja, servletti tuottaa templatetiedoston Kunnat.ftl avulla Kunnat-näytön virheilmoitusten kanssa ja lopettaa suorituksensa. Muuten se pyytää luokalta ConnectionPool tietokantayhteyttä. Tämän jälkeen servletti suorittaa lisäysoperaation kerättyään lisättävät arvot Map-olioon. Lisäysoperaatio palauttaa tiedon tietokantaoperaation onnistumisesta. Tietojen kirjaamispäivä päivitetään automaattisesti kyseessä olevaksi päiväksi. Kun servletti on suorittanut lisäysoperaation, se vapauttaa tietokantayhteyden ja tuottaa template-tiedoston Kunta.ftl avulla Kunta-näytön, jolla on tieto operaation onnistumisesta.

38 35 Kuntaliitosta lisättäessä tai muutettaessa edellisen kuvauksen lisäksi toimenpiteisiin kuuluu tietyn suuralueen tai -alueiden kuntien hakeminen tietokannasta. Tämä tapahtuu seuraavasti: Aluksi servletti tallettaa HTTPS-pyynnön parametreina välitetyt hakuarvot metodin dopost() paikalliseen muuttujaan. Tämän jälkeen se pyytää luokalta ConnectionPool tietokantayhteyttä ja suorittaa hakuoperaation kerättyään hakuarvot Map-olioon. Hakuoperaatio palauttaa tulosolion. Kun servletti on suorittanut hakuoperaation, se vapauttaa tietokantayhteyden ja tuottaa template-tiedoston Kunta.ftl avulla Kunta-näytön, jolla on tulosoliosta saadut kunnat. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi tuottaa Kunta-näytön. Kun kutsu tapahtuu miltä tahansa näytöltä Kunnat-linkin kautta, metodi tuottaa template-tiedoston Kunta.ftl avulla Kuntanäytön tyhjillä lomakkeilla. Kun kutsu tulee servletiltä itseltään, metodi kerää lomakkeelle syötetyt tiedot kartoiksi ja lähettää kartat tarkastettavaksi tarkastatiedot() metodilleen. Kun servletti on suorittanut lisäys- tai hakuoperaation, metodi tuottaa template-tiedoston Kunta.ftl avulla Kunta-näytön, jolla on tieto lisäysoperaation onnistumisesta tai hakuoperaation tulokset. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema Kunta-template ja talletetaan se ilmentymämuuttujaan template. Lisäksi servletti hakee käynnistyessään tietokantataulun KUNTA Table-olion ja säilyttää sitä ilmentymämuuttujassaan koko elinkaarensa ajan. Metodi myös hakee tietokannasta näytöllä Kunnat näytettävät tiedot ja tekstit (kaikki nimikkeet, otsikot, ohjetekstit, lomakkeen oletusarvot, jne.) ja sijoittaa ne datamalliin Tarkastajat Tarkastajat-servletin tehtävänä on tarkistaa käyttäjän syöttämät tiedot merikotkien rengastajista ja pesimätietojen kerääjistä ja tallentaa ne tietokantaan. Servlettiä kutsutaan Tarkastajat-näytöltä. Servletti käyttää Tarkastajat-templatea Tarkastajat-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response)

39 36 Metodi kerää lomakkeelle syötetyt tiedot kartaksi ja lähettää kartan tarkastettavaksi tarkastatiedot metodilleen. Jos arvoissa esiintyy virheitä, generoidaan Tarkastajat-näyttö, jossa on käyttäjän jo syöttämät tiedot sekä virheilmoitus. Mikäli lisättävät tiedot ovat oikein, servletti lisää tiedot kantaan ja generoi Tarkastajat-näytön, jossa on käyttäjän syöttämät tiedot ja ilmoitus lisäysoperaation onnistumisesta. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa metodi hakee servletin tarvitsema tarkastajati-template ja metadatatiedot tietokannan taulusta TARKASTAJAT. Lisäksi alustetaan kolme datamallia. Yksityiset metodit: private boolean tarkastatiedot(map arvot) Metodi tarkistaa Tarkista-luokan tarkastatarkastajat-metodin avulla käyttäjän lomakkeelle syöttämät arvot. Metodille välitetään parametreinä Mapolio arvot ja Map-olioon datamalli. Metodi palauttaa arvon true, jos tiedoissa ei ollut virheitä, muutoin false. Jos tulos on kelvollinen, niin kutsutaan lisääkantaan-metodia, muussa tapauksessa generoidaan uusi Tarkastajatsivu virheilmoituksen kera tulostatarkastajatsivu-metodilla Aputaulut Aputaulut-servletti generoi Aputaulujen ylläpito -näytön ja suorittaa koodien ja selityksien lisäämisen ja päivittämisen tietokantatauluun APUTAULU. Servlettiä Aputaulut kutsutaan näyttöjen yläosan navigointi-palkin painikkeella Aputaulut sekä Aputaulujen ylläpito näytön painikkeilla Lisää ja Muuta. Servletti käyttää Aputaulut-templatea Aputaulujen ylläpito -näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request, HttpServletResponse response) Metodi kerää lomakkeelle syötetyt tiedot kartaksi ja selvittää, onko kyseessä pelkästään näytön Aputaulujen ylläpito generoiminen vai liittyykö kyselyyn lisäksi lisäys tai päivitysoperaatio.

40 37 Mikäli metodi pelkästään generoi näytön Aputaulujen ylläpito, metodi kutsuu metodejaan lisaavalikot() ja tulostasivu(). Mikäli metodi generoi näytön Aputaulujen ylläpito ja tekee lisäyksen tietokantaan, metodi kutsuu metodejaan lisaavalikot (), lisaakantaan() ja tulostasivu(). Mikäli metodi generoi näytön Aputaulujen ylläpito ja tekee päivityksen tietokantaan, metodi kutsuu metodejaan lisaavalikot (), paivitakantaan() ja tulostasivu(). Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa haetaan servletin tarvitsema templatetiedosto Aputaulut perittyyn muuttujaan template ja tietokantataulun APUTAULUT kuvauksen muuttujaan aputaulu. Metodi kutsuu metodia lisaatekstit(). Yksityiset metodit: private boolean tarkastatiedot (Table taulu, Map arvot, Map datamalli) Metodi tarkastaa Tarkista-luokan avulla parametrinaan saamansa Map-olion arvot arvojen oikeellisuuden. Metodi palauttaa true, jos tiedoissa ei ollut virheitä. Jos tiedoissa on virheitä, metodi lisää virheilmoituksen tai virheilmoitukset Map-olioon datamalli ja palauttaa false. private void lisaavalikot(map datamalli) Metodi ottaa yhteyden tietokantaan ja tekee kyselyn tietokantaan luokan SearchOperation avulla. Kyselyn onnistuessa metodi lisää alasvetovalikoiden sisällön parametrina annettuun Map-olioon datamalli. Kyselyn epäonnistuessa metodi lisää virheilmoituksen parametrina annettuun Map-olioon datamalli Raportti Raportti-servlet generoi halutun raportin ja tallettaa sen tiedostoon. Tallennukseen servletti käyttää TiedostoTallennus-luokkaa. Servlettiä kutsutaan Raportti-näytöltä. Servletti käyttää Raportti-templatea Raportti-näytön generoimisessa. Julkiset metodit: public void dopost(httpservletrequest request,

41 HttpServletResponse response) 38 Metodi saa servletiltä parametrina halutun raportin numeron ja ottaa yhteyttä tulostaraportti()-metodiinsa. Tulostettuaan raportin servletti generoi uuden Raportti-näytön. Pakkausnäkyvyyden metodit: protected void alusta() Alustustoimissa metodi hakee servletin tarvitsema Raportti-template ja metadatatiedot tietokannan taulusta RAPORTTI. Lisäksi alustetaan kolme datamallia. Yksityiset metodit : private boolean tulostaraportti(int raporttinro) Metodi tulostaa TiedostoTallennus-luokan avulla halutun raportin tiedostoon. 4.5 Pakkaus hali.general Pakkauksen hali.general luokat suorittavat erilaisia järjestelmän tarvitsemia aputoimintoja HaliProperties Haliaeetus-ohjelmiston asetustiedot löytyvät tiedostosta haliaeetus.config. HaliProperties-luokan avulla tiedostosta saadaan luettua konfigurointitietoja muille luokille, kuten esimerkiksi käytettävä ajuri JDCB-yhteydelle. HaliProperties perii Javan oman valmiin luokan java.util.properties. Yliluokan metodeja käytetään avain-arvo merkkijonoparien lukemiseen tiedostosta. Kun luokkaa käytetään sen julkisin, staattisten metodein ensimmäisen kerran, asetustiedot luetaan tiedostosta haliaeetus.config. Toteutusympäristössä konfigurointitiedot sisältävä haliaaeetus.config sijoitetaan palvelinkoneelle alkokrunni.cs.helsinki.fi kansioon /home/local/hali/jserv/etc/. Konstruktori: private HaliProperties() Konstruktorin tehtävänä on kutsua yliluokan konstruktoria. Konstruktori määritel-

42 39 lään yksityiseksi eli luokasta ei voi luoda ilmentymiä, sillä luokkaa käytetään kirjastoluokan tavoin staattisten metodien avulla. Julkiset metodit: public static String get(string key) Metodi palauttaa parametrilla key asetustiedostosta löytyvän arvon. Jos parametria key ei löydy asetustiedostosta, palautetaan null. public static getint(string key) Metodi palauttaa parametrilla key asetustiedostosta löytyvän arvon, mutta muutettuna kokonaisluvuksi. Jos annetulla parametrilla ei löytynyt arvoa tiedostosta tai arvoa ei voida tulkita kokonaisluvuksi, palautetaan -1. public static getboolean(string key) Metodi palauttaa parametrilla key asetustiedostosta löytyvän arvon, mutta muutettuna totuusarvoksi. Jos annetulla parametrilla ei löytynyt arvoa tiedostosta tai arvoa ei voida tulkita totuusarvoksi, palautetaan false. public static Template getpagetemplate(string templatename) Metodi palauttaa kutsujalleen Template-olion, joka vastaa parametrissa määriteltyä templatetiedostoa. Parametrina TemplateName annettavassa mallipohjan tiedostonimessä täytyy olla mukana tiedoston ftl-pääte. Yksityiset metodit: private static void loadproperties() Lukee asetustiedot tiedostosta /home/local/hali/jserv/etc/haliaeetus.config Tarkista Tarkista-luokan tehtävänä on tarkistaa servlettien parametreinä lähettämien arvojen oikeellisuus ja ilmoittaa servletille tuloksesta. Tarkastettavat arvot ovat raja-arvoja, joiden sisällä syötearvon tulee olla ja se, että kaikki kentät, joiden arvo ei voi olla null ovat täytetty. Kullekin tarkistustoimia vaativalle servletille on luokassa oma metodi tarkistusta varten. Lisäksi kullakin tällaisellä servletillä on oma properties-tiedosto, josta tarkistusarvot haetaan metodeissa. Luokan metodit palauttavat servletille boolean arvon true tai false. Lisäksi luokan metodit lisäävät datamalliin virheiden kohdat, jos virheitä ilmenee.

43 40 Julkiset metodit: public boolean tarkistauusitarkastus(map arvot, Map datamalli) Metodi, jota kutsutaan UusiTarkastus-servletistä välittämällä metodille parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee UusiTarkastus.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistapesatiedot(map arvot, Map datamalli) Metodi, jota kutsutaan Pesatiedot-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Pesatiedot.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistauusipesa(map arvot, Map datamalli) Metodi, jota kutsutaan UusiPesa-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee UusiPesa.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistakunnat(map arvot, Map datamalli) Metodi, jota kutsutaan Kunnat-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Kunnat.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistamyrkky(map arvot, Map datamalli) Metodi, jota kutsutaan Myrkky-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Myrkky.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true,

44 41 muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistasaaliit(map arvot, Map datamalli) Metodi, jota kutsutaan Saaliit-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Saaliit.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistahistoria(map arvot, Map datamalli) Metodi, jota kutsutaan Historia-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Historia.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false. public boolean tarkistatarkastajat(map arvot, Map datamalli) Metodi, jota kutsutaan Tarkastajat-servletistä välittämällä metodille parametreinä parametreinä tarkistettavat arvot arvot ja datamallin datamalli. Metodi hakee Tarkastajat.properties-tiedostosta tarkistusarvot. Näitä tarkistusarvoja verrataan parametreinä välitettyhin arvoihin. Jos tarkastuksen tulos on hyväksyttävä, niin metodi palauttaa kutsuneelle servletille boolean arvon true, muussa tapauksessa tehdään datamallin virhekohtiin merkinnät ja palautetaan servletille arvo false TiedostoTallennus TiedostoTallennus-luokan tehtävänä on kirjoittaa servletin suorittaman hakuoperaation tulostietoja (raportteja) määriteltyyn tekstitiedostoon. Konstruktori: public TiedostoTallennus(String tdstonimi) Konstruktori luo TiedostoTalletus-olion, jonka avulla voidaan tallettaa tietoja tdstonimi-parametrilla määriteltyyn tiedostoon. Julkiset metodit:

45 public static boolean onkotiedostoolemassa(string tdstonimi) 42 Metodilla voidaan selvittää ennen TiedostoTallennus-olion luomista, onko parametrina annettu tiedosto jo olemassa. Jos tiedosto löytyy käyttäjää voidaan varoittaa ylikirjoituksesta tai pyytää määrittelemään uusi tiedoston nimi. public void talletatieto(string tieto) Metodi tallettaa parametrin tieto tiedostoon ja lisää perään määritellyn määrän tyhjämerkkejä. Tyhjämerkkien määrän saa asetettua metodilla asetatyhjämerkkienmäärä(int lkm). Jos asetusta ei ole tehty, käytetään oletusarvoa. public void vaihdarivia() Metodi suorittaa tekstitiedostossa rivinvaihdon. public void talletarivi(string[] arvot) Metodi tallettaa tiedostoon yhdelle riville parametrina annetun merkkijonotaulukon tiedot sijoittaen tietojen väliin määritellyn määrän /oletusmäärän tyhjämerkkejä ja suorittaa lopuksi rivinvaihdon. public void talleta(searchresults tulosrivit, String username, String password) Metodi tallettaa hakuoperaatiossa syntyneen SearchResults-olion rivit tiedostoon. SearchResults vaatii käytettäessä käyttäjätunnuksen ja salasanan, joten ne on annettava myös parametreina. public void talleta(resultset rs) Metodi tallettaa hakuoperaatiossa syntyneen ResultSet-olion rivit tiedostoon. public void asetatyhjamerkkienmaara(int lkm) Metodilla asetetaan tulostettavien tyhjämerkkien määrä jokaisen tulostetun tiedon jälkeen. 4.6 Muut tiedostot Järjestelmä käyttää mallipohjia (template-tiedostot) dynaamisten html-sivujen tuottamiseen. Lisäksi järjestelmässä on yksi staattinen html-sivu, jolta käyttäjä kirjautuu järjestelmään. Järjestelmän kielituki toteutetetaan Javan propertiestiedostoilla. Luokka Tarkista käyttää myös properties-tiedostoja apunaan Template-tiedostot Servlet-luokkien tuottamat tulosteet muunnetaan käyttäjän ymmärtämään HTML-muotoon FreeMarker-mallipohjien [2] eli template-tiedostojen (.ftl)

46 43 avulla. Jokaista näyttöä kohden on yksi mallipohja paitsi näytöt Uusi pesä, Pesätiedot ja Uusi tarkastus käyttävät samaa mallipohjaa. Lisäksi on mallipohja sivujen yläosan linkkejä varten. Template-tiedostot sisältävät tavallista HTML-koodia sekä FreeMarkerkomentoja, joiden avulla on toteutettu mm. ehtorakenteet ja luettelomuotoisen tiedon esitys. Template-tiedostojen avulla servletti voi generoida käyttöliittymän näytölle valmiita lomakepohjia, listata list-operaatiolla dynaamisesti tulosjoukkoja näytölle ja yhdistellä eri tavoin näytöllä esitettäviä osia include-komennoilla. Template-tiedostot vastaavat käyttöliittymän eri näyttöjä ja niiden avulla voidaan esim. if-lauseita käyttäen generoida näytön virheilmoituksia. HTML-lomakkeissa käytetyt kenttien ja FreeMarker-muuttujien nimet vastaavat (soveltuvilta osin) tietokannan taulujen ja sarakkeiden nimiä (esim. muodossa taulu.attribuutti). Template-tiedostot sijaitsevat palvelinkoneella alkokrunni.cs.helsinki.fi. (juuri) +- muuttuja +- solmu +- a +-arvo +- b +- sekvenssi n += a, b, c +- a +- b +- c Olennaisin asia templateissa on datamalli, jonka Servletti luo. Datamalli on normaali puutietorakenne. Datamallista template voi suoraan sijoittaa html:n sekaan muuttujia. Tässä luvussa keskitytään datamallin rakenteeseen, koska itse ftltiedostot ovat melko triviaaleja html-kieltä ja perusohjelmointia tuntevalle, ja tiedostojen perusrakenteen pystyy näin ollen päättelemään näyttöjen kuvista kappaleessa 5. Tässä dokumentissa datamalli kuvataan seuraavasti puuna: Mallissa jokainen puun normaali solmu voi toimia tyhjänä solmuna (=hakemisto), muuttujana (sisältää arvon), tai olla molempia. Sekvenssityyppiset solmut taas toimivat kuin taulukko. Esimerkissä siis sekvenssi toimii kuin taulukko, ja viittaus sekvenssi[1] viittaa sekvenssin toiseen muuttujaan/alkioon. Sekvenssin alkiot voivat toimia myös hakemistorakenteina, ja yhdessä alkiossa voi olla monta muuttujaa. Tavallisiin muuttujiin viitataan templatessa esim solmu.a.arvo. Haliaeetus-ratkaisussa kaikki näyttöjen staattiset tekstit haetaan kielituen takia tiedostosta. Tämä aiheuttaa sen, että datamallipuista tulee isoja ja tällä esitystavalla graafisesti korkeita (itse puuhan on melko matala). Ulkoasullisten seikkojen takia esitystä on lyhennetty niin, että: on sama kuin: Siis yhtäsuuruusmerkki kertoo sen, että jokainen pilkulla erotettu muuttuja on oma solmunsa navi.ftl (juuri) +- teksti +=haku, uusi_pesa, raportit, aputaulut, kunnat, tarkastajat, ulos +- kutsuja

47 44 navi.ftl on navigointipalkin template, joka näkyy jokaisen näytön ylälaidassa (esim. s. 58). Se sisällytetään muihin templateihin include-lauseella. Solmu teksti sisältää alimuuttujinaan kaikki palkin staattiset tekstit. Muuttuja kutsuja taas kertoo, mikä servletti on kutsunut sivua, eli mille näytölle palkki kulloinkin tulee. Tällä tavalla oikea sivu voidaan korostaa palkista eri värillä hali.ftl (juuri) +- teksti +=otsikko, h1, tunnus, salasana, sisaan +- ilmoitus +- syy (sekvenssi!) += 0..n +-teksti +- arvo +- tunnus Hali.ftl tuottaa sisäänkirjautumissivun (kuva s. 58). Solmun teksti alimuuttujat sisältävät näytön staattiset tekstit. Jos solmun ilmoitus arvo on true, syy-sekvenssiin on ladattu virheilmoitukset muuttujiin ilmoitus.syy[n].teksti. Muuttuja arvo.tunnus säilöö syötetyn käyttäjätunnuksen virhetilanteissa, jotta käyttäjätunnus-kenttä ei turhaan tyhjene haku.ftl (juuri) +- teksti +=otsikko, h1, hakuehdot, pesa, reviiri, nimi, kunta, id, suuralue, ymp_keskus, koordinaatit, yhtenais, aste, pituus, leveys, hae_pesat, haetut_pesat +- tulos += haetut, numero, nimi, reviiri, kunta +-joukko (sekvenssi!) += 0,.., n +=numero, nimi, reviiri, kunta +- ilmoitus +- syy (sekvenssi!) += 0..n +-teksti +- 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!) Hakusivun (kuva s. 58)staattiset tekstit ladataan datamallin solmun teksti alimuuttujista. Myös solmulla tulos on alimuuttujina tekstejä, jotka toimivat hakutuloksen sarakkeiden otsikkoina. Haun tulosjoukko voi olla kooltaan 0-n riviä. Muuttuja tulos.joukko on sekvenssi, jossa jokaisella muuttujalla (0-n) on omat neljä saraketta: esim. tulos.joukko[2].numero, tulos.joukko[2].nimi, tulos.joukko[2].reviiri, tulos.joukko[2].kunta. Tulosjoukko listataan näytölle list-komennolla, jos solmu tulos= true. Näytöllä on lisäksi kaksi valikkoa, joihin täytyy hakea vaihtoehdot tietokannasta. Nämä sekvenssit ovat solmun valikko alla. Aputaulu-vaihtoehtojen lisäksi kummallakin sekvenssillä on alimuuttuja valittu, joka kertoo tarvittaessa valitun arvon haun jälkeen. Ilmoitukset (esim. valituilla ha-

48 45 kuehdoilla ei löytynyt pesiä ) ovat solmun ilmoitus alla. Solmun arvo alimuuttujina on kaikki käyttäjän tekstikenttiin syöttämät arvot, jotka on näytettävä myös haun jälkeen pesa.ftl (juuri) +- kutsuja +- teksti += saaliit, myrkky, historia, tark_paiva, kirj_paiva, muut_paiva, id, nimi, tarkkuus, rakentamisvuosi, loytymisvuosi, tuhoutumisvuosi, taulu, ekalaji, valokuva, komm_pvakio +- tarkastusvuodet +- vuosi (sekvenssi) += 1.. n +- teksti +- otsikko += pesatiedot, uusi_tarkastus, uusi_pesa +- h1 += pesatiedot, uusi_tarkastus, uusi_pesa +- muut pesat +- uusi_tarkastus +- vaihtopesa += 1.. n +- teksti +- tarkastaja += sukunimi, etunimi +- pesa += kunta, suuralue, ympkeskus +- reviiri += kunta, vanhanro +- koordinaatit += yhtenais, aste, pituus, leveys, mittaustapa +- taulu += kiinnityspvm, kieli, nro +- pesap_laji +- elavyys +- pesa_sijainti +- tarkka +- h3 +- pesap_mitat += korkeus, pesa_ylapinta, latvasta, 1m, pesan_alla, ymparys, halkaisija, tark +- pesamitat += korkeus, halkaisija, suurin, pienin +- etaisyys += meri, jarvi, asunto, tie, kalanviljely, johto, pelto, metsa, pesa_puu, korppi, varis, metsa_tyyppi +- ymparisto += puustotyyppi, kasittely, puusto_ika, maastotyyppi, saarityyppi, rno, rauhoitus, kesa_1000, kesa_ nakyvyys += tie, vesi, rakennus, metsa, kommentti_pesam +- tarkastus += vuosi, tapa, muu_laji, tulos, epaonni, kunto, merkit, munien_lkm, pvm, kuor_munia, kuolleita, elavia, rengastusika, lento +- aikuiset += lkm, sukupuoli, nahty, rengaas_v, rengas_o, tunnus, vari, kommentti_tark +- poikaset += rengas_v, rengas_o, tunnus, vari, siipi, menetelma, nilkka, max, min, noka_pit, nokan_kork, paino, kupu, sukupuoli, dna, kommentti_poik +- lahetetty += sulk_hoy, munia, siruja, kuolleita_poik, kuolleita_aik, saalis, pussia, oksennus += lisaa, 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 += nimi, 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

49 +=pp, kk, vvvv, nro +- pesapuu +=korkeus, et_maasta, et_latvasta, tyviymparys, tyvihalkaisija, s_tyvihalkaisija, p_tyvihalkaisija, latvaymparys, latvahalkaisija +- pesa +=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 =rengas_vasen, rengas_oikea, siipi, nilkka, nilkka_max, nilkka_min, nokka_tyvi, nokka_pituus, paino += 2, 3, 4 (kuten 1!) +- 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, rak_vuosi_tarkkuus, r_taulu_kieli, rak_laji, valokuva, puulaji, elavyys, sijainti +- 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, rengas, v_vari, o_vari +- poikaset (lapset ovat sekvenssejä!) += v_vari, o_vari, siipi_pituus_m, kupu, sukupuoli, dna +- ilmoitus +- syy (sekvenssi!) += 0,.., n +-teksti +- navi (kuvattu muualla!) Pesä.ftl toimii näyttöjen Uusi pesä (Kuva s. 59), Uusi tarkastus (Kuva s. 65) ja Pesätiedot (Kuva s. 61) pohjana. Datamallin muuttuja kutsuja sisältää tiedon kutsuvasta servletistä. Tämän tiedon perusteella template laittaa oikeat tiedot sivuille if-lauseiden avulla. Datamallin solmun teksti alla on kaikki näytön staattiset tekstit. Suurin osa teksteistä ladataan jokaiselle kolmelle sivulle, mutta esim. sivun yläosan otsikko- ja linkkitiedot vaihtelevat sivujen välillä. Datamallin solmun arvo alla on kaikki tekstikenttiin tietokannasta ladattavat arvot. Muuttujat on luotava Servletissä, vaikka niissä ei olisi mitään tietoa (arvoksi annetaan siis tyhjä merkkijono esim. arvo.lahetetty.nayte_i= ). Näin toimittaessa templaten ei tarvitse huolehtia muuttujien olemassaolosta. Riittää kun muuttuja tulostetaan näytölle, oli sillä sitten oikeaa sisältöä tai ei. Näitä muuttujia tarvitaan näytöissä Uusi tarkastus ja Pesätiedot. Solmun valikko alla on kaikki alasvatovalikoihin ladattavat aputauluarvot. Nämä ladataan kaikille kolmelle näytölle listlauseiden avulla. Jokaisella valikkosekvenssin alkiolla on lisäksi muuttujat valittu, joka kertoo valittuna olevan vaihtoehdon näytöillä Uusi tarkastus ja Pesätiedot ja teksti, joka sisältää itse valikkoon ladattavan arvon. Solmun ilmoitus arvo kertoo, onko esim. lisäysoperaatiossa ollut virheitä. Jos on, virheet talletetaan sekvenssiin ilmoitus.syy, ja virheilmoitukset tulostetaan näytölle muuttujista ilmoitus.syy[n].teksti myrkyt.ftl (juuri) +-teksti +=otsikko, saaliit, myrkyt, historia, h1, kerayspaiva, analyysipaiva, keraaja, analysoija, analyysimenetelma, kommentti, tallenna

50 +-pesanimi +-muna +=pituus, leveys, kuori_ei_kalvoa, kuori_kalvoineen, paino, paino_tark, sisallon_laatu, sisallon_vari, sikion_koko +-pitoisuudet +=ddt, ddd, dde, pcb, hg +-arvo +=pesanimi, anal_menet, myrkky_kommentti +-kerayspaiva +=pp, kk, vvvv +-analyysipaiva +=pp, kk, vvvv +-keraaja +=etu, suku +-analysoija +=etu, suku +-muna +-1 +=pituus, leveys, paks_ei_k, paks_k, paino, paino_tark, sisalto, sis_vari, sikio +=2, 3, 4 (kuten 1!) +-pitoisuudet +=ddt, ddd, dde, pcb, hg +-ilmoitus +-syy +=0,..,n +-teksti +-navi 47 myrkyt.ftl on pesän myrkkytietojen ylläpitosivu (Kuva s. 71). Solmussa teksti kaikki näytön staattiset tekstit. Solmussa arvo on tietokannasta ladattavat tekstit ja tekstikenttien alkuarvot, mikäli pesälle on jo aikaisemmin tallennettu myrkkytietoja. Solmu ilmoitus kertoo, onko lisäysoperaatiossa tapahtunut virheitä. Mikäli on, ne tallennetaan sekvenssiin syy ja ilmoitukset virheistä tulostetaan näytölle sekvenssin muuttujista teksti. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille saalis_vanhat.ftl (juuri) +-teksti +=otsikko, saaliit, myrkyt, historia, h1, pesanimi, kaikki, uusi, keraystiedot +-saaliit_kp +=0,...,n +-ker_paiva +-keraaja +=etunimi, sukunimi +-maar_paiva +-maarittaja +=etunimi, sukunimi +-saalis +=0,...,n +-laji +-lukumaara +-arvo +-pesanimi +-kerayspaiva +=0,...,n +-navi saalis_vanhat.ftl pesän tallennettujen saalistietojen näyttösivu (Kuva s. 72). Solmussa teksti on kaikki näytön staattiset tekstit. Saaliit keräyspäivittäin muodostavat sekvenssin, jossa taas jokaisen tietyn keräyspäivän saaliit muodostavat oman sekvenssinsä. Solmussa arvo on tietokannasta ladattavat tekstit, joista keräyspäivät keräystiedoissa muodostavat sekvenssin.solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille.

51 saalis_yllapito.ftl 48 (juuri) +-teksti +=otsikko, saaliit, myrkyt, historia, h1, pesanimi, keraystiedot, kaikki, uusi, keraaja, kerayspaiva, maarittaja, maarityspaiva, laji, lukumaara, lisaa, muuta +-h3 +-saaliit +-arvo +-kerayspaivat +=0,...,n +-kerays +=pp, kk, vvvv +-maaritys +=pp, kk, vvvv +-kerays +=etunimi, sukunimi +-maaritys +=etunimi, sukunimi +-saalis +=0,...,n +=laji, lukumaara +-ilmoitus +-maaritys_ennen_keraysta +-navi saalis_yllapito.ftl on pesän saalistietojen ylläpitosivu yhtä keräyspäivää kohti (Kuva s. 72). Solmussa teksti on kaikki näytön staattiset teksti. Solmussa arvo tietokannasta ladattavat tekstit ja tekstikenttien alkuarvot, jos pesälle on jo aikaisemmin tallennettu saalistietoja, joista tiedot yksittäisistä saaliista muodostavat sekvenssin. Solmussa ilmoitus on virheilmoitus maaritys_ennen_keraysta, joka tulostetaan näytölle, mikäli määrityspäivä on keräyspäivää aikaisempi. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille historia.ftl (juuri) +-teksti +=otsikko, h1, saaliit, myrkyt, historia, h1, alkuvuosi, alku_tarkkuus, loppuvuosi, loppu_tarkkuus, tiedon_lahde, kommentti, tallenna +-pesanimi +-kirj_paiva +-muut_paiva +-arvo +=pesanimi, kirj_paiva, muut_paiva +=alkuvuosi, alku_tarkkuus, loppuvuosi, loppu_tarkkuus, tiedon_lahde, kommentti +-valikko (sekvenssejä!) +=alku_tark, loppu_tark +-ilmoitus +=loppu_ennen_alkua +-navi historia.ftl pesän historiallisten tietojen ylläpitosivu (Kuva s. 69). Solmussa teksti on kaikki näytön staattiset tekstit. Solmussa arvo ovat tietokannasta ladattavat tekstit ja tekstikenttien alkuarvot, jos pesälle on jo aikaisemmin tallennettu historiatietoja. Solmussa valikko on alku- ja loppuvuoden mahdolliset tarkkuusarvot, jotka ladataan tietokannan aputaulusta. Solmussa ilmoitus virheilmoitus loppu_ennen_alkua, joka tulostetaan näytölle, mikäli loppuvuosi on alkuvuotta aikaisempi. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille

52 reviirit.ftl 49 (juuri) +-teksti +=otsikko, h1, uusi_reviiri, nimi, kunta, vuosi, lisaa +-navi reviirit.ftl on reviirien lisäyssivu (Kuva s. 73). Solmussa teksti on kaikki näytön staattiset tekstit. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille kunnat.ftl (juuri) +-teksti +=otsikko, h1, tunnus, suuralue, ymparistokeskus, lisaa_kunta, uusi_kunta, yhdista_kunnat +-h3 +=uusi_kunta, kuntaliitokset +-valikko (sekvenssejä!) +=uusi_suuralue, uusi_ymp_keskus, suuralueet +-tulos +-liitos_tunnus +=liitos_suuralue, liitos_ymp_keskus, liitettavat_kunnat (sekvenssejä!) +-navi kunnat.ftl on kuntatietojen ylläpitosivu, jolla voidaan luoda uusia kuntia ja tehdä kuntaliitoksia (Kuva s. 70). Solmussa teksti on kaikki näytön staattiset tekstit. Solmussa valikko ovat suuralueiden ja ympäristökeskusten tietokannan aputaulusta ladattavat koodit ja lisäksi valintaruutuja vastaavat suuralueiden nimet, jotka on tallennettu selitteinä tietokannan aputauluun. Solmussa tulos on kuntaliitoksessa tarvittavat, suuralueiden valinnan jälkeiset osat. Näitä ovat staattiset tekstit, liitettävien kuntien kuntatunnukset ja suuralue ja ympäristökeskus alasvetovalikoihin tietokannan aputauluista ladattavat koodit. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille tarkastajat.ftl (juuri) +-teksti +=otsikko, h1, uusi_tark, etunimi, sukunimi, id, lisaa, nimen_muutos, muuta +-arvo +-muutos +=0,...,n += etunimi, sukunimi, tarkastaja_id +-navi tarkastajat.ftl on tarkastajatietojen ylläpitosivu, jolla voidaan lisätä tarkastajia ja muuttaa tarkastajien nimeä (Kuva s. 73). Solmussa teksti on kaikki näytön staattiset tekstit. Solmussa arvo tekstikenttien alkuarvot.solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille aputaulut.ftl (juuri) +-teksti +=otsikko, h1, taulu, attribuutti, koodi, selite, muuta, lisaa +-arvo +attribuutti +-0,...,n

53 +=koodi, selite +-valikko (sekvenssejä!) +=taulu, attribuutti +-navi 50 aputaulut.ftl on aputaulujen ylläpitosivu, jolla voidaan lisätä aputauluun koodeja ja muuttaa koodien selitteitä (Kuva s. 62). Solmussa teksti on kaikki näytön staattiset tekstit. Solmussa arvo ovat tietokannasta ladattavat tekstikenttien alkuarvot eli kyseiseen attribuuttiin liittyvät ennestään tallennetut koodit ja selitteet. Solmussa valikko ovat taulu- ja attribuutti-alasvetovalikoihin ladattavat taulujen ja attribuuttien nimet. Solmussa navi navigointipalkin template, joka tulostetaan sivun ylälaitaan ja jossa on linkit muille sivuille raportit.ftl (juuri) +-teksti +=otsikko, h1, aikavali, alueet, koko_maa, suuralue, ymparistokeskus, kunta, reviiri, pesa, tallenna_tiedostoon +-raporttityyppi +=0,...,n +-valikko += suur_alue, ymp_keskus +-ilmoitus +-loppu_ennen_alkua +-navi raportit.ftl on raporttien tallennussivu (Kuva s. 67). Solmussa teksti on kaikki näytön staattiset tekstit, joista raporttien nimet muodostavat sekvenssin (raportti[0], raportti[1],...). Solmussa valikko on tietokannan aputaulusta ladattavat suuralueiden ja ympäristökeskusten koodit. Solmussa ilmoitus virheilmoitus loppu_ennen_alkua, joka tulostetaan näytölle, mikäli loppuvuosi on alkuvuotta aikaisempi. Solmussa navi on navigointipalkin template joka tulostetaan sivun ylälaitaan ja jossa linkit on muille sivuille Kielituen properties-tiedostot Kielituki toteutetaan Javan properties-tiedostojen avulla. Nämä ovat tekstitiedostoja, jotka sisältävät avain-arvoparin. Kullekin kielelle luodaan oma propertiestiedosto. Avaimet ovat kaikissa properties-tiedostoissa samat, mutta arvona tiedostossa on kyseisen kielen mukainen teksti merkkijonona. Haliaeetus-järjestelmässä kielituki käyttää tiedostoja: haliresources_fi.properties haliresources_sv.properties haliresources_en.properties Tiedostot nimetään seuraavan syntaksin mukaisesti: haliresources_[iso-639 kielikoodi].properties. Avaimet ovat näissä kaikissa englanniksi. Huomaa, että avaimissa ja yhtäläisyysmerkin ympärillä ei saa olla välilyöntejä, arvoissa sitä vastoin välilyönnit ovat sallittuja. Properties-tiedostot sijaitsevat palvelinkoneella alkokrunni.cs.helsinki.fi. Java käyttää Unicode-merkistöä, jolloin kielituki voidaan toteuttaa tarvittaessa kaikilla maailman kielillä. Properties-tiedostojen avulla kielivalikoiman laajenta-

54 51 minen on helppoa; servletteihin tarvitsee tehdä vain vähäisiä lisäyksiä uuden kielen tukea varten. Alla on esimerkki kolmesta properties-tiedostosta suomeksi, ruotsiksi ja englanniksi. Tiedosto haliresources_fi.properties sisältää tuen suomen kielelle. Esimerkki tiedoston sisällöstä: language=kieli compute=laske whitetailedeagle=merikotka Tiedosto haliresources_sv.properties sisältää tuen ruotsin kielelle. Esimerkki tiedoston sisällöstä: language=språk compute=räkna whitetailedeagle=havsörn Tiedosto haliresources_en.properties sisältää tuen englannin kielelle. Esimerkki tiedoston sisällöstä: language=language compute=compute whitetailedeagle=white-tailed eagle Ylläpitäjän on huolehdittava kielitiedostoista. Jos uusi käännettävä sana tarvitaan, ylläpitäjän on lisättävä se samalla avaimella ja kielen mukaisella arvolla jokaiseen properties-kielitiedostoon. Haliaeetus-järjestelmässä avain on sama kuin template-tiedoston kenttä, johon teksti kohdistetaan Tarkista-luokan properties-tiedostot Tarkista-luokka suorittaa tarkastukset properties-tiedostojen avulla. Nämä ovat kielitukimallin kaltaisia tekstitiedostoja, jotka sisältävät avain-arvo - parin. Tarkista-luokan metodit, joita on yksi kutakin servlettiä kohden hakevat kukin omasta properties-tiedostosta tarkistettavat arvot metodiin. Tarkistettavia arvoja ovat syötteen raja-arvot ja se, voiko syötekenttä olla null. Eli properties-tiedostot sisältävät tarkistusraja-arvot, sekä tiedon kentistä, jotka eivät voi olla null. Tarkista-luokka käyttää seuraavia propertiestiedostoja: UusiTarkastus.properties Pesatiedot.properties UusiPesa.properties Kunnat.properties Myrkky.properties

55 Saaliit.properties Historia.properties Tarkastajat.properties 52 Properties-tiedostot sijaitsevat palvelinkoneella alkokrunni.cs.helsinki.fi Tyylitiedosto Tyylitiedosto halityyli.css sijoitetaan samaan hakemistoon, kuin templatetiedostot. Tiedosto toimii html-tyylitiedostona, joka kuvaa html-sivujen ulkoasua Staattiset html-tiedostot Järjestelmän aloitussivu index.shtml on ainoa staattinen html-sivu. Sivu on suojattu sivu. Käyttäjän on annettava oma käyttäjätunnus ja salasana jotta päästään Haliaeetus-järjestelmän kirjautumissivulle. Sivu siis kutsuu Hali-servlettiä, jos käyttäjällä oli oikeat tunnukset. Sivu sijaitsee palvelinkoneella alkokrunni.cs.helsinki.fi. 5 Käyttöliittymä Tässä luvussa kuvataan järjestelmän käyttöliittymä. Suunnittelun lähtökohtana ovat käyttötapaukset, jotka on tehty käyttäjähaastattelujen perusteella. Käyttötapaukset on kuvattu sanallisesti, ja niiden pohjalta on tehty näyttökuvien sarjat, joissa käyttäjä saavuttaa tavoitteensa. Käyttöliittymässä on 12 erilaista näyttöä: sisäänkirjautuminen, haku, uusi tarkastus, myrkyt, saaliit, historia, pesätiedot, uusi pesä, raportit, aputaulut, tarkastajat ja kunnat. Haku-sivu on sisäänkirjautumisen jälkeen ensimmäinen sivu. Navigointipalkista, joka on kaikkien sivujen yläreunassa, pääsee näyttöihin Uusi pesä, Raportit, Aputaulut, Tarkastajat ja Kunnat. Näistä kolme viimeistä ovat ylläpitonäyttöjä. Uusi pesä-näytöllä lisätään uusi pesä ja Raportit-näytöltä saadaan aikaan erilaisia raportteja. Haku-sivulla tehdyn haun perusteella pääsee jo olemassa olevalle pesälle tekemään uuden tarkastuksen (Uusi tarkastus) tai katsomaan/muuttamaan vanhoja tietoja (Pesätiedot). Näistä näytöistä pääsee myös näyttöihin Myrkyt, Saaliit ja Historia, jotka liittyvät aina tiettyyn pesään. Käyttöliittymä on kuvattu tarkemmin luvussa 5.2.

56 53 SISÄÄN- KIRJAUTUMINEN tuntematon käyttäjätunnus ja salasana virheilmoitus käyttäjätunnus ja salasana tunnetaan hakutuloksi ssa uusi tarkastus - linkki HAKU UUSI TARKASTUS hakutuloksissa pesä -linkki PESÄTIEDOT lisää -nappula UUSI PESÄ RAPORTIT tiedot lisätään lisää -napilla linkit pesätiedoista virheilmoitus virheilmoitus tallennus tiedostoon tallennus MYRKYT SAALIIT linkit toisiinsa HISTORIA REVIIRIT APUTAULUT tallennus TARKASTAJAT KUNNAT yhdistä lisää Tallennus sisältää lisäyksen ja muutoksen Kuva 4: Käyttöliittymän näyttöjen väliset suhteet 5.1 Käyttötapaukset Käyttötapaukset on tehty Heikki Lokin ja Torsten Stjernbergin haastattelujen perusteella. Kussakin käyttötapauksessa kuvataan käyttäjän tavoite ja tavoitteen saavuttamiseen vaikuttavat tilatiedot Käyttötapaus 1: Käyttäjän sisäänkirjautuminen Tavoite: Haliaeetus-järjestelmän käyttö Heidi Hannula, järjestelmän pääasiallinen käyttäjä, kirjautuu sisälle järjestelmään aamulla ja kirjautuu ulos työpäivän päättyessä. Tilatiedot Haliaeetus-järjestelmä on asennettu Heidin tietokoneelle Eläinmuseossa Helsingissä. Heidi on käynnistänyt koneensa www-selaimen ja löytänyt järjestelmän sisäänkirjautumissivulle.

57 5.1.2 Käyttötapaus 2: Uuden pesän lisääminen 54 Tavoite: Merikotkakannan seurantatiedon ylläpitäminen ja päivittäminen uusien pesätietojen avulla. Torsten Totti Stjernberg on löytänyt uuden merikotkapesän Ahvenanmaalta kesällä Totti on täyttänyt maastossa pesän perustietolomakkeen. Tiedot pitäisi arkistoida, jotta kannan seuraaminen nyt ja jatkossakin olisi mahdollista. Tilatiedot Pesäpaikka sijaitsee Ahvenanmaalla Brändön kunnassa Lappon kylässä Alskärin saarella lounaaseen Gunnarstenistä. Pesäpaikan tarkka paikanmäärittely on tehty GPS-laitteella yhtenäiskoordinaateilla. Maastotyyppi on pieni lehtipuuta kasvava kallioinen saari, jossa on pieni kosteikko; pesä sijaitsee kosteikon reunalla. Lähiympäristön puusto on lehtimetsää, jossa kasvaa koivua ja leppää. Metsän käsittelyaste on hakkaamaton. Lähin pesäpuuksi soveltuva puu on noin kymmenen metrin päässä. Pesäpuu on elävä tervaleppä, jonka korkeus on arviolta 10 m ja halkaisija on 35 cm lännestä itään ja 38 cm pohjoisesta etelään. Latvan halkaisija juuri pesän alta on tarkasti 17 cm. Pesä sijaitsee tukevasti puussa monihaaraisessa latvassa. Yläreuna on 8,5 m korkeudella. Etäisyys rantaan on 45 m. Halkaisija on 150 * 160 cm. Pesän korkeudeksi on mitattu 50 cm. Pesä näkyy huonosti kalliolle lännestä 10 m päässä (havaittavuus). Lähin asutus on Gunnarstenissä, tosin nyt vain kesäasutusta 1400 m päässä. Tarkastuskäynnillä havaittiin, että pesässä kaksi pesäpoikasta ja ei yhtään munaa. Pesän yläpuolella varoitteli kaksi aikuista. o Aikuisella koiraalla on oikeassa jalassa valkosininen rengas, jonka numeroita ei voitu lukea, ja Totti ei voinut päätellä, onko vasemmassa jalassa rengasta. Naaraalla on valkopunainen rengas oikeassa jalassa ja vasemmassa jalassa valkosininen. o Poikasista toinen on mahdollisesti koiras, jonka nilkka on 12,6 * 13,8 mm, siipi on 365 mm, painoa ei ole mitattu sekä nokan korkeus on 31,1 mm ja pituus on 31,4 mm. Totti rengasti sille oikeaan jalkaan punamustan renkaan numero E ja vasempaan jalkaan mustakeltaisen renkaan numero N 207. Poikasen kupu on puoliksi täynnä. o Poikasista toinen on varmuudella koiras, jonka nilkka on 12,5 * 13,5 mm, siipi on 330 mm, painoa ei ole mitattu sekä nokan korkeus on 30,0 mm ja pituus 39,8 mm. Totti rengasti sille oikeaan jalkaan punamustan renkaan numero E ja vasempaan jalkaan mustakeltaisen renkaan numero N 218. Poikasen kupu on tyhjä. Pesä oli asuttu vuonna Pesäpoikasten lukumäärä saatiin selville rengastettaessa. Paikalta löydettiin saaliita, joita ei voitu kerätä mukaan. Niitä olivat kolme naarashaahkan oikeaa siipeä, piisamin häntä, useita telkkiä ja noin yhden kilon puolikas hauki. Näytteinä on talletettu sulkia ja höyheniä, oksennuspalloja ja saalisnäytteitä sekä lisäksi poikasista nypittiin 5 selkähöyhentä DNA-näytteitä varten. Lisäksi Totti on kirjoittanut kohtaan pesän rakentamisvuosi, että pesä on ollut joitakin vuosia olemassa. Saalistähteiden perusteella voidaan päätellä, että vuonna 2001 pesässä on ollut vähintään yksi poikanen (mahdollisesti myös

58 55 jonakin aikaisempana vuonnakin); vuoden 2001 tulos kirjataan kohtaan pesimistulos aikaisempina vuosina muotoon <1 poikanen. Pesäpuuhun ei ole kiinnitetty rauhoitustaulua. Pesäpalstaa tai pesimäsaarta ei ole rauhoitettu. Tietojen keräämisessä on oleellista, että havaintojen tekijä voi kirjata myös vapaamuotoisia kommentteja Variaatio käyttötapauksesta 2 Variaatio: Pesä sijaitsee tuulenpesässä, monihaaraisen latvan sijasta. Tuulenpesää ei kuitenkaan löydy järjestelmän valmiista koodistosta ja Totti haluaa lisätä tuulenpesälle oman koodin. Käytössä on Haliaeetus-järjestelmä, johon on talletettu valmiita koodeja pesän sijainnille. Muut tiedot ovat samat kuin yllä esitetyssä käyttötapauksessa Käyttötapaus 3: Tiedossa olevan reviirin tarkastus Tavoite: Merikotkaparin seuranta ja dokumentaatio sekä uhkatekijöiden kartoitus. Torsten Totti Stjernberg on käynyt kesällä 1998 tarkastamassa aikaisemmin löydetyn reviirin Ahvenanmaalla. Totti on täyttänyt maastossa merikotkan reviirilomakkeen. Tiedot pitäisi arkistoida, jotta seuranta olisi jatkossakin mahdollista. Tilatiedot: Reviiri sijaitsee Ahvenanmaalla Kumlingen kunnassa Enklingen kylässä. Reviirin tarkempi nimi Enklinge Blacksund. Reviirin vanha numero on Reviirin tila vuonna 1998 on poikaspesä. Aktiivisen pesän nimi on Lanto ( ). Rengastettuja poikasia on kaksi kappaletta ja rengastamattomia ei ole. Aikuista koirasta ei näkynyt ja naaraalla oli vasen rengas ja oikeaa rengasta ei havaittu. Kerätyt saalisnäytteet olivat vanhoja jätteitä toisella vaihtopesällä (Blacksund NE)( ). Tarkistuspäivämäärä oli Ensimmäisellä poikasella on oikeassa jalassaan punamusta rengas, jonka numero on E , ja vasemmassa jalassaan valkomusta rengas, jonka numero on H-203. Sen sukupuoli on naaras, siiven pituus 255 mm, nilkka 13,8*16,0 mm, nokan korkeus 29,9 mm ja pituus 41,0 mm, painoa ei ole mitattu sekä kupu on luokaltaan 2. Toisella poikasella on oikeassa jalassaan punamusta rengas, jonka numero on E , ja vasemmassa jalassaan valkomusta rengas, jonka numero on H-204. Sen sukupuoli on koiras, siiven pituus 160 mm, nilkka 11,0*12,2 mm, nokan korkeus 24,8 mm ja pituus 34,4 mm, painoa ei ole mitattu sekä kupu on luokaltaan 2. Vaihtopesiä, joissa merikotka edelleen voisi pesiä, on kolme kappaletta. Ensimmäisen vaihtopesän nimi on Blacksund SE ( ), se on tarkastettu , tarkastus on tehty kiikaroimalla maasta ja pesän tila on koskema-

59 56 ton. Pesän lähellä ei ole merkkejä, ympäristö on muuttumaton ja pesä on puussa. Toisen vaihtopesän nimi on Blacksund NE ( ), se on tarkastettu , tarkastus on tehty kiikaroimalla maasta ja pesän tila on koskematon. Pesän lähellä on yksittäisiä merkkejä, ympäristö on muuttumaton ja pesä on puussa. Lisäksi ympäristöstä löytyi yksi valkoinen untuva ja vanhoja ulosteita. Kolmannen vaihtopesän nimi on Blacksund Mell ( ), se on tarkastettu , tarkastus on tehty kiikaroimalla maasta ja pesän tila on puoliksi pudonnut. Pesän lähellä on yksittäisiä merkkejä, ympäristö on muuttumaton ja pesä on puussa. Lisäksi ympäristöstä löytyi vanhoja ulosteita. Asuttu pesä on Lanto tekopesä ( ), joka sijaitsee männyssä, jonka ympärys on 148 cm / 1 m. Ensimmäinen vaihtopesä on Blacksund SE ( ), joka sijaitsee männyssä, jonka ympärys on 127 cm / 1 m. Toinen vaihtopesä on Blacksund NE ( ), joka sijaitsee männyssä, jonka ympärys on 100 cm / 1 m. Kolmas vaihtopesä on Blacksund Mell ( ), joka sijaitsee männyssä, jonka ympärys on 141 cm / 1 m. Lanto tekopesän ympäristön metsätyyppi on mustikkatyypin tuore kangasmetsä ja metsän käsittelyaste on hakkaamaton, harvahko mäntymetsikkö. Blacksund SE:n ( ) ympäristö on kanervatyypin kuiva kangasmetsä, metsän käsittelyaste on kallioinen mäntymetsä, etäisyys meren rantaan on 80 m ja etäisyys korpin pesään on 200 m. Blacksund NE:n ( ) ympäristö on puolukka- ja kanervatyypin kuiva kangasmetsä ja etäisyys meren rantaan on 100 m. Black Mell:n etäisyys meren rantaan on 200 m. Tietojen keräämisessä on oleellista, että havaintojen tekijä voi kirjata myös vapaamuotoisia kommentteja Käyttötapaus 4: Raportin toimittaminen Tavoite: Linnut vuosikirjan seuranta-artikkelin tuottaminen. Linnut -vuosikirjan toimittaja Ruokolainen on pyytänyt Torsten Totti Stjernbergiltä vuoden 2003 alussa seuranta-artikkelin merikotkista 1970-, jossa olisi mukana tiedot myös vuosilta suuralueittain. Edellinen katsaus päättyi vuoteen Tilatiedot: Ruokolainen halusi alun perin artikkelin 28.2 mennessä, mutta Totti on saanut lisäaikaa maaliskuun loppuun. Tarvittavia vuosittaisia tietoja ovat suuralueittain: asuttujen reviirien lukumäärä, rengastusikäisten poikasten lukumäärä, onnistuneiden pesintöjen osuus, poikasten lukumäärä yhtä onnistunutta pesintää kohden, poikasten lukumäärä yhtä asuttua reviiriä kohden sekä asuttujen reviirien lukumäärä ja pesinnän onnistuminen suojelluilla ja suojelemattomilla alueilla. Totilla on jo muut raportit, paitsi asuttujen reviirien lukumäärä. Suuralueita ovat Ahvenanmaa, Kymenlaakso, Itä-Uusimaa, Länsi-Uusimaa, Varsinais-Suomi, Satakunta, Merenkurkku, Perämeri, Koillismaa ja Lappi. Vastaavat tiedot tarvitaan 2-3 vuoden välein alkuvuodesta.

60 5.1.6 Käyttötapaus 5: Pesän hakeminen 57 Tavoite: Mahdollisten pesien hakeminen alueella, jossa halutaan muuttaa maankäyttöä Lounais-Suomen ympäristökeskuksen luonnonsuojeluyksikössä toimivalle virkamiehelle Esko Gustafssonille on tullut lausuntopyyntö rakennusosastolta selvittää mahdolliset merikotkan pesät, jotka sijaitsevat Turun saariston Högsåran saarella, johon Fortum on suunnitellut tuulivoimalan rakentamista. Tilatiedot: Suunniteltu rakennusalue on Högsåran saaren länsiosassa Dragsfjärdin kunnassa. Esko Gustafsson haluaa selvittää alueella mahdollisesti esiintyvien pesien sijaintia. Esko etsii pesiä ensisijaisesti reviirin nimen perusteella. Reviirillä ja saarella on tässä tapauksessa sama nimi. Kun Eskolle selviää, että merikotka pesii Högsåran saarella, hän haluaa tietää pesien tarkat koordinaatit. Esko haluaa myös tietää, millainen on pesien käytön aste ja pesien kunto viimeisen kymmenen vuoden aikana, kuka on tehnyt havainnot pesästä ja kuinka hyvin pesä on havaittavissa. Havainnontekijöiden yhteystiedot löytyvät rengastajien vuosikirjasta. Tämänkaltaiset kyselyt ovat Eskolle jokapäiväistä työtä. 5.2 Kuvasarjat Kuvasarjoissa kuvataan näyttö näytöltä, kun käyttäjä pyrkii tavoitteeseensa järjestelmän avulla. Dokumentin tässä versiossa osa kuvista on jo tehty htmlkielellä (vrt. piirroskuvat versiossa 1.1), eli ne toimivat jo melko realistisen näköisinä prototyyppeinä. On kuitenkin huomattava, että ne ovat prototyyppejä ja yksityiskohtien suhteen on jo tämän dokumentin kirjoittamisen vaiheessa tiedossa muutoksia (tällaiset kohdat on kuvattu tekstissä). Myös lopullinen ulkoasu ja näyttöjen asettelu ovat vielä viimeistelyä vaille. Tarkoituksena onkin kuvata mahdollisimman hyvin käyttöliittymän toimintalogiikka, eikä kaikkia yksityiskohtia Käyttäjän sisäänkirjautuminen Käyttäjä antaa käyttäjätunnuksen ja -salasanan sivulla Sisäänkirjautuminen ja painaa Sisään-nappia (Kuva 5).

61 58 Kuva 5: Sisäänkirjautuminen 1 Aloitussivuna on Haku-sivu. Käyttäjä kirjautuu ulos Kirjaudu ulos-linkistä (Kuva 6). Uloskirjautumisen jälkeen sivuksi tulee sivu Sisäänkirjautuminen, jossa Sisään-napin vieressä on kommentti Olet kirjautunut ulos järjestelmästä. Kuva 6: Haku-sivu Uuden pesän lisääminen Käyttäjä painaa navigointipalkin Uusi pesä-linkkiä. Sivulla on lomake, johon uuden pesän tiedot lisätään. Lopuksi painetaan sivun alareunassa olevaa Lisäänappia (Kuvat 7,8,9 ja 10). (Huom. Ainakin ylärivin tarkastuspäivämäärän tarkkuus-kenttä tulee siirtymään tarkastuspäivämäärän viereen. Lisäksi sijaintitietojen järjestystä ei ole lyöty lukkoon.)

62 59 L 7 A Kuva 7: Uuden pesän lisääminen 1

63 60 Kuva 8: Uuden pesän lisääminen 2 Kuva 9: Uuden pesän lisääminen 3

64 61 Kuva 10: Uuden pesän lisääminen 4 Lisää-painikkeen painamisen jälkeen tullaan Pesätiedot sivulle, jossa näkyy juuri lisätyn pesän tiedot (Kuva 11). Linkeistä Myrkyt, Saaliit ja Historia pääsee tallettamaan lisää tätä pesää koskevaa tietoa. Kyseiset näytöt esitellään myöhemmin tässä luvussa. Uusi tarkastus-linkistä pääsee tekemään tälle pesälle uuden tarkastuksen. UUSI TARKASTUS Kuva 11: Uuden pesän lisääminen 5

65 5.2.3 Aputaulun päivitys 62 Käyttötapaus 2:n variaatiossa, käyttäjä joutuu lisäämään aputauluun uuden koodin. Tämä johtuu siitä, että haluttua koodia ei järjestelmästä vielä löydy. Käyttäjä menee Aputaulujen ylläpito -sivulle navigointipalkin linkillä Aputaulut. Sivulla käyttäjä valitsee haluamansa taulun alasvetovalikosta (Kuva 12, 1.).Tämä aiheuttaa sen, että Attribuutti-alasvetovalikkoon ilmestyy kaikki kyseisen taulun aputaulua käyttävät attribuutit. Kun oikea attribuutti valitaan (Kuva 12, 2.), alapuolelle ilmestyy lista kyseisen attribuutin selitteistä. Tyhjälle riville lisätään uusi koodi ja selite (Kuva 12, 3.), sekä painetaan Lisää-nappia (Kuva 12, 4.) Lisää Kuva 12: Aputaulun päivitys 1 Lisää-napin painamisen jälkeen uusi koodi ja selite ilmestyy listaan. Selitteitä voi korjata tekemällä korjaukset suoraan selite-kenttään ja painamalla kyseisen rivin Muuta-nappia. Tällöin järjestelmä antaa varoituksen siitä, että käyttäjä varmasti tietää mitä on tekemässä. Mahdolliselle uudelle koodille on myös ilmestynyt tyhjä rivi.

66 63 Kuva 13: Aputaulun päivitys Vanhan pesän tarkastus Käyttäjä hakee Haku-sivulla haluamansa pesät täyttämällä sopivat hakuehdot (tässä tapauksessa suuralue, reviirin nimi ja kunta), ja painamalla Hae Pesätnappia (Kuva 14). Kuva 14: Vanhan pesän tarkastus 1 Hakutulokset ilmestyvät listaksi näytön alareunaan. Pesän nimi-linkillä pääsee katselemaan/muuttamaan kyseisen pesän tietoja. Uusi Tarkastus-linkillä pääsee tekemään uuden tarkastuksen kyseiselle pesälle (Kuva 15).

67 64 Kuva 15: Vanhan pesän tarkastus 2 Lomake on pääosin esitäytetty edellisen vuoden tietojen perusteella. Tarkastupäivä on kuitenkin syötettävä. Ja jos muutoksia on tullut, voi vanhoja tietoja muuttaa. Reviirin muihin pesiin ja pesän vanhempiin tarkastuksiin pääsee yläosassa olevilla linkeillä. Reviirin nimi-linkillä pääsee muuttamaan ja katsomaan tietoja ja Uusi Tarkastus-linkillä lisäämään kyseisele vaihtopesälle uuden tarkastuksen.(kuva 16).

68 65 UUSI TARKASTUS UUSI TARKASTUS UUSI TARKASTUS Kuva 16: Vanhan pesän tarkastus 3 Tarkastustietoja (Näytöllä otsikot Tarkastus, Aikuiset linnut ja Poikaset) ei ole esitäytetty, eli lomakkeen alaosa on tyhjennetty edellisen vuoden tiedoista. Käyttäjä täyttää nämä tiedot ja painaa Lisää-nappia (Kuva 17). Seuraus tästä on sama kuin Uuden pesän lisäämisessä. Muut reviirin pesät lisätään samalla tavalla menemällä ensin sivun yläosan linkeistä kyseisen vaihtopesän tietoihin.

69 66 Kuva 17: Vanhan pesän tarkastus Raportin toimittaminen Käyttäjä pääsee navigointipalkin Raportit-linkin avulla Raportit-sivulle. Kyseisellä sivulla valitaan haluttu aikaväli ja alue (tässä tapauksessa koko maa) ja haluttu raportti ja painetaan Tallenna tiedostoon-nappia jonka seurauksena ilmestyy tiedostontallennus-ikkuna, jossa raportin voi nimetä ja tallentaa haluamaansa tiedostoon (Kuva 18). Sivun suunnittelu on jäädytetty, ja se jäänee toteuttamatta.

70 67 Kuva 18: Raportin toimittaminen Pesän hakeminen Käyttäjä syöttää Haku-sivulla haluamansa hakuehdot, ja painaa Hae pesät nappia (Kuva 19). Tekstikenttien hakuehtojen ei tarvitse olla täydellisiä, vaan käyttäjä voi syöttää esim. pari ensimmäistä kirjainta reviirin nimestä ja jokerimerkin. Kuva 19: Pesän hakeminen 1

71 68 Hakutulokset ilmestyvät listaksi (tässä tapauksessa yksi pesä), ja Pesän nimilinkillä (Högsåra) päästään katsomaan kyseisen pesän tietoja (Kuva 20). Kuva 20: Pesän hakeminen 2 Käyttäjä voi tarkastella Pesätiedot-sivulla pesän tietoja. Tämän jälkeen käyttäjä painaa Raportit-linkkiä. UUSI TARKASTUS Kuva 21: Pesän hakeminen 3 Raportit-sivulla käyttäjä tekee haluamiensa tietojen perusteella raportin samalla tavalla kuin edellisessä käyttötapauksessa (Raportin toimittaminen) (Kuva 22).

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria:

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria: TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 0.1 19.2.2003 Ensimmäinen luonnos Topi Laamanen 0.2 7.3.2003 Lisätty käyttötapaukset Topi Laamanen

Lisätiedot

Suunnitteludokumentti

Suunnitteludokumentti Suunnitteludokumentti Kotkat-ryhmä Helsinki 22.3.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Manta Jääskeläinen

Lisätiedot

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria: Helsinki,

TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti. Versiohistoria: Helsinki, TIETOKANTA MERIKOTKIEN SEURANTAAN Suunnitteludokumentti Versiohistoria: Versio 0.1 0.2 0.3 1.0 1.1 1.2 Päivämäärä 5.3.2004 8.3.2004 14.3.2004 17.3.2004 19.3.2004 28.3.2004 Kuvaus Ensimmäinen luonnos Toinen

Lisätiedot

Suunnitteludokumentti

Suunnitteludokumentti Suunnitteludokumentti Kotkatryhmä Helsinki 18.5.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Katja Astikainen

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään Graafinen käyttöliittymä lintujen rengastusjärjestelmään Toteutusdokumentti Versiohistoria: 0.1 23.11.2000 Ensimmäinen luonnos. 0.2 27.11.2000 Toinen luonnos. 0.3 4.12.2000 Kolmas luonnos. 0.9 7.12.2000

Lisätiedot

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria:

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria: 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ä

Lisätiedot

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

Toteutusdokumentti. Kotkat-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Toteutusdokumentti Kotkat-ryhmä Helsinki 18.5.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Katja Astikainen

Lisätiedot

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

Ylläpitodokumentti. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ylläpitodokumentti KotKot Helsinki 14.12.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (9 + 1 op) Projektiryhmä Tuomas Puikkonen

Lisätiedot

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

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) HAAGA-HELIA ICT1TA006: Ohjelmointi 1 /5 Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) (Lähteet: Oracle java jdbc Tutorial, Arvo Lipitsäinen: Tietokannan käsittely JDBC:n

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään 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

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

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

Käyttöohje. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Käyttöohje KotKot Helsinki 14.12.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (9 + 1 op) Projektiryhmä Tuomas Puikkonen Matti

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria:

TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti. Versiohistoria: TIETOKANTA MERIKOTKIEN SEURANTAAN Toteutusdokumentti Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 0.1 23.05.04 Ensimmäinen luonnos Timo 0.2 25.05.04 Toinen luonnos Timo 1.0 30.05.04 Ensimmäinen versio

Lisätiedot

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

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin. TIETOKANTA MERIKOTKIEN SEURANTAAN Käyttöohje Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 1.0 11.12.2007 Ensimmäinen luonnos Janne Piippo 2.0 13.12.2007 Virallinen verio Janne Piippo HELSINGIN YLIOPISTO

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään 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

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään 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

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

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

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Action Request System

Action Request System Action Request System Manu Karjalainen Ohjelmistotuotantovälineet seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 25.10.2000 Action Request System (ARS) Manu Karjalainen Ohjelmistotuotantovälineet

Lisätiedot

TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma

TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 0.1 27.1.2003 Ensimmäinen luonnos J. Kleemola 0.2 30.1.2004 Toinen luonnos J. Kleemola 0.3 2.2.2004

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Lohtu-projekti. Testaussuunnitelma

Lohtu-projekti. Testaussuunnitelma Lohtu-projekti Testaussuunnitelma Versiohistoria: 1.0 19.2.2003 1. versio Mari 1.1 20.2.2003 Muutoksia Mari 1.2 25.2.2003 Katselmoinnissa esiin tulleet Mari muutokset 1.3 17.3.2003 2. syklissä tehtävät

Lisätiedot

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

Fingridin säätösähkötarjousohje. Vaksin käyttöohjeet 20.5.2015 Fingridin säätösähkötarjousohje Vaksin käyttöohjeet 20.5.2015 Yleistä Tämän ohjeen mukaisesti osapuoli voi jättää säätötarjouksia Fingridin ylläpitämille säätösähkömarkkinoille Osapuolella tulee olla säätösähkömarkkinoille

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

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

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa WWW ja tietokannat WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa tekstiä, kuvia, hyperlinkkejä Staattiset sivut kirjoitettu kerran, muuttaminen käsin ongelmana pysyminen ajantasalla Ylläpito hankalaa,

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään 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

Lisätiedot

EXEC SQL BEGIN DECLARE SECTION

EXEC SQL BEGIN DECLARE SECTION Tietokantaohjelmointi Tietokantaa käytetään harvoin suoraan kyselyliittymän kautta Tyypillisesti käyttö tapahtuu sovellusohjelman kautta Sovellusohjelmaa laadittaessa vaihtoehtoja tietokantakäsitettelyn

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

Käyttöohje. Tiput-ryhmä Ohjelmistotuotantoprojekti

Käyttöohje. Tiput-ryhmä Ohjelmistotuotantoprojekti Käyttöohje Tiput-ryhmä 21.12.2006 581260 Ohjelmistotuotantoprojekti Grönholm Peter Hautamäki Marja Koski Marja-Ilona Lavi Rakel Piela Riitta, projektipäällikkö Helsingin yliopisto Tietojenkäsittelytieteen

Lisätiedot

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

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita. Arkkitehtuurikuvaus Käytössä olevat java-luokat: Kansio: /WEB_INF/classes/ - käännetyt luokat Kansio: /WEB_INF/src/ - lähdekoodi custom_pojos: Kurssi.java Java-luokka, jonka sisältö vastaa tietokannassa

Lisätiedot

Java ja tietokannan käsittely (JDBC)

Java ja tietokannan käsittely (JDBC) Java ja tietokannan käsittely (JDBC) Javan tietokannan käsittely luokat (java.sql.*) Yhteys tietokantaan Tietokannan yhteyden sulkeminen Tiedon haku tietokannasta Tiedon päivitys tietokantaan Transaktio

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot) SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos 1 Insert lauseella on kaksi muotoa: insert

Lisätiedot

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 11 TU00AA48-2002 TU10S1E Hannu Markkanen 22.11.2011 9/10/12 Helsinki Metropolia University of Applied Sciences 1 Indeksit Indeksit Taulun

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti NJC2 Helsinki 29.4.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Eero Anttila Olli Jokinen

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

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

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen: Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Microsoft SQL käyttö Yleistä VisualStudiosta Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen: - sovellushallintaan -

Lisätiedot

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa SQL:n käyttö ohjelmissa Tietokannan käyttö ohjelmasta Miksi vuorovaikutteinen käyttö ei riitä? kielen hallinta: maallikot? yhdistetään yleiskielen ja tietokantakielen edut, mm.» monimutkaisempi laskenta»

Lisätiedot

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not

Lisätiedot

Vaatimusmäärittely. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Vaatimusmäärittely. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Vaatimusmäärittely KotKot Helsinki 16.10.2008 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (9 + 1 op) Projektiryhmä Tuomas Puikkonen

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään. Vaatimusdokumentti Graafinen käyttöliittymä lintujen rengastusjärjestelmään Vaatimusdokumentti Versiohistoria: 0.1 28.1.2002 Ensimmäinen luonnos. Tarja Rauste ja Simo Salmensuu Helsinki, 28. tammikuuta 2002 Mari Jaakkola,

Lisätiedot

Raporttiarkiston (RATKI) käyttöohjeet Ohjeet

Raporttiarkiston (RATKI) käyttöohjeet Ohjeet Raporttiarkiston (RATKI) käyttöohjeet Ohjeet 15.11.2012 1.0 Vastuutaho TRAFI Sisällys Raporttiarkiston (RATKI) käyttöohjeet 1 1. Johdanto 3 1.1. Esitiedot 3 1.2. Käyttöoikeudet 3 1.3. Sisäänkirjautuminen

Lisätiedot

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina Kirjasto Kevät 2001 Auvinen Annemari Niemi Anu Harjoitustyö 7.4.2001 Sisällysluettelo 1. Yleiskuvaus... 3 2. Vaatimukset... 3 2.1. Toiminnalliset... 3 2.1.1. Sisäänkirjautuminen... 3 2.1.2. Nimikkeiden

Lisätiedot

Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä

Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä 7.5.2002 Annemari Auvinen Anu Niemi Sisällysluettelo 1 Perustana olevat käyttötapaukset... 1 1.1 Käyttäjäryhmät... 1 1.2 Järjestelmään sisäänkirjautuminen...

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti NJC2 Helsinki 26.4.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Eero Anttila Olli Jokinen

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702)

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri (TK081702) yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään Graafinen käyttöliittymä lintujen rengastusjärjestelmään Suunnitteludokumentti Versiohistoria: 0.1 21.02.2002 Ensimmäinen luonnos. Tarja Rauste, Simo Salmensuu 0.2 22.02.2002 Toinen luonnos. Näyttöjä lisätty.

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.

Lisätiedot

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

Graafinen käyttöliittymä lintujen rengastusjärjestelmään Graafinen käyttöliittymä lintujen rengastusjärjestelmään Testausdokumentti Versiohistoria: 0.1 26.03.2002 Ensimmäinen luonnos. Mari Jaakkola, Vesa Teikari Helsinki, 26. maaliskuuta 2002 Markus Päivinen

Lisätiedot

Tietokanta (database)

Tietokanta (database) Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja 1 Tiedosto Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään

Lisätiedot

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari

Lisätiedot

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

Projektisuunnitelma. Kotkat-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Projektisuunnitelma. Kotkat-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Projektisuunnitelma Kotkat-ryhmä Helsinki 5.2.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Manta Jääskeläinen

Lisätiedot

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Ylläpitodokumentti Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Helsinki 16.7.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti

Lisätiedot

OPI-Maksut - Käyttötapaukset

OPI-Maksut - Käyttötapaukset OPIMaksut Käyttötapaukset Toiminnallisuudet ja käyttötapaukset: maksupalvelutoiminnot Toimeksiannon lisääminen Palveluväylä toiminto: Toimeksiannon lisääminen Yleiskuvaus Palveluväylään sallitut asiointisovellukset

Lisätiedot

SQL - STRUCTURED QUERY LANGUAGE

SQL - STRUCTURED QUERY LANGUAGE SQL Peruskomentoja SQL - STRUCTURED QUERY LANGUAGE SQL on tietokantojen käsittelyyn kehitetty kieli Esimerkkejä kielellä hoidettavistaa toiminnoista: Tietokannan rakenteen määrittely ja muuttaminen Kyselyt

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Microsoft Visual Studio 2005

Microsoft Visual Studio 2005 Sovelluksen jako palvelimiksi: Palvelin on sille annettuun vastuulliseen tehtävään erikoistunut sovellusosa. Käyttöliittymäpalvelin (Web-palvelin) vastaa käyttöliittymän toteuttamisesta. Web-palvelin toteuttaa

Lisätiedot

TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma

TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma TIETOKANTA MERIKOTKIEN SEURANTAAN Projektisuunnitelma Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 1.1 12.9.2007 Ensimmäinen luonnos Janne Piippo 1.2 23.9.2007 Ensimmäinen virallinen versio Janne Piippo

Lisätiedot

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

Lohtu-projekti. Testiraportti. Versiohistoria: syklin toteutuksen testit. 1. ajo Virve Lohtu-projekti Testiraportti Versiohistoria: 1.0 6.5.2003 2. syklin toteutuksen testit. 1. ajo Virve Helsinki 6. toukokuuta 2003 Kimmo Airamaa, Andreas Asuja, Mari Muuronen, Seppo Pastila, Virve Taivaljärvi

Lisätiedot

Harjoitus 5 (viikko 48)

Harjoitus 5 (viikko 48) Moni tämän harjoituksen tehtävistä liittyy joko suoraan tai epäsuorasti kurssin toiseen harjoitustyöhön. Harjoitustyö edistyy sitä paremmin, mitä enemmän tehtäviä ratkaiset. Mikäli tehtävissä on jotain

Lisätiedot

HELIA 1 (11) Outi Virkki Tiedonhallinta 4.11.2000

HELIA 1 (11) Outi Virkki Tiedonhallinta 4.11.2000 HELIA 1 (11) Access 1 ACCESS...2 Yleistä...2 Access-tietokanta...3 Perusobjektit...3 Taulu...5 Kysely...7 Lomake...9 Raportti...10 Makro...11 Moduli...11 HELIA 2 (11) ACCESS Yleistä Relaatiotietokantatyyppinen

Lisätiedot

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0 Toukokuu 2014 1 (11) Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0 Päivitysohje Toukokuu 2014 2 (11) Sisällysluettelo 1. Tehtävät ennen versiopäivitystä... 3 1.1. Ohjelmistomuutosten luku...

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

Testaussuunnitelma NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testaussuunnitelma NJC2 Helsinki 31.3.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti ( ov) Projektiryhmä Eero Anttila Olli

Lisätiedot

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 HOJ Haja-aiheita Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri Ylläpitodokumentti Oppimistavoitteiden hallintajärjestelmä harri Helsinki 14.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti

Lisätiedot

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja Lohtu-projekti Ylläpitäjän dokumentti Versiohistoria: 1.0 12.5.2003 Ensimmäinen versio Andreas Asuja Helsinki 12. toukokuuta 2003 Kimmo Airamaa, Andreas Asuja, Mari Muuronen, Seppo Pastila, Virve Taivaljärvi

Lisätiedot

RDBMS - Yhteyskäytännöt

RDBMS - Yhteyskäytännöt HAAGA-HELIA Heti-09 1 (11) RDBMS - Yhteyskäytännöt Johdanto... 2 Upotettu SQL... 3 ESQL esimerkki... 4 ODBC... 5 Visual Basic ja ADO... 6 JAVA ja JDBC... 7 JDBC esimerkki... 8 Oracle ja JDBC... 9 Connection

Lisätiedot

SQL Buddy JAMK Labranet Wiki

SQL Buddy JAMK Labranet Wiki Page 1 of 9 SQL Buddy JAMK Labranet Wiki Sisällysluettelo Yleistä SQL Buddy:sta kotisivu :http://sqlbuddy.com/ SQL Buddy on kevyt hallintatyökalu MySQL-tietokannalle. Järjestelmävaatimukset Serverin vaatimukset

Lisätiedot

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3 Uutisjärjestelmä Vaatimusmäärittely Versio 1.3 Sisällys 1 Muutoshistoria... 4 2 Viitteet... 4 3 Sanasto... 4 3.1 Lyhenteet... 4 3.2 Määritelmät... 4 4 Johdanto...5 4.1 Järjestelmän yleiskuvaus... 5 4.2

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta. Tehtävä 63. Kirjoita oma versio funktiosta strcmp(),joka saa parametrinaan kaksi merkkiosoitinta. Tee ohjelma, jossa luetaan kaksi merkkijonoa, joita sitten verrataan ko. funktiolla. Tehtävä 64. Kirjoita

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

Mainosankkuri.fi-palvelun käyttöohjeita

Mainosankkuri.fi-palvelun käyttöohjeita Mainosankkuri.fi-palvelun käyttöohjeita Sisällys 1. Johdanto... 1 2. Sisäänkirjautuminen... 1 3. Palvelussa navigointi... 2 4. Laitteet... 2 5. Sisällönhallinta... 4 6. Soittolistat... 7 7. Aikataulut...

Lisätiedot