Kaakkuri

Tietotekniikan sovellusprojekti

Petteri Kela
Antti Pokela
Santtu Salmi
Matti Suomalainen

Sovellusraportti

16. helmikuuta 2005

Versio 1.0



Tietoja Kaakkuri-projektista

Tekijät:                       Petteri Kela, PK, (kapekela@cc.jyu.fi)
Antti Pokela, AP,
(anpokela@cc.jyu.fi)
Santtu Salmi, SS,
(ssalmi@cc.jyu.fi)
Matti Suomalainen, MS,
(msuomal@cc.jyu.fi)

Tilaaja:                        Jyväskylän yliopisto, tietotekniikan laitos

Tilaajan edustajat:     Päivi Jämsen, (pjamsen@mit.jyu.fi)
Vesa Lappalainen (vesal@mit.jyu.fi)

Vastaava ohjaaja:       Lari Kannisto (kalahe@mit.jyu.fi)

Tekninen ohjaaja:       Arto Rikalainen (artturi@cc.jyu.fi)

Käytettävyyskonsultit:

                                    Ville Haapsaari (vjhaaps@cc.jyu.fi)
Jukka Partanen
(jpartan@cc.jyu.fi)

Yhteystiedot:              Työtila AgC222.2, puhelin (014) 260 4963

Kotisivu:                     http://sovellusprojektit.it.jyu.fi/kaakkuri/

Postilista:                    kaakkuri@korppi.jyu.fi

Tiivistelmä:                Kaakkuri-projekti määritteli ja toteutti Jyväskylän Yliopiston tietotekniikan laitokselle Windows-pohjaisen suunnittelusovelluksen yhden tai useamman laitoksen kurssien opetustapahtumien sijoitteluun. Sovellusraportissa kuvataan vaatimusmäärittelyssä [1] määriteltyjen vaatimusten toteutumista ja sovelluksen toteutusta ja toimintaa.
Versiohistoria

Versio

Päiväys

Tekijä

Muutokset

0.1

26.1.2005

SS

Ensimmäinen versio.

0.2

1.2.2005

SS

Tiivistelmä kirjoitettu uudestaan. Johdantoa korjailtu. Lisätty kohta 7.1 Parantelua vaativat ominaisuudet. Lisätty lähteitä.

0.3

16.2.2005

SS

Tehty monia pieniä korjauksia. Vaihdettu kappaleiden paikkoja. Lisätty kappaleen 3 ”Sovelluksen rakenne” alkuun selvitys sovelluksen yleisestä toiminnasta.

1.0

15.3.2005

MS

- Tarkennettu sovelluksen rakenteen kuvausta luvussa 3

- Lisätty selvitys käytetyistä työkaluista


Sisällysluettelo

1      Johdanto. 1

2      Termejä. 2

3      Sovelluksen rakenne. 3

3.1       Courses. 3

3.2       Rooms. 3

3.3       ScheduleDatabase. 3

4      Käyttöliittymä. 4

4.1       Pääkäyttöliittymä. 4

4.1.1        Puurakenne. 4

4.1.2        Taulukko. 4

4.1.3        Kurssi-info. 4

4.1.4        Virheilmoitusruutu. 5

4.2       Blokkieditori 5

4.3       Kurssiryhmäeditori 5

4.4       Salieditori 5

5      Sovelluksen toiminnot 6

5.1       Suunnittelun helpotus. 6

5.2       Päällekkäisyyksien esto. 7

5.3       Korppi-yhteys. 7

5.4       Näkymät 8

5.5       Blokki-järjestelmä. 8

6      Sovelluksen luokkatiedostot 8

6.1       Block. 9

6.2       Course. 9

6.3       GroupEditor 10

6.4       MultiLine. 11

6.5       Schedule. 12

6.6       Tree. 13

6.7       XMLParser 13

6.8       Muut 13

7      Jatkokehitys. 15

7.1       Parantelua vaativat ominaisuudet 15

7.2       Puuttuvat ominaisuudet 16

8      Yhteenveto. 19

Lähteet 20

Liitteet 21

Liite 1: Tärkeimpien luokkien luokkakaavio. 21

Liite 2: Sovelluksen rakenteen kaaviokuva. 21

Liite 3: Sovelluksen toiminnan kaaviokuva. 22


1           Johdanto

Kaakkuri oli Jyväskylän yliopiston tietotekniikan laitokselle toteutettu sovellusprojekti. Projekti toteutti tietotekniikan laitokselle sovelluksen, jonka avulla voidaan laatia lukukauden luentolukujärjestys. Lukujärjestyksen laatimiseksi täytyy ottaa huomioon useita rajoitteita, jotka hankaloittavat suunnittelutyötä. Sovelluksen on tarkoitus helpottaa tätä suunnittelutyötä, sekä mahdollistaa salivarausten tekemisen suoraan Korppi-järjestelmään.

