wiki:Koskelo/Sovellusraportti
Last modified 11 years ago Last modified on 2008-04-25 20:46:27

Koskelo-projektin sovellusraportti

19.3.2008 versio 1.0

Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen

1. Johdanto

Koskelo-projekti on Jyväskylän yliopiston tietotekniikan laitoksella syksyllä 2007 toteutettu sovellusprojekti. Projekti toteutti Korppi-järjestelmään yksittäisen kurssin opetusryhmien ja -tapahtumien hallintaan käytettävyydeltään parannetun prototyypin. Projekti toteutti lisäksi kurssin opetusryhmien luontiin velhon sekä toiminnallisuutta Korpin navigaatioalueen pieneen kalenteriin.

Dokumentti kuvaa sovellusten tavoitteiden toteutumista ja Korppiin projektin aikana jatkokehitettyjen sovellusosioiden käyttöliittymät. Lisäksi dokumentissa esitellään toteutuksessa käytettyjä tekniikoita.

Dokumentissa käytetyt termit on kuvattu Koskelo-projektin termiluettelossa [3]. Projektin läpivientiä on kuvattu tarkemmin Projektiraportissa [1] ja sovellusosien vaatimuksia Vaatimusmäärittelyssä [2]. Toteutettujen osioiden testausta kuvataan Testaussuunnitelmassa [7] ja testitulokset löytyvät testausraporteista.

Luvussa 2 esitellään Korppia ja opetustapahtumien ja -ryhmien hallintaa. Luvussa 3 esitellään käytetyt toteutustekniikat ja -työkalut. Luvussa 5 esitellään opetusryhmien ja tapahtumien hallintaan toteutetut XML-rajapinnat. Luvussa 6 esitellään projektissa Korppiin toteutettamien osien käyttöliittymää. Luvussa 7 esitellään käytetyt koodauskäytänteet.

2. Opetustapahtumien ja -ryhmien hallinta

Kurssin opetusryhmien ja -tapahtumien hallinta on yksi vanhimmista Korppi-järjestelmän osista. Sen nykyisen liittymän käyttö on havaittu hankalaksi oppia ja hahmottaa.

2.1. Korppi-opintotietojärjestelmä

Korppi on Jyväskylän yliopiston opintotietojärjestelmä, joka on tarkoitettu opiskelijoiden, opettajien ja sihteerien käyttöön. Korppi-järjestelmän kurssin hallintasovelluksella opettajat ja sihteerit voivat luoda yksittäisiä kursseja sekä niiden opetusryhmiä ja -tapahtumia. Kurssin opetusryhmien hallinta kattaa opetusryhmien luonnin, poiston ja ryhmien tietojen muokkauksen. Opetustapahtumien hallinta taas kattaa opetusryhmien tapahtumien luonnin, poiston ja muokkauksen.

2.2. Tavoitteet

Koskelo-projektin tavoitteena oli toteuttaa uusi käyttöliittymä kurssin opetusryhmien ja -tapahtumien hallintaan. Uudesta käyttöliittymästä haluttiin helpommin opittava ja intuitiivinen. Käyttöliittymän toiminnalliset vaatimukset kuvataan tarkemmin vaatimusmäärittelyssä [2].

2.3. Tavoitteiden toteutuminen

Koskelo-projekti toteutti opetustapahtumien muokkaussivuista uudistetun version. Uudesta hallintaliittymästä toteutettiin intuitiivisempi ja helpompi käyttää. Liittymän ulkoasu toteutettiin mahdollisimman yhtenäiseksi muun Korpin kanssa mm. käyttämällä Korpin kalenterin värejä ilmaisemaan tapahtuman salivarausta. Uusi käyttöliittymä täyttää vaatimusmäärittelyssä [2] esitetyt vaatimukset opetustapahtumien salivarauksien hallintaa lukuunottamatta.

Käyttöliittymä vaatii vielä korjauksia viikkokalenterin osalta. Lisäksi kontekstivalikoiden ulkonäkö tulee muuttaa nykyistä selkeämmäksi. Tapahtuman lisäys -näkymän kuvan 8 toistoasetukset tulee muokata sisällöltään loogisiksi. Tarkemmin korjausta vaativia osia kuvataan kehitysideoissa [4].

Opetusryhmien luontivelhosta ja navigointialueen pikkukalenterista toteutettiin projektin aikana sovitunlaiset. Kurssin opetusryhmien tietojenhallintaa ei ehditty projektin aikana toteuttaa, mutta osio on otettu huomioon käyttöliittymän suunnittelussa.

