OS3 Toteutusdokumentti

Samankaltaiset tiedostot
Ohjelmoinnin jatkokurssi, kurssikoe

Olio-ohjelmointi Javalla

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

Javan perusteita. Janne Käki

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

Myös opettajaksi aikova voi suorittaa LuK-tutkinnon, mutta sillä ei saa opettajan kelpoisuutta.

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

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

1. Omat operaatiot 1.1

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

Metodien tekeminen Javalla

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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

7. Näytölle tulostaminen 7.1

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

Luokan sisällä on lista

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

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

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

16. Javan omat luokat 16.1

Java-kielen perusteet

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Rajapinta (interface)

20. Javan omat luokat 20.1

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietokannat II -kurssin harjoitustyö

Taulukot. Jukka Harju, Jukka Juslin

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

Luokat ja oliot. Ville Sundberg

9. Periytyminen Javassa 9.1

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

1 Tehtävän kuvaus ja analysointi

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Opintojensuunnittelujärjestelmä Vaatimusanalyysi

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmoinnin perusteet, kurssikoe

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

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

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

17. Javan omat luokat 17.1

Ohjelmointi 2, välikoe

15. Ohjelmoinnin tekniikkaa 15.1

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

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

Hakemistojen sisällöt säilötään linkitetyille listalle.

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

14. Poikkeukset 14.1

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Poikkeustenkäsittely

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Harjoitustyö: virtuaalikone

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

ITKP102 Ohjelmointi 1 (6 op)

Mikä yhteyssuhde on?

18. Abstraktit tietotyypit 18.1

Tietokannat II -kurssin harjoitustyö

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

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

OS3 Vaatimusanalyysi

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

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

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

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

AIKAISEMPIEN OPINTOJEN TUNNUSTAMINEN YLEISET HAKUOHJEET

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmoinnin perusteet Y Python

Java kahdessa tunnissa. Jyry Suvilehto

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

17. Javan omat luokat 17.1

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

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

HYVÄKSILUKEMISEN TEKEMINEN ILMAN ENNAKKOPÄÄTÖSTÄ

Opintokohteiden muokkaus

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

HumakPro-uudistuksia ja -parannuksia / kevät 2013:

ehops Henkilökohtainen opintosuunnitelma

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

9. Periytyminen Javassa 9.1

Ohjelmoinnin perusteet Y Python

14. Poikkeukset 14.1

Listarakenne (ArrayList-luokka)

Algoritmit 2. Luento 2 Ke Timo Männikkö

ITKP102 Ohjelmointi 1 (6 op)

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Kuva: Ilpo Okkonen

Transkriptio:

OS3 Toteutusdokumentti Teemu Ajalin Lauri Jokipii Anu Määttä Juho Peltonen Nuutti Rintala Mikko Suonio Helsinki 28. toukokuuta 2003 Ohjelmistotuotantoprojekti Toteutusdokumentti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Dokumentin versiohistoria 0.1 02.05.2002 Dokumenttipohjan ensimmainen versio, kopio suunnitteludokumentista. 0.2 10.05.2002 poistettu opintokokonaisuuslomakkeen dynaaminen osa. 0.3 12.05.2002 Lisätty opintojen tilan visualisoinnin javadocit. 0.4 14.05.2002 lisätty liitteisiin create-table-lauseet. 0.5 22.05.2002 Javadocien liittämiseen rakenteellinen muutos (->rakenne_visu.tex). Muita pieniä muutoksia. 0.6 23.05.2002 Kuvatiedostojen valinnat ja sijoittelut. toteutusdokumentti.tex:iin lähteet. 1.0 28.05.2003 Koostettu, yhtenäistetty ja oikoluettu versio

Sisältö 1 Johdanto (Teemu) 1 2 Opintojen tila (Lauri) 1 2.1 Yleiskuvaus (Lauri)................................. 2 2.2 Muutokset suunnitteludokumenttiin....................... 6 2.2.1 OpintojenTilanVisualisointi-servlet (Lauri)............... 6 2.2.2 Piirto-luokka (Anu)............................. 8 2.2.3 VerkkoPlus-luokka (Teemu)........................ 13 2.2.4 Verkko-luokka (Lauri)........................... 18 2.2.5 Solmu-luokka (Lauri)........................... 21 2.2.6 Kaari-luokka (Lauri)............................ 24 2.3 Luokka OpintojenTilanVisualisointi....................... 25 2.3.1 Esittely.................................... 26 2.3.2 Kenttien yhteenveto............................ 26 2.3.3 Metodien yhteenveto............................ 28 2.3.4 Kentät.................................... 29 2.3.5 Metodit................................... 33 2.4 Luokka Piirto..................................... 43 2.4.1 Esittely.................................... 45 2.4.2 Kenttien yhteenveto............................ 45 2.4.3 Konstruktorien yhteenveto........................ 47 2.4.4 Metodien yhteenveto............................ 47 2.4.5 Kentät.................................... 48 2.4.6 Konstruktorit................................ 54 2.4.7 Metodit................................... 55 2.5 Luokka VerkkoPlus................................. 63 2.5.1 Esittely.................................... 63 2.5.2 Kenttien yhteenveto............................ 63 2.5.3 Konstruktorien yhteenveto........................ 63 2.5.4 Metodien yhteenveto............................ 64 2.5.5 Kentät.................................... 64 2.5.6 Konstruktorit................................ 66 2.5.7 Metodit................................... 67 2.5.8 Luokalta os3.visualisointi.verkko perityt jäsenet in 2.6, page 73..................................... 72 2.6 Luokka Verkko.................................... 73 2.6.1 Esittely.................................... 73 2.6.2 Kenttien yhteenveto............................ 73 2.6.3 Konstruktorien yhteenveto........................ 73 2.6.4 Metodien yhteenveto............................ 74 2.6.5 Kentät.................................... 75 2.6.6 Konstruktorit................................ 75 2.6.7 Metodit................................... 76 2.7 Luokka Solmu.................................... 81 2.7.1 Esittely.................................... 81

2.7.2 Kenttien yhteenveto............................ 81 2.7.3 Konstruktorien yhteenveto........................ 82 2.7.4 Metodien yhteenveto............................ 82 2.7.5 Kentät.................................... 83 2.7.6 Konstruktorit................................ 84 2.7.7 Metodit................................... 84 2.8 Luokka Kaari..................................... 91 2.8.1 Esittely.................................... 91 2.8.2 Kenttien yhteenveto............................ 91 2.8.3 Konstruktorien yhteenveto........................ 91 2.8.4 Metodien yhteenveto............................ 91 2.8.5 Kentät.................................... 91 2.8.6 Konstruktorit................................ 92 2.8.7 Metodit................................... 93 2.9 Havaitut puutteet ja ongelmat........................... 93 2.9.1 OpintojenTilanVisualisointi-servlet (Lauri)............... 93 2.9.2 Piirto-luokka (Anu)............................. 94 2.9.3 Verkko-luokka (Lauri)........................... 94 3 Opintokokonaisuuslomake (Juho, Mikko, Nuutti) 95 3.1 Yleiskuvaus (Juho)................................. 95 3.2 Muutokset suunnitteludokumenttiin (Mikko).................. 97 3.2.1 Muutokset tietokantaan.......................... 97 3.2.2 Muutokset ohjelman rakenteeseen.................... 98 3.3 Luokka KurssiPidike................................ 99 3.3.1 Esittely.................................... 99 3.3.2 Kenttien yhteenveto............................ 100 3.3.3 Konstruktorien yhteenveto........................ 100 3.3.4 Metodien yhteenveto............................ 100 3.3.5 Kentät.................................... 100 3.3.6 Konstruktorit................................ 100 3.3.7 Metodit................................... 101 3.4 Luokka Lomake................................... 101 3.4.1 Esittely.................................... 102 3.4.2 Kenttien yhteenveto............................ 102 3.4.3 Konstruktorien yhteenveto........................ 103 3.4.4 Metodien yhteenveto............................ 103 3.4.5 Kentät.................................... 104 3.4.6 Konstruktorit................................ 106 3.4.7 Metodit................................... 107 3.5 Luokka LomakeTietokantaOperaatiot...................... 112 3.5.1 Esittely.................................... 112 3.5.2 Kenttien yhteenveto............................ 112 3.5.3 Konstruktorien yhteenveto........................ 113 3.5.4 Metodien yhteenveto............................ 113 3.5.5 Kentät.................................... 114 3.5.6 Konstruktorit................................ 114