Sovelluksen ensisijainen tavoite oli luentojen sijoittelun helpotus ja toissijainen tavoite demojen, pääteohjausten ja muiden tapahtumien sijoittelun helpotus. Kaakkuri-sovelluksessa sijoittelu tapahtuu käyttöliittymällä, jossa raahataan hiirellä kurssien tapahtumia näkyvissä olevaan kalenteriin. Ohjelma antaa tapahtumille päivän ja kellonajan riippuen siitä mihin tapahtuma(t) on raahattu. Tapahtumalle määrätään myös sali riippuen siitä, mikä sali oli valittuna, kun sijoitus tapahtui.

Kurssien tiedot haetaan Korppi-järjestelmästä, jonka jälkeen kurssien tapahtumat esisijoitetaan ohjelman kalenteriin samaan aikaan ja paikkaan kun ne olivat korpissa määritelty. Salien tiedot haetaan myös Korppi-järjestelmästä ja niistä valitaan suunnittelussa käytettävät salit ns. omiksi saleiksi. Saleille on mahdollista asettaa lempinimiä, jolloin pitkät salinimet mahtuvat paremmin kalenterin rajoitettuun tilaan.

Kun tiedot on haettu Korppi-järjestelmästä, niin käyttäjä tekee haluamansa muutokset lukujärjestykseen. Suunnittelutilanteen voi halutessaan tallentaa tietokoneen kovalevylle. Lopuksi suunnitelman ollessa valmis muutokset lähetetään takaisin Korppi-järjestelmään. Suunnitelman voi lähettää Korppi-järjestelmään halutessaan ilman salivarausta. Näin muiden on mahdollista esikatsella tulevaa lukujärjestystä ennen kuin se on lopullinen. Suunnitelmissa oli myös erillinen suunnittelutilanteen synkronointi toiminto, jolla olisi mahdollista synkronoida suunnittelutilanne muiden suunnittelijoiden kanssa, mutta sitä ei tämän projektin puitteissa saatu toteutettua.


2           Termejä

Luvussa selitetään muutamia aihealueeseen liittyviä termejä ja lyhenteitä.

Bugzilla               Järjestelmä, jonka avulla voidaan pitää kirjaa sovellukselta vaadittavista ominaisuuksista ja löydetyistä virheistä.

CVS                     (Concurrent Version System) Sovelluskehityksen apuna käytettävä versionhallintajärjestelmä. Järjestelmä helpottaa ohjelmistojen versionhallintaa ja mahdollistaa mm. minkä tahansa aikaisemman version palauttamisen. Lisäksi useampi henkilö voi samanaikaisesti kehittää ohjelmistoa muokkaamalla samoja lähdekooditiedostoja.

Java                    Java on oliopohjainen, laitteistoriippumaton ohjelmointikieli, mikä mahdollistaa Javalla kirjoitettujen sovellusten ajamisen useilla eri laitteistoarkkitehtuureilla.

Blokki                 Blokki on Lukujärjestyksen suunnittelussa käytetty apuväline. Lukujärjestys jaetaan useisiin blokkeihin ja ajatuksen on, että samaan blokkiin sijoitetut tapahtumat eivät saisi mennä päällekkäin. Hyöty tästä on siinä, että jos esimerkiksi tiedetään kurssin toisen luennon aika, niin toinen luento kannattaa tällöin sijoittaa johonkin toiseen samaan blokkiin kuuluvaan soluun.

Korppi                 Korppi on opintotietojärjestelmä, joka tarjoaa tietoa ja työvälineitä mm. opiskelijoille ja opettajille. Korppi-järjestelmän avulla voidaan mm. ilmoittautua kursseille ja tentteihin, varata opetusta varten saleja ja muita työvälineitä. Korppi-järjestelmä löytyy osoitteesta: https://korppi.jyu.fi/

 

3           Sovelluksen rakenne

Toiminnallisen rakenteen luovat parseri, kooderi, tietokanta ja käyttöliittymä. Tietokanta on toteutettu olioarkkitehtuurin mukaisesti eikä siis käytä mitään tietokannanhallintajärjestelmää. Sovelluksen tietorakenne on siten ”tekstinkäsittelymäinen” eli kaikki data on olemassa vain tietokoneen muistissa kunnes käyttäjä tallettaa sen levylle. Sovellus toimii lyhyesti seuraavanlaisesti. Ensiksi kurssitiedot haetaan Korppi-järjestelmästä ja talletetaan tiedostoon, jonka jälkeen kurssitiedot luetaan tiedostosta ohjelman tietokantaan. Sitten käyttäjä tekee haluamansa muutokset suunnitelmaan, jonka jälkeen kurssitiedot talletetaan tiedostoon ja lopuksi tiedosto lähetetään Korppi-järjestelmään. Katso liite 2.

Sovellus saa siis syötteenä XML tiedoston, jonka parseri purkaa puumuotoon. Jokainen puun juuritasolla sijaitseva solmu on yksi kurssi. Käsiteltyään tiedon parseri lähettää sen Courses oliolle, joka alkaa luoda kursseja vastaavia olioita. Kurssit luovat itse sisältämänsä tapahtumat, jotka samalla sijoitetaan oikeille paikoilleen tietorakenteessa. Kun kaikki kurssit on luotu, on mahdollista alkaa tiedon käsitteleminen käyttöliittymän avulla. Työn ollessa valmis viedään palautteena vain muuttuneet tapahtumat, jotta Korppi-järjestelmän kuormitus olisi mahdollisimman pientä.