2.4. Jatkokehityksen tavoitteet

Sovellusosien jatkokehitysideat ja -tavoitteet ryhmä kirjasi kehitysideoihin [4]. Dokumentissa kuvataan lisäksi Korpin SVN-versiohallinnan Koskelo-haaran osalta huomioitavat asiat, jotka tulisi korjata ja ottaa huomioon ennen Korpin päähaaraan yhdistämistä.

3. Toteutustekniikat ja -työkalut

Luvussa kuvataan Koskelo-projektissa sovelluksen toteuttamiseen käytettyjä työkaluja ja ohjelmointiympäristöjä. Ryhmällä oli sovelluskehitysympäristönä käytössään Eclipse 3.3.0. Käyttöjärjestelmänä yhdellä projektin koneista oli Windows XP Professional Service Pack 2 ja kolmella muulla Linux Fedora Core 6.

3.1 JSP-tekniikka

JSP-sivuilla on tavallisen HTML-koodin yhteyteen mahdollista lisätä Java-koodia. Kun WWW-palvelin vastaanottaa pyynnön selaimelta, se päättelee, onko kyseessä staattinen HTML-sivu vai JSP-sivu. Apache palauttaa pyydetyt staattiset sivut suoraan takaisin selaimeen.

JSP-sivun pyyntö välittyy servlettimoottorille, joka Korppi-järjestelmässä on Tomcat. Se tutkii, onko kyselyä vastaava servletti jo olemassa. Olemassa oleva servletti suoritetaan, ja se palauttaa selaimelle tuloksen HTML-muodossa. Jos servlettiä ei löydy, pyyntö ohjautuu JSP-moottorille, joka generoi servletin.

3.2 Java-luokat

Korpissa kaikki yleiskäyttöiset ohjelmakoodin osat sekä muut laajat metodit on pyritty keskittämään Java-luokkiin. Tällä tavoin varsinaiset JSP-sivut säilyvät helposti ylläpidettävinä sisältäen vain HTML-rakenteen ja staattiset tekstit.

Aikaisempien Korppi-järjestelmään moduleita toteuttaneiden projektien tavoin Koskelo-projektin tavoitteena oli tuottaa yleiskäyttöisiä ja hyvin kommentoituja Java-luokkia, joita järjestelmän jatkokehittäjät voivat hyödyntää. Kävi kuitenkin ilmi, että olemassa olevat Java-luokat toteuttivat valmiiksi lähes kaikki projektissa tarvittavat matalan tason toiminnot. Tästä syystä opetusryhmien ohjattua luontia lukuun ottamatta projektissa ei luotu uusia Java-luokkia. Vanhoja luokkia kuitenkin laajennettiin ja korjailtiin tarpeen mukaan niin, että ne soveltuivat myös Koskelo-projektissa toteutetun sovelluksen tarpeisiin.

3.3 Tietokanta

Koskelo-projekti ei tehnyt muutoksia Korpin PostgreSQL-tietokantaan vaan muutti ainoastaan käyttöliittymän toimintaa. Osa projektin aikana suunnitelluista ominaisuuksista, kuten suunnitteilla olevien tapahtumien luonti ja lomapäivien esittäminen, saattavat kuitenkin vaatia muutoksia sekä tietokantaan että tietokantakyselyihin. Nämä mahdolliset muutokset sovittiin tilaajien kanssa jäävän Korpin kehittäjien vastuulle.

3.4 AJAX

AJAX-tekniikka on tarkoitettu interaktiivisten WWW-sovellusten kehittämiseen. AJAX-tekniikalla selainohjelma hakee palvelimelta päivityksiä vain sivun osiin, eikä koko sivua tarvitse päivittää. Tämä lisää sivun latautumisnopeutta ja mahdollistaa uudenlaisten ominaisuuksien toteuttamisen WWW-sivuille. AJAX-tekniikan perustana on Javascript-kielen käyttö sekä tiedon asynkroninen hakeminen palvelimelta, yleensä XML-muotoisena. AJAX-tekniikalla käyttäjälle näytettävä HTML-tiedosto generoidaan palvelimen sijaan selaimen päässä. Lisätietoja AJAX-tekniikasta löytyy sivustolta www.adaptivepath.com [8].

4. Sovelluksen rakenne ja tekniset toteutusratkaisut