3.5.7 Metodit................................... 115 3.6 Luokka Paallekkaisyys............................... 122 3.6.1 Esittely.................................... 122 3.6.2 Kenttien yhteenveto............................ 122 3.6.3 Konstruktorien yhteenveto........................ 122 3.6.4 Kentät.................................... 123 3.6.5 Konstruktorit................................ 123 3.7 Luokka OpintokokonaisuusLomakeServlet................... 123 3.7.1 Esittely.................................... 124 3.7.2 Kenttien yhteenveto............................ 124 3.7.3 Metodien yhteenveto............................ 124 3.7.4 Kentät.................................... 124 3.7.5 Metodit................................... 125 3.7.6 Jäsenet, jotka on peritty luokalta opintosu.tietokanta.opintosu 126 3.7.7 Jäsenet, jotka on peritty luokalta javax.servlet.http.httpservlet 127 3.7.8 Jäsenet, jotka on peritty luokalta javax.servlet.genericservlet 128 3.8 Muutokset Oodi-otteen sisäänlukuun (Nuutti)................. 128 3.9 Tietokanta...................................... 129 3.10 Havaitut puutteet, ongelmat ja kehitysideoita.................. 131 4 Käsitteistö (kaikki) 133 5 Yhteenveto (Teemu) 134 Lähteet 136 Liitteet A Liite 1. Tietokannan luontiskriptit 137 1 Tietokannan luontiskriptit

1 Johdanto (Teemu) 1 OS3-projekti toteutti Helsingin yliopiston tietojenkäsittelytieteen laitoksen kevään 2003 ohjelmistotuotantoprojekti -kurssina laajennukset Desmond-järjestelmään. Projektin asiakkaita olivat Anni Rytkönen ja Vilho Raatikka. Ohjaajana toimi Jaakko Nurro. Desmond-järjestelmä on kevään 2002 Opintosu- ja syksyn 2002 OS2- ohjelmistotuotantoprojektien tuotteista Juhani Haaviston tammikuussa 2003 integroima järjestelmä, jonka avulla opiskelija voi suunnitella opintojaan. Lisätietoja projekteista on niiden suunnitteludokumenteissa [Haa02, Aho02] ja integroinnista sen toteutusdokumentissa [Haa03]. OS3-projekti toteutti järjestelmään opintojen tilan visualisointiin ja opintokokonaisuuslomakkeen suunnitteluun tarkoitetut toiminnallisuudet. Ne on määritelty tarkemmin projektin vaatimusanalyysissä [Aj103]. Toteutuksen suunnittelu dokumentoitiin suunnitteludokumenttiin [Aj203]. Teemu Ajalin, Lauri Jokipii ja Anu Määttä ovat toteuttaneet opintojen tilan visualisointiin liittyvät toiminnallisuudet. Juho Peltonen, Nuutti Rintala ja Mikko Suonio ovat toteuttaneet opintokokonaisuuslomakkeen toiminnallisuudet. Projektin alkuvaiheessa järjestelmään tehdyistä korjauksista on laadittu oma dokumentti [Pel03]. Tähän dokumenttiin on koottu toteutuksen muutokset verrattuna suunnitteludokumenttiin. Dokumenttien sisältöjä voi siis pahimmassa tapauksessa joutua vertailemaan; kuitenkin, jollei toteutusdokumentista löydy mainintaa muutoksesta suunnitteluun, on se toteutettu suunnitteludokumentin mukaisesti. Etuna tässä ratkaisussa on se, että toteutusdokumentin rakenne pysyi selkeänä. Muutosten määrä on lisäksi vähäinen. Suurin osa tätä dokumenttia koostuu TEXDoclet:lla [XOS03] koostetuista Javadoc-dokumentaatiosta. 2 Opintojen tila (Lauri) Tässä kappaleessa kuvataan opintojen tilan visualisointi-osajärjestelmän toteutettu rakenne. Aluksi selvitetään osajärjestelmän arkkitehtuuria, ja muutosten suunnitteluun kautta kuvauksiin kaikista luokista, metodeista ja kentistä. Lopuksi vielä maininnat toteutuksessa havaituista puutteista ja ongelmista.

2 2.1 Yleiskuvaus (Lauri) Opintojen tilan visualisointi -osajärjestelmä koostuu yhdestä servlet-luokasta ja kuudesta muusta luokasta. Luokkakaavio on esitetty kuvassa 1. OpintojenTilanVisualisointiservletistä on erillinen luokkakaaviokuva kuvassa 2, samoin kuin Piirto-luokasta kuvassa 3.

Kuva 1: Opintojen tilan luokkakaavio. 3

Kuva 2: OpintojenTilanVisualisointi-servletin luokkakaavio. 4

Kuva 3: Piirto-luokan luokkakaavio. 5

6 Pelkistetysti selitettynä opintojen tilan visualisointi -osajärjestelmä hakee tietokannasta, Desmond-järjestelmään opiskelijan syöttämien tietojen perusteella, opiskelijan suorittamia opintoja ja Desmond-järjestelmässä suunniteltuja opintoja. Opintojen tilan visualisointi -osajärjestelmä esittää nämä tiedot HTML-sivulla visuaalisesti. Pakolliset cum laude approbatur -opinnoista osajärjestelmä luo graafin, kuvan opintojen esitietovaatimusverkosta, osajärjestelmän luokkien avulla. Muut opinnot, kuten valinnaiset cum laude approbatur -opinnot ja laudatur-opinnot, esitetään HTML-sivulla listoina ja tiedot kaikille näille muille osa-alueille haetaan suoraan OpintojenTilanVisualisointi-servletistä käsin. Kaikissa asian omaisissa listoissa näytetään opiskelijan suorittamat ja suunnitellut opintojaksot. Laudatur-opintoihin liittyvissä listoissa, jotka perustuvat opiskelijan valitsemaan suuntautumisvaihtoehtoon ja erikoistumislinjaan, näytetään vielä asian omaisissa listoissa listaan kuuluvia pakollisia opintojaksoja, olivat ne sitten suoritettuja, suunniteltuja tai ei kumpaakaan. 2.2 Muutokset suunnitteludokumenttiin 2.2.1 OpintojenTilanVisualisointi-servlet (Lauri) Koska muutokset suunnitteluun ovat valtaisat, muutoksien selvittäminen erikseen olisi lähes koko servletin selostamista uudestaan myöhemmin esitettävän javadoc-listauksen lisäksi, joten selvitys yksityiskohtaisesti sivuutetaan. Sen sijaan hieman perinpohjaisempi selostus OpintojenTilanVisualisointi-servletin toiminnasta lienee paikallaan. Servletin toiminta Servletin toiminta alkaa dokysely-metodista. Metodi asettaa ensin tietorakenteisiin tiedon käyttäjästä (henkilo), sekä tietokantayhteydestä (yhteys). Luo pohjakkeen OpintoSuryhmän tekemän opintosu.kayttoliittyma.pohjake-luokan avulla, sekä asettaa pohjakkeeseen Desmond-järjestelmän tyylitiedoston (css) osoitteen. Lukee asetuksia asetukset -tiedostosta, jälleen OpintoSu-ryhmän tekemän luokan, tällä kertaa opintosu.yleiset.asetukset, avulla ja pohjustaa muut tietorakenteet. Sitten metodi aloittaa tietojen selvittämisen käyttäjän tekemistä valinnoista. Valintojen (parametrit) käyttämisen periaate on, että asetetaan ensin tietorakenteisiin käyttäjän tietokantaan tallentamat arvot, ja vasta sitten parametreina syötetyt arvot, jotta viimeksi mainittu jäisi voimaan mahdollisessa päällekkäisessä tapauksessa.