Sovellus on toteutettu Borlandin JavaBuilder9 kehitysympäristöllä ja käyttäen vain standardikirjastoja yhteensopivuuden maksimoimiseksi.

Ohjelman tietokanta jakautuu kolmeen pääosaan: Courses, Rooms ja ScheduleDatabase. Katso liite 1.

3.1             Courses

Courses on tietorakenne kursseista, jotka on luentolukujärjestyksen suunnitteluun haettu. Courses pitää sisällään Course ilmentymiä. Course vastaa yhtä tiettyä kurssin ilmentymää. Course sisältää yleisen informaation kurssista ja kaikki siihen kuuluvat tapahtumat. Courses tietorakenne tallennetaan levylle XML muodossa.

Yhteen Course ilmentymään liittyvät tapahtumat on jaettu tapahtumaryhmiin. Tapahtumaryhmiä vastaa DnDGroup luokka. Yhteen DnDGroup ilmentymään voi sisältyä mielivaltainen määrä tapahtumia. Tarkoituksena olisi, että yhteen tapahtumaryhmään kuuluvat tapahtumat olisivat peräkkäisillä viikoilla samaan aikaan, mutta poikkeuksetkin sallitaan. Tapahtumat tietävät itse mihin aikaan ja paikkaan ne kuuluvat. Yhtä tapahtumaa vastaa DnDEvent luokka.

3.2             Rooms

Rooms on tietorakenne luentosaleista, jotka ovat käytössä. Rooms sisältää Room nimisiä ilmentymiä, jotka vastaavat tiettyä luentosalia. Rooms tietorakenne tallennetaan levylle XML muodossa.

3.3             ScheduleDatabase

ScheduleDatabase on sovelluksen kalenterimainen tietorakenne, jota käytetään tapahtumien aikojen sijoittamiseen. ScheduleDatabase koostuu joukosta Scheduleja, joista jokainen edustaa tiettyä viikkoa kalenterissa. Schedule tietää mitkä tapahtumat sen edustamalle ajanjaksolle kuuluu. ScheduleDatabaseen liittyy myös ScheduleView, joka koostaa halutunlaisen näkymän (periodi- tai kalenterinäkymä). ScheduleDatabase pystyy esisijoittamaan talletetun Courses tietorakenteen pohjalta tapahtumat oikeisiin paikkoihinsa, joten suunnittelua voidaan jatkaa viimeksi tallennetusta kohdasta.

4           Käyttöliittymä

Käyttöliittymän suunnittelulla oli keskeinen rooli Kaakkuri-projektissa, koska oltiin siirtämässä tietokoneelle jotain sellaista mikä aikaisemmin oli tehty lähinnä paperin ja kynän avulla. Useasti mietittiin esimerkiksi, että ollaanko tässä nyt tekemässä sitä parasta mahdollista ratkaisua vai vain siirtämässä vanhaa tuttua keinoa tietokoneen näytölle.

4.1             Pääkäyttöliittymä

Pääkäyttöliittymässä on neljä pääkomponenttia: puurakenne, taulukko, kurssi-info ja virheilmoitusruutu.

4.1.1      Puurakenne

Sovelluksen vasemmassa reunassa on puurakenne, jossa näkyy kaikki kurssit, joita luentolukujärjestyksen suunnittelussa käytetään. Puu on jaettu kahteen osaan: sijoittamattomat kurssit ja sijoitetut kurssit. Puurakenteesta voi raahata kurssien luentoja taulukkoon, jolloin ne sijoittuvat haluttuun aikaan.

4.1.2      Taulukko

Taulukko on sovelluksen pääelementti ja siksi suurin komponentti näytöllä. Taulukko jakautuu kahteen eri näkymään: periodinäkymä ja kalenteri. Näiden välillä voi liikkua vaihtamalla välilehteä taulukon yläpuolella. Periodinäkymä on kooste joltain tietyltä ajanjaksolta. Se näyttää kaikki kurssit, jotka kuuluvat sen alueelle. Kalenteri taas esittää ruudussa viikon kerrallaan. Käyttäjä voi sijoittaa kursseja molempiin näkymiin.

4.1.3      Kurssi-info

Kurssi-info näyttää puurakenteessa valittuna olevaan kurssiin liittyvän informaation. Tämä sisältää muun muassa opintoviikkojen määrän, opettajien toiveet ja kurssiryhmät, joihin kyseinen kurssi kuuluu. Tilan säästämiseksi ruudulla näkyy vain tietyt infot kerrallaan ja niiden välillä voi vaihdella välilehdillä.

4.1.4      Virheilmoitusruutu