Luvussa 4.1 kuvataan sovelluksen rakennetta ja jakoa lähdekooditiedostoihin. Luvussa 4.2 esitellään jatkokehityksen kannalta oleelliset toteutusratkaisut ja niissä havaitut ongelmat.

4.1 Uudet lähdekooditiedostot

Koskelo-projektissa Korpin lähdekoodeihin lisättiin seuraavat uudet tiedostot:

  • calendar/miniCalendar/miniCalendar.js sisältää navigointialueen JavaScript-pohjaisen pienoiskalenterin lähdekoodin.
  • WEB-INF/src/wizards/GroupWizardForm.java sisältää opetusryhmien ohjatun luonnin logiikan toteuttava Java-luokan.

Opetusryhmien ohjattu luonti sisältää hakemistossa course/teacher/groupWizard/ seuraavat lähdekooditiedostot:

  • createGroups.jsp luo opetusryhmät.
  • step.jsp valitsee vaiheesta riippuen näytettäväksi jonkin opetusryhmien ohjatun luonnin vaihesivuista.
  • step1.jsp sisältää luonnin ensimmäisen vaiheen.
  • step2.jsp sisältää luonnin toisen vaiheen.
  • step3.jsp sisältää luonnin kolmannen vaiheen.
  • wizardStart.inc sisältää luonnin vaiheiden yhteisen JSP-koodin.

Seuraavat opetusryhmien hallinnan lähdekooditiedostot sijaitsevat hakemistossa course/teacher/:

  • studygroupClasses.js sisältää opetustapahtumien hallinnan JavaScript-luokat.
  • studygroupData.js sisältää sisäisten tietorakenteiden hallintaan liittyvät globaalit muuttujat ja funktiot.
  • studygroupEventEditor.js sisältää muokkausikkunan toimintaan liittyvät funktiot.
  • studygroupEventTable.js sisältää muokkausnäkymän tapahtumataulukon luontiin liittyvät funktiot.
  • studygroupFunctions.js sisältää hallintaliittymän yleiskäyttöisiä JavaScript-funktioita.
  • studygroupGenerated.jsp tuottaa JavaScript-koodia. Generoidun koodin avulla saadaan Java-koodista siirrettyä JavaScript-koodin käyttöön sellaista tietoa, joka ei ole täysin staattista, mutta joka ei muutu Ajax-käyttöliittymässä vietetyn istunnon aikana. Tällaista tietoa ovat mm. opetusryhmätyyppien nimet ja käyttöliittymän tekstien käännökset eri kielille.
  • studygroupGetEvents.jsp generoi XML-muodossa tiedot tietyn kurssin tietyn opetusryhmätyypin opetusryhmistä ja niiden tapahtumista.
  • studygroupMain.js sisältää sivun alustuksessa käytettävät funktiot.
  • studygroupSaveData.js sisältää luonnissa ja muokkauksessa käytettäviä JavaScript-funktioita.
  • studygroupSaveEventData.jsp suorittaa uusien ja muutettujen opetustapahtumien tallennuksen tietokantaan. Sivu palauttaa tiedon tallennuksen onnistumisesta ja mahdollisista virheilmoituksista XML-koodina.
  • studygroupWeekScripts.js sisältää viikkokalenterinäkymään liittyvän koodin.
  • studygroups.jsp generoi Ajax-käyttöliittymän XHTML-pohjan.

4.2 Ajax-tekniikka opetustapahtumien hallinnassa

AJAX-tekniikkaa hyödynnettiin kurssin opetusryhmien tapahtumien muokkaussivulla. Tarvittavat tiedot kurssin opetusryhmistä ja niiden tapahtumista haettiin XML-muotoisena Korpin tietokannasta. Tämän jälkeen selain generoi haetun tiedon pohjalta taulukon, jossa ovat kaikki valittujen opetusryhmien tapahtumat. Käyttäjä voi vapaasti tarkastella haluamiaan tietoja kurssin tapahtumista ilman, että sivua ladattaisiin uudestaan joka kerta näytettäviä tietoja vaihdettaessa. Vasta, kun käyttäjä muuttaa joidenkin tapahtumien tietoja tai esimerkiksi lisää uuden, selain ottaa yhteyttä palvelimeen. Tällöin ainoastaan muuttuneet tiedot haetaan palvelimelta uudestaan, mikä vähentää palvelimen kuormitusta sekä parantaa sivun latautumisnopeutta.