7 Näytettävän osion (cumu, lavi, kaikki) on käyttäjä voinut valita, ja pyyntöön vastataan metodissa asetaopintojentilanne, joka sitten kutsuu vain tarvitut metodit halutun osion tietojen keräämistä varten. Otsikko Otsikko-osaan servlet tulostaa otsikon lisäksi mm. jonkin verran JavaScript-koodia. JavaScriptiä käytetään HTML-sivulla eri vuosien tutkintovaatimusten vaihtamiseen valintalistalla. HTML-sivu toimii kyllä ilmankin JavaScriptiä, mutta eri vuosien tutkintovaatimusten hakemiseen tarvitaan tällöin uusi lataus. Otsikon tulostus riippuu myös valitusta osiosta. Mikäli valittuna on cumu tai lavi, niin otsikkoon tulostetaan valitun osion nimi: Cum laude tai Laudatur. Cum laude approbatur Cum laude approbatur -opintojen tulostamisesta erityisen maininnan vaatii kaksi asiaa. Ensiksi pakollisten cum laude approbatur -kurssien verkkokuvan muodostaminen. Jos servletiä ladataan ensimmäistä kertaa, niin kuva joudutaan luonnollisesti muodostamaan tietokannasta löytyvillä opiskelijaa koskevilla tiedoilla. Kuvan muodostamisen hoitaa os3.visualisointi.piirto-luokka. Mutta jos servletiä ladataankin toista tai useampaa kertaa (sama opiskelija, sama istunto), eli käytännössä servletin kutsu on lähtenyt servletin tulostamalta sivulta, niin silloin muistetaan ensimmäisellä latauskerralla luotu kuva, joka näytetään opiskelijalle vain uudestaan. Riski tässä viimeksi mainitussa on, että opiskelijalla on useampi selainikkuna samaan aikaan auki, joista yhdessä opiskelija esimerkiksi suunnittelee opintojaan (ts. tekee muutoksia tietokantaan suunnitelmiinsa tai suorituksiinsa) ja toisessa katselee muuttuvaa tilannetta lataamalla sivua uudestaan, jolloin tilanne ei pääse muuttumaan, tehdyn ominaisuuden vuoksi. Toinen erityisen maininnan vaativa on pakollisten cum laude approbatur -kurssien opintoviikkojen hakeminen metodilla haecumupakvaaditutopintoviikot. Metodissa oleva tietokanta haku hakee siis opiskelijan suorittamat pakolliset vanhat approbatur ja cum laude approbatur -kurssit. Äskeiseen joukkoon lisätään (yhdistetään) kurssit joita luennoidaan nyt, tulevana tai sitä seuraavana lukukautena, ja jotka kuuluvat myös pakollisiin cum laude approbatur -kursseihin. Viimeksi mainitusta luennoitavien kurssien joukosta leikataan pois ennen yhdistämistä opiskelijan suorittamat kurssit sekä niitä vastaavat kurssit. Maininta on erityisen tärkeä, sillä varsinaisten näytettävien kurssien joukko haetaan sa-

8 manlaisella metodilla luokassa os3.visualisointi.verkko. Vain palautusarvot ovat näissä metodeissa eriävät, joten jos toiseen tekee muutoksia, on toiseenkin syytä tehdä samat muutokset. Laudatur Laudatur-opintojen tulostuskin vaatii muutaman erityisen maininnan. Ensiksi pro gradu -tutkielman tulostaminen, joka on koodissa isoilla näkyvillä kommenteilla erotettu muusta koodista. Tulostaminen tehdään nyt ns. kovakoodauksena, eli tietoja ei haeta tietokannasta. Tämä siksi, että tiedot yksinkertaisesti puuttuvat tietokannasta, ainakin nyt meidän toteutusvaiheen aikaan. Sen verran taustatöitä asian eteen kuitenkin tein, että selasin vanhoja opinto-oppaita aina vuoteen 1996 asti ja huomasin pro gradu -tutkielmasta saatavien opintoviikkojen olevan vakiot. Opettajien suuntautumisvaihtoehdoissa 10 opintoviikkoa ja muilla 16, mutta riski tiedon muuttumiselle on tietenkin olemassa. Toinen huonopuoli kovakoodauksessa on, että pro gradun esitietoja ei saada mistään jolloin oletukseksi tekemäni "ei voi vielä suorittaa"on aina voimassa, vaikka todellinen tilanne ei niin olisikaan. Toisena valinnaisten cum laude approbatur -kurssien tulostaminen laudaturin valinnaisten yhteydessä. Näitä kursseja määritelmän mukaan on siis sellaiset kurssit, joita ei ole valittu mukaan haettuun ja saatuun cum laude approbatur -opintokokonaisuusmerkintään. Tällaista tietoa ei tietääkseni tietokannasta vielä saanut, joten ko. kentän tiedot jäävät nyt tyhjäksi (kenttää ei myöskään tulosteta HTML:ään, niinkuin ei muitakaan tyhjiä ei vaadittuja kenttiä). Koodista kyseenomainen kohta löytyy selvällä kommentoinnilla, sekä hassulla if(0==0) -vertailulla. 2.2.2 Piirto-luokka (Anu) Toteuttamatta jätetyt muuttujat private ArrayList suunnitelmat private ArrayList suoritukset Suoritukset ja suunnitelmat luetaan Verkko-luokassa. private fileoutputstream tulostusputki

9 Kuvaa ei lähetetä servletille tulostusputkessa, vaan se tallennetaan palvelimelle. Muuttuneet muuttujat private PngEncoder enkoodaaja -> koodaaja muuttujan nimi vaihdettiin paremmin suomenkieltä vastaavaksi. private Image kuva -> private BufferedImage kuva Kuvan tyyppi muutettiin sillä BufferedImagen rajapinta on helpompi piirtelyssä. Uudet muuttujat Asetustiedostosta luettavia muuttujia on tullut lisää paljon, jotta kuvan ulkonäköä olisi mahdollisimman vaivatonta säädellä. Muita apumuuttujia on myös lisätty, niiden ennakointi suunnitteluvaiheessa oli vaikeaa. Asetuksista luettavat private static int PUNAISENKOODI private static int VIHREANKOODI private static int LAATIKONLEVEYS private static int LAATIKONKORKEUS private static int MERKKILAATIKONLEVEYS private static String KUVAHAKEMISTO private static String KUVAHTMLHAKEMISTO private final float VIIVANPAKSUUS private final float VIIVANVALI private static int FONTINKOKO private static String FONTINTYYPPI private static int MERKKIFONTINKOKO private static String MERKKIFONTINTYYPPI private static int KUVANLEVEYS private static int KUVANKORKEUS private static int LEGENDANKORKEUS private static int KESALUKUKAUSI_ALKAA

10 private static int SYYSLUKUKAUSI_ALKAA Koordinaatistoon liittyvät private int enitenoikealla private int enitenvasemmalla private int alintaso private int matriisinskaalaus private static int VERKONLEVEYSSOLUINA private static int VERKONKORKEUSSOLUINA Kurssien tilat private static final int SUORITETTU = 0 private static final int SUUN_ESITIEDOT = 1 private static final int EISUUN_ESITIEDOT = 2 private static final int SUUN_EIESITIEDOT = 3 private static final int EISUUN_EIESITIEDOT = 4 private static final int VOIOSALLISTUA = 5 private static final int VOITULEVAISUUDESSAOSALLISTUA = 6 private String[] merkit private String[] selitykset private boolean verkontekoonnistui = false private boolean verkonkoodausonnistui = false Debuggauksen apumuuttujat private int[][] tilavarausmatriisi private static boolean tulostetaankodebuggausviestit = false private static boolean testaus = false private static boolean piirretaankoapuviivat = false