Virheilmoitusruutu näyttää informaatiota käyttäjän tekemistä virheistä. Virheet on jaettu absoluuttisiin virheisiin ja huomautusvirheisiin. Absoluuttisen virheen tapauksessa sovellus peruu käyttäjän tekemän toiminnon ja ilmoittaa siitä virheilmoitusruudussa. Huomautusvirheissä sovellus vain näyttää virheilmoituksen, mutta jättää käyttäjän tekemän toiminnon voimaan. Absoluuttisiksi virheiksi luetaan saman kurssin tapahtumien sijoittaminen päällekkäin ja samaan saliin samaan aikaan kahden tapahtuman sijoittaminen. Huomautusvirhe tulee kun sijoittaa kaksi samaan kurssiryhmään kuuluvaa tapahtumaa päällekkäin.

4.2             Blokkieditori

Blokkieditorilla voi käyttäjä muokata haluamansa blokkirakenteen. Blokkijärjestelmä pienentää ongelma-avaruutta ja se otettiin osaksi sovellusta aikaisemmin käytössä olleen toimintatavan mukaisesti.

4.3             Kurssiryhmäeditori

Kurssiryhmäeditorilla luodaan kurssiryhmiä, joille voi antaa mielivaltaisen nimen. Kurssiryhmään voidaan sijoittaa kursseja, joiden ei haluta jostain syystä joutuvan suunnittelussa päällekkäin. Ryhmään voi sijoittaa myös toisen ryhmän.

4.4             Salieditori

Kaakkuri-sovellus hakee Korpista kaikki Jyväskylän yliopistolla käytössä olevat salit. Saleja on hyvin paljon, joten salieditorin avulla käyttäjä voi valita käyttöönsä vain haluamansa salit ja antaa niille tarvittaessa lyhyemmän tai paremmin muistettavan nimen.

5           Sovelluksen toiminnot

Tässä luvussa esitellään yleisesti vaatimusmäärittelyssä [1] asetetut vaatimukset sekä kerrotaan miten ne on toteutettu Kaakkuri-sovelluksessa.

5.1             Suunnittelun helpotus

Haastattelujen perusteella aikaisemmin lukujärjestyksen suunnittelu on tapahtunut pääosin paperilla tai Excel-taulukolla. Paperilla muutoksien tekeminen on hankalaa ja työlästä. Excel-taulukolla toisaalta on vaikea hahmottaa koko suunnittelutilanne. Kaakkuri-sovellus yrittää tarjota näihin ongelmiin ratkaisua.

Suunnittelutilanteen tarkastelua varten Kaakkuri-sovelluksessa on useita eri näkymiä. Ajallisesti on viikko- ja periodinäkymä sekä paikkakohtaisesti eri salinäkymiä. Viikkonäkymä on oikeastaan suoraviivainen kalenteri, jonne on helppo sijoittaa tapahtumia yksi kerrallaan. Säännöllisien kurssien tapahtumien sijoittelussa taas periodi-näkymä on kätevä. Siinä on mahdollista sijoittaa useita tapahtumia kerralla alkamaan samaan aikaan eri viikoilla. Periodi-näkymästä on myös helppo hahmottaa suunnittelutilanne usean viikon ajalta. Tämän lisäksi suunnittelutilannetta voidaan tarkastella salikohtaisesti. Valitsemalla joku tietty sali voidaan nähdä vain tähän saliin sijoitetut tapahtumat. Näin on helppo nähdä mihin voidaan sijoittaa tapahtuma joka vaatii välttämättä jonkun tietyn salin.

Muutoksien tekeminen suunnitelmaan on yritetty saada mahdollisimman helpoksi. Sijoitettujen tapahtumien sijoituksen voi poistaa kätevästi hiiren oikealla napilla ja vaihtoehtoisesti voidaan myös poistaa kaikkien kurssiin liittyvien tapahtumien sijoitus. Tapahtumia voi myös helposti hiirellä raahata näkymästä eri ajankohtiin.

Jos usealla suunnittelijalla on jaettuja resursseja kuten saleja tai kursseja, olisi kätevä saada suunnittelutilanne jotenkin synkronoitua mahdollistaen usean suunnittelijan työstävän suunnitelmaansa yhtäaikaisesti. Tätä ominaisuutta ei valitettavasti Kaakkuri-sovelluksen nykyisessä versiossa ole toteutettu.

5.2             Päällekkäisyyksien esto

Suunnittelun yksi tärkeimmistä tavoitteista on erilaisten päällekkäisyyksien estäminen. Esimerkiksi sama opettaja ei voi olla kahdessa paikassa samaan aikaan tai samaan saliin ei voi laittaa useaa tapahtumaa samaan aikaan. Ehkä vaikeimmin hahmotettava päällekkäisyys on samaan aikaan opiskeltavaksi tarkoitettujen kurssien päällekkäisyys. Esimerkiksi jos kaksi kurssia on tarkoitettu opiskeltavaksi ensimmäisenä syksynä, niin ei olisi suotavaa että näiden kurssien tapahtumia sijoitettaisiin samoihin aikoihin.