4.3 Olioiden käyttö JavaScriptissä

Alkuperäisenä tavoitteena sovelluksen teknisessä suunnittelussa oli hyödyntää JavaScriptin olio-ominaisuuksia mahdollisimman paljon. Tämä osoittautui kuitenkin projektin aikana odotettua hankalammaksi. Esimerkkejä tai ohjeita oliopohjaisen JavaScriptin käyttöön ei juurikaan ollut saatavilla, minkä johdosta tätä ominaisuutta ei osattu riittävän hyvin hyödyntää. Projektin aikana omia JavaScript-luokkia toteutettiin ainoastaan opetusryhmien ja -tapahtumien säilytystä ja käsittelyä varten.

Muilta osin sovelluksen JavaScript-koodi sijoitettiin funktioiksi seitsemään eri JavaScript-tiedostoon. Näillä funktioilla on kuitenkin globaali näkyvyys, eivätkä projektin käytössä olleet työkalut kyenneet varoittamaan, mikäli samanniminen funktio määriteltiin kahdessa eri tiedostossa. Tämä aiheutti ainakin yhden hankalasti jäljitettävän ohjelmointivirheen projektin toteutusvaiheen aikana, ja on todennäköinen riskitekijä myös jatkokehityksessä. Tarkempi perhehtyminen JavaScriptin olio-ominaisuuksiin ja saatavilla oleviin kehitystyökaluihin voi olla tarpeen näiden ongelmien välttämiseksi.

4.4 Opetustapahtumatietojen käsittely

Opetusryhmien ja -tapahtumien tiedot tallennetaan selainohjelman muistiin JavaScript-olioiden avulla. Nämä olioluokat on suunniteltu siten, että niiden rakenne mahdollisimman tarkasti noudattaa Korpin palvelimen puolella sijaitsevia vastaavia Java-luokkia. Tämä helpottaa sovelluksen ylläpitoa, sillä kehittäjien ei tarvitse opetella kahta täysin erilaista tietorakennetta samojen tietojen käsittelyyn. Lisäksi tietojen vaihto selaimen ja palvelimen välillä onnistuu helposti ilman tietorakenteisiin tehtäviä muunnoksia. Toteutetut JavaScript-luokat on esitetty luokkakaavion muodossa kuvassa 1.

Kuva 1. Luokkakaavio JavaScript-luokista

luokkakaavio JavaScript-luokista

Opetustapahtumien hallinnan näkymistä opetustapahtumien muokkaus ja kurssin viikkokalenteri käyttävät samaa JavaScript-olioiden muodostamaa tietorakennetta kurssin opetustapahtumien tietojen lähteenä. Tästä syystä käyttäjä voi siirtyä näkymien välillä ilman, että tietoja tarvitsee ladata palvelimelta uudestaan.

Kaikki opetustapahtumatietojen käsittelyyn liittyvä toiminnallisuus on sijoitettu tiedostoon course/teacher/studygroupData.js. Varsinaiset tietorakenteet ja tietorakenteen tilaa kuvaavat tilamuuttujat on tiedostossa sijoitettu globaaleiksi muuttujiksi. Sovellus on suunniteltu siten, että tietojen haku ja päivitys tapahtuu yksinomaan tiedostossa olevia funktioita käyttäen, eikä globaaleihin muuttujiin viitata muista lähdekooditiedostoista. Ongelmaksi jäi kuitenkin se, että JavaScript-kieli ei mahdollista tietojen kapseloimista siten, että suora pääsy näihin muuttujiin muista lähdekoodimoduuleista käsin voitaisiin teknisesti estää.

Koskelo-projektissa toteutetut tietojen käsittelyyn liittyvät funktiot suorittavat opetusryhmien ja niiden tapahtumien haun palvelimelta opetusryhmätyypeittäin. Mahdollisuutta hakea tietoja palvelimelta tätä suuremmissa tai pienemmissä yksiköissä ei toteutettu. Tietojen käsittelyyn liittyvien toimintojen keskittäminen yhteen tiedostoon mahdollistaa kuitenkin sen, että tämä toiminto on mahdollista lisätä myöhemmin. Lisäksi se voidaan ottaa käyttöön hakujen nopeuttamiseksi ilman, että tietoa käyttäviin ohjelman osiin tarvitsee tehdä muutoksia.

4.5 Tilatietojen tallennus Ajax-käyttöliittymässä