11 Uudet konstruktorit public Piirto(Henkilo henkilo, YhteysSailio yhteys) public Piirto(Henkilo henkilo, YhteysSailio yhteys, String file) Toteuttamatta jääneet metodit public fileoutputstream annakuva() Servletille ei anneta kuvaa tulostusputkessa, joten metodi jäi tarpeettomaksi. private boolean haesuoritukset(string opiskelijantunnus) Toteutettiin Verkko-luokassa. Piirto-luokan ei siis itse tarvitse hakea näitä tietoja itse. Uudet metodit public String annakuvanurl() tarjoaa lähes saman rajapinnan selaimelle, kuin toteuttamatta jäänyt metodi public FileOutputStream annakuva(). Selaimelle tarjotaan kuvan URL sen sijaan, että kuva annettaisiin suoraan tulostusvirrassa. Tämän ansiosta on helpompi myöhemmin toteuttaa vanhan kuvan tarjoaminen opiskelijalle. private void lueasetukset() throws Exception, NumberFormatException Asetusten lukua varten toteutettu apumetodi, jota kutsutaan konstruktorista. private String arvotiedostonnimi() Arpoo muodostettavalle kuvatiedostolle nimen. private void selvitakuvanulottuvuudet Apumetodi, joka selvittää muodostettavan kuvan korkeuden ja leveyden verkon tietojen perusteella. private int annakurssintila(kurssi k) Apumetodi, joka selvittää annetun kurssin tilan (SUORITETTU,...). Toteutettiin, jotta kurssin tilojen käsittely olisi mahdollisimman keskitettyä.