Päällekkäisyydet on jaettu Kaakkuri-sovelluksessa kahteen eri luokkaan: absoluuttisiin ja ohjeellisiin rajoitteisiin. Absoluuttiset rajoitteet hallitaan sovelluksessa kieltämällä rajoitteen vastainen sijoitus kokonaan. Ohjeellisen rajoitteen rikkova sijoitus sen sijaan sallitaan, mutta siitä annetaan varoitus.

Absoluuttiset rajoitteet hoidetaan Kaakkuri-sovelluksessa automaattisesti. Tällä hetkellä ainoastaan saman salin samaan ajankohtaan sijoittaminen on ainut absoluuttinen rajoite. Saman opettajan lisääminen kahteen tapahtumaan samanaikaisesti voisi jatkokehityksessä olla toinen absoluuttinen rajoite. Ohjeelliset rajoitteet hoidetaan Kaakkuri-sovellukseen rakennetulla kurssiryhmien hallinnalla. Pääideana on, että samaan kurssiryhmään kuuluvia kursseja ei ole tarkoitettu sijoitettavan päällekkäin. Tietyn kurssin ollessa valittuna sovellus näyttää lukujärjestyksestä eri sävyillä sen mihin ajankohtaan kurssia ei kannata sijoittaa.

5.3             Korppi-yhteys

Yhteyttä Korppi-järjestelmään tarvitaan, jotta saadaan sovelluksen käyttöön ajankohtaiset sali ja kurssi tiedot. Yhteys korppiin sovittiin toteutettavan tiedostoilla. Käyttäjän autentikoinnista puhuttiin, mutta siitä ei tehty lopullista päätöstä miten se toteutetaan.

Kaakkuri-sovellus hakee kurssi ja sali tiedot Korppi-järjestelmästä XML-tiedostoina ja parsii niistä tiedot itse sovellukseen. Kun käyttäjä haluaa viedä muutokset Korppi-järjestelmään, sovellus tekee muutoksista XML-tiedoston ja lähettää sen takaisin Korppi-järjestelmään. Käyttäjän autentikointia ei sovelluksessa vielä ole vaan Korppi-järjestelmä sallii haku pyynnöt vain tietyistä IP-osoitteista.

5.4             Näkymät

Näkymiä sovellukseen haluttiin ainakin periodi- ja kalenterinäkymä. Periodeja käyttäjän pitäisi pystyä itse lisäämään.

Molemmat näkymät on toteutettu Kaakkuri-sovellukseen, mutta ainakaan tällä hetkellä periodeja käyttäjä ei pysty itse lisäämään käyttöliittymästä. Väliaikaisena ratkaisuna periodit luetaan tiedostosta, jota voi muuttaa tekstieditorilla.

5.5             Blokki-järjestelmä

Ainakin tietotekniikan laitoksella on aiemmin ollut käytössä niin sanottu Blokki-järjestelmä. Tällä saadaan suunnittelun laajaa ongelma-avaruutta pienennyttyä ratkaisevasti. Tilaaja halusi blokki-järjestelmän myös sovellukseen.

Kaakkuri-sovelluksessa on erillinen blokkien muokkaus ikkuna, jolla on mahdollista tehdä oma blokki-rakenne. Muutoksien hyväksymisen jälkeen blokki-rakenne tulee näkyviin lukujärjestykseen. Tämän jälkeen jos käyttäjä raahaa kokonaisen luentohaaran johonkin soluun, niin ohjelma tarkistaa onko tässä solussa blokkia. Jos on, niin ohjelma sijoittaa kaikki kurssin luentoryhmät kyseisen blokin soluihin aloittaen solusta mihin luennot raahattiin. Jos solussa ei ole blokkia, niin mitään ei tehdä.

6           Sovelluksen luokkatiedostot

Seuraavassa on listaus sovellukseen kuuluvista luokkatiedostoista sekä lyhyt kuvaus niiden tarkoituksesta. Suurin osa luokkatiedostoista on jaettu paketteihin sen mukaan mihin asiaan kyseinen luokkatiedosto liittyy. Lukujen otsikot tarkoittavat kyseistä paketin nimeä.

6.1             Block

Tiedosto

Kuvaus

Block.java

Blokin ilmentymä.

BlockEditor.java

Blokkirakenteen muokkaukseen tehty käyttöliittymäluokka.

BlockStructure.java

Blokkirakenteen ilmentymä. Määrittelee rakenteen miten yhden tai useamman viikon ajalle blokit sijoittuvat.

6.2             Course

Tiedosto

Kuvaus

Course.java

Kurssin ilmentymä.

Courses.java

Sisältää kaikki suunnittelussa käytettävät kurssit.

DnDAllLectures.java

Nimestään huolimatta sisältää kaikki yhteen kurssiin liittyvät tietyn tyyppiset tapahtumat. Nimen pitäisi olla ehkä DnDAllEvents.

DnDEvent.java

Yhden tapahtuman ilmentymä.

DnDGroup.java

Yhden tapahtumaryhmän ilmentymä. Sisältää mielivaltaisen määrän DnDEvent-olioita.