Käyttöliittymään liittyvät tilatiedot on sovelluksessa pyritty tallentamaan XHTML-dokumentin DOM-puuhun niiden elementtien attribuuteiksi, joita kyseiset tiedot koskevat. Tällä tavalla on saatu vähennettyä globaalien muuttujien käyttöä ja parannettu mahdollisuutta koodin uudelleenkäyttöön. Esimerkiksi opetustapahtumien hallinnan taulukossa viittaus kunkin tapahtuman opetusryhmäolioon on tallennettu taulukon solun attribuutiksi eventGroup. Näin tallennettuja tietoja on helppo sovellusta kehitettäessä tutkia selaimeen liitettävillä kehitystyökaluilla, kuten Firebugilla.

Tässä menettelyssä on myös ongelmansa. Java-kielessä viittaus sellaiseen olion attribuuttiin, jota ei ole määritelty kyseisen olion luokassa, johtaa käännösaikaiseen virheeseen. JavaScriptissä vastaava viittaus ei välttämättä johda välittömään virheeseen edes koodin suorituksen aikana. Siksi kirjoitusvirheet attribuuttien nimissä voivat olla hyvinkin työläitä jäljittää.

5 XML-rajapinnat

Luvussa esitellään projektin aikana opetustapahtumien hallintasivulle toteutettjua XML-rajapintoja.

5.1 Opetustapahtumien haku tietokannasta

Opetustapahtumien hallintasovellusta varten toteutettiin sovellukseen toiminto, jonka avulla opetustapahtumien tiedot voidaan hakea tietokannasta XML-muodossa. Toiminto on toteutettu JSP-tiedostossa course/teacher/studygroupGetEvents.jsp, jolle annetaan parametrina kurssin ja opetusryhmätyypin tunnisteet. JSP-sivu tulostaa annetun kurssin annettua tyyppiä olevien opetusryhmien ja -tapahtumien tiedot tarkoitusta varten suunnitellussa XML-muodossa.

Tarkastellaan sovelluksen tuottamaa XML-koodia esimerkin avulla. Siihen on lisätty sisennykset luettavuuden parantamiseksi. Todellisessa XML-koodissa näitä sisennyksiä ei ole, sillä ne voisivat hidastaa tiedonsiirtoa hitaan verkkoyhteyden yli.

Sivun studygroupGetEvents.jsp tuottama XML-koodi voi olla esimerkiksi seuraava:

<?xml version="1.0" encoding="UTF-8"?>
<eventgroups>
  <eventgroup gid="167187">
    <name>Demoryhmä 1</name>
    <events>
      <event eid="712729">
        <begindate>2008-01-14</begindate>
        <enddate>2008-01-14</enddate>
        <begintime>14:15:00.0</begintime>
        <endtime>16:00:00.0</endtime>
        <name>Ensimmäinen demokerta</name>
        <info/>
        <uri/>
        <spaces>
          <space rstatus="3" sid="3">Ag Auditorio 3</space>
        </spaces>
        <teachers>
          <user pid="4">Vesa Lappalainen</user>
        </teachers>
      </event>
    <events>
      <event eid="712745">
        ...
      </event>
    </events>
  </eventgroup>
  <eventgroup gid="167188">
    <name>Demoryhmä 2</name>
      ...
  </eventgroup>
</eventgroups>
<eventgroups>
  <eventgroup gid="167198">
    <name>Luento Ma</name>
    <events>
      <event eid="712755">
        ...
      </event>
    </events>
  </eventgroup>
</eventgroups>

5.2 Opetustapahtumien tietojen muuttaminen tietokantaan

Opetusryhmien tapahtumien tallennus tapahtuu sivulla course/teacher/studygroupSaveEventData.jsp . Sivu palauttaa XML-muotoisena tiedon tapahtumien tallennuksien onnistumisesta tietokantaan, muutettujen tapahtumien opetusryhmän id-numeron sekä tallennettaessa mahdollisesti tulleet virheilmoitukset.

Sivun studygroupSaveEventData.jsp tuottama XML-koodi on seuraavan kaltainen:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <dataSave>true</dataSave>
    <groupID>2</groupID>
</root>

6. Toteutettujen osien käyttöliittymä

Koskelo-projekti toteutti Korppi-järjestelmän opetustapahtumien hallintaan täysin uuden käyttöliittymän sekä velhon opetusryhmien luontiin. Lisäksi projektin aikana toteutettiin uusi versio Korpin navigaatioalueen kalenterista. Opetusryhmien hallintasivu toteutettiin

  1. palavereissa esitellyn