12 private int annastringinleveys(string str) Apumetodi, joka palauttaa annetun merkkijonon leveyden pikseleinä kuvan grafiikkakontekstissa, kulloisellakin fontin koolla. Toteutettii, jotta fontin muodostuskontekstia ei tarvitsisi erikseen tarvittaessa kutsua. private int rivita() Apumetodi, joka rivittää annetun tekstin annettuun leveyteen. Toteutettiin, jotta kurssin nimien ja legendan tekstien käsittely, eri riveille jakautuminen voitaisiin tehdä keskitetysti. private int piirralaatikontekstit() Apumetodi, joka piirtää yhden (kurssi)laatikon sisältämät tekstit private voi piirramerkkilaatikko() Apumetodi, joka piirtää merkkilaatikon sekä legendassa että kurssiverkossa. Toteutettiin, jotta merkkilaatikoiden piirtäminen tapahtuisi ainoastaan yhdessä paikassa. public String annakuvanpaikka() Apumetodi, joka palauttaa muodostetun kuvan hakemistopolun. private void piirraapuviivat() Apumetodi sijoittelun debuggaukseen. Piirtää kuvaan ruudukon, asteikkona solun leveys ja korkeus, rivi- ja sarakeindeksit sekä piirrettävän verkon tilavarausmatriisin tiedot. private void debug Apumetodi debugfaukseen. Tulostaa määrämuotoisia debug-viestejä (alkaa: "Piirto."jos luokan ajoparametreissä on asetettu päälle muuttuja debug.

13 2.2.3 VerkkoPlus-luokka (Teemu) AsetaJuurienPaikka()-metodin toteutukseen tuli muutos suunniteltuun. Juuret käydään juuri-listalta kerran läpi sijoittaen ne kahteen metodin sisäiseen listaan (ylikahdentason- Solmut ja allekahdentasonsolmut) sen perusteella, kuinka pitkä on solmun pisin seuraajakaari. Kahden tai yli kahden pituiset kaaret sijoitetaan ylikahdentasonsolmut-listaan ja muut allekahdentasonsolmut listaan. Laskettaessa pisintä kaarta paljonesitietoja-listalla olevia seuraaja-solmuja ei huomioida. Kun juurten paikat asetetaan, sijoitetaan ylikahdentasonsolmut-listan juuret ja niiden jälkeen allekahdentasonsolmut-listan juuret. Lisäksi juuria ei aseteta kahden solmun päähän toisistaan, vaan vierekkäin. Solmujen paikanvaraussääntöihin tehtiin muutoksia. Kaikki säännöt on esitetty kuvissa 4-8. Jos lisätty solmu kuuluu paljonesitietoja-listaan, ei tilaa varata edellä mainittujen sääntöjen mukaan. Tilaa varataan vain Verkko-luokan annapieninpaljonesitietojataso()-metodin palauttamasta tasosta suoraan ylös-alas -suunnassa solmun saakka. Tämä sen vuoksi, että Piirto-luokka piirtää laatikon ulkopuoliset kaaret suoraan laatikon reunaan. Jos solmu tai kaari yritetään sijoittaa paikkaan, jonka tilanvarauksen tarkistamiselle ei ole olemassa sääntöä, aiheutetaan poikkeus, joka välitetään luokkaa kutsuneelle. jne... Kuva 4: Kaaren varaamat alkiot, kun solmujen tasojen erotus on yksi.

14 varaa varaa varaa varaa varaa varaa Kuva 5: Kaaren varaamat alkiot, kun solmujen tasojen erotus on kaksi. varaa varaa varaa varaa varaa varaa Kuva 6: Kaaren varaamat alkiot, kun solmujen tasojen erotus on kolme.

15 varaa varaa varaa varaa varaa Kuva 7: Kaaren varaamat alkiot, kun solmujen tasojen erotus on neljä.

16 varaa varaa varaa varaa varaa varaa varaa varaa Kuva 8: Kaaren varaamat alkiot, kun solmujen tasojen erotus on viisi.

17 Toteuttamatta jätetty muuttuja public static final int PALJONESITIETOJA_LKM - siirrettiin Verkko-luokkaan. Muuttuneet muuttujat protected int[][] tilavarausmatriisi - muutettiin pakettinäkyvyydeksi, jotta Piirto-luokka voi lukea arvoja. private LinkedList yksitaso - muutettiin List-tyypistä LinkedList-tyyppiseksi. private LinkedList useataso - muutettiin List-tyypistä LinkedList-tyyppiseksi. Uudet muuttujat private static boolean tulostetaankodebuggausviestit - muuttujan arvo on tosi, jos VerkkoPlus-luokan debuggaus-viestit ovat päällä. Oletusarvo on false. private static boolean luokkaatestataan - muuttujan arvo on tosi, jos VerkkoPlus-luokkaa testataan. Oletusarvo on false. Muutokset konstruktoriin public VerkkoPlus(Henkilo henkilo, YhteysSailio yhteys) throws Exception - Lisättiin parametri Yhteyssäiliö-oliolle, jota kutsuttava Verkko-luokka tarvitsee tietokantahakuja varten. Lisättiin myös keskeytysten välitys kutsujalle. Toteuttamatta jääneet metodit Ei toteuttamatta jääneitä metodeita. Muuttuneet metodit private void asetajuurienpaikka() throws Exception - Metodi välittää keskeytyksen kutsujalle. private void asetapaikat() throws Exception - Metodi välittää keskeytyksen kutsujalle. private void asetasolmunpaikka(solmu solmu, Kaari kaari) throws Exception - Metodi välittää keskeytyksen kutsujalle. Uudet metodit

18 private void asetaylikahdenpituisetkaaret(solmu tamasolmu) throws Exception - metodi asettaa yli kahden tason pituisten kaarten seuraajasolmut rekursiivisesti itseään kutsuen. private void varaapaikkakaarelle(kaari kaari) throws Exception - metodi varaa paikan tilavarausmatriisista parametrina saamalleen kaarelle. Poikkeukset välitetään kutsujan käsiteltäväksi. private Solmu annasolmutasosta() - palauttaa Solmun, jonka taso on pienin yksitasoja useataso-listoista. private void asetalapikaytavienlistaan(solmu tamasolmu, Solmu seuraaja) - asettaa parametrina saamansa seuraaja-solmun yksitaso- tai useataso-listaan. public static void main (String[] args) - päämetodi luokan testausta varten. 2.2.4 Verkko-luokka (Lauri) Toteuttamatta jätetty muuttuja private List seuraavaksiasetettavatsolmut - ajatus, että Verkko-luokka hoitaisi solmujensa läpikäymisen poistettiin, joten tästä muuttujasta tuli tarpeeton. Muuttuneet muuttujat protected Collection solmut - tyyppi muutettiin List:stä abstraktiin Collection:iin. Näkyvyys muutettiin pakkaukselle. protected Collection juuret - tyyppi muutettiin List:stä abstraktiin Collection:iin. Näkyvyys muutettiin pakkaukselle. Uudet muuttujat protected Collection paljonesitietoja - lista, johon lisätään solmut, joilla on paljon esitietoja. Siirrettiin VerkkoPlus-luokasta. Verkko-luokka huolehtii joka tapauksessa solmujen tasojen asetuksen jolloin sen on helppo asettaa myös solmut ko. listaan.

19 public final int PALJONESITIETOJA_LKM - vakio, joka kuvaa esitietojen määrää, jolla solmu asetetaan paljonesitietoja-listaan. Siirrettiin VerkkoPlus-luokasta. private int tasojenlkm - kertoo verkossa olevien solmujen tasojen lukumäärän. Muuttuja lisättiin, sillä tiedon etsiminen myöhemmin (useaan kertaan VerkkoPlus- ja Piirtoluokista) läpikäymällä solmut, olisi turhan raskas operaatio. Uudet konstruktorit public Verkko() - oletus konstruktori ilman parametreja. Verkon voi luoda, mutta kutsujan täytyy kutsua luoverkko-metodia parametreineen, jotta varsinainen verkko muodostuisi. public Verkko(Henkilo henkilo, YhteysSailio yhteys) - konstruktori jolle voi antaa myös avatun tietokantayhteyden. Toteuttamatta jääneet metodit private void haekurssit(henkilo henkilo, YhteysSailio yhteys) - metodi pilkottiin pienemmiksi metodeiksi (luosolmut, selvitaesitiedot ja haecumupakolliset). public List annasolmut() - solmut-muuttujan näkyvyys muutettiin pakkaukselle ja aksessorista tuli turha. public List annajuuret() - juuret-muuttujan näkyvyys muutettiin pakkaukselle ja aksessorista tuli turha. private void lisaaesitieto(solmu seuraaja, Solmu uusiesitieto) - poistettiin turhana. public Kurssi annakurssi(solmu solmu) - solmut-muuttujan pakkausnäkyvyyden muuttamisen jälkeen tämä metodi jäi turhaksi. public List annaseuraajat(solmu solmu) - solmut-muuttujan pakkausnäkyvyyden muuttamisen jälkeen tämä metodi jäi turhaksi.

20 private Solmu annaseuraavaksiasetettavatsolmut() - solmujen läpikäymisen siirtyminen asianomaisille luokille jätti tämän turhaksi. private void lisaseuraavaksiasetettavatsolmut(solmu seuraavaksiasetettavasolmu) - solmujen läpikäymisen siirtyminen asianomaisille luokille jätti tämän turhaksi. Uudet metodit public void luoverkko(henkilo henkilo) - usean konstruktorin kanssa käytettävä apumetodi. Tämä metodi luo YhteysSailio-olion ja kutsuu kuormitettua luoverkko-metodia. public void luoverkko(henkilo henkilo, YhteysSailio yhteys) - usean konstruktorin kanssa käytettävä apumetodi yhteys-oliolla kuormitettuna. Tämä metodi käytännössä tekee verkko-olion kutsumalla tarvittavat metodit. private void luosolmut(henkilo henkilo, YhteysSailio yhteys) - metodi haetuttaa haecumupakolliset, opintosu.suunnittelu.suoritus.haepaaainesuoritukset ja opintosu.suunnittelu.suunnittelu.haepaaainesuunnitelma -metodien avulla opiskelijan pakolliset cum laude approbatur -kurssit, sekä luo näille solmu-oliot. private void selvitaesitiedot(yhteyssailio yhteys) - metodi haetuttaa metodien os2.ljk.kyselyt.haeesitiedot ja os2.ljk.kyselyt.haevastaavuudet avulla solmut-listalla olevien kurssien esitiedot ja luo saatujen tietojen perusteella kaari-oliot solmujen välille. private ArrayList[] haecumupakolliset(henkilo henkilo, YhteysSailio yhteys) - metodi hakee tietokannasta opiskelijan (henkilo parametri) tietojen perusteella pakolliset cum laude approbatur -kurssien tiedot. public int annapieninpaljonesitietojataso() - metodi joka palauttaa tason, jonka yläpuolella ei ole enää paljonesitietoja-listan solmuja. Eli tämän metodin palauttaman tason yläpuolelle piirretään "esitietolaatikon"alareuna. Metodia kutsuu Verkkoa käyttävä luokka (nyt VerkkoPlus ja/tai Piirto). private void asetapaljonesitietojalistaan(solmu solmu) - asettaa parametrina saamansa

21 solmu paljonesitietoja-listaan. Siirrettiin VerkkoPlus-luokasta. public int annatasojenlkm() - palauttaa luokan tietorakenteessa säilötyn tasojen lukumäärän. private void asetatasot() - asettaa tasot juurille (=0). Metodi asetuttaa tasot myös muille solmuille käyttäen apunaan rekursiivista metodia asetasolmujentasotalkaen, joka palauttaa suurimman asettamansa tason, jonka tämä metodi sitten asettaa tasojenlkmmuuttujaan. private int asetasolmujentasotalkaen(solmu solmusta) - metodi asettaa solmujen tasot parametrina saamastaan solmusta alkaen. Parametrina saadun solmun seuraajille asetetaan taso, joka on yhden suurempi kuin taso parametrina saadussa solmussa, mikäli seuraajalla (asetettavalla) ei ole tasoa vielä (= -1) tai taso on pienempi kuin asetettava taso (kaaren pituus edelliselle asetukselle kasvaa). 2.2.5 Solmu-luokka (Lauri) Toteuttamatta jätetty muuttuja private Kurssi kurssi - kurssi-oliosta tarvittiin vain tiedot kurssikoodi, nimi ja opintoviikot. Tämä muuttuja poistettiin siksikin, että kaikkien verkkoon asetettavien solmujen kurssien tiedot eivät tule OpintoSu- ja OS2-ryhmien tekemistä koodeista kurssi-olioina, vaan myös suoritus- ja suunnittelu-olioina. Muuttuneet muuttujat private Collection esitiedot - tyyppi muuttui List:stä Collection:ksi. private Collection seuraajat - tyyppi muuttui List:stä Collection:ksi. Uudet muuttujat private final String KURSSIKOODI - solmun kuvaaman kurssin kurssikoodi, joka on vakio koko solmu-olion elinajan.

private final String NIMI - solmun kuvaaman kurssin nimi, joka on vakio koko solmuolion elinajan. 22 private final double OPINTOVIIKOT - solmun kuvaamasta kurssista saatavat opintoviikot, joka on vakio koko solmu-olion elinajan. private Date suoritettupvm - mahdollisesti suoritetun kurssin suorituspäivämäärä. private String arvosana - mahdollisesti suoritetun kurssin arvosana. private Date suunniteltupvm -mahdollisesti suunnitellun kurssin suunniteltu käymisen päivämäärä. Poistettu metodi public Kurssi annakurssi() - koska solmun kuvaaman kurssin tietojen tallennustapa muutettiin kurssikoodin, nimen ja opintoviikkojen tallennukseen, ja kurssi-muuttuja poistettiin, aksessorista tuli turha ja se poistettiin. Muuttuneet metodit public Collection annaesitiedot() - tietorakenteen tyypin muuttumisen myötä aksessorinkin tyyppi muuttui. public Collection annaseuraajat() - tietorakenteen tyypin muuttumisen myötä aksessorinkin tyyppi muuttui. public Kaari lisaakaari(solmu esitieto) - palautusarvoksi viite uuteen kaari-olioon. Näin ei luotua kaari-oliota tarvitse heti etsiä. Uudet metodit public String annakurssikoodi() - tietorakenteelle oma aksessori. public String annanimi() - tietorakenteelle oma aksessori.

23 public double annaopintoviikot() - tietorakenteelle oma aksessori. public Date annasuoritettupvm() - tietorakenteelle oma aksessori. public String annaarvosana() - tietorakenteelle oma aksessori. public Date annasuunniteltupvm() - tietorakenteelle oma aksessori. public void asetasuoritettupvm(date suoritettupvm) - tietorakenteelle oma aksessori. Asettaa parametrina saadun päivämäärän tietorakenteeseen. public void asetaarvosana(string arvosana) - tietorakenteelle oma aksessori. Asettaa parametrina saadun merkkijonon tietorakenteeseen. public void asetasuoritettu(date suoritettupvm, String arvosana) - aksessori suoritusta kuvaavien tietorakenteiden yhteiselle asetukselle. Kutsuu oikeat aksessorit. public void asetasuunniteltupvm(date suunniteltupvm) - tietorakenteelle oma aksessori. Asettaa parametrina saadun päivämäärän tietorakenteeseen. public void asetasuunniteltu(date suunniteltupvm) - yhtenäinen nimitys suorituksen ja suunnitellun asettamiselle. Kutsuu oikean aksessorin. public boolean onkosuoritettu() - palauttaa totuusarvona onko solmun kuvaama kurssi suoritettu. public boolean onkosuunniteltu() - palauttaa totuusarvona onko solmun kuvaama kurssi suunniteltu käytäväksi. public boolean onkoesitiedotsuoritettu() - palauttaa totuusarvona onko solmun kuvaaman kurssin kaikki esitiedot suoritettu.

24 2.2.6 Kaari-luokka (Lauri) Ei muutoksia suunniteltuun.

25 2.3 Luokka OpintojenTilanVisualisointi Opintojen tilan visualisointi -sivulla opiskelija näkee kokonaisuutena, miten hänen opintonsa ovat edenneet. Opiskelija voi sivulla valita joko cum laude -opinnot tai haluamansa suuntautumisvaihtoehdon laudatur-opinnot. Sivulta opiskelija näkee mitä kursseja hän on jo suorittanut, mitä hänellä on suunnitelmissaan sekä pakollisista kursseista ne joihin hän ei ole vielä koskenut. Käytössä olevat tiedot Servletillä on aina tiedossa henkilön käyttäjätunnus. Lisäksi servletti voi saada tietoja parametrin avulla. Parametria käytetään silloin, kun opiskelija valitsee katsottavakseen toisen suuntautumisvaihtoehdon ja/tai kun opiskelija valitsee katsottavakseen cumun, lavin tai kaikki -opinnot. Servletin parametrit on kuvattu luokan vakioiden kuvauksessa. Käytettävät luokat opintosu.kayttoliittyma.pohjake Pohjake-luokkaa käytetään sivun HTML:n sisältävän pohjaketiedoston muokkaamiseen. Luokan muokkaama pohjaketiedosto on nimeltään OpintojenTilanVisualisointi.html opintosu.yleiset.asetukset Asetukset-luokan avulla luetaan palvelimelta löytyvää asetustiedostoa, jossa on mm. värikoodauksien asetuksia, sekä muita tulostukseen ja yleisiin asioihin liittyviä asetuksia. opintosu.kayttajat.henkilo Henkilo-luokan ilmentymä Servletille parametrina annettu kuvaa järjestelmää käyttävää opiskelijaa. Luokalta pyydetään tarvittaessa opiskelijan tietoja ja tallennuksia liittyen opintoihin. opintosu.tietokanta.tkapu Luokan avulla suoritetaan tietokantaan SQL-kyselyt. opintosu.tietokanta.yhteyssailio Servletiä kutsuttaessa saadaan tämän luokan ilmentymä parametrina (yhteys), ja olion kautta tapahtuu kaikki liikenne tietokantaan. opintosu.suunnittelu.suoritus Luokan metodin haepaaainesuoritukset avulla haetaan tietokannasta opiskelijan suorittamat pääainesuoritukset.

26 os2.ljk.kyselyt Käytetään hakemaan esitiedot tietylle kurssille. Tämä luokka palauttaa Collection:n os2.ljk.esitieto olioita. os2.ljk.esitietokurssit Luokan ilmentymät kuvaavat os2.ljk.kyselyt.haeesitiedot-metodin palauttamia kursseja. Luokan kuvaamien kurssien tiedoista kaivataan vain kurssikoodia. os3.visualisointi.piirto Piirto-luokka luo Servletin tunteman käyttäjän (henkilo) ja tietokantayhteyden (yhteys) avulla pakollisten cum laude approbatur -kurssien esitietovaatimusverkon kuvaksi. 2.3.1 Esittely public class OpintojenTilanVisualisointi extends java.lang.object 2.3.2 Kenttien yhteenveto asetukset ASETUSTIEDOSTO cumupaksuor Opiskelijan suorittamien cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot. cumupaksuun Opiskelijan suunnittelemien cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot. cumupakvaad Vaaditut cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot. cumuvaad Tutkintoon vaadittavat cum laude approbaturin opintoviikot. cumuvalsuor Opiskelijan suorittamien cum laude approbatur -tasoisten valinnaisten opintojaksojen opintoviikot. cumuvalsuun Opiskelijan suunnittelemien cum laude approbatur -tasoisten valinnaisten opintojaksojen opintoviikot. EISUUN_EIESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä EISUUN_ESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä henkilo Kutsujaa kuvaavan henkilön olio. kuvatiedosto Ensimmäisellä latauskerralla luodon kuvatiedoston nimi.

27 lavipaksuor Opiskelijan suorittamien laudatur-tason pakollisten opintojaksojen opintoviikot. lavipaksuun Opiskelijan suunnittelemien laudatur-tason pakollisten opintojaksojen opintoviikot. lavipakvaad Tutkintoon vaadittavat laudaturin opintoviikot. lavivaad Tutkintoon vaadittavat laudaturin opintoviikot. lavivalsuor Opiskelijan suorittamien laudatur-tason valinnaisten opintojaksojen opintoviikot. lavivalsuun Opiskelijan suunnittelemien laudatur-tason valinnaisten opintojaksojen opintoviikot. lavivalvaad Tutkintoon vaadittavat laudaturin valinnaisten opintojaksojen opintoviikot. linja Opiskelijan valitsema erikoistumislinja (tietojenkäsittelyn suuntautumisvaihtoehdossa). merkit nayta Opiskelijan valitsema näytettävä opintojen kokonaisuus (cumu (oletus), lavi tai kaikki). PARAMETRI_KUVATIEDOSTO Ensimmäisellä latauskerralla luodun pakollisten cum laude approbatur -kurssien esitietovaatimusverkon kuvan tiedostonimi annetaan tällä parametrilla. PARAMETRI_NAYTA Minkä oppimäärien opinnot näytetään (cumu, lavi, kaikki). PARAMETRI_SUUNTA Valittu suuntautumisvaihtoehto tai erikoistumislinja. PARAMETRI_VUOSI Minkä vuoden tutkintovaatimuksien mukaisia suuntautumisvaihtoehtoja ja erikoistumislinjoja näytetään. PUNAINENKURSSI Asetuksista saatava HTML-värikoodi kurssin suoritusta kuvaavalle värille. selitykset Legendan selitystekstit pelkän laudaturin näyttöä varten. sivu Pohjake, johon kirjoitetaan tulostusmetodeissa. SUORITETTU Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä SUUN_EIESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä SUUN_ESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty

28 erilaisina yhdistelminä suunta Opiskelijan valitsema suuntautumisvaihtoehto. VIHREAKURSSI Asetuksista saatava HTML-värikoodi kurssin suoritusta kuvaavalle värille. vuosi Opiskelijan valitsema tutkintovaatimusten vuosi. yhteys Tietokantayhteyksiä. 2.3.3 Metodien yhteenveto asetaopintojentilanne() Asettaa näytettävälle sivulle otsikon, näytettävät osiot, kuva ja/tai listat kursseista ja mahdollisen yhteenvedon opintoviikoille. dokysely(httpservletrequest, HttpServletResponse, YhteysSailio, Henkilo) Vastaa selaimen tekemään kutsuun. haecumupakvaaditutopintoviikot() Hakee cum laude approbatun -oppimäärän pakollisten kurssien opintoviikkomäärän tietokannasta. haecumuvaaditutopintoviikot() Hakee cum laude approbatur -oppimäärään vaaditut opintoviikot tietokannasta. haelinjatsuuntautumiselle(string) Metodi hakee tietokannasta parametrina annetun suuntautumisvaihtoehdon erikoistumislinjojen tiedot. haemuutpakolliset(string) Metodi hakee tietokannasta valitulla parametrilla opiskelijan muiden laudatur-oppimäärän pakollisten kurssien tiedot. haesuoritetut(string, boolean, String) Metodi hakee tietokannasta valituilla parametreilla opiskelijan suorittamien kurssien tiedot. haesuunnitellut(string, boolean, String) Metodi hakee tietokannasta valituilla parametreilla opiskelijan suunnittelemien kurssien tiedot. haesuuntautuminenlinjalle(string) Metodi hakee tietokannasta parametrina annetun erikoistumislinjan suuntautumisvaihtoehdon. haesuuntautumiset(string) Metodi hakee tietokannasta valitulla parametrilla tietyn tutkintovaatimusvuoden suuntautumisvaihtoehtojen tiedot. haetutkintovaatimusvuodet() Metodi hakee tietokannasta kaikki eri henkilölle sopivat tutkintovaatimusvuodet. haevaaditutopintoviikot(string) Hakee parametrina annetun kokonaisuuden minimiopintoviikkomäärän tietokannasta. suoritettupvm(date) Metodia käytetään suoritettujen kurssien suorituspäivämäärän muuttamiseksi tulostettavaan muotoon.

29 suunniteltupvm(date) Metodia käytetään suunniteltujen kurssien käymistä kuvaavan tietokannasta saadun alkamisajankohdan päivämäärän muuttamiseksi tulostettavaan muotoon. tulostacumu() Tulostaa näytettävälle sivulle cum laude approbatur -opinnot. tulostalavi() Tulostaa näytettävälle sivulle opiskelijan valitsemien tietojen mukaan opiskelijan laudatur-opinnot. tulostamuutpakolliset(pohjake, String) Tulostaa parametrilla valitun laudatur osan opintojaksoja, jotka ovat osassa pakollisia, mutta eivät ole opiskelijan huomioimia vielä. tulostaopintoviikot(pohjake, int, int) Tulostaa parametrein saadut opintoviikot parametrina annettuun lohkoon. tulostaotsikko() Tulostaa halutunlaisen otsikon näytettävälle sivulle. tulostaovsumma() Tulostaa näytettävälle sivulle kaikkien osioiden (cumu ja lavi) opintoviikkojen yhteenvedon. tulostasuoritetut(pohjake, String, boolean, String) Tulostaa valituin parametrein opiskelijan suorittamia opintojaksoja. tulostasuunnitellut(pohjake, String, boolean, String) Tulostaa valituin parametrein opiskelijan suunnittelemia opintojaksoja. tulostasuuntautumiset(pohjake, String, String) Tulostaa suuntautumisvaihtoehdot ja erikoistumislinjat näytettävään sivuun valintalistaan. tulostatutkintovaatimusvuodet(pohjake) Tulostaa kannasta löytyvät tutkintovaatimusvuodet valintalistaan. 2.3.4 Kentät public static final java.lang.string PARAMETRI_NAYTA Minkä oppimäärien opinnot näytetään (cumu, lavi, kaikki). public static final java.lang.string PARAMETRI_SUUNTA Valittu suuntautumisvaihtoehto tai erikoistumislinja. Arvot annetaan muodossa suunta# tai linja# ja "suunnan_tai_linjan_id". public static final java.lang.string PARAMETRI_VUOSI

30 Minkä vuoden tutkintovaatimuksien mukaisia suuntautumisvaihtoehtoja ja erikoistumislinjoja näytetään. public static final java.lang.string PARAMETRI_KUVATIEDOSTO Ensimmäisellä latauskerralla luodun pakollisten cum laude approbatur -kurssien esitietovaatimusverkon kuvan tiedostonimi annetaan tällä parametrilla. Parametri on tarkoitettu annettavaksi vain Servletin itse, jolloin mahdolliset suunnitelmien tai suoritusten muutokset eivät jää huomioitta kuvassa. private java.lang.string suunta Opiskelijan valitsema suuntautumisvaihtoehto. On tyhjä merkkijono tai "eivalittu", jos opiskelija ei ole valinnut suuntautumistaan. private java.lang.string linja Opiskelijan valitsema erikoistumislinja (tietojenkäsittelyn suuntautumisvaihtoehdossa). On tyhjä merkkijono tai "VALITTAVAENSIN", jos opiskelija ei ole valinnut erikoistumislinjaa. private java.lang.string nayta Opiskelijan valitsema näytettävä opintojen kokonaisuus (cumu (oletus), lavi tai kaikki). private java.lang.string vuosi Opiskelijan valitsema tutkintovaatimusten vuosi. private java.lang.string kuvatiedosto Ensimmäisellä latauskerralla luodon kuvatiedoston nimi. private static opintosu.yleiset.asetukset asetukset ASETUSTIEDOSTO private static final int SUORITETTU Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä private static final int SUUN_ESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä

31 private static final int EISUUN_ESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä private static final int SUUN_EIESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä private static final int EISUUN_EIESITIEDOT Kurssin tila: suoritettu / suunniteltu / esitiedot käyty erilaisina yhdistelminä private static final java.lang.string merkit private static final java.lang.string selitykset Legendan selitystekstit pelkän laudaturin näyttöä varten. Cumu tehdään Piirtoluokassa suoraan kuvaan. Itse tekstit haetaan asetukset-tiedostosta private static java.lang.string VIHREAKURSSI Asetuksista saatava HTML-värikoodi kurssin suoritusta kuvaavalle värille. private static java.lang.string PUNAINENKURSSI Asetuksista saatava HTML-värikoodi kurssin suoritusta kuvaavalle värille. private opintosu.kayttajat.henkilo henkilo Kutsujaa kuvaavan henkilön olio. private opintosu.tietokanta.yhteyssailio yhteys Tietokantayhteyksiä. private opintosu.kayttoliittyma.pohjake sivu Pohjake, johon kirjoitetaan tulostusmetodeissa. private int cumupaksuor Opiskelijan suorittamien cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot. private int cumupaksuun Opiskelijan suunnittelemien cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot.

32 private int cumupakvaad Vaaditut cum laude approbatur -tasoisten pakollisten opintojaksojen opintoviikot. Haetaan tietokannasta haecumpakvaaditutopintoviikot-metodilla. private int cumuvalsuor Opiskelijan suorittamien cum laude approbatur -tasoisten valinnaisten opintojaksojen opintoviikot. private int cumuvalsuun Opiskelijan suunnittelemien cum laude approbatur -tasoisten valinnaisten opintojaksojen opintoviikot. private int cumuvaad Tutkintoon vaadittavat cum laude approbaturin opintoviikot. Haetaan tietokannasta haecumuvaaditutopintoviikot-metodilla. private int lavipaksuor Opiskelijan suorittamien laudatur-tason pakollisten opintojaksojen opintoviikot. private int lavipaksuun Opiskelijan suunnittelemien laudatur-tason pakollisten opintojaksojen opintoviikot. private int lavipakvaad Tutkintoon vaadittavat laudaturin opintoviikot. private int lavivalsuor Opiskelijan suorittamien laudatur-tason valinnaisten opintojaksojen opintoviikot. private int lavivalsuun Opiskelijan suunnittelemien laudatur-tason valinnaisten opintojaksojen opintoviikot. private int lavivalvaad Tutkintoon vaadittavat laudaturin valinnaisten opintojaksojen opintoviikot.

33 private int lavivaad Tutkintoon vaadittavat laudaturin opintoviikot. Haetaan tietokannasta haevaaditutopin metodilla. 2.3.5 Metodit asetaopintojentilanne private void asetaopintojentilanne( ) throws java.lang.exception Asettaa näytettävälle sivulle otsikon, näytettävät osiot, kuva ja/tai listat kursseista ja mahdollisen yhteenvedon opintoviikoille. Kutsuu tarvittavat metodit. Tulostaa lopuksi vielä ensimmäisellä latauskerralla luodun kuvatiedoston nimen koko sivun kattavaan form:iin hidden-kenttään. dokysely public void dokysely( HttpServletRequest request, HttpServletResponse response, opintosu.tietokanta.yhteyssailio yhteys, opintosu.kayttajat.henkilo henkilo ) throws java.lang.exception Vastaa selaimen tekemään kutsuun. Ensimmäiseksi metodi avaa tulostusvirran tulostamista varten. Valituin ja saaduin parametrein siirrytään tulostamaan sivua ja haetaan tunnusta vastaavat opiskelijan kurssit. Metodi hakee sivun pohjakkeen ja asettaa tiedot pohjakkeeseen. Lopuksi tulostetaan tulostusvirtaan sivu pohjakkeen tulostusmetodilla sekä suljetaan tulostusvirta. haecumupakvaaditutopintoviikot private int haecumupakvaaditutopintoviikot( ) throws java.lang.exceptio Hakee cum laude approbatun -oppimäärän pakollisten kurssien opintoviikkomäärän tietokannasta. Tässä otetaan huomioon siis opiskelijan suorittamat kurssit joiden vastaavuudet karsitaan nykyisin luennoitavista kursseista pois.

Palauttaa pakollisten cum laude approbatur -oppimäärän kurssien opintoviikkomäärän int-arvona. 34 haecumuvaaditutopintoviikot private int haecumuvaaditutopintoviikot( ) throws java.lang.exception Hakee cum laude approbatur -oppimäärään vaaditut opintoviikot tietokannasta. Hakeminen tehdään mahdollisesti kolmiosaisena, ja seuraavassa järjestyksessä: Mikäli ensimmäinen, henkilön suuntautumisvaihtoehtoon perustuva haku, ei palauta tietokannasta yhtään riviä, niin suoritetaan toinen haku, joka perustuu henkilön valitsemaan (tai annettuun) tutkintovaatimukseen. Jos toinenkaan haku ei palauta riviäkään, niin haetaan henkilöstä riippumaton kolmas vaihtoehto, joka palauttaa uusimman tktl cumun minimiopintoviikkomäärän, ja siten aina yhden rivin, jos vain tietokannassa tietoja yleensä on siis. Palauttaa cum laude approbatur -oppimäärän minimiopintoviikkomäärän int-arvona. haelinjatsuuntautumiselle private java.util.arraylist[] haelinjatsuuntautumiselle ( java.lang.string suunta ) throws java.lang.exception Metodi hakee tietokannasta parametrina annetun suuntautumisvaihtoehdon erikoistumislinjojen tiedot. suunta Suuntautumisvaihtoehdon id. Palauttaa erikoistumislinjojen tiedot ArrayList[]:nä, jossa yksi ArrayList sisältää solut: kokonaisuus_id ja nimi. Jos linjoja ei ole, niin palautus on null. haemuutpakolliset private java.util.arraylist[] haemuutpakolliset

35 ( java.lang.string osa ) throws java.lang.exception Metodi hakee tietokannasta valitulla parametrilla opiskelijan muiden laudaturoppimäärän pakollisten kurssien tiedot. Siis ei opiskelijan suorittamat tai suunnittelemat. osa Merkkijono, jolla kerrotaan metodille mitä laudatur-kursseja haetaan (suunta,linja,semin). Palauttaa kurssien tiedot ArrayList[]:nä, jossa yksi ArrayList sisältää solut: kurssikoodi, nimi_suomi, opintoviikot. haesuoritetut private java.util.arraylist[] haesuoritetut ( java.lang.string taso, boolean pakolliset, java.lang.string osa ) throws java.lang.exception Metodi hakee tietokannasta valituilla parametreilla opiskelijan suorittamien kurssien tiedot. taso Yksi kirjain haettavien kurssien oppimäärän tasolle (C umu tai L audatur tai S eminaari). Jos taso on Cumu, niin kannasta haetaan myös Approbatur suoritukset. pakolliset Haetaanko kannasta pakollisten vai valinnaisten kurssien opintoviikot (totuusarvo). Vaikka seminaarit ovatkin tutkintovaatimuksissa pakollisia, niin yksikään seminaari itsessään ei ole pakollinen. osa Merkkijono, jolla kerrotaan metodille mitä laudatur-kursseja haetaan (suunta,linja,semin). Palauttaa kurssien tiedot ArrayList[]:nä, jossa yksi ArrayList sisältää solut: kurssikoodi, nimi_suomi, opintoviikot, hyvaksymis_pvm ja arvosana. haesuunnitellut private java.util.arraylist[] haesuunnitellut

( java.lang.string taso, boolean pakolliset, java.lang.string osa ) throws java.lang.exception Metodi hakee tietokannasta valituilla parametreilla opiskelijan suunnittelemien kurssien tiedot. taso Yksi kirjain haettavien kurssien oppimäärän tasolle (C umu tai L audatur tai S eminaari). Jos taso on C_umu, niin kannasta haetaan myös A_pprobaturin suunnitellut (turhaa, mutta ei haittaakaan). pakolliset Haetaanko kannasta pakollisten vai valinnaisten kurssien opintoviikot (totuusarvo). Vaikka seminaarit ovatkin tutkintovaatimuksissa pakollisia, niin yksikään seminaari itsessään ei ole pakollinen. osa Merkkijono, jolla kerrotaan metodille mitä laudatur-kursseja haetaan (suunta,linja,semin). Palauttaa kurssien tiedot ArrayList[]:nä, jossa yksi ArrayList sisältää solut: kurssikoodi, nimi_suomi, opintoviikot ja alku_pvm. 36 haesuuntautuminenlinjalle private java.lang.string haesuuntautuminenlinjalle( java.lang.string linja ) throws java.lang.exception Metodi hakee tietokannasta parametrina annetun erikoistumislinjan suuntautumisvaihtoehdon. Palauttaa suuntautumisvaihtoehdon id:n String:nä tai null, jos haulla ei löytynyt suuntautumisvaihtoehtoa. haesuuntautumiset private java.util.arraylist[] haesuuntautumiset( java.lang.string vuodelle ) throws java.lang.exception Metodi hakee tietokannasta valitulla parametrilla tietyn tutkintovaatimusvuoden suuntautumisvaihtoehtojen tiedot.