`"






















KIURU
Tietotekniikan sovellusprojekti
Toni Hilpinen
Marko Koivuniemi
Jussi Mäkinen
Miika Nurminen
Sovellusraportti
28.1.2003
Jyväskylän yliopisto
Tietotekniikan laitos

Kiuru-projektin tietoja



Tekijät:  
Toni Hilpinen (hilpinen@cc.jyu.fi)
Marko Koivuniemi (koimark@cc.jyu.fi)
Jussi Mäkinen (jusmaki@cc.jyu.fi)
Miika Nurminen (minurmin@cc.jyu.fi)
Yhteystiedot:   Työtila AgC222.2, sähköpostilistojen osoitteet
kiuru@korppi.jyu.fi ja kiurulaaja@korppi.jyu.fi.
Työn nimi:   Sovellusraportti, Kiuru-projekti.
Työ:   Sovellusraportti tietotekniikan sovellusprojektiin.
Tiivistelmä:   Kiuru-projekti toteutti Jyväskylän yliopiston tietotekniikan laitoksella kehitettyyn Korppi-järjestelmään WWW-pohjaisen varausosion sekä varaustietojen synkronoinnin Kotka- ja Timmi-järjestelmien välillä. Sovellusraportissa kuvataan määriteltyjen vaatimusten toteutumista sekä sovelluksen toteutusta ja toimintaa.
Avainsanat:   Salivaraus, kurssien opetustapahtumat, resurssivaraus, Korppi-järjestelmä, Timmi-järjestelmä, WWW-sovellus.

Versionhallinta



Versio Päiväys Tehnyt Muutokset
0.1 8.1.2003 Jussi Mäkinen Ensimmäinen versio
0.2 13.1.2003 Miika Nurminen Käyttöliittymäkuvaus
0.3 14.1.2003 Marko Koivuniemi Sovelluksen puutteet ja jatkokehitys
0.4 16.1.2003 Miika Nurminen Java-pavut
0.5 17.1.2003 Marko Koivuniemi Lokitietoja, viimeistelyä.
0.6 21.1.2003 Marko Koivuniemi Korjauksia JP Santasen kommenttien pohjalta
0.7 22.1.2003 Jussi Mäkinen Pieniä korjauksia
0.8 22.1.2003 Marko Koivuniemi Viimeistelyä
0.9 23.1.2003 Jussi Mäkinen Viimeistelyä
0.95 23.1.2003 Marko Koivuniemi Viimeistelyä
1.0 28.1.2003 Marko Koivuniemi Viimeistelyä

Contents

1  Johdanto
2  Termejä
    2.1  Aihepiirin yleisiä termejä
    2.2  Teknisiä termejä
3  Asetettujen tavoitteiden toteutuminen
    3.1  Timmi-rajapinta ja tietojen synkronointi
    3.2  Varausmoduulin käyttöliittymä
    3.3  Ylläpitäjän ja päävahvistajan käyttöliittymä
    3.4  Resurssipyynnöt
    3.5  Sovelluksen monikielisyys
    3.6  Yhteenveto sovelluksen ominaisuuksista
4  Palvelinohjelmistot, toteutustekniikat ja työkalut
    4.1  JSP-tekniikka
    4.2  JSP-sivujen käsittelylogiikka
    4.3  Java-pavut
    4.4  Tietokanta
5  Sivujen käyttöliittymän yleisrakenne
6  JSP-sivut
    6.1  Kalenteri
        6.1.1  Salin viikkokalenteri spaceweek.jsp
        6.1.2  Muutokset tapahtuman lisäyssivulle addAppointment.jsp
    6.2  Opettajan käyttöliittymä
        6.2.1  Muutokset sivulle modifyGroup.jsp
    6.3  Varausjärjestelmä
        6.3.1  myReservations.jsp ja deleteReservations.jsp
        6.3.2  searchFreeSpace.jsp ja newSpace.jsp
        6.3.3  searchResults.jsp
        6.3.4  makeReservation.jsp ja commitReservation.jsp
        6.3.5  show- ja modifyReservationRequests.jsp
        6.3.6  reportInit.jsp ja reportHandler.jsp
    6.4  Ylläpitäjän käyttöliittymä
        6.4.1  Muutokset sivulle admin.jsp
        6.4.2  searchSpace.jsp ja searchSpaceHandler.jsp
        6.4.3  modifySpace.jsp ja spaceHandler.jsp
        6.4.4  addSpaceGroupToSpace.jsp
        6.4.5  searchSpaceGroup.jsp
        6.4.6  modifySpaceGroup.jsp ja spaceGroupHandler.jsp
        6.4.7  addPersonToSpaceGroup.jsp
        6.4.8  addSpaceToSpaceGroup.jsp
7  Java-pavut
    7.1  kotkabeans-pakettiin tehdyt muutokset
        7.1.1  cSQL.java
        7.1.2  DB.java
        7.1.3  Encoder.java
        7.1.4  HTMLMenu.java
        7.1.5  User.java
        7.1.6  Tools.java
    7.2  kolibribeans-pakettiin tehdyt muutokset
        7.2.1  EventBean.java
        7.2.2  EventBeanContainer.java
        7.2.3  QueryContainer.java
        7.2.4  Week.java
    7.3  Kiurubeans-paketti
        7.3.1  HtmlBean.java
        7.3.2  StringPair.java
        7.3.3  KiuruString.java
        7.3.4  SimpleDb.java
        7.3.5  StatementContainer.java
        7.3.6  StatementItem.java
        7.3.7  IntItem.java
        7.3.8  StringItem.java
        7.3.9  KiuruHandler.java
        7.3.10  KiuruSpace.java
        7.3.11  SpaceGroup.java
        7.3.12  KiuruReservation.java
        7.3.13  SearchHandler.java
        7.3.14  SpaceSearch.java
        7.3.15  PersonSearch.java
        7.3.16  SpaceGroupSearch.java
        7.3.17  TimmiParser2.java
        7.3.18  Timmi2KiuruSynchronizer.java
        7.3.19  TimmiLog2Kiuru.java
        7.3.20  TimmiObject.java
        7.3.21  TimmiContactPerson.java
        7.3.22  TimmiCustomer.java
        7.3.23  TimmiReservation.java
        7.3.24  TimmiBuilding.java
        7.3.25  TimmiSpace.java
        7.3.26  TimmiUseType.java
8  Sovelluksen testaaminen
    8.1  Testausympäristöt
    8.2  Testausperiaatteita
    8.3  Testaustulokset
9  Ohjelman virheet ja toiminnan puutteet
    9.1  Navigointi
    9.2  Varausmoduuli
    9.3  Synkronointi ja lokitiedostojen käsittely
    9.4  Virheet käyttäjän syötteissä
    9.5  Selaimiin liittyvät virheet
10  Jatkokehitykseen siirretyt ominaisuudet
    10.1  Tietokannan rakenteeseen liittyvät kehitysideat
    10.2  Kehitysideoita sovelluksen toiminnasta
    10.3  Automaattisten sähköpostiviestien puutteista
    10.4  Muita jatkokehitysideoita
11  Asennusohjeet
    11.1  Tietokannan päivitys
    11.2  Papujen asentaminen
    11.3  JSP-sivujen asentaminen
    11.4  Muut toimenpiteet
12  Ylläpitäjän ohjeet
    12.1  Oikeuksien asettaminen
    12.2  Ristiriitaiset varaukset
    12.3  Monikielisyys
13  Yhteenveto

1  Johdanto

Kiuru-niminen tietotekniikan sovellusprojekti on jatkoa Kotka-, Korppi-, Kolibri- ja Koppelo"-projekteille. Kiuru toteutti Korppi"-järjestelmään tilanvarausmoduulin ja rajapintayhteyden Yomi Oyj:n Timmi"-järjestelmään. Kiuru-ryhmän kirjoittama koodi on julkaistu GPL-lisenssin alaisuudessa.
Syksyn 2002 Kiuru-projektiryhmään kuuluivat tietotekniikan opiskelijat Toni Hilpinen, Marko Koivuniemi, Jussi Mäkinen ja Miika Nurminen. Tilaajana toimi Jyväskylän yliopistolta hallintovirasto ja tietotekniikan laitos. Muut projektiorganisaatioon kuuluneet henkilöt esitellään Projektiraporttissa.
Projektiryhmä on laatinut jo aiemmin Projektisuunnitelman, Sovellussuunnitelman, Vaatimusmäärittelyn, Haastatteluraportin ja Projektiraportin. Projektiraportissa kuvataan projektin taustoja ja projektille asetettuja tavoitteita, projektiorganisaatiota sekä suunnitelmien toteutumista ja projektin onnistumista.
Raportissa kuvataan sovelluksen arkkitehtuuria ja toteutettuja ominaisuuksia. Lisäksi esitetään sovelluksen toimintaa myös yksittäisten JSP-sivujen ja Java-papujen tasolla. Sovelluksen tarvitsemat tietokantamuutokset on kirjattu Kotka-tietokantaraporttiin.
Lukuun 2 on kerätty projektissa ja sen dokumenteissa käytettyjä termejä. Luvussa 3 on lyhyesti kuvattu sovellukselle asetettujen tavoitteiden ja ominaisuuksien toteutumista. Lukuun 4 on koottu sovelluksen taustalla oleva palvelinratkaisu, toteuttamistekniikoita ja tietokantaratkaisut.
Käyttöliittymä sekä tekniset kuvaukset yksittäisistä JSP-sivuista on esitetty luvuissa 5-6. Java-pavut esitellään luvussa 7. Sovelluksen testausta on lyhyesti kuvattu luvussa 8. Sovelluksesta havaitut virheet ja jatkokehitysideat on koottu lukuihin 9 ja 10. Sovelluksen asennusohjeet ja ylläpitäjän huomioita on kirjattu lukuihin 11 ja 12.

2  Termejä

Luvussa on kuvataan termejä, jotka auttavat ymmärtämään dokumentteja paremmin. Tekniset termit on pääosin listattu sellaisia henkilöitä varten, joilla ei ole ohjelmointitaustaa.

2.1  Aihepiirin yleisiä termejä

Seuraavat termit liittyvät salinvarausprosessiin:
Korppion Jyväskylän yliopistossa joidenkin laitoksien käyttämä opetus- ja tutkimushallintajärjestelmä.
Kotkaon Korppi-järjestelmän tietokanta.
Maksajaon henkilö tai organisaatio, joka maksaa varauksen.
Oheisvarattavaon liikuteltava esine, jonka vahtimestarit toimittavat tilaisuuden järjestäjän toiveiden mukaisesti haluttuun saliin haluttuna ajankohtana.
Resurssion johonkin saliin liittyvä ominaisuus tai kiinteästi saliin asennettu laite tai esine. Esimerkiksi salin paikkamäärä tai piirtoheittimen olemassaolo voivat olla resursseja.
Resurssipyyntökuten varauspyyntö, kuitenkin sillä erotuksella, että salin sijaan ilmoitetaan resurssien tarve.
Salion varattavissa oleva paikka, johon ihmiset voivat kokoontua (esimerkiksi luentosali tai kokoustila).
Sali-järjestelmäon Jyväskylän yliopistossa aiemmin käytössä ollut tekstipohjainen salienvarausjärjestelmä.
Timmion Yomi Applications Oy:n kehittämä tilanvaraussovellus.
Vakiovarauson sarja varauksia, jotka liittyvät toisiinsa ja toistuvat esimerkiksi viikoittain samana viikonpäivänä.
Varauksen pyytäjäon henkilö, joka ehdottaa varattavaksi jotakin tilaa jonakin ajankohtana.
Varauksen vahvistajaon henkilö, jolla on oikeus vahvistaa varaus tiettyyn tilaan.
Varauson käyttöoikeus tiettyyn tilaan tiettynä ajankohtana.
Varauspyyntöon varauksen pyytäjän tekemä ehdotus varauksesksi koskien tiettyä tilaa tiettynä ajankohtana.

2.2  Teknisiä termejä

Seuraavat ohjelmointitekniset termit liittyvät sovelluksen taustalla olevaan järjestelmään:
AJP12on protokolla tiedonsiirtoon Apache- ja Tomcatpalvelimien välillä.
Apacheon ilmainen HTTP-palvelinohjelmisto.
CSSeli Cascading Style Sheets on WWW-sivujen ulkoasua kuvaava kieli.
HTMLon WWW-sivujen sisältöä kuvaava kieli.
HTTPon WWW-arkkitehtuurin käyttämä tiedonsiirtoprotokolla.
Jakarta-Tomcaton ilmainen servletti- ja JSP-moottori.
Javaon Sunin kehittämä laitteistoriippumaton olio-ohjelmointikieli.
JavaDocon Java-kehitysympäristön mukana tuleva dokumentointityökalu.
Java-pavut(engl. JavaBeans) ovat Java-ohjelmointikielellä luotuja komponentteja, joita voidaan kutsua JSP-sivuilla.
JDBCeli Java Database Connectivity on Java-teknologian käyttämä rajapinta erilaisiin tietokantoihin.
JSPeli Java Server Pages on skriptaustyylinen ohjelmointikieli.
Keksi(engl. cookie) on menetelmä saada tallennettua tietoja WWW-sivuilta käyttäjien koneille. Palvelin lähettää pieniä tietopaketteja selaimelle, jotka tallennetaan käyttäjän koneelle. Myöhemmin selain lähettää tiedot palvelimelle ja palvelin voi käyttää niitä esimerkiksi istuntojen tallentamiseen.
Käyttötapaus(engl. use case) on käyttäjän tai sovelluksen toimintoa tietyn tehtävän suorittamiseksi kuvaava dokumentti.
Moduuli on tarkkaan rajattu toiminnallinen ohjelmakokonaisuus.
Poolman on ohjelma, joka kontrolloi tietokantayhteyksiä.
PostgreSQLon ilmainen tietokannanhallintajärjestelmä.
Skripti on yksinkertainen ohjelmanpätkä, joka useimmiten on tehty tulkattavalla kielellä.
Selain on ohjelma, joka käyttäjän koneella tulkkaa HTML-kieliset sivut esitettävään muotoon.
Servletti(engl. servlet) on palvelimella sijaitseva sovellus, joka toteuttaa HTTP-palvelimen pyynnöstä tietyn toiminnon.
SQL eli Structured Query Language on relaatiotietokantojen hallintaan kehitetty standardi kieli.

3  Asetettujen tavoitteiden toteutuminen

Kiuru-sovelluksen ensisijaisena vaatimuksena oli määritellä ja toteuttaa liittymä Timmi-salivarausjärjestelmään Korppi-järjestelmästä. Lisäksi yleisenä vaatimuksena oli suunnitella ja toteuttaa helppokäyttöinen salien ja muiden tilojen varaussovellus Korppi-järjestelmän osaksi. Sovellus on tarkoitettu ensisijaisesti Jyväskylän yliopiston henkilökunnan käyttöön. Luvussa on esitetty sovellukselle määriteltyjen vaatimusten toteutuminen.
Projektin alussa ryhmälle annettiin yleisluontoinen kuvaus ohjelmalta toivottavista ominaisuuksista ja listaa tarkennettiin sovelluksen potentiaalisten käyttäjien haastattelujen pohjalta. Lisäksi Timmi-järjestelmän tuottaneen Yomi Oyj:n edustajien kanssa sovittiin Timmi-järjestelmän tarjoamasta rajapinnasta ja tietojen synkronoinnista järjestelmien välillä. Kiuru-projektin toteuttamista toiminnoista ja niiden suhteesta Timmi"-järjestelmään saa käsityksen kuvasta 3 luvussa 5.

3.1  Timmi-rajapinta ja tietojen synkronointi

Tietojen synkronointi Timmi- ja Korppi-järjestelmien välillä oli yksi Kiuru-projektin tärkeimmistä tavoitteista. Kiuru-projektiin sisältyi Timmi-järjestelmän kehittäjän Yomi Oyj:n kanssa toteutettu Timmi-rajapinnan määrittelyvaihe. Määrittelyvaiheen aikataulua jouduttiin kuitenkin useasti korjaamaan ja lopullinen Yomi Oyj:n toteuttama rajapintamäärittely saatiin hyväksytyksi vasta projektin viimeisimmällä kolmanneksella.
Määrittelyn pohjalta projektiryhmä aloitti tarvittavien Korppi-järjestelmän komponenttien kehittämisen ja eri toteutusvaihtoehtojen läpikäynnin. Komponentit valmistuivat vaiheeseen, jossa niiden testausta rajapinnan kanssa voisi aloittaa.
Yomi Oyj toimitti osittain toimivan ja testattavan rajapinnan projektiryhmän käyttöön vasta viimeisten viikkojen aikana tammikuun alussa, jolloin kehityksen painopiste oli jo projektin viimeistelyssä ja loppudokumentoinnissa. Testauksessa tarvittavaa WinTimmi 2.0 -ohjelmaa projektiryhmä ei koskaan saanut käyttöönsä.
Kiuru-projekti toteutti kuitenkin rajapinnan käyttämiseen ja tietojen synkronointiin tarvittavat peruskomponentit. Sen sijaan testaus- ja viimeistelyvaihe jäi valitettavan lyhyeksi ja käytännössä kesken.
Tammikuussa 2003 projektiryhmän viimeistellessä projektikansioitaan yliopisto ilmoitti luopuvansa Timmi-järjestelmän käytöstä.

3.2  Varausmoduulin käyttöliittymä

Varausmoduuli käsittää Kiuru-projektin toteuttamat osiot, jotka liittyvät salivarauksien tekemiseen, näyttämiseen ja käsittelyyn. Esimerkkeinä tästä ovat mm. varauspyynnön tekeminen, vahvistus ja poisto.
Kiuru-projekti sai toteutettua varausmoduuliin kaikki vaatimusmäärittelyssä määritellyt toiminnot lukuunottamatta varausprosessin virhetarkistuksia sekä mahdollisuutta selailla varauksia käyttäjien mukaan.
Varausprosessin virhetarkistukset ovat varausmoduulin suurin ongelma. Sovellus toimii, jos käyttäjä ei tee mitään väärin, vaan etenee lineaarisesti varausprosessin alusta loppuun saakka. Varausmoduulin saa kaatumaan antamalla väärän muotoisia syötteitä HTML"-sivujen lomakkeisiin. Myös radiopainikeryhmän jättäminen kokonaan tyhjäksi kaataa sovelluksen. Sovellus kuitenkin toipuu virheestä painamalla selaimen takaisin-painiketta ja korjaamalla virheellisen syötteen.
Toteutetussa versiossa varauksien selailu onnistuu vain omien varausten osalta, jolloin käyttäjä voi nähdä omat varauspyyntönsä ja varauksensa sekä niiden käsittelytilanteen. Käyttäjäkohtainen varausten seuranta olisi hyödyllinen lähinnä tilastointi- ja laskutusoperaatioissa. Vastaavia ominaisuuksia ei tällä hetkellä kuitenkaan ole suunnitteltu Korppi"-järjestelmään, joten tämä ei liene suuri puute.
Varausmoduulissa olevat virheet estävät toistaiseksi sovelluksen laajamittaisen käytön yliopistossa ja senpä vuoksi sitä tuleekin testata ja jatkokehittää.

3.3  Ylläpitäjän ja päävahvistajan käyttöliittymä

Ylläpitäjän ja päävahvistajan käyttöliittymään saatiin toteutettua salien ja saliryhmien hallinta. Timmi-järjestelmän yhteyshenkilöiden hallintaa ei ehditty toteuttaa, mutta toiminto ei ole välttämätön järjestelmän käyttämiseen. Jos varaukseen halutaan merkitä uusia yhteyshenkilöitä, ne täytyy lisätä manuaalisesti Timmi-järjestelmään.

3.4  Resurssipyynnöt

Resurssipyynnöllä tarkoitetaan salin yksilöimisen sijaan haluttuun saliin liittyvien vaatimusten määrittelyä varauspyyntöä tehtäessä. Pyynnössä voidaan määritellä esimerkiksi tarpeet videoprojektorille ja tietokoneelle. Resurssipyyntöjä ei vielä pysty tekemään Kiuru-sovelluksella. Tietokannassa on tuki resurssipyynnöille, mutta käyttöliittymää niille ei ole toteutettu.

3.5  Sovelluksen monikielisyys

Sovelluksen tukea eri kieliversioille ei toteutettu Kiuru-projektin aikana. Osasyynä tähän oli vastaavien toimintojen keskeneräisyys olemassaolevassa Korppi-järjestelmässä. Tämän aiheuttaa aikaisempien projektien käyttämät erilaiset käännöstekniikat, joita ollaan kehittämässä yhdenmukaiseksi. Toinen syy oli ajanpuute.
Projektiryhmä kuitenkin selvitti eri tekniikoita ja päätyi lopputulokseen, että lupaavin ratkaisu monikielisyyteen on Javan I18N. Java I18N on monipuolinen ja ennen kaikkea Sunin kehittämä ja Javaan sisäänrakennettu kielenkäännösteknologia, jota käyttämällä vältytään omatekoisilta ratkaisuilta.
Sovelluksen taustalle toimivista tietokannan tauluista osa on toteutettu siten, että niihin voidaan tallentaa tieto monikielisesti. Tästä tavasta ollaan kuitenkin osittain pyrkimässä eroon Korppi"-järjestelmässä.

3.6  Yhteenveto sovelluksen ominaisuuksista

Ryhmä sai auttavasti kokoon lähes kaikki projektin alkupuolella sille asetetut vaatimukset.
Sovelluksessa havaitut virheet on koottu lukuun 9 ja jatkokehitysideoita on esitelty lukuun 10.

4  Palvelinohjelmistot, toteutustekniikat ja työkalut

Luvussa esitellään projektissa käytetyt työkalut ja ohjelmointitekniikat. Koska Korppi-järjestelmä on useiden aikaisempien projektien tulos, käytti Kiuru pitkälti samoja menetelmiä ja tekniikoita yhtenäisyyden säilyttämiseksi. Kehitysympäristön käyttöjärjestelmänä oli Redhat Linux 7.3 ja sovelluskehittimenä NetBeans IDE 3.4.

4.1  JSP-tekniikka

Korppi-järjestelmän rakennetta ja JSP-tekniikan toimintaa on havainnollistettu kuvassa 1. Kun WWW-palvelin vastaanottaa pyynnön selaimelta, se päättelee, onko kyseessä staattinen HTML-sivu vai JSP-sivu. Apache palauttaa staattiset sivut suoraan takaisin selaimeen.
JSP-sivun pyyntö välittyy servlettimoottorille, joka Korppi-järjestelmässä on Tomcat. Se tutkii, onko kyselyä vastaava servletti olemassa. Olemassaoleva servletti suoritetaan ja se palauttaa selaimelle tuloksen HTML-muodossa. Jos servlettiä ei löydy, pyyntö ohjautuu JSP-moottorille, joka generoi servletin.
Figure
Figure 1: Korppi-järjestelmän rakenne.

4.2  JSP-sivujen käsittelylogiikka

Kuvan 2 kaaviossa esitetään vaiheittain tietojen käsittelylogiikka johonkin tietokohteeseen tehtävien pyyntöjen ja muokkausten osalta.
Figure
Figure 2: JSP-sivujen käsittely.
Oletetaan, että Modify-sivu on aluksi saanut HTTP-parametrina tiedon, mitä sivulla tehdään (esim. lisäys tai muokkaus) ja käsiteltävän tietokohteen tunnisteen.
Pyynnön käsittelyvaiheet ovat seuraavat:
  1. JSP-sivun HTTP-parametrit asettavat Handler-pavun vastaavat ominaisuudet (tieto siitä, mitä sivulla tehdään on myös ominaisuutena). HandlerBean hakee tarvittaessa tiedot tietokannasta Dbbean-pavun avulla.

  2. Sivun tiedot generoidaan HandlerBean-pavun ominaisuuksien pohjalta.

  3. Käyttäjän syöttämät Modify-lomakkeen tiedot lähetetään HTTP-muuttujina JSP-Handler -sivulle.

  4. HTTP-parametrit asettavat HandlerBean-pavun vastaavat ominaisuudet. Jos syötteet ovat kelvollisia, HandlerBean päivittää tarvittaessa tietokannan tiedot.

  5. HandlerBean palauttaa ominaisuuksissaan tiedon, onko päivitys onnistunut ja ovatko syötteet kelvollisia.



Projektiryhmä noudatti seuraavia periaatteita JSP-sivuja ja Java-papuja toteuttaessaan:

4.3  Java-pavut

Java-pavut (engl. JavaBeans) ovat Javalla toteutettuja luokkia. Java-koodi keskitettiin papuihin siten, että varsinaisten JSP-sivujen ylläpidettävyys säilyy. Lisäksi Kiuru-projekti toteutti yleiskäyttöisiä papuja, joita tulevat projektit ja jatkokehittäjät voivat käyttää varausten suunnitteluohjelman toteutuksessa.
Timmi-rajapinnan käsittely ja rajapinnasta saatavien XML-muotoisten vastausten käsittely sekä muut erikoistoiminnot hoidetaan omissa pavuissaan. Näin järjestelmän ylläpito ja muokkaaminen helpottuu.

4.4  Tietokanta

Aiempien Korppi-järjestelmään liittyvien sovellusprojektien tapaan Kiuru-projektissa ei käytetty PostgreSQL-tietokannan hallintajärjestelmän erikoispiirteitä, vaan noudatettin SQL92-standardia. Ainoana poikkeuksena standardin käytöstä on tietokantaraportissa mainittu EventSpace- ja Reservation-taulujen synkronointi säännöillä. Tämä ratkaisu mahdollistaa järjestelmän siirrettävyyden alustalta toiselle.
Kiuru-projektin toteuttamat Kotka-tietokannan muutokset ja lisäykset suunniteltiin ER-kaavioiden avulla ja toteutettiin SQL-lauseilla. Muutokset olemassaolevaan tietokantaratkaisuun pyrittiin minimoimaan, mutta toisaalta pyrittiin ottamaan huomioon tulevien projektien tarpeet. Muutokset on kuvattu taulujen ja kenttien tasolla Kotka-tietokantaraportissa.

5  Sivujen käyttöliittymän yleisrakenne

Luvussa kuvataan yleisellä tasolla Kiuru-sovellukseen toteutettua käyttöliittymää sekä sen suhdetta Timmi-järjestelmään. Sivujen teknisiä toteutuksia on esitetty tämän dokumentin luvuissa 4 ja 6.
Kiuru-sovellukseen toteutettiin varausjärjestelmän käyttöliittymät salien varauspyyntöjen tekijöille ja vahvistajille sekä ylläpitäjän toiminnot salien ja saliryhmien hallintaan. Resurssipyyntöjen ja yhteyshenkilöiden käsittely sovittiin jätettäväksi jatkokehitykseen.
Käyttöliittymien ulkoasut pidettiin yhtenäisinä Korppi-järjestelmän ulkoasun kanssa. Sovelluksen käyttäjä ei siten tiedä käyttävänsä erillistä moduulia, vaan hänelle Kiuru-sovellus on yhtenäinen osa Korppi-järjestelmää.
Kuvassa 3 on kuvattu käyttöliittymäsivujen jakautuminen järjestelmän moduleissa. Olemassaolevia sivuja on muokattu kalenterimodulin ja opettajan käyttöliittymän osalta. Tenttien hallinnan muokkaus jäi jatkokehitykseen. Kiuru-projektissa uutena toteutettu varausjärjestelmä sisältää sivut varausten listaukseen, käsittelyyn sekä raporttien generointiin. Varausten, yhteyshenkilöiden ja salien tietoja muokkaavat sivut käyttävät Timmi-rajapintakomponenttia.
Figure
Figure 3: Sivustokartta.

6  JSP-sivut

Luvussa kuvataan kaikki Kiuru-projektin toteuttamat ja muokkaamat JSP-sivut. JSP-sivujen toimintaperiaate on luvussa 4.2 määritellyn periaatteen mukainen. Käsittelijäsivut on yleensä nimetty päätteellä handler. Toiminnot on kapseloitu mahdollisimman pitkälle Java-papuihin, jotka on kuvattu luvussa 7.

6.1  Kalenteri

Kalenterimoduuliin tehdyt muutokset liittyvät ensisijaisesti salivarausmahdollisuuden lisäämiseen tapahtuman määrittelyyn. Tapahtumia voi tarkastella henkilökohtaisen tai ryhmäkohtaisen näkymän lisäksi salikohtaisesti.

6.1.1  Salin viikkokalenteri spaceweek.jsp

Sivulla spaceweek.jsp käyttäjä voi tarkastella yksittäisen salin tapahtumia määrätyllä viikolla. Sivu vastaa ulkoasultaan ja toimintalogiikaltaan henkilön kalenterimoduulin week.jsp-sivua. Sivun näkymä on esitetty kuvassa 4.
Figure
Figure 4: Salin tapahtumatietojen viikkonäyttö.
Parametrin spaceID avulla määritellään sali, jonka tietoja tarkastellaan. Lisäksi sali käyttää muiden kalenterisivujen tapaan parametreja weekStartDate, clockMinuteAddition, firstHour ja lastHour sivun ulkoasun määrittämiseen. Tee raportti -painikkeella käyttäjä voi luoda viikkonäkymästä PDF-muotoisen raportin.

6.1.2  Muutokset tapahtuman lisäyssivulle addAppointment.jsp

Käyttäjä voi määritellä tapahtuman tiedot sivulla addAppointment. Kiuru-projekti lisäsi sivulle mahdollisuuden tehdä tapahtumasta salivaraus ja muokkasi käyttöliittymää salin valintaan. Sivun näkymä on esitetty kuvassa 5.
Figure
Figure 5: Tapahtuman lisäys.
Parametri eventID määrittää tapahtuman tunnisteen. Paikka-tekstikenttä vaihdettiin alasvetovalikoksi, jossa näkyvät käyttäjän mielisalit ja tapahtumaa varten haetut salit. Näin järjestelmään ei lisätä vahingossa samaa salia moneen kertaan nimen kirjoitusasua vaihtamalla. Sama hakutoiminto on käytössä opettajan käyttöliittymässä sivulla modifyGroup.jsp (Katso luku 6.2.1).

6.2  Opettajan käyttöliittymä

Kalenterimoduulin tapaan myös opettajan käyttöliittymään tehdyt muutokset liittyvät salivarausmahdollisuuden lisäämiseen kurssin tapahtumien määrittelyyn.

6.2.1  Muutokset sivulle modifyGroup.jsp

modifyGroup.jsp-sivulla opettaja voi määritellä kurssin tapahtumaryhmän ajat ja paikat. Kiuru-projekti lisäsi sivulle mahdollisuuden tehdä tapahtumista varauspyyntö ja muokkasi käyttöliittymää salin valinnan osalta. Sivun näkymä on esitetty kuvassa 6.
Figure
Figure 6: Opetusryhmien tapahtumien määrittäminen.
Sivulla käytetään uutta parametria space haetun salin tunnisteen välittämiseen. Paikka-alasvetovalikossa näkyvät kaikkien salien listan sijaan käyttäjän mielisalit ja tapahtumia varten haetut salit. Sama hakutoiminto on käytössä kalenterimoduulin sivulla addAppointment.jsp, joka kuvataan luvussa 6.1.2.

6.3  Varausjärjestelmä

Varausjärjestelmän kehittäminen Korppi-järjestelmään oli Kiuru-projektin merkittävin osuus. Kokonaisuuteen kuuluu sekä varauksien tietoja näyttäviä sivuja, että varausten hallintaan ja hyväksyntään liittyviä sivuja.

6.3.1  myReservations.jsp ja deleteReservations.jsp

Sivu myReservations.jsp on varausmoduulin aloitussivu. Sivulla on listattuna varauspyynnöt, joiden tekijänä tai yhteyshenkilönä käyttäjä on. Sivun näkymä on esitetty kuvassa 7. deleteReservations.jsp on käsittelijä varauspyyntöjen poistamiseen.
Figure
Figure 7: Omat varaukset.
Käyttäjä näkee sivulta nopeasti varauspyyntöjen tilanteen. Jatkokehityksessä toistuvia tapahtumia on tarkoitus pystyä ryhmittelemään sekä liittämään yhteen. Tällöin tilanteesta saa yleiskuvan, vaikka tapahtumia olisi paljon.

6.3.2  searchFreeSpace.jsp ja newSpace.jsp

Sivua searchFreeSpace.jsp käytetään vapaan salin hakuun tapahtuman
määrittelyn aikana. Sivulle on linkki kalenterin ja opettajan käyttöliittymän sivuilta (katso luvut 6.1 ja 6.2). Sivun näkymä on esitetty kuvassa 8. Haun tulokset on esitetty aliluvun 6.3.3 sivulla searchResult.jsp. Sivu newSpace.jsp on käsittelijä uuden salin lisäämiseen.
Figure
Figure 8: Vapaan salin haku.
Hakusanaksi voi antaa salin nimen alkuosan tai haluttaessa useampia sanoja pilkuilla tai kauttaviivoilla erotettuina. Sivulla voi myös lisätä nopeasti uuden salin tai paikan käyttöön, joka normaalin käyttäjän tapauksessa kirjautuu hänen lempisaliensa joukkoon. Varsinaisten salien lisäysoikeudet ovat vain ylläpitäjällä. Toiminto vastaa aiemman tapahtuman syöttö- ja muokkaussivujen tekstiruutua, johon käyttäjä saattoi vapaasti kirjoittaa salin nimen. Sali lisättiin automaattisesti järjestelmään, jos sitä ei ollut olemassa.
Sivun parametrit ovat samat kuin kutsuvalla sivulla. Valitun salin tunniste on parametrissa space.

6.3.3  searchResults.jsp

Sivulla näkyvät vapaan salin haun tulokset. Itse hakusivu on esitetty aliluvussa 6.3.2. Sivun näkymä on esitetty kuvassa 9.
Figure
Figure 9: Hakutulokset vapaista saleista.
Hakutuloksena saatuja saleja voi lisätä suoraan henkilökohtaiseen mielisaliryhmään, jolloin sali näkyy jatkossa sivujen addAppointment.jsp ja modifyGroup.jsp alasvetovalikoissa. Käyttäjän valitsema sali liitetään määriteltävään tapahtumaan Valitse-painikkeella.
Salin parametrit ovat samat kuin kutsuvalla sivulla. Salin hakuehto tuodaan parametrissa searchText.

6.3.4  makeReservation.jsp ja commitReservation.jsp

makeReservation.jsp-sivua käytetään opettajan käyttöliittymässä sivulla modifyGroup.jsp, kun käyttäjä tekee varauspyynnön määrittelemilleen tapahtumille. Määritellyistä tapahtumista muodostetaan osa sivun tiedoista. Sivun näkymä on esitetty kuvassa 10. commitReservation.jsp on käsittelijä varauksen tekemiseen.
Figure
Figure 10: Varauspyynnön teko.
Varauspyynnön tekijä on oletuksena Korppi-järjestelmän tämänhetkinen käyttäjä. Yhteyshenkilöt valitaan kurssin (tunti)opettajista tai tapahtumaryhmän jäsenistä.
Sivun parametrit ovat samat kuin kutsuvalla sivulla. Käsittelijän parametrit ovat seuraavat:
eventon varauksen tunniste,
requestStateon varauksen tilanne,
cPersonon varaajan yhteyshenkilö,
organisationon varaajan organisaatio,
payOrganisationon maksajan organisaatio,
spaceon salin tunniste ja
teeVarauspyyntoon sivun tallennustoiminto.

6.3.5  show- ja modifyReservationRequests.jsp

Sivu showReservationRequests.jsp listaa varauspyynnöt saleihin, joihin käyttäjällä on vahvistusoikeus. Varauspyynnöt voi ryhmitellä käyttäjän määrittelemän kentän mukaan otsikkorivin linkeillä. Sivun näkymä on esitetty kuvassa 11. modifyReservationRequests.jsp on käsittelijä varausten vahvistukseen tai hylkäykseen.
Figure
Figure 11: Varauspyyntöjen listaus.
showReservationRequests.jsp-sivun ainoa parametri on order, jolla määritetään varausten järjestys.
Käsittelijän parametrit ovat seuraavat:
reservationmäärittää vahvistettavat tai hylättävät varaukset,
acceptmäärittää hyväksymistoiminnon ja
rejectmäärittää hylkäämistoiminnon.

6.3.6  reportInit.jsp ja reportHandler.jsp

reportInit.jsp on raporttien luontisivu. Järjestelmän raportit rajoittuvat viikkolukujärjestysten luomiseen, joita tosin voi luoda samalla kertaa useammille saleille ja saliryhmille kerrallaan. Sivun näkymä on esitetty kuvassa 12.
Sivu reportHandler.jsp on raporttien käsittelijä. Sivulta pääsee myös spaceweek.jsp-sivulle (katso luku 6.1.1) tarkastelemaan salin viikkonäkymää.
Figure
Figure 12: Raportin luonti.
Sivun parametrit ovat seuraavat:
codeon sivun hakuehto,
orderon salien ja saliryhmien listausjärjestys,
submitSearchon toiminto uudelle haulle ja
continueSearchon toiminto haun jatkamiselle.
Käsittelijän parametrit ovat seuraavat:
weekStartDatemäärittää aloitusviikon,
clockMinuteAdditionmäärittää kellon asetukset,
firstHourmäärittää aloitustunnin,
lastHourmäärittää päättymistunnin,
spaceIdsisältää salit, jotka sisällytetään raporttiin (voi olla useita) ja
spaceGroupIdsisältää saliryhmät, joita raporttiin tulee (voi olla useita).

6.4  Ylläpitäjän käyttöliittymä

Ylläpitäjän käyttöliittymään tehtiin lisäyksiä salien ja saliryhmien hallinnan osalta. Tämä siksi, että salien varauspyyntö- ja vahvistusoikeudet määritellään saliryhmien avulla. Vain ylläpitäjä voi määritellä uuden saliryhmän, johon voidaan tehdä varauksia.
Saliryhmien osalta sama käyttöliittymä on rajoitetusti käytössä myös tavallisilla käyttäjillä omien mielisalien ryhmän muokkaukseen.

6.4.1  Muutokset sivulle admin.jsp

admin.jsp on ylläpitäjän aloitussivu. Sivun näkymä on esitetty kuvassa 13.
Figure
Figure 13: Ylläpitäjän aloitussivu.
Kiuru-projekti lisäsi sivulle linkit Salit ja Saliryhmät uusille sivuille. Muita muutoksia ei tehty.

6.4.2  searchSpace.jsp ja searchSpaceHandler.jsp

Sivua searchSpace.jsp käytetään salien hakemiseen tietojen muuttamista tai poistamista varten. Sivun näkymä on esitetty kuvassa 14. searchSpaceHandler.jsp on sivun käsittelijä.
Figure
Figure 14: Salin haku.
Hakusanaksi voi antaa salin nimen alkuosan tai haluttaessa useampia sanoja pilkuilla tai kauttaviivoilla erotettuna. Ylläpitäjä voi tarvittaessa poistaa useamman salin kerralla (poistamisesta katso luku 6.4.3).
Sivun parametrit ovat seuraavat:
codeon hakuehto,
orderon salien järjestys,
submitSearchon toiminto uudelle haulle ja
continueSearchon toiminto haun jatkamiselle.
Käsittelijän parametrit ovat seuraavat:
submitAddon salin lisäystoiminto,
submitDeleteon salin poistotoiminto ja
selectedSpacessisältää poistettavaksi valitut salit.

6.4.3  modifySpace.jsp ja spaceHandler.jsp

modifySpace.jsp-sivu on tarkoitettu salin tietojen muokkaukseen. Lisäksi salin voi liittää yhteen tai useampaan saliryhmään. Sivun näkymä on esitetty kuvassa 15.
Figure
Figure 15: Salin tietojen muokkaus.
Viite-eheyden säilyttämiseksi salia poistettaessa merkitään poistetuksi myös salin liitokset saliryhmiin, resursseihin ja tapahtumiin.
Sivun parametrit ovat seuraavat:
spaceIdon käsiteltävän salin tunniste ja
submitModifyon salin muokkaustoiminto.
Käsittelijän parametrit ovat seuraavat:
spaceIdon käsiteltävän salin tunniste,
submitModifyon salin muokkaustoiminto,
nameon salin nimi,
organisationIdon salista vastaavan organisaation tunniste,
typeon salityypin tunniste,
sizeon salin paikkamäärä,
submitPoston tallennustoiminto,
submitDeleteRecordon poistotoiminto,
submitAddSpaceGroupon saliryhmän lisäys,
submitAddSpaceGroupConfirmon saliryhmän lisäyksen vahvistus ja
selectedSpaceGroupson lisättävien saliryhmien tunniste.

6.4.4  addSpaceGroupToSpace.jsp

Sivu addSpaceGroupToSpace.jsp on käyttöliittymä salin liittämiseen yhteen tai useampaan olemassaolevaan saliryhmään. Sivun näkymä on esitetty kuvassa 16.
Figure
Figure 16: Saliryhmän liittäminen saliin.
Sivua kutsutaan sivulta modifySpace.jsp (luku 6.4.3) ja se käyttää samaa käsittelijää. Sivun ainoa parametri on saliryhmien järjestyksen määrittävä order.

6.4.5  searchSpaceGroup.jsp

Sivua searchSpaceGroup.jsp käytetään saliryhmien hakemiseen tietojen muuttamista tai poistamista varten. Ylläpitäjälle näkyvät kaikki saliryhmät, kun muille näkyvät ainoastaan henkilökohtaiset hakuryhmät, mielisaliryhmä ja muut saliryhmät, joihin henkilöllä on vahvistus- tai muokkausoikeus. Sivun näkymä on esitetty kuvassa 17.
Figure
Figure 17: Saliryhmän haku.
Jatkokehityksessä sivuun on lisättävä hakutoiminto. Sivun ainoa parametri on saliryhmien järjestyksen määrittävä order.

6.4.6  modifySpaceGroup.jsp ja spaceGroupHandler.jsp

Sivulla modifySpaceGroup.jspvoi muokata saliryhmän tietoja. Ylläpitäjällä on oikeus kaikkien tietojen muokkaamiseen, kun muiden oikeudet määräytyvät vahvistus- ja muokkausoikeuden mukaan. Sivun näkymä on esitetty kuvassa 18. spaceGroupHandler.jsp on sivun käsittelijä.
Figure
Figure 18: Saliryhmän tietojen muokkaus.
Jos henkilöllä on muokkausoikeus, hän saa lisätä tai poistaa henkilöitä ja saleja saliryhmästä. Jos henkilöllä on lisäksi päävahvistajan oikeudet, hän saa muokata muiden saliryhmään liittyvien henkilöiden vahvistusoikeuksia. Muut saavat ainoastaa luoda uusia hakuryhmiä tai mielisaliryhmiä. Vain ylläpitäjä saa luoda saliryhmän, johon kuuluvilla henkilöillä on varausoikeudet.
Sivun parametrit ovat seuraavat:
spaceGroupidon saliryhmän tunniste,
submitModifyon salin muokkaustoiminto ja
submitAddon lisäystoiminto.
Käsittelijän parametrit ovat seuraavat:
spaceGroupidon saliryhmän tunniste,
submitModifyon salin muokkaustoiminto,
submitAddon lisäystoiminto,
nameon saliryhmän nimi,
typeon saliryhmätyypin tunniste,
accessRightLevelIdon varauspyyntöjen pienin käyttöoikeustaso,
descriptionon vapaamuotoinen kuvaus,
submitPoston tallennustoiminto,
submitDeleteon poistotoiminto,
submitAddSpaceon salin lisäys saliryhmään,
submitDeleteSpaceon salin poisto saliryhmästä,
submitAddSpaceConfirmon salin lisäyksen vahvistus,
selectedSpacessisältää valittujen salien tunnisteet,
submitAddPersonson henkilön lisäys saliryhmään,
submitDeletePersonson henkilön poisto saliryhmästä,
submitAddPersonConfirmon henkilön lisäyksen vahvistus ja
selectedPersonssisältää valittujen henkilöiden tunnisteet.
Käsittelijä käyttää myös numeroituja parametreja accessLevelN ja modifyRightN, missä N on henkilön tunnistenumero ja parametrien arvot ovat kyseisen henkilön vahvistusoikeus ja muokkausoikeus.

6.4.7  addPersonToSpaceGroup.jsp

Sivu addPersonToSpaceGroup.jsp on käyttöliittymä henkilöiden lisäämiseen saliryhmään jossakin roolissa. Hakusanaksi voi antaa henkilön sukunimen alkuosan tai haluttaessa useampia sanoja pilkulla tai kauttaviivalla erotettuina. Sivun näkymä on esitetty kuvassa 19.
Figure
Figure 19: Henkilön lisäys saliryhmään.
Sivua kutsutaan sivulta modifySpaceGroup.jsp (luku 6.4.6) ja se käyttää samaa käsittelijää.
Sivun parametrit ovat seuraavat:
personNameon hakuehto,
orderon järjestyksen määritys
submitSearchon toiminto uudelle haulle ja
continueSearchtoiminto haun jatkamiselle.

6.4.8  addSpaceToSpaceGroup.jsp

Sivu addSpaceToSpaceGroup.jsp on käyttöliittymä salien lisäämiseen saliryhmään. Hakusanaksi voi antaa salin koodin alkuosan tai haluttaessa useampia sanoja pilkulla tai kauttaviivalla erotettuina. Sivun näkymä on esitetty kuvassa 20.
Figure
Figure 20: Salin lisäys saliryhmään.
Sivua kutsutaan sivulta modifySpaceGroup.jsp (luku 6.4.6) ja se käyttää samaa käsittelijää.
Sivun parametrit ovat seuraavat:
codeon hakuehto,
orderon järjestyksen määritys,
submitSearchon toiminto uudelle haulle ja
continueSearchon toiminto haun jatkamiselle.

7  Java-pavut

Kiuru-projektissa yleiskäyttöiset aliohjelmat on ohjelmoitu Java-papuina. Aiemmat projektit ovat toteuttaneet töidensä yhteydessä niistä osan, mutta Kiuru-projekti joutui uudistamaan osaa niistä. Varsinaisten opiskelijaprojektien lisäksi papuja on toteutettu myös Korppi-järjestelmän jatkokehityksessä, osittain päällekkäin Kiuru-projektin tuotosten kanssa. Jatkokehittäjien toteuttamia muutoksia ei ole dokumentoitu projektin dokumentteihin.
Olemassaolevien papujen lisäksi Kiuru-projekti suunnitteli ja toteutti runsaasti uusia papuja. Osaksi tämä johtuu JSP-sivujen uudesta käsittelylogiikasta (katso luku 4.2) ja osaksi siitä, että projekti asetti yhdeksi osatavoitteeksi koko järjestelmää helpottavien uusien yleiskäyttöisten papujen luomisen. Esimerkiksi HtmlBean- ja SimpleDB-pavut (luvut 7.3.1 ja 7.3.4) yksinkertaistavat JSP-sivuja huomattavasti.
Luvussa kuvataan Kiuru-projektin toteuttamat lisäykset ja muutokset olemassaoleviin papuihin. Kaikkien uusien ja muokattujen papujen lähdekoodi on tulostettuna muiden projektiin liittyvien lähdekoodien yhteydessä. Tarkemmat kuvaukset metodeista löytyvät papujen JavaDoc-dokumentaatiosta.

7.1  kotkabeans-pakettiin tehdyt muutokset

kotkabeans-paketti pyrittiin pitämään mahdollisimman muuttumattomana, koska paketin pavut ovat koko järjestelmän käytössä. Olemassaolevia metodeja ei muutettu lukuunottamatta HtmlMenu-luokan createTree-metodia. Muihin luokkiin tehtiin pieniä lisäyksiä.

7.1.1  cSQL.java

cSQL-pavussa on järjestelmän eri moduulien käyttämiä SQL-lauseita. Papu otettiin käyttöön Korppi-järjestelmän jatkokehityksessä.
Kiuru-projekti lisäsi papuun seuraavat metodit:
getOrganisationByIdpalauttaa tunnisteella määritellyn organisaation nimen käyttäjän kielellä.
getAccessRightLevelspalauttaa järjestelmän käyttöoikeustasot käyttäjän kielellä.

7.1.2  DB.java

DB-papu on ollut järjestelmän rajapinta tietokannan käyttöön Kotka-projektista alkaen.
Papuun lisättiin uusi metodi prepareStatement. Metodia käytetään valmisteltujen SQL-lauseiden luontiin. Valmisteltu SQL-lause parantaa suorituskykyä erityisesti tilanteessa, jos joudutaan ajamaan monta kertaa lause, joka on rakenteeltaan sama, mutta lauseen parametrit muuttuvat välillä. Esimerkiksi kyselysarja
  select * from person 
      where personid = 1 and homeorganisationid = 10;
      
  select * from person 
      where personid = 2 and homeorganisationid = 10;

voidaan suorittaa tehokkaammin määrittelemällä valmisteltu SQL-lause seuraavasti:
  select * from person 
      where personid = ? and homeorganisationid = ?;

Ennen kyselyn ajamista määritellään ainoastaan kysymysmerkillä määritellyt parametrit.

7.1.3  Encoder.java

Papua käytetään koodaamaan käyttäjältä kysyttäviä merkkijonoja. Esimerkiksi SQL-lauseisiin menevissä tiedoissa ei saa olla lauseen rakennetta sekoittavia tai muuten "vaarallisia" merkkejä. Papu otettiin käyttöön Korppi-järjestelmän jatkokehityksessä.
Papuun lisättiin metodi LatexEncode, joka tunnistaa syötemerkkijonosta LATEX-ladontaohjelman käyttämät ohjausmerkit ja muuttaa ne tavallisina merkkeinä tulostuvaan muotoon.

7.1.4  HTMLMenu.java

HTMLMenu-papu vastaa Korppi-järjestelmän käyttöliittymän vasemmassa reunassa näkyvästä navigointipuusta. Papu otettiin käyttöön Korppi-järjestelmän jatkokehityksessä. Selvitys pavun toiminnasta löytyy HTML-dokumenttina osoitteesta
http://jamshedpur.it.jyu.fi/doku.html\#MENU.
Papuun lisättiin vakioita Kiuru-sovelluksen fyysisen polun määräämiseksi. Lisäksi metodiin createTree lisättiin Salivaraukset-osio navigointipalkkiin ja linkit uusille ylläpitäjän sivuille.
Muokatun pavun toiminta ei ole täysin toiveiden mukainen. Johtuen JSP-sivujen uudesta käsittelylogiikasta käsiteltävän sivun URL voi muuttua toimintojen aikana . Esimerkiksi ModifySpace.jsp:stä siirrytään salin tietoja tallennettaessa sivulle SpaceHandler.jsp (katso luku 6.4.3), jolloin navigointipalkki "romahtaa kasaan". Tällöin valittuna olevaa sivua tai sovelluksen osaa ei voi havaita navigointipalkista. Toivottavampaa olisi, että navigointipalkki säilyttäisi edellisen tilansa. Kiuru-projektin puitteissa tätä ominaisuutta ei kuitenkaan korjattu.

7.1.5  User.java

User-papu vastaa käyttäjän tietojen ylläpidosta. Papu on ollut käytössä Kotka-projektista lähtien.
Kiuru-projekti lisäsi papuun metodin hasAdminRight. Metodi palauttaa tiedon siitä, onko käyttäjällä ylläpitäjän oikeudet.

7.1.6  Tools.java

Tools-papu sisältää yleiskäyttöisiä metodeja. Se on ollut käytössä Kotka-projektista lähtien.
Papuun lisättiin seuraavat metodit:
getRequestParametersAsHiddenspalauttaa merkkijonon, jossa on ilmaistu HTTP-kyselyn parametrit HTML-kielen hidden-elementteinä.
synchronizeStreamssynkronoi Javan syöte- ja tulostusvirran niin, että syötevirta tulostetaan rivi kerrallaan tulostusvirtaan, kunnes syötevirrassa ei ole mitään.

7.2  kolibribeans-pakettiin tehdyt muutokset

kolibribeans-paketin pavut liittyvät lähinnä kalenterimoduulin käyttöön. Uusia metodeja jouduttiin lisäämään salin viikkonäkymää varten. Lisäksi raporttien luonnissa käytettiin pohjana kalenterimoduulin koodia.

7.2.1  EventBean.java

EventBean on Kolibri-projektin luoma yksittäisen tapahtuman kapseloiva papu.
Kiuru-projekti lisäsi papuun seuraavat varausjärjestelmää tukevat metodit:
getContactPersonpalauttaa varaukseen liittyvän varaajan yhteyshenkilön. Jos tapahtuma ei ole varaus, metodi palauttaa tapahtuman omistavan tapahtumaryhmän nimen.
getOrganisationpalauttaa varaukseen liittyvän varaajaorganisaation. Jos tapahtuma ei ole varaus, metodi yrittää etsiä organisaation kurssista, johon tapahtuma liittyy. Jos kyseessä ei ole opetustapahtuma, metodi palauttaa tyhjän merkkijonon.

7.2.2  EventBeanContainer.java

EventBeanContainer-papu on Kolibri-projektin luoma tietorakenne tapahtumajoukkoa varten. Kiuru-projekti korjasi pavun muodostimessa olevan virheen, joka liittyi henkilön tunnistenumeron määrittämiseen.

7.2.3  QueryContainer.java

QueryContainer-pavussa ovat Kolibri-projektin tietokantakyselyt. Papu vastaa kotkabeans-paketissa olevaa cSQL-papua (katso luku 7.1.1).
Papuun lisättiin metodi getSpacesEvents, joka palauttaa kaikki tiettyyn saliin liittyvät tapahtumat. Metodia käytetään raporttien luonnissa (katso luku 6.3.6).

7.2.4  Week.java

Papu kapseloi kalenterin viikkonäytön. Se otettiin käyttöön Kolibri-projektissa.
Papuun lisättiin metodi printLatexWeekCalendar. Se palauttaa tulostusvirtaan viikkonäkymän LATEX-formaatissa. Metodin toteutus vastaa samassa pavussa olevaa printWeekCalendarBookTime-metodia.

7.3  Kiurubeans-paketti

Kiuru-projektin toteuttamat uudet pavut jakautuvat karkeasti seuraaviin luokkiin: Papujen suunnittelussa ja toteutuksessa pyrittiin hyödyntämään Javan olio-ohjelmointia tukevia ominaisuuksia. Luokat KiuruHandler (luku 7.3.9), SearchHandler (luku 7.3.13), StatementItem (luku 7.3.6) ja TimmiObject (luku 7.3.20) ovat yliluokkia muille järjestelmän pavuille.

7.3.1  HtmlBean.java

Papu sisältää HTML-sivujen generointia helpottavia yleiskäyttöisiä metodeja. Se sisältää attribuuttien get- ja set-metodien lisäksi seuraavat merkijonoja palauttavat metodit:
bottomNavigatorpalauttaa varausjärjestelmän sivujen alaosassa olevan linkkilistan.
createSearchFormluo HTML-lomakkeen, johon käyttäjä voi syöttää hakuehdon. Käytetään esimerkiksi henkilön hakemisessa nimen mukaan.
getHiddenpalauttaa piilotetun HTML-lomakkeen elementin.
getSubmitpalauttaa HTML-lomakkeen painikkeen.
makeCheckBoxluo HTML-lomakkeen valintaruutulistan annettujen tietueiden perusteella.
makeRadioGroupluo HTML-lomakkeen poissulkevan radiopainikelistan annettujen tietueiden perusteella.
makeSelectListluo HTML-lomakkeen valintalistan annettujen tietueiden perusteella.
translatekääntää annetun merkkijonon User-pavun T-metodilla ja palauttaa tuloksen erityisfontilla. Käytetään mm. ilmoitusten välittämisessä käyttäjälle.

7.3.2  StringPair.java

StringPair-papu kapseloi merkkijonomuotoisen avaimesta ja arvosta koostuvan parin. Se ei sisällä attribuuttien get- ja set-metodien lisäksi muita metodeja.

7.3.3  KiuruString.java

KiuruString-papu sisältää merkkijonojen käyttöä helpottavia yleiskäyttöisiä metodeja. Se sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
arrayToCSVmuuntaa taulukon erotinmerkillä erotelluksi merkkijonoksi.
getCurrentPagepalauttaa käyttäjän käsittelemän sivun URL:n.
quotelisää merkkijonon ympärille tavalliset lainausmerkit (").
sqlQuotelisää merkkijonon ympärille yksinkertaiset lainausmerkit (').
sqlTrimmuuntaa Encode-luokan SQLEncode-metodilla merkkijonon SQL:n hyväksymään muotoon ja poistaa siitä ylimääräiset tyhjät merkit.

7.3.4  SimpleDb.java

SimpleDb-papu sisältää tietokannan käyttöä helpottavia yleiskäyttöisiä metodeja. Se sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
addSqlDeletedlisää SQL-lauseeseen deleted-kenttien tarkistuksen annetuille tauluille.
addSqlFromlisää SQL-lauseeseen FROM-osan annetuille tauluille.
checkIfEditabletutkii, voiko annettua tietokantakyselystä saatua RS2-joukkoa käydä läpi. Jos voi, asettaa kursorin joukon ensimmäiseen tietueeseen.
executeTransactionkäynnistää StatementContainer-luokassa määritellyn SQL-lausesarjan. Lauseet suoritetaan transaktiona.
formatOrSetpalauttaa muotoiltuna SQL-lauseen osan, jossa on listattuna OR-ehdolla annettuja numeroita määrätyssä taulussa.
formatSearchStringkäsittelee HtmlBean-pavussa annetun createSearchForm-tyyliseen hakulomakkeeseen annetun merkkijonon ja antaa sen edelleen Tools-luokan parseSearch-metodille. Palauttaa SQL-lauseen osan.
getStringmuuntaa tietokannan kyselystä saadun RS2-joukon merkkijonokentän niin, että mahdollisen NULL-viitteen sijaan palautetaan tyhjä merkkijono.
recordExiststutkii, onko määrätyillä ehdoilla annettu tietue olemassa tietokannassa. Tulkitsee myös deleted=true-määritellyn tietueen olemassaolevaksi. Käytetään tietokohteiden käsittelijäluokkien metodissa, joka tallentaa olion tietokantaan.
RS2toArraymuuntaa RS2-hakujoukon taulukoksi.
simpleQueryon yksinkertainen SQL-kysely, joka luo tietokantayhteyden ja varmistaa, että se suljetaan ennen kuin metodista poistutaan.
simpleUpdateon yksinkertainen SQL-komento, joka luo tietokantayhteyden ja varmistaa, että se suljetaan ennen kuin metodista poistutaan.

7.3.5  StatementContainer.java

StatementContainer-papu on säiliöluokka StatementItem-luokasta perityille olioille. Luokka automatisoi parametrisoitujen SQL-lauseiden ajoa. Se sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
addStatementlisää säiliöön uuden parametrin.
preparevalmistelee SQL-lauseen.
prepareItemsvalmistelee SQL-lauseen parametrit. Metodia kutsutaan, jos parametreja halutaan muuttaa sen jälkeen, kun lause on alunperin valmisteltu.

7.3.6  StatementItem.java

StatementItem-papu on yliluokka valmistellun SQL-lauseen parametrille. Se määrittelee attribuuttien get- ja set-metodien lisäksi metodin assignItem, joka vastaa yksittäisen parametrin valmistelusta oikealla tietotyypillä.

7.3.7  IntItem.java

IntItem on peritty StatementItem-luokasta (luku 7.3.6). Se kapseloi kokonaislukumuotoisen SQL-lauseen parametrin.
Papu ylikirjoittaa metodin assignItem.

7.3.8  StringItem.java

StringItem on peritty StatementItem-luokasta (luku 7.3.6). Se kapseloi merkkijonomuotoisen SQL-lauseen parametrin.
Papu ylikirjoittaa metodin assignItem.

7.3.9  KiuruHandler.java

KiuruHandler on abstrakti yliluokka tietokannan tietokohteiden ja hakuluokkien käsittelijöille. Luokkien yhteisenä tekijänä on "toiminnon" käsite. Toimintoja voivat olla esim. tietojen tallennus tietokantaan tai haku jollakin kriteerillä. Toiminnon määrää olion tila.
JSP-sivuja käytettäessä olion tila määräytyy HTTP-parametrien avulla ja toiminto ajetaan aina sivulle tultaessa. Toiminto yksinkertaistaa merkittävästi JSP-sivujen koodausta. JSP-käyttöliittymäsivulla ei tarvitse erikseen käsitellä, mitä sivun pitäisi tehdä, vaan riittää kutsua performAction-metodia. Lisätietoja JSP-sivujen toimintalogiikasta on luvussa 4.2.
Papu sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
performActionsuorittaa toiminnon. Toiminnot määrätään yleensä JSP-sivujen parametreina. Eri JSP-sivujen parametrit on kuvattu luvussa 6.
resetErrorStatepalauttaa mahdollisen virheilmoituksen (tai tilannetietoja käyttäjälle), tyhjentää Error-olion ja asettaa olion normaaliin tilaan (jos on oltu virhetilassa). Metodia kutsutaan yleensä JSP-sivun alussa.

7.3.10  KiuruSpace.java

KiuruSpace abstrahoi tietokannan Space-taulun tietueen. Se on peritty KiuruHandler-luokasta (luku 7.3.9). Papu ylikirjoittaa metodin PerformAction sekä sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
addSpaceGroupsliittää salin yhteen tai useampaan saliryhmään.
assignSpaceFromDataBaseasettaa salin attribuutit tietokannasta.
checkReservationRequestRighttutkii, onko käyttäjällä oikeus tehdä varauspyyntöjä annettuun saliin.
checkUserRightstutkii, onko käyttäjällä oikeus vahvistaa varauksia annettuun saliin.
deleteRecordpoistaa salin tietokannasta.
putSpaceToDataBasetallentaa salin attribuutit tietokantaan.
resetActionStatetyhjentää pavun toiminnon. Metodia kutsutaan yleensä JSP-käyttöliittymäsivun alussa.

7.3.11  SpaceGroup.java

SpaceGroup abstrahoi tietokannan SpaceGroup-taulun tietueen. Se on peritty KiuruHandler-luokasta (luku 7.3.9). Papu ylikirjoittaa metodin PerformAction sekä sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
addPersonslisää henkilöitä saliryhmän vahvistajiksi tai muokkaajiksi.
addSpaceslisää saleja saliryhmään.
addToFavoriteslisää annetut salit käyttäjän mielisaliryhmään.
assignSpaceGroupFromDataBaseasettaa saliryhmän attribuutit tietokannasta.
deletePersonspoistaa henkilöitä saliryhmästä.
deleteRecordpoistaa saliryhmän tietokannasta.
deleteSpacespoistaa saleja saliryhmästä.
putSpaceGroupToDataBasetallentaa saliryhmän attribuutit tietokantaan.
resetActionStatetyhjentää pavun toiminnon. Metodia kutsutaan yleensä JSP-käyttöliittymäsivun alussa.
updateModifyRighttarkistaa käyttäjän muokkausoikeudet saliryhmän tietoihin.

7.3.12  KiuruReservation.java

KiuruReservation abstrahoi tietokannan Reservation-taulun tietueen. Papu sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
addPersonToReservationliittää henkilön varaukseen määrätyssä roolissa.
isReservationOktarkistaa onnistuiko varaus.
isReservedtarkistaa, onko annettu sali varattu annettuna aikana.
makeReservationvaraa salin annetuilla tiedoilla.

7.3.13  SearchHandler.java

SearchHandler on abstrakti yliluokka hakuluokkien käsittelijöille. Se on peritty KiuruHandler-luokasta (luku 7.3.9). Luokkien yhteisenä tekijänä on "toiminnon" käsitteen lisäksi kenttien järjestys.
Papu sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
assignDefaultOrderjärjestää haun kentät oletusjärjestykseen.
getOrderClausepalauttaa järjestysosan SQL-lauseesta.

7.3.14  SpaceSearch.java

SpaceSearch on hakuluokka saleille. Se on peritty SearchHandler-luokasta (luku 7.3.13). Papu ylikirjoittaa metodin PerformAction sekä sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
getFavoriteSpacespalauttaa käyttäjän mielisalit.
getSpaceGroupSpacespalauttaa annetun saliryhmän salit.
getSpacespalauttaa kaikki salit, jotka sopivat annettuihin hakukriteereihin.
getSpacesCodepalauttaa koodin salille, jonka tunniste on annettu.
resetActionStatetyhjentää pavun toiminnon. Metodia kutsutaan yleensä JSP-käyttöliittymäsivun alussa.
updateClearedSearchFieldvarmistaa hakuehdon tyhjentämisen, kun käyttäjä hakee tyhjällä merkkijonolla tietoa. Metodia kutsutaan yleensä JSP-käyttöliittymäsivun alussa.

7.3.15  PersonSearch.java

PersonSearch on hakuluokka henkilöille. Se on peritty
SearchHandler-luokasta (luku 7.3.13). Papu ylikirjoittaa metodin PerformAction sekä sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
getPersonIdsFromSpaceGrouppalauttaa annettuun saliryhmään liittyvien henkilöiden tunnisteet.
getPersonspalauttaa kaikki henkilöt, jotka sopivat annettuun hakuehtoon.
getPersonsFromSpaceGrouppalauttaa annettuun saliryhmään liittyvät henkilöt.

7.3.16  SpaceGroupSearch.java

SpaceGroupSearch on hakuluokka saliryhmille. Se on peritty luokasta
SearchHandler (luku 7.3.13). Papu ylikirjoittaa metodin PerformAction sekä sisältää attribuuttien get- ja set-metodien lisäksi seuraavat metodit:
getFavoriteSpaceGroupspalauttaa tunnisteen käyttäjän mielisaliryhmälle, jos sellainen on olemassa.
getSpaceGroupspalauttaa kaikki saliryhmät.
getSpaceGroupsMatchedpalauttaa saliryhmät, jotka sopivat annettuun hakuehtoon.
getSpaceGroupWithAccessLevelpalauttaa saliryhmät, joita käyttäjällä on oikeus muokata.
updateClearedSearchFieldvarmistaa, hakuehdon tyhjentämisen, kun käyttäjä hakee tyhjällä merkkijonolla tietoa. Metodia kutsutaan yleensä JSP-käyttöliittymäsivun alussa.

7.3.17  TimmiParser2.java

TimmiParser2-papu jäsentää XML-muotoista dataa muodostaen näistä yliluokan TimmiObject perilliset sisältävän listan. Konstruktorille voidaan parametrina antaa jäsennettävän tiedoston nimi tai HTTP-vasteesta muodostettava InputSource-tyyppinen parametri. Varsinaisesta parsinnasta huolehtivia metodeita kutsutaan konstruktorissa, ja ne muodostavat löytämistään olioista erilliset listat. Kaikki oliot lisätään kuitenkin yleiseen TimmiObject-muotoiseen listaan.
Jäsentävien metodien apumetodi on seuraava:
getParameteron apumetodi, jota käytetään muissa jäsentävissä metodeissa. Se hakee annetusta Nodelist-listasta annetun parametrin nimisen tagin arvon.
Oliolistoja muodostavat metodit saavat parametrinaan juurielementin, josta jäsennys aloitetaan. Näitä metodeja ovat seuraavat:
setErrorpalauttaa Timmi-rajapinnan tuottamasta vasteesta jäsennetyn virhekoodin.
setClientsmuodostaa listan jäsennettävästä datasta löydetyistä TimmiCustomer-olioista.
setContactPersonsmuodostaa listan jäsennettävästä datasta löydetyistä TimmiContactPerson-olioista.
setNotReservedReservationsmuodostaa listan ajoista, joille varausta ei voitu vahvistaa.
setReservationsmuodostaa listan jäsennettävästä datasta löydetyistä TimmiReservation-olioista.
setSpacesmuodostaa listan jäsennettävästä datasta löydetyistä TimmiSpace-olioista. Samalla muodostuuu lista TimmiUseType-olioista, sillä TimmiSpace voi sisältää useita TimmiUseType-olioita.
setBuildingsmuodostaa listan jäsennettävästä datasta löydetyistä TimmiBuilding-olioista.

7.3.18  Timmi2KiuruSynchronizer.java

Timmi2KiuruSynchronizer on Timmi- ja Korppi-järjestelmien välisestä
synkronoinnista huolehtiva papu. Se kysyy Timmi-rajapinnalta parametreillä määritellyn ajanjakson tiedot. Se käyttää TimmiParser2:lta (katso luku 7.3.17) saamaansa oliolistaa hyväkseen pyytäen jokaista oliota tallentamaan itsensä Korppi-järjestelmän tietokantaan.
Seuraavat metodit vastaavat varsinaisista kyselyistä:
doRequest101tekee Timmi-rajapintadokumentin luvun 3.1 mukaisen kyselyn ja tallentaa tulokset Korppi-järjestelmän tietokantaan.
doRequest102tekee Timmi-rajapintadokumentin luvun 3.2 mukaisen kyselyn ja tallentaa tulokset Korppi-järjestelmän tietokantaan.
doRequest104tekee Timmi-rajapintadokumentin luvun 3.4 mukaisen kyselyn ja tallentaa tulokset Korppi-järjestelmän tietokantaan. Tämän metodin toimivuuden edellytyksenä on doRequest101-metodin muodostama lista.

7.3.19  TimmiLog2Kiuru.java

TimmiLog2Kiuru on Timmin muutoslokin tietojen siirtämisestä Korppi-järjestelmän Kotka-tietokantaan huolehtiva papu. Se tarkkailee tiettyä IP-osoitetta ja porttia, josta annettu heräte on merkki lokitiedostoissa tapahtuneesta muutoksesta. Komponentti jäsentää XML-muotoiset lokitiedostot ja tallentaa ne Korppi-järjestelmän tietokantaan.
Komponentilla on seuraavat kaksi metodia:
acceptmäärittelee kelvollisten lokitiedostojen tiedostonnimet käytettäväksi lokitiedostoista muodostettavaa listaa generoitaessa.
runsuoritetaan, kun ohjelma on saanut herätteen ennalta määritellystä IP-osoitteesta ja portista. Metodi hakee lokitiedostolistan ja jäsentaa tiedostot ja tallentaa tulokset. Tämän jälkeen käsitelty lokitiedosto poistetaan.

7.3.20  TimmiObject.java

TimmiObject-papu on yliluokka pavuille TimmiBuilding, TimmiContactPerson, TimmiCustomer, TimmiReservation, TimmiSpace ja TimmiUserType. Pavun tarkoitus on tarjota rajapinta em. muille pavuille. Ainoa vaatimus, jonka TimmiObject-papu asettaa, on metodin saveToDB toteutus.

7.3.21  TimmiContactPerson.java

TimmiContactPerson-papu sisältää yhden Timmissä olevan yhteyshenkilön tiedot. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi saveToDB. Metodia ei ole toteutettu ja sen toteutus on sovittu jatkokehitykseen.

7.3.22  TimmiCustomer.java

TimmiCustomer-papu sisältää yhden Timmissä olevan asiakkaan tiedot. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi saveToDB. Metodia ei ole toteutettu ja sen toteutus on sovittu jatkokehitykseen.

7.3.23  TimmiReservation.java

TimmiReservation-papu sisältää yhden Timmissä olevan varauksen tiedot. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi seuraavat:
saveToDBtallentaa tietonsa Kotka-tietokantaan.
checkExistancetarkistaa, onko varaus Kotka-tietokannassa. Jos on, niin papu myös tarkistaa, mitä muutoksia varaukseen on tullut tai onko muutoksia ollenkaan. Tätä metodia SaveToDB-metodi käyttää joissain tapauksissa apunaan.

7.3.24  TimmiBuilding.java

TimmiBuilding-papu sisältää yhden Timmissä olevan rakennuksen tiedot. Attribuutti tilat sisältää listan rakennuksessa olevista tiloista eli TimmiSpace-olioista. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi seuraavat:
saveToDBtallentaa tietonsa Kotka-tietokantaan. Metodia ei ole toteutettu ja sen toteutus on sovittu jatkokehitykseen.
AddTilalisää tilat-listaan yhden tilan. Tilat-attribuutilla ei siis ole varsinaista set-metodia.

7.3.25  TimmiSpace.java

TimmiSpace-papu sisältää yhden Timmissä olevan tilan tiedot. Attribuutti kayttoTyypit sisältää listan tilassa olevista kayttötyypeistä eli TimmiUseType-olioista. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi seuraavat:
saveToDBtallentaa tietonsa Kotka-tietokantaan. Metodia ei ole toteutettu ja sen toteutus on sovittu jatkokehitykseen.
AddKayttoTyyppilisää kayttoTyypit-listaan yhden kayttötyypin. KayttoTyypit-attribuutilla ei siis ole varsinaista set-metodia.

7.3.26  TimmiUseType.java

TimmiUseType-papu sisältää yhden Timmissä olevan kayttötyypin tiedot. Pavun metodit ovat sen attribuuttien get- ja set-metodien lisäksi saveToDB. Metodia ei ole toteutettu ja sen toteutus on sovittu jatkokehitykseen.

8  Sovelluksen testaaminen

Luvussa tarkastellaan sovelluksen testaamisen yleisiä periaatteita ja esitellään käytettyjä testausympäristöjä. Projektiryhmä ei ehtinyt toteuttaa kaiken kattavaa testausta projektin puitteissa. Kuitenkin jokaisen komponentin valmistuttua komponentin kirjoittaja teki muutamia testejä, jotta karkeimmat ohjelmointivirheet saatiin karsittua.

8.1  Testausympäristöt

Sovelluksen testaamiseen käytettiin muutamaa eri selainversioita. Tällä pyrittiin varmistamaan edes jonkinlainen käytettävyys kaikilla yleisimmillä selaimilla. Taulukossa 1 on esitelty sovelluksen testauksessa käytetyt käyttöjärjestelmät, selaimet ja selainversiot.
KÄYTTÖJÄRJESTELMÄ SELAIN VERSIOT
Windows 2000 Internet Explorer 5.0 ja 6.0
Mozilla 1.1
Opera 6.3
Windows 98 Netscape Navigator 7.0
Red Hat Linux Opera 6.3
Mozilla 1.1
Table 1: Testauksessa käytetyt käyttöjärjestelmät ja selaimet.
Huomattavia poikkeuksia ei ilmennyt eri selainten kesken. Joitakin ongelmia oli kirjasimiin liittyen, mutta nämä ongelmat poistuvat, kun Kiuru-sovellus yhdistetään uusimpien Korppi-järjestelmän kehitysversioiden kanssa. Kirjasinongelmat liittyvät CSS-tyylitiedostoihin. Kyseisiin asioihin on paneuduttu Korppi-järjestelmän kehitystyössä sen jälkeen, kun Kiuru-projektin versionhallinnan kehityshaara eriytettiin päähaarasta.

8.2  Testausperiaatteita

Sovellusta pyrittiin testaamaan koko kehityksen ajan. Loppuvaiheessa ilmeni pieniä vikoja, jotka johtuivat eri komponenttien yhteentoimimattomuudesta. Nämä viat saatiin kuitenkin korjattua helposti grep"-työkalun avustuksella.
Sovellukselle ei kuitenkaan ajettu erillisiä, automaattisesti toistettavia testitapauksia, mitä voidaan pitää suurena puutteena. Jos projektille olisi asetettu enemmän aikaa, sovellukselle olisi voinut suorittaa perusteellisen integraatiotestauksen. Ohjaajista Jukka-Pekka ja tilaajan edustajista Vesa testasivat kiitettävästi järjestelmää ja heiltä saimmekin paljon parannusehdotuksia ja tietoa järjestelmän virheistä. Suurimman osan virheistä saimme korjattua, mutta virheitä löytyy varmasti vielä lisää vähäisestä testauksesta johtuen. Suurin jatkokehitystarve onkin tehdyn järjestelmän testaus.

8.3  Testaustulokset

Koska sovellusta ei ole testattu tarpeeksi, ei ryhmällä ole esittää järjestelmällisen ja kattavan testauksen tulosia. Vikoja on korjattu sitä mukaa, kun niitä on ilmennyt. Näihin liittyviä asioita käsitellään luvuissa 9 ja 10

9  Ohjelman virheet ja toiminnan puutteet

Luvussa kuvataan Kiuru-projektin toteuttamaan sovellukseen jääneitä virheellisiä ja puutteellisia toimintoja. Suurin osa virheistä korjattiin jo sovelluksen kehittämisen aikana ja tämän vuoksi luvussa esitellyt virheet ovat suurimmaksi osaksi sellaisia ohjelman osia, joita ei ehditty toteuttaa lainkaan projektin aikataulun puitteissa.
Kehitysaikana havaittuja virheitä on lueteltu projektin aikana käydyissä sähköpostiviesteissä. Viestit on tulostettu projektikansioon.

9.1  Navigointi

Navigointipuun selkeyttä on usein kyseenalaistettu, eikä projektin puitteissa ehditty panostamaan tämän osa-alueen kehittämiseen. Navigointipuun täytyisi olla selkeä ja looginen sekä ominaisuuksien löytäminen tulisi olla helpompaa. Kiuru-projekti ei tuonut paljon uutta navigointirakenteeseen, joten siltä osin navigointipuun kehittäminen ei projektin piiriin kuulunutkaan.

9.2  Varausmoduuli

Varausmoduulissä ei toimi varausprosessin virhetarkistukset eikä moduulissa ole mahdollisuutta selailla varauksia käyttäjien mukaan. Varausprosessin virhetarkistukset ovat varausmoduulin suurin ongelma. Sovellus toimii, jos käyttäjä ei tee mitään väärin, vaan etenee lineaarisesti varausprosessin alusta loppuun saakka. Varausmoduulin saa kaatumaan antamalla väärän muotoisia syötteitä HTML"-sivujen lomakkeisiin. Myös radiopainikeryhmän jättäminen kokonaan tyhjäksi kaataa sovelluksen. Sovellus kuitenkin toipuu virheestä painamalla selaimen takaisin-painiketta ja korjaamalla virheellisen syötteen.
Käyttäjäkohtainen varausten seuranta ei toimi. Tämä ominaisuus olisi hyödyllinen lähinnä tilastointi- ja laskutusoperaatioissa. Vastaavia ominaisuuksia ei tällä hetkellä kuitenkaan ole suunnitteltu Korppi"-järjestelmään, joten tämä ei liene suuri puute.

9.3  Synkronointi ja lokitiedostojen käsittely

Timmi- ja Korppi-järjestelmien tietokantojen synkronointi toteutettiin siten, että erillinen synkronointikomponentti hoitaa koko kannan lukemisen Timmistä ja tietojen tallentamisen tietokantaan. Tämä operaatio on tarkoitus toteuttaa kerran päivässä tai harvemmin.
Reaaliaikaisempi Korppi-järjestelmän salivaraustietojen synkronointi hoidetaan lokitiedostojen avulla. Lokitiedostot ovat Timmi-järjestelmän generoimia
XML-muotoisia tiedostoja Timmi-järjestelmän tietokantaan tehdyistä muutoksista.
Synkronointiin liittyvät komponentit on toteutettu, mutta niitä ei ole testattu lähinnä Timmi-rajapinnan määrittelyn ja toteutuksen viivästymisen, sekä muiden rajapinnassa esiintulleiden ongelmien vuoksi. Lisäksi testaamatta jäi Vesa Lappalaisen toteuttaman lokihakemistoon tapahtuneista muutoksista ilmoittavan ohjelman toiminta.
Timmi-järjestelmän lokien generointia ei ole pystytty testaamaan, koska projektiryhmän käytössä ei ole ollut WinTimmi 2.0 -versiota. Tämän vuoksi lokien käsittelyn testausta ei ole voitu suorittaa, vaan testausta on suoritettu lähinnä kehitysvaiheessa mallisyötteillä.

9.4  Virheet käyttäjän syötteissä

Käyttäjän antamien syötteiden oikeellisuutta ei tarkasteta missään yhteydessä. Tietokantaan tallennettavien päivämäärien ja kellonaikojen tapauksessa tosin tarkastetaan, että syötteet ovat oikeassa muodossa, mutta arvojen järkevyyteen ei muuten puututa. Siten käyttäjä voi tallentaa esimerkiksi tapahtuman tuhannen vuoden päähän.

9.5  Selaimiin liittyvät virheet

Joillakin selaimilla (esimerkiksi Windows-käyttöjärjestelmässä Operan kaikilla versioilla) käyttäjän jo tekemät valinnat ja syöttämät arvot häviävät, jos sivu ladataan uudelleen, vaikka parametreinä valinnat ja arvot tuodaankin. Tämä on selainriippuvainen ongelma, eikä siihen ole löytynyt ratkaisua.

10  Jatkokehitykseen siirretyt ominaisuudet

Luvussa kuvataan Kiuru-sovellukseen liittyviä parannusehdotuksia, joita projektin aikataulussa ei ehditty toteuttamaan. Jatkokehitykseen sovittiin myös monet käyttöliittymään liittyvät korjaukset. Nämä tulivat esille vasta projektin loppuvaiheessa, kun oli saatu aikaan jotain testattavaa. Osa tarvittavista korjauksista on kuitenkin toteutettu ja lähinnä jatkokehitykseen on jätetty ne ominaisuudet, joiden toteutus ei ole itsestäänselvää ja helppoa. Lukuun 10.4 on kirjattu jo projektin alussa esitetyt toiveet, joita projektin aikataulussa ei ehditty toteuttamaan.

10.1  Tietokannan rakenteeseen liittyvät kehitysideat

Kotka-tietokantaan ja opettajan käyttöliittymään tulee lisätä mahdollisuus tilatarpeiden eli resurssipyyntöjen merkitsemiseen. Tilatarpeiden merkitseminen hoidetaan tällä hetkellä siten, että kurssin opettaja toimittaa tilatarpeet eteenpäin esim. amanuenssille. Amanuenssi suunnittelee kootusti laitoksen kurssien opetustapahtumien sijoittamisen käytössä oleviin saleihin.
Tilatarpeet sisältävät vaatimuksia salin paikkamäärään, tyyppiin (esim. luentosali tai mikroluokka) sekä tarvittaviin resursseihin (esim. videoprojektori ja liitutaulu). Resurssit voivat liittyä saliin kiinteästi tai ne voivat olla erikseen varattavia. Näitä lisäyksiä voidaan käyttää hyväksi Kiuru-sovelluksen jatkokehityksessä.
Käyttäjäoikeuksien tarkastusta ei tietokannan päivityksiä tehtäessä systemaattisesti suoriteta. Jatkokehityksessä tulisikin käyttöoikeuksien tarkastus suorittaa ennen jokaista tietokannan päivitysoperaatiota.

10.2  Kehitysideoita sovelluksen toiminnasta

Varausmoduulin toimivuus sovelluksen tärkeimpänä komponenttina tulisi varmistaa. Lähinnä syytä olisi keskittyä virhetarkistuksiin, sillä ne estävät moduulin laajamittaisen käytön. Nykyinen versio sovelluksesta toimii, jos käyttäjä ei tee mitään väärin, vaan etenee lineaarisesti varausprosessin alusta loppuun saakka. Varausmoduulin saa kaatumaan antamalla väärän muotoisia syötteitä HTML"-sivujen lomakkeisiin. Myös radiopainikeryhmän jättäminen kokonaan tyhjäksi kaataa sovelluksen. Sovellus kuitenkin toipuu virheestä painamalla selaimen takaisin-painiketta ja korjaamalla virheellisen syötteen.
Lisäksi varausmoduulista puuttuu ominaisuus varauksien selailuun käyttäjien mukaan. Käyttäjäkohtainen varausten seuranta olisi hyödyllinen lähinnä tilastointi- ja laskutusoperaatioissa.
Järjestelmään voisi kehittää Osittain vapaiden salien hakemisen vakiovarausta tehtäessä. Tälla tarkoitetaan sitä, että hakuehdoissa voitaisiin määritellä, että jos sali on vapaana tiettyyn annettuun määrään tapahtumia, niin kyseinen sali näytetään hakutuloksissa. Tällä hetkellä haku palauttaa vain salit, jotka ovat vapaana kaikkina vakiovarauksessa ilmoitettuina päivinä. Tämän ominaisuuden toteutus vaatii erilaisen ajattelutavan, mitä toteutetussa versiossa on käytetty. Kyseinen muutostoive tuli esiin sen verran myöhäisessä vaiheessa projektia, että se päätettiin siirtää jatkokehityksen varaan. Ominaisuus kuitenkin helpottaa järjestelmän käyttöä, joten sen prioriteettia voidaan pitää suhteellisen korkeana.
Koodin ja metodien kieliasun yhtenäistäminen olisi tärkeää järjestelmän ylläpidettävyyden kannalta. Vaikka Kiuru-projekti pyrki englanninkielisen koodin tuottamiseen, jäi kehitysversioihin vielä suomenkielisiäkin metodeja ja parametrejä. Esimerkkinä tästä on sivun makeReservation.jsp käsittelijän teeVarauspyynto-parametri. Näiden korjaaminen parantaisi järjestelmän ylläpidettävyyttä ja yhtenäistäisi rakennetta, vaikkei mitään uutta toiminnallisuuteen toisikaan.
WWW-sivujen uudelleenohjaus hoidetaan käsittelijäpavuissa JSP:n forward-metodilla, joka jättää selaimen osoitekenttään maininnan HandlerBeanistä. Tämä aiheuttaa ongelmia navigointipuun suhteen. Tähän apuna voisi miettiä joko esimerkiksi forward-metodin korvaamista Javan response.sendRedirect -metodilla tai navigointipuun toteutuksen muuttamisella. Järjestelmään tulisi lisätä sivu, joka hakee tietoja vapaista ajoista ja paikoista käyttäjän antamilla kriteereillä. Tällä hetkellä järjestelmässä pystyy selailemaan vain omia varauksiaan ja varausta tehdessä etsiä vapaita aikoja.

10.3  Automaattisten sähköpostiviestien puutteista

Tällä hetkellä Kiuru-järjestelmä ilmoittaa varauspyynnöstä aina myös sähköpostitse vahvistusoikeuksien haltijalle. Järjestelmässä olis hyvä olla mahdollisuus valita, miten ilmoitukset toimitetaan. Näin käyttäjä voisi valita, että toimitetaanko ilmoitus Korppi-järjestelmän ilmoitustaululle, sähköpostitse tai molemmilla tavoilla.
Sovelluksen lähettämät automaattiset sähköpostiviestit sisältävät kaiken käyttäjän tarvitseman tiedon, mutta niiden ulkoasua voisi selkeyttää ja yhtenäistää.

10.4  Muita jatkokehitysideoita

Jo projektin alkuvaiheessa tuli esille toiveita tilatarpeiden suunnitteluun ja muokkaukseen käytettävästä ohjelmasta. Kurssien sijoittumisen suunnittelusta vastaavat henkilöt tarvitsisivat ohjelmaa, jonka avulla voisi sijoittaa kurssien ajankohdat siten, että opiskelijoilla ja luennoitsijoilla olisi mahdollisimman vähän päällekkäisyyksiä. Ohjelman tulisi ainakin ilmoittaa, jos esimerkiksi saman vuositason tai aineen kursseja on menossa samaan aikaan. Ihanteellinen tilanne olisi, jos ohjelma voisi sijoitella kurssit valmiiksi lukujärjestykseen. Nämä vaatimukset on huomioitu tietokannassa, mutta varsinaista suunnitteluohjelmaa projektin resurssien puitteissa ei ehditty toteuttamaan.
Sali-salinvarausjärjestelmän korvaava Timmi-järjestelmä tuo uusia toiminnallisuuksia vain laskutuksen ja tilastoinnin osalta. Nämä ominaisuudet lienevät myös toteutettavissa tarvittaessa Korppi-järjestelmän jatkoksi.
Kaiken kaikkiaan jatkokehityksen suuntalinjoja on vaikea hahmottaa. Ihannetilannehan olisi, jos samaa tietoa ei tarvitsisi monessa paikassa säilyttää. Toisaalta tarpeita on niin paljon, että kaikkien ominaisuuksia yhdistäminen samaan sovellusympäristöön ei välttämättä olekaan paras tapa menetellä. Samaan aikaan Kiuru-sovelluksen kanssa kehitetty Tuure-järjestelmän seuraaja Tutka-järjestelmäkin voitaisiin ainakin periaatetasolla toteuttaa myös Korppi-järjestelmän jatkoksi. Jatkokehitysmahdollisuuksia on siis useita. Epäselvää on kuitenkin se, että miten nykyinen järjestelmä skaalautuu tulevaisuuden vaatimuksiin ja miten tarkoituksenmukaista järjestelmän laajentaminen on.
Kiuru-projektin 1. projektikansion kohdasta "Muuta materiaalia" löytyy yhteenveto Vesa Lappalaisen jatkokehitysideoista.

11  Asennusohjeet

Luvussa kuvataan Kiuru-sovelluksen asentamiseen liittyviä toimenpiteitä. Luvussa esitellyt tiedostot löytyvät mm. Kiuru-projektin CD-levyltä.
Koska sovellus on olennaisesti Korppi-järjestelmään liitettävä moduuli, oletetaan, että muut tarvittavat osiot ovat jo asennettu. Korppi-sovelluksen asennusohje on liitetty Korppi-projektin projektikansioon.

11.1  Tietokannan päivitys

Tietokannan luomiseen ja vanhan tietokannan muokkaamiseen tarvittavat SQL-lauseet on koottu yhteen hakemistoon. Ensin tulee ajaa kiuru_create.sql, joka luo Kiuru-sovelluksen tarvitsemat tietokantataulut. kiuru_alter.sql
muuttaa olemassaolevia tauluja. Seuraavaksi kannattaa ajaa kiuru_index.sql, joka luo tarvittavat indeksit. kiuru_insert.sql lisää Kiuru-sovelluksen tarvitsemia tietoja tietokantatauluihin. Lopuksi ajetaan vielä kiuru_rules.sql, joka luo tietokantaan Kiuru-sovelluksen tarvitseman säännön.
Luontilauseet voidaan suorittaa periaatteessa millä tahansa tietokannan käsittelyyn tarkoitetulla hallintajärjestelmällä. kiuru_rules.sql ei välttämättä toimi sellaisenaan muilla tietokannanhallintajärjestelmillä kuin PostgreSQL:llä.
Kiuru-sovelluksen käyttämät tietokannan taulut voidaan poistaa kannasta ajamalla tiedoston kiuru_drop.sql sisältämät lauseet.

11.2  Papujen asentaminen

Kiuru-sovelluksen käyttämät pavut sijaitsevat CD-ROMin hakemistossa
/kotka/WEB-INF/classes/kiurubeans/. Pavut kannattanee kääntää uudelleen asennusympäristössä java-komennolla.
Muokatun HTMLMenu-pavun lähdekoodi on tiedostossa HTMLMenu.java. Myös tämä papu kannattaa kääntää uudelleen asennusympäristössä. Käännöksen tuloksena saatu HTMLMenu.class-tiedosto korvaa aiemman version.

11.3  JSP-sivujen asentaminen

Sovelluksen käyttämät JSP-sivut tulee kopioida /kotka/-hakemistoon. Tiedostojen asentaminen ei vaadi erityisiä toimenpiteitä.
Kiuru-sovelluksen suoritettavat JSP-sivut (katso luku 6) asennetaan hakemistoon /kotka/reservation/. Sivut ovat suorituskelpoisia sellaisenaan.
TomCat-sovelluspalvelin kääntää JSP-sivut tarpeen mukaan.

11.4  Muut toimenpiteet

Sovelluksen käyttämiseksi täytyy muuttaa olemassaolevaa tietokannan dataa.
space-taulun tietueille täytyy määritellä tilatyypit, jotta haut toimivat oikein.
Jotta sivujen käyttö nopeutuisi hieman, kannattaa sovelluksen asentajan käydä jokaisella sovelluksen JSP-sivulla. Tällöin TomCat-servlettimoottori kääntää sivut ja seuraavalle käyttäjälle ei tarvitse tehdä uutta käännöstä.

12  Ylläpitäjän ohjeet

Luvussa kuvataan Kiuru-sovelluksen ylläpitäjän huomioitavia asioita. Erityisesti sovelluksen asennukseen (katso luku 11) liittyy joitain ylläpitäjän vastuulle asetettuja tehtäviä.

12.1  Oikeuksien asettaminen

Sovelluksen asentamisen jälkeen ylläpitäjän täytyy määritellä hallinnolliset saliryhmät ja määritellä niihin varauspyyntöjen oikeustasot. Lisäksi varausten vahvistajille on annettava vahvistusoikeudet. Ilman oikeuksien asettamista sovelluksen käyttö rajoittuu mielisaliryhmien ja henkilökohtaisten hakuryhmien käyttöön.
Oikeuksia voi muokata ylläpidon käyttöliittymän sivuilla, joiden tekninen toteutus on kuvattu luvussa 6.4.

12.2  Ristiriitaiset varaukset

Varausjärjestelmä on rakennettu toisaalta kalenterin, toisaalta opettajan kurssitietojen määrityksen päälle. Tietokannassa on ollut valmiina tapa salien yhdistämiseen tapahtumiin. Kiuru-projekti lisäsi varausjärjestelmää varten uudet taulut, jotka ovat osittain päällekkäin olemassaolevien taulujen (erityisesti EventSpace) kanssa. On mahdollista, että EventSpace-taulussa olevat tiedot ovat ristiriidassa Reservation-taulussa olevien tietojen kanssa.
Ristiriitaisuuksien havaitsemiseksi projekti lisäsi tietokantaan säännön, joka asettaa ristiriitatilanteissa Reservation-taulun Inconsistent-kentän arvoksi 1. Ristiriitojen hallintaan ei ehditty tehdä omaa käyttöliittymää, joten ylläpitäjän vastuulla on selvittää ongelmatilanteet, jos niitä ilmenee. Lisätietoa säännöstä on Kotka-tietokantaraportin luvussa 11.

12.3  Monikielisyys

Sovelluksen ylläpitäjä määrää sovelluksen valikoissa esiintyvien tietojen sisällöstä ja monikielisyydestä. Näiden tietojen hallinnoimiseen ei ole tehty erillistä käyttöliittymää, vaan ylläpitäjän on tarkoitus syöttää tarvittava tieto suoraan tietokantaan.
Kiuru-projekti ei ole lisännyt uusien tietokantataulujen yhteyteen erillisiä käännöstauluja. Kaikki käännökset on hoidettu User-pavun T-metodilla.

13  Yhteenveto

Kiuru-projektiryhmä toteutti Korppi-järjestelmään tilanvarausmoduulin. Projekti sai toteutettua kaikki vaatimusmäärittelyssä mainitut kohdat lukuunottamatta varausten selailemista henkilöiden mukaan.
Sovellusraportissa kuvataan sovellukseen toteutetut ominaisuudet. Sovelluksen rakenne kuvataan raportissa yksityiskohtaisesti. Sovellusraporttiin on lisäksi kirjattu havaitut virheet ja puutteet sovelluksen toiminnassa. Toteuttamatta jääneet tai osittain toimivat osat on kuvattu raportissa jatkokehitysideoina. Jatkokehitykseen jäivät mm. resurssipyyntöjen käsittely ja oheisvarattavien käsittely.
Projektiryhmä toteutti myös rajapintakomponentit Timmi"-järjestelmän kanssa kommunikoimista varten. Rajapintayhteyttä ei kuitenkaan testattu projektin puitteissa, vaan se jätettiin jatkokehitystehtäviksi. Syy tähän oli rajapinnan valmistumisen viivästyminen. Rajapinnan määrittely- ja toteutusvaiheet venyivät ja Yomi Oyj toimitti ensimmäisen testiversion projektiryhmän käyttöön vasta tammikuun 2003 alussa.

Lähteet

[1]
Hilpinen Toni, Koivuniemi Marko, Mäkinen Jussi ja Nurminen Miika "Kiuru-projektin projektisuunnitelma", Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[2]
Hilpinen Toni, Koivuniemi Marko, Mäkinen Jussi ja Nurminen Miika "Kiuru-projektin projektiraportti", Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[3]
Hilpinen Toni, Koivuniemi Marko, Mäkinen Jussi ja Nurminen Miika "Kiuru-projektin sovellussuunnitelma", Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[4]
Hillebrand Minna, Silván Markus, Vanhanen Antti ja Ylitalo Marko, "Koppelo-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[5]
Jaakkola Mia, Juutinen Sanna, Lupari Matti ja Nieminen Mikko, "Kolibri-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2001.
[6]
Lesonen Minna, Pekkanen Hannu, Tawast Tuukka ja Uuksulainen Heikki, "Korppi-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2001.
[7]
Horppu Ismo, Mielityinen Markku ja Vire Markku, "Kotka-projektin projektikansio", Jyväskylän yliopisto, tietotekniikan laitos, 2000.
[8]
Horppu Ismo et al., "Kotka-järjestelmän tietokantaraportti", Jyväskylän yliopisto, tietotekniikan laitos, 2003.
[9]
Santanen Jukka-Pekka, "Tietotekniikan Sovellusprojektien ohje", Jyväskylän yliopisto, tietotekniikan laitos, 2002.
[10]
Santanen Jukka-Pekka, "Opinnäytteiden kirjoittaminen, lyhyt oppimäärä", Jyväskylän yliopisto, tietotekniikan laitos, 2000.



File translated from TEX by TTH, version 3.30.
On 31 Jan 2003, 12:47.