suunnitelman [5] mukaisesti. Opetusryhmien luontivelhon käyttöliittymästä tehtiin samankaltainen kurssin luontivelhon kanssa.

6.1 Näkymien väliset suhteet

Käyttöliittymän näkymien suhteita kuvataan kuvassa 2. Toiminnot kuvataan taulukossa 1.

Taulukko 1. Sovelluksen sivujen toiminnot

ToimintoToiminnon kuvaus
T1 Käyttäjä lisää uuden opetustapahtuman.
T2 Käyttäjä valitsee tapahtuman/tapahtumia.
T3 Käyttäjä valitsee viikkonäkymän.
T4 Käyttäjä valitsee tapahtumanäkymän.
T5 Käyttäjä valitsee opetusryhmien koostenäkymästä opetustapahtumien käsittelyn.
T6 Käyttäjä valitsee uusien opetusryhmien lisäyksen.
T7 Käyttäjä valitsee opetusryhmätyypin.
T8 Käyttäjä antaa nimet ryhmille.
T9 Käyttäjä luo ryhmät.
T10 Käyttäjä valitsee Peruuta.
T11 Käyttäjä vaihtaa navigaatioalueen kalenterin kuukautta.

Kuva 2. Käyttöliittymäkuva

6.2 Opetusryhmien tapahtumien hallinta

Korppi-järjestelmän opetusryhmien tapahtumien muokkaukseen toteutettiin täysin uusi käyttöliittymä. Tapahtumien hallinnan perusnäkymässä kuvassa 3 kurssin tapahtumat näytetään opetusryhmien ja viikkojen mukaan taulukoituna. Tapahtumia voi tarkastella myös kuvan 4 viikkonäkymästä, jossa voi valita näkyviin joko tietyn viikon (katso kuva 4) tai koosteen kaikista viikoista (katso kuva 5). Käyttäjä voi tarkastella joko kaikkia kurssin tapahtumia tai valita kuvan 6 listasta mitkä tapahtumat näytetään. Käyttäjä voi valita tapahtumista esitettävät tiedot kuvan 6 valintaruuduista.

Kuva 3. Opetustapahtumat.

Kuva 4. Viikkokalenteri.

Kuva 5. Viikkokalenterin koostenäkymä.

Kuva 6. Näkymä, kun kaikki lisätiedot on valittu näytettäviksi.

Tapahtumien tietojen muokkaus tapahtuu valitsemalla muokattavat tapahtumat klikkaamalla muokattavaa tapahtumaa. Lisäksi jos halutaan valita esimerkiksi kaikki yhden opetusryhmän tapahtumat tai kaikki tietyn viikon tapahtumat voidaan valinta suorittaa otsikkorivin tai -sarakkeen kontekstivalikosta. Tapahtumia valitessa sivulle aukeaa erillinen ikkuna Kuva 7, josta voi muuttaa valittujen tapahtumien tietoja.

Kuva 7. Tapahtuman tietojen muokkaus.

Tapahtumia lisätessä sivulle avautuu kuvan 8 ikkuna johon oli kuvan 7 tapahtuman muokkausikkunaan verrattuna lisätty valintoja toistuvien tapahtumien luontiin.

Kuva 8. Tapahtuman lisäys.

Sekä kuvan 3 tapahtumanäkymässä että kuvan 4 viikkokalenterissa jokaiseen taulukon ruutuun ilmestyy kolmio, kun kursorin siirtää ruudun päälle. Tapahtumanäkymässä kolmio ilmestyy myös otsikkorivien ruutuihin, kun useiden tapahtumien valinta on sallittu. Kolmiota painamalla avautuu kuvan 9 kontekstivalikko, jonka sisältö riippuu kolmion ruudusta. Kolmion väriksi valittiin oranssi, jotta se erottuisi mahdollisimman hyvin taulukosta. Kolmiot toteutettiin kuvatiedostoina, jotta niiden ulkonäköä voi helposti muuttaa. Kolmioiden ulkonäkö ja kuvatiedostot määritellään tyylitiedostossa basicStyleDisplay.css (div.cmenu), joten kolmioiden ulkonäköä voi muuttaa myös käytettävien tyylitiedostojen mukaan. Tapahtumien lisäys kontekstivalikon kautta tapahtuu samoin kuin kuvan 3 Lisää tapahtuma -painiketta painamalla. Kuvan 8 tapahtuman lisäysikkunan kenttiin asetetaan kuitenkin oletusarvoja riippuen ruudusta, josta kontekstivalikko on avattu.