RoomSelectionPanel.java

Salin valintadialogin yhden salin ”rivi”.

RoomSelectionRadioButton.java

Salin valintadialogin yksi vaihtoehtonappula. Sisältää myös otsikon mille viikolle valinta on. Otsikon voi myös piilottaa.

SelectRoomDialog.java

Salin valintadialogin käyttöliittymäluokka.

VisibleEventComponent.java

Yhden tai useamman tapahtuman näkyvä osa.

6.3             GroupEditor

Tiedosto

Kuvaus

Constraints.java

Sisältää kaikki kurssiryhmät ja hoitaa niiden käsittelyn.

CourseGroup.java

Kurssiryhmä, johon voi sisältyä useita kursseja tai toisia kurssiryhmiä.

CourseGroupComponent.java

Kurssiryhmien tekemiseen tehty komponentti. Käyttäjä voi raahata haluamansa kurssit tähän komponenttiin, jolloin ne liitetään komponenttia vastaavaan kurssiryhmään.

CourseGroupsEditor.java

Käyttöliittymäluokka kurssiryhmien lisäämistä ja muokkausta varten.

6.4             MultiLine

Tiedosto

Kuvaus

MultiLineEditor.java

Taulukon editori. Käytetään kun hiirellä käsitellään yhden solun sisältöä.

MultiLineRenderer.java

Taulukon piirtämisestä vastaava luokka.

MultiLineTable.java

Sovelluksessa käytetty taulukkokomponentti.

MyCellPanel.java

Yhden solun sisällön rakentava luokka.

MyColumnListener.java

Kuuntelee taulukon sarakkeissa tapahtuvia muutoksia. Esimerkiksi kun marginaalien koko muuttuu, tämä kutsuu taulukon koon uudelleen laskemista.

MyTransferHandler.java

Hiirellä raahaamisen (Drag&Drop) käsittelevä luokka.

TableMouseListener.java

Käsittelee taulukossa hiirellä tehdyt toiminnot lähinnä klikkaukset.

TableMouseMotionListener.java

Tällä hetkellä vain muuttaa hiiren kursorin alla olevan solun editointi tilaan.

TableTransferHandler.java

Käsittelee taulukon sisällä tapahtuvat raahaukset.

VerticalLayout.java

Ulkoasu, joka sijoittaa komponentteja ylhäältä alaspäin eikä vaihda saraketta kuten VerticalFlowLayout. Käytetään sijoittaessa tapahtumien näkyvää osaa soluun.

6.5             Schedule

Tiedosto

Kuvaus

Schedule.java

Yhden viikon ”lukujärjestys”. Sisältää ScheduleRow-olioita.

ScheduleCell.java

Yhden solun ilmentymä. Osaa kysyä oman aikansa ja kertoa mitkä tapahtumat kuuluvat tähän soluun.

ScheduleDatabase.java

Tietokanta, joka sisältää kaikki suunnittelussa käytettävät Schedule-oliot. Aikaväli määritellään kiinteästi esimerkiksi vuosi 2004-2005.

ScheduleIterator.java

Yhden viikon ”lukujärjestyksen” läpikäyntiin tehty iteraattori.

ScheduleRow.java

Sisältää yhden viikon yhteen aikaväliin kuuluvat solut. Esimerkiksi viikko 13 kello 10-12. Kiinteästi määritelty sisältämään 8 solua (7 päivää + kellonaikasolu).

ScheduleView.java

Koostaa näkymän lukujärjestyksestä yhden tai useamman viikon ajalta.

Week.java

Sovelluksessa käytetty viikko-olio. Sisältää vuoden ja viikon.

WeekDialog.java

Ponnahdusikkuna, joka tulee esille kun sijoitetaan tapahtuma puusta periodi-näkymään.

WeekIterator.java

Käy kaikki tietokannassa käytetyt viikot läpi.

6.6             Tree

Tiedosto

Kuvaus

CustomTreeModel.java

Kurssipuun tietorakenne. Osaa sijoittaa kurssit oikeisiin haaroihin.

PanelCoursesTree.java

Kurssipuun sisältävä komponentti.

TreeTransferHandler.java

Käsittelee kurssipuusta raahatut oliot.

6.7             XMLParser

Tiedosto

Kuvaus

KorppiSelectionDialog.java

Korpista haettavien kurssien hakuun tehty käyttöliittymäluokka.

XMLParser.java

Lukee Korpista haetut XML-tiedostot sovelluksen tietorakenteeseen.

6.8             Muut

Tiedosto

Kuvaus

ContainerText.java

Yhden tapahtuman käyttäjälle näkyvä osa. Sisältää myös raahauksen (Drag&Drop) ja klikkauksen käsittelyn. Peritty JTextArea-luokasta.

CourseEditor.java

Kurssin tietojen muokkaukseen tehty käyttöliittymä, joka on tällä hetkellä pois käytöstä.

ErrorPanel.java

Virheilmoituskomponentti. Tulostaa sijoituksessa mahdollisesti esille tulleet varoitukset ja virheet.