Kuva 9. Kontekstivalikko.

6.3 Opetusryhmien luontivelho

Koskelo-projekti toteutti Korppiin opetusryhmien luontia varten velhon, jonka käyttöliittymässä käytettiin mallina kurssivelhoa. Opetusryhmien luontivelho toteutettiin käyttäen JSP-tekniikkaa ja Java-luokkia. Velhossa opetusryhmien luonti jaettiin mahdollisimman pieniin osiin. Velho alkaa valitsemalla luotava opetusryhmätyyppi ja luotavien ryhmien määrä (katso kuva 10). Seuraavan vaiheen sivulla (katso kuva 11) käyttäjän kysytään opetusryhmien nimet, minimi- ja maksimiosallistujamäärät sekä ilmoitetaanko kurssille ilmoittautuneet henkilöt automaattisesti opetusryhmiin. Velho nimeää ryhmät oletuksella nimin Tyyppi Numero, jossa Tyyppi on opetusryhmän tyyppi ja Numero on luotavan opetusryhmän järjestysnumero. Kolmannella sivulla käyttäjälle näytetään kooste luotavista opetusryhmistä ja ryhmät luodaan painamalla kuvan 12 Luo ryhmät -painiketta. Velhon loputtua käyttäjälle näytetään kooste kaikista kurssin opetusryhmistä ja niiden tiedoista kuvan 13 sivulla.

Kuva 10. Opetusryhmätyyppi ja ryhmien määrä.

Kuva 11. Ryhmien nimet ja osallistujamäärät.

Kuva 12. Ryhmien luonnin vahvistaminen.

Kuva 13. Kooste kurssin opetusryhmistä.

6.4 Navigaatioalueen kalenterin uudistukset

Koskelo-projekti toteutti uudistetun version Korpin navigaatioalueen kalenterista. Kalenterista löytyy samat ominaisuudet kuin aiemminkin, joten käyttäjä voi siirtyä siitä helposti kuluvan kuukauden henkilökohtaiseen kalenteriin, viikkokalenteriin tai tietyn päivän kalenteriin. Aiemmasta poiketen uudella pikkukalenterilla käyttäjä voi selata kuukausia eteen- ja taaksepäin sekä siirtyä siten nopeasti myös muiden kuukausien, viikkojen ja päivien kalenteriin.

Kuva 12: Korpin navigaatioalueen kalenteri.

7. Koodin kommentointi ja nimeämiskäytänteet

Luvussa esitellään projektin käyttämät nimeämiskäytänteet käytetyillä ohjelmointikielillä. Lähdekoodit kommentoitiin Korppi-järjestelmän yleisiä kommentointikäytänteitä [6]. Kommentit ja nimeämiskäytänteet pidettiin samoina sekä Java- että Javascript-koodeissa.

7.1 Koodauskäytänteet

Lähdekoodi kommentoitiin ja oliot nimettiin sovitun käytännön mukaan englanniksi. Luokkien nimet aloitettiin isolla kirjaimella, ja luokan nimessä olevat erilliset sanat aloitettiin kaikki isolla kirjaimella. Metodien ja attribuuttien nimet aloitettiin sen sijaan pienellä kirjaimella, mutta metodin nimessä olevat erilliset sanat aloitettiin kaikki isoilla kirjaimilla. Vakiot nimettiin isoin kirjaimin.

Jokaisen lähdekooditiedoston alkuun kirjoitettiin projektin nimi, lisenssimerkintä, tekijän nimi, päivämäärä, tiedoston nimi ja kuvaus tiedoston tarkoituksesta. Lisäksi ennen jokaista luokkaa ja aliohjelmaa kirjoitettiin lyhyt kommentti sen tarkoituksesta ja toiminnasta. Samoin Javascript-tiedostoissa kommentteihin kirjattiin jokaisen globaalin muuttujan tarkoitus.

JSP-sivuilla kaikki Java-kieliset tulostukset tehtiin tulostuselementtien <%= %> sisällä. Staattisia HTML-elementtejä ei tulostettu ohjelmallisesti, vaan ne pidettiin JSP-sivujen HTML-lohkoissa. Lisäksi JSP-sivuilla generoitava koodi on tilaajan vaatimusten mukaisesti XHTML 1.0 -standardin mukaista.

7.2 Esimerkki Java-koodista

package wizards;

import htmlelements.TextField;
import tools.RequestTools;

/**
 * File: GroupWizardForm.java
 * Description: The class is used in creating dynamic wizard for the
 *              study group creating wizard.
 * Created: 14.12.2007
 * Author: Perttu Lähdesmäki (Koskelo-projekti)
 * License: GPL
 */

public class GroupWizardForm extends KorppiWizardForm {
    private static String MAX = "max";
    private static String MIN = "min";
    private int course = 0;

    public GroupWizardForm(String jspFile, HttpServletRequest request,
                           HttpSession session, User paramUser, 
                           int maxsteps) {
        super(jspFile, request, session, maxsteps);
        course = RequestTools.get(request, "course", 0);
        courseInstance = new CourseInstance(course);
        resolveCourseName();
    }

    public void createGroupNameComponents() {
        for( int i = 1; i <= groupCount; i++ ) {
            addComponent( new htmlelements.TextField("group" + i,
                          request, session, ""));
        }
    }
}

7.3 Esimerkki Javascript-koodista

/**
 * File: studygroupClasses.js
 * Description: The classes are used in teaching group management.
 * Date: 14.12.2007
 * Author: Harri Pitkänen (Koskelo-projekti)
 * License: GPL
 */

/**
 * A class used for a space with reservation.
 * @param sid Space ID
 * @param rstatus Space reservation status
 * @param name Space name
 */
function Space(sid, rstatus, name) {
    this.sid = sid;
    this.rstatus = rstatus;
    this.name = name;
}

/**
 * Parses and returns a new Space from XML data
 */
function loadSpace(XMLcontent) {
    var sid = parseInt(XMLcontent.getAttribute("sid"), 10);
    var rstatus = parseInt(XMLcontent.getAttribute("rstatus"), 10);
    var name = txtCont(XMLcontent);
    return new Space(sid, rstatus, name);
}


8. Yhteenveto

Koskelo-projektin toteutti opetustapahtumien hallintaan uuden käyttöliittymän. Käyttöliittymä testattiin projektin aikana ja saatettiin valmiiksi koekäyttöön. Käyttöliittymän avulla opetusryhmien tapahtumien muokkaus ja lisäys on käyttäjälle helpompaa kuin vanhalla liittymällä. Salivarausten liittämistä opetustapahtumien lisäykseen ei toteutettu projektin aikana.

Lisäksi toteutetun velhon avulla uusien opetusryhmien luonti on aiempaa helpompaa. Projektin aikana kirjattiin ylös opetusryhmien hallintaan ja kalenteriosioon liittyviä käytettävyysongelmia. Valitettavasti projektin aikana ei ehditty toteuttaa opetusryhmien muokkaus- ja poistonäkymää, joten ryhmien tietojen muuttaminen ja poisto täytyy tehdä vanhan liittymän kautta.

Uudistettu navigaatioalueen kalenteri puolestaan nopeuttaa ja helpottaa kalenterin käyttöä.

Lähteet

[1]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. "Koskelo-projekti, projektiraportti". Jyväskylän yliopisto, tietotekniikan laitos, 2008.
[2]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. "Koskelo-projekti, vaatimusmäärittely". Jyväskylän yliopisto, tietotekniikan laitos, 2008.
[3]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. "Koskelo-projekti, termiluettelo". Jyväskylän yliopisto, tietotekniikan laitos, 2008.
[4]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. "Koskelo-projekti, kehitysideat". Jyväskylän yliopisto, tietotekniikan laitos, 2008.
[5]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. "Koskelo-projekti, 5. palaverissa esitetty malli uudesta käyttöliittymästä" http://sovellusprojektit.it.jyu.fi/koskelo/korppi-ehdotukset/opetusryhmat4b.html
[6]: Korppi-järjestelmässä käytetyt koodauskäytänteet https://kehityskorppi.it.jyu.fi/doc/korppicoding.html
[7]: Perttu Lähdesmäki, Harri Pitkänen, Atte Pulkkis ja Irene Venäläinen. Koskelo-projekti, testaussuunnitelma. Jyväskylän yliopisto, tietotekniikan laitos, 2008.
[8]: http://www.adaptivepath.com/ideas/essays/archives/000385.php Lisätietoja AJAX-tekniikasta

Attachments