GUI.java

Sisältää sovelluksen pääohjelman.

LoadDialog.java

Suunnittelutilanteen avaukseen tarkoitettu käyttöliittymäluokka.

MainFrame.java

Pääikkuna ja siihen liittyvät komponentit ja metodit.

Period.java

Yhden jakson ilmentymä. Sisältää alku- ja loppuviikon.

Room.java

Yhden salin ilmentymä.

RoomDialog.java

Omien salien valintaan tehty käyttöliittymäluokka.

Rooms.java

Sisältää kaikki suunnittelussa käytettävät salit.

SaveDialog.java

Suunnittelutilanteen tallennukseen tarkoitettu käyttöliittymäluokka.

SplashScreen.java

Vastaa sovelluksen käynnistyksen yhteydessä näytettävän kuvan piirtämisestä.

TabbedInfo.java

Valitun kurssin tiedot näyttävä komponentti. Toiveet, Info ja Kurssiryhmät.

7           Jatkokehitys

Sovellus jäi projektin jäljiltä vielä monilta osin keskeneräiseksi. Osa ominaisuuksista toimii vielä varsin huonosti ja joitain ominaisuuksia ei toteutettu lainkaan. Seuraavassa on esitelty puutteelliset tai kokonaan toteuttamattomat ominaisuudet.

7.1             Parantelua vaativat ominaisuudet

Kaikki projektin aikana sovellukseen toteutetuista ominaisuuksista eivät luultavasti toimi parhaalla mahdollisella tavalla. Aikarajoitteen vuoksi oli kuitenkin mentävä koko ajan eteenpäin.

Käyttäjän kannalta ehkä silmiinpistävin puute on lukujärjestyksen piirtämisessä. Tällä hetkellä sijoitetun kurssin tekstikenttä piirtyy joissain tilanteissa liian pieneksi, jolloin koko teksti ei näy. Tilanne korjaantuu kun solu piirtyy uudelleen (esim. kun vie hiiren kursorin solun päälle). Myöskään rivin koon lasku ei toimi joka tilanteessa. Projektiryhmä epäilee molempien ongelmin johtuvan Javan tavasta käsitellä komponenttien kokoa kun ne eivät ole näkyvissä. Javassa komponentilla ei ole vielä kokoa kun se ei ole näkyvissä, jolloin koon laskualgoritmit eivät toimi.

Projektin alkuvaiheessa tehtiin päätös, että käyttöliittymään ei panosteta yhtä paljon kuin yleensä. Tähän syynä oli se että sovelluksen kohderyhmä oli pieni ja todettiin että kohderyhmän kouluttaminen ohjelman käyttämiseen olisi suhteellisen pieni vaiva. Pääkäyttöliittymään on kuitenkin panostettu suhteellisen paljon, mutta ainakin muilta osin käyttöliittymä kaipaisi parantelua. Erikoisesti kurssiryhmäeditori on erittäin epäselvä ja vaikea käyttää. Projektin käytettävyysryhmä teki raportin [10] tarpeellisista parannuksista käyttöliittymään, josta selviää tarkemmin mitä käyttöliittymässä pitäisi muuttaa.

Sovelluksen reagointi käyttäjän syötteisiin saattaa joskus kestää hetken aikaa. Tämä johtuu useista algoritmeista, joilla sovellus muodostaa käyttäjälle näkyvän lukujärjestyksen sekä laskee voimassa olevat rajoitteet ja ilmaisee ne väreillä. Algoritmien toiminta ei välttämättä ole optimaalinen. Suorituskykyä on pyritty pitämään silmällä ja projektiryhmän mielestä se on kohtalainen. Parannettavaa tietysti olisi, mutta se saattaisi vaatia suuriakin muutoksia sovelluksen rakenteeseen. Parasta kuitenkin olisi että sovellus reagoisi viiveettömästi käyttäjän toimiin.

7.2             Puuttuvat ominaisuudet

Projektin aikana ei ehditty toteuttaa kaikkia sovellukselle asetettuja vaatimuksia. Seuraavassa listattu toteuttamattomia ominaisuuksia, jotka olisi toteutettava jatkokehityksessä.

Ominaisuus

Kuvaus

Käyttäjän mahdollisuus valita suunnittelussa käytetyt periodit.

Tällä hetkellä sovellus lukee suunnittelussa käytetyt periodit tiedostosta. Olisi kuitenkin toivottavaa, että käyttäjä voisi sovelluksen avulla valita suunnittelussa käytetyt periodit.

Suunnittelussa tapahtuneiden muutosten vienti Korppiin ohjelmallisesti.

Tällä hetkellä suunnittelun tuloksena syntyneet muutokset tulostetaan tiedostoon, jonka vieminen korppiin on käyttäjän vastuulla. Sovelluksen pitäisi tehdä tämä käyttäjän puolesta.

Autentinkointi Korpin kanssa

Korppi sallii kurssitietojen lukemisen tietyistä IP-osoitteista. Parempi vaihtoehto olisi, että sovelluksen käyttäjä kirjautuisi Korppiin omilla tunnuksillaan, jolloin IP-osoite rajoituksia ei tarvittaisi.

Tietokannan aikavälin valinta.

Olisi toivottavaa että käyttäjä voisi valita suunnitteluaikavälin, joka tällä hetkellä luetaan tiedostosta. Toinen vaihtoehto olisi, että sovellus automaattisesti huolehtisi tietorakenteen kasvatuksesta kun käyttäjä käsittelee viikkoa, jota ei ole vielä tietorakenteessa.

Pitkien tapahtumien käsittely.

Tällä hetkellä sovellus ei osaa käsitellä yli kahden tunnin tapahtumia oikein. Toivottavaa olisi, että sovellus osaisi käsitellä jopa mielivaltaisen pitkiä tapahtumia.

Viikon jakaminen ajanjaksoihin

Tietorakenne on suunniteltu mahdollistamaan tuntijaon tekemisen muillekin ajanjaksoille kuin kahden tunnin jaolle. Jakoa ei kuitenkaan voi käyttäjä vielä missään määrittää.

Pakolliset sivuaineet

Sovellus osaisi varoittaa, jos suunnittelija yrittää sijoittaa tapahtuman jonkun pakollisen sivuaineen tapahtuman kanssa päällekkäin.

Salien koon huomiointi suunnitteluvaiheessa.

Salien kokoa ei ole huomioitu nykyisellään ollenkaan. Sovellus voisi varoittaa käyttäjää, jos hän sijoittaa pieneen saliin tapahtuman, jolla on paljon osanottajia.

Synkronointi

Kun useilla suunnittelijoilla on jaettuja resursseja, niin olisi oltava mahdollisuus synkronoida suunnittelutilanne suunnittelijoiden kesken. Tämä olisi mahdollista toteuttaa esimerkiksi siten, että toisen suunnittelijan tapahtumat luettaisiin sovellukseen ns. vertailutapahtumiksi. Sovellus sen jälkeen ilmoittaisi päällekkäisyyksistä näiden vertailutapahtumien kanssa.

Mahdollisuus luoda uusia tapahtumia.

Kurssiin voisi liittää uuden tapahtuman Kaakkuri-sovelluksen avulla.

Opettajien huomiointi

Sovellus osaisi varoittaa tai kieltää sijoitukset, joissa tapahtumalla on sama opettaja samaan aikaan.

Peruuta-toiminto

Sovelluksessa olisi mahdollista peruuttaa edellinen tai edelliset muutokset.

Rajoite-editori

Käyttäjä pystyisi tekemään omia rajoitteita.

 

8           Yhteenveto

Kaakkuri-projekti toteutti Jyväskylän yliopiston tietotekniikan laitokselle prototyypin koko lukuvuoden lukujärjestyksen suunnittelusovelluksesta. Kaikki pakolliset ja myös osa toivotuista vaatimusmäärittelyssä [1] sovituista ominaisuuksista saatiin toteutettua. Sovellus otetaan mahdollisesti tietotekniikan laitoksella testikäyttöön jo keväällä 2005.

Sovellus toteutettiin Java-kielellä, joka mahdollistaa sen käytön useilla käyttöjärjestelmillä. Ainakin Windows, Linux, Unix ja Mac OS X ovat tuettuja käyttöjärjestelmiä.
Lähteet

[1] PK, AP, SS, MS, Kaakkuri: ”Vaatimusmäärittely”, Jyväskylän yliopisto, tietotekniikan laitos, 2004

[2] PK, AP, SS, MS, Kaakkuri: ”Sovellussuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2005

[3] PK, AP, SS, MS, Kaakkuri: ”Projektisuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2004

[4] PK, AP, SS, MS, Kaakkuri: ”Testaussuunnitelma”, Jyväskylän yliopisto, tietotekniikan laitos, 2005

[5] PK, AP, SS, MS, Kaakkuri: ”Testausraportti”, Jyväskylän yliopisto, tietotekniikan laitos, 2005

[6] PK, AP, SS, MS, Kaakkuri: ”Käyttö- ja asennusohje”, Jyväskylän yliopisto, tietotekniikan laitos, 2005

[7] Jämsen Päivi, ”Opetustapahtumien sijoitteluprojekti –kuvaus”, Jyväskylän yliopisto, tietotekniikan laitos

[8] Santanen Jukka-Pekka, ”Tietotekniikan Sovellusprojektien ohje”, Jyväskylän yliopisto, tietotekniikan laitos, 2004.

[9] Santanen Jukka-Pekka, ”Opinnäytteiden kirjoittaminen, lyhyt oppimäärä”, Jyväskylän yliopisto, tietotekniikan laitos, 23.8.2000

[10] Jukka Partanen ja Ville Haapsaari, ”Gavia parannusehdotukset loppuraportti”

Liitteet

Liite 1: Tärkeimpien luokkien luokkakaavio


Liite 2: Sovelluksen rakenteen kaaviokuva


Liite 3: Sovelluksen toiminnan kaaviokuva