% .tex-tiedosto projektin dokumenttien latomiseksi.

% Kirjoitelmaluokka, tässä käytetään projektien projdoc-luokkaa.
\documentclass[twoside]{projdoc}

\usepackage{paralist}
\usepackage{alltt}

% --- kansisivu ---

% Projektin nimi
\project{Paatti}

% Luottamuksellisuus: käytä termiä 'Luottamuksellinen' tai 'Julkinen'
\publicity{Julkinen}

% Versionumero: numerointikäytäntö on projektikohtainen
\version{0.3.0}

% Dokumentin nimi
\title{Sovellusraportti}

% --- tiivistelmäsivu ---

% Tekijät: huomaa aakkosjärjestys sukunimen mukaan
\author{Tapio Keränen}{Toni Salminen}{Jari Salokangas}{Lauri Satokangas}
% Puhelinnumerot: tekijöitä vastaava järjestys!
\authorphones{040-8464981}{040-5378086}{040-8652014}{040-5735358}
% Sähköpostiosoitteet: tekijöitä vastaava järestys!
\authoremails{t.tapio.keranen@student.jyu.fi}{toni.a.j.salminen@student.jyu.fi}{jari.p.t.salokangas@student.jyu.fi}{lauri.n.satokangas@student.jyu.fi}
% Etu- ja sukunimen alkukirjaimet: tekijöitä vastaava järjestys!
\authorinitials{TK}{TS}{JS}{LS}

% Tiivistelmä dokumentista: tämä ei siis ole tiivistelmä projektista,
% vaan tämän ko. dokumentin tarkoituksesta. 
\docabstract{Paatti-projekti kehitti Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla kuntoutetaan iäkkäitä, mielenterveyspotilaita ja työuupumuksesta kärsiviä sekä tuetaan kyseisiin aihealueisiin liittyvää tutkimusta. Tietojärjestelmässä on kaksi käyttöliittymää, joista tutkijan käyttöliittymällä hallitaan kuntoutettavien kuntoutusohjelmia sekä kuntoutettavan käyttöliittymällä kuntoutettava suorittaa tutkijan laatimaa kuntoutusohjelmaa. Sovellusraportissa kuvataan projektissa toteutettu tietojärjestelmän prototyyppi käyttöliittymän, tietorakenteiden, ohjelmointikäytänteiden sekä tavoitteiden toteutumisen osalta.} 

% Tiivistelmä projektista
\projectabstract{Paatti-projekti kehitti Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla tuetaan iäkkäiden, mielenterveyspotilaiden ja työuupumuksesta kärsivien itsenäistä elämää ja kuntoutumista, sekä tuetaan kyseisiin aihealueisiin liittyvän tutkimuksen tekemistä.}

% Avainsanat: dokumentin sisältöön liittyviä olennaisia asiasanoja: aakkosjärjestys, ensimmäinen sana isolla alkukirjaimella ja piste loppuun.
\keywords{Arkkitehtuuri, jatkokehitys, komponentit, käytänteet, käyttöliittymä, käyttöohje, rajapinnat, rakenne, sovellus, tavoitteet, testaus, tietojärjestelmä, tietokanta.}

% Varsinainen tulosteessa näkyvä ladonta alkaa
\begin{document}

% --- versiohistoriasivu ---

% Tämä latoo versiohistorialle ympäristön, sen alapuolelle ladotaan
% versiohistoriataulukko. Esimerkin vuoksi tehty. 
\versionhistory

\begin{tabular}{|c|r|p{9.0cm}|p{1.2cm}|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät} \\
\hline \hline
0.0.1    & 11.5.2012  & Dokumentti luotu ja pohjaksi otettu projektisuunnitelman pohja. & JS\\
\hline
0.0.2    & 12.5.2012  & Muokattu avainsanoja sekä lukuja ''Johdanto'' ja ''Ohjelmointikäytänteet''. Kirjoitettu luvut ''Tutkijan käyttöliittymä'', ''Kuntoutettavan käyttöliittymä'', ''Sovelluksen rakenne'' (osittain), ''Tavoitteiden toteutuminen'' (osittain) sekä ''Yhteenveto''. & JS\\
\hline
0.0.3    & 13.5.2012  & Lisätty kuvat lukuihin ''Tutkijan sovelluksen näkymäkartta'', ''Kuntoutettavan sovelluksen näkymäkartta'', ''Tietojärjestelmän asiakas-palvelinarkkitehtuuri'' ja ''Sovelluksen tietokanta''. Kirjoitettu lukuja ''Sovelluksen tietokanta'', ''Tunnetut puutteet ja virheet'' ja ''Jatkokehitysideat'' sekä muokattu lukua ''Toteutusratkaisujen kehittyminen''. & JS\\
\hline
0.0.4    & 14.5.2012  & Lisätty kuvat lukuihin ''Sovelluksen päänäkymä'' ja ''Oma profiili -näkymä''. Muokattu lukuja ''Sovelluksen tietokanta'', ''Tunnetut puutteet ja virheet'' sekä ''Jatkokehitysideat''. & JS\\
\hline
0.1.0    & 15.5.2012  & Toimitettu versio ohjaajan tarkastettavaksi. & JS\\
\hline
0.1.1    & 17.5.2012  & Muokattu avainsanoja sekä lukuja ''Johdanto'', ''Termit'', ''Tutkijan käyttöliittymä'', ''Kuntoutettavan käyttöliittymä'', ''Tietojärjestelmän rakenne'' (osittain) ja ''Yhteenveto''. & JS\\
\hline
0.1.2    & 18.5.2012  & Lisätty luku ''Tietojärjestelmän tietokanta''. Muokattu lukuja ''Tietojärjestelmän rakenne'' (osittain), ''Ohjelmointikäytänteet'' ja ''Tavoitteiden toteutuminen''. & JS\\
\hline
0.1.3    & 19.5.2012  & Poistettu ylimääräisiä termejä. Muokattu lukuja ''Tapahtumien luonti ja muokkaus'' sekä ''Tietojärjestelmän tietokanta''. & JS\\
\hline
0.1.4    & 20.5.2012  & Muokattu lukua ''Jatkokehitysideat''. & JS\\
\hline
\end{tabular}

\newpage

\begin{tabular}{|c|r|p{9.0cm}|p{1.2cm}|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät} \\
\hline \hline
0.1.5    & 21.5.2012  & Muokattu sovellusraporttia kokonaisvaltaisesti. Kirjoitettu lukuja ''Tietojärjestelmän rakenne ja rajapinnat'' ja ''Tietojärjestelmän komponentit''. & JS\\
\hline
0.1.6    & 22.5.2012  & Lisätty kuvat lukuihin ''Sovelluksen näkymien rakenne (kuntoutettava)'' ja ''Tietojärjestelmän rakenne ja rajapinnat''. & JS\\
\hline
0.2.0    & 22.5.2012  & Toimitettu versio ohjaajan tarkastettavaksi. & JS\\
\hline
0.2.1    & 26.5.2012  & Muokattu sovellusraporttia kokonaisvaltaisesti. Lisätty tietokantataulujen esimerkit. & JS\\
\hline
0.2.2    & 27.5.2012  & Lisätty käyttöliittymäkuvia. Muokattu luvun ''Tietojärjestelmän rakenne ja rajapinnat'' kuvaa. Laskettu vaatimukset uudelleen. Lisätty lähteitä ja viittauksia niihin. & JS\\
\hline
0.2.3    & 28.5.2012  & Lisätty käyttöliittymäkuvia. Jaettu ''Tunnetut puutteet ja virheet'' ja ''Jatkokehitysideat'' useammiksi kappaleiksi. & JS\\
\hline
0.3.0    & 29.5.2012  & Toimitettu versio ohjaajan tarkastettavaksi. & JS\\
\hline
\end{tabular}

% --- tietoa projektista -sivu ---

% \projectinfo latoo ympäristön projektin tiivistelmälle, joka on 
% projektikohtainen.
% Projektin tiivistelmä ja tekijöiden tiedot ladotaan automaattisesti sivun
% alkuun. Eli lisättävä projektiorganisaation tiedot muiden kuin tekijäiden
% osalta sekä tarvittavat yhteystiedot. Alla tämä on tehty esimerkin vuoksi.
\projectinfo

\textbf{Tilaaja:}

\begin{tabular}{p{4.8 cm}p{8cm}p{2.4cm}}
~~~$\bullet$~~Jukka Kaartinen & \texttt{jukka.kaartinen@jyu.fi} & 0400-248148 \\
~~~$\bullet$~~Päivi Lappalainen & \texttt{paivi.k.lappalainen@psyka.jyu.fi} & 040-8054192 \\
~~~$\bullet$~~Raimo Lappalainen & \texttt{raimo.lappalainen@psyka.jyu.fi} & 050-4432349 \\
~~~$\bullet$~~Heikki Lyytinen  & \texttt{heikki.lyytinen@psyka.jyu.fi} & 050-5524892 \\

\end{tabular}

\vspace{1truecm}
\textbf{Ohjaajat:}

\begin{tabular}{p{5.0cm}p{7.8cm}p{2.4cm}}
~~~$\bullet$~~Matti Lehtinen & \texttt{matti.k.lehtinen@jyu.fi} & 041-4564118 \\
~~~$\bullet$~~Jukka-Pekka Santanen & \texttt{santanen@mit.jyu.fi} & 040-8053299 \\
~~~$\bullet$~~Outa Valkama & \texttt{outa.j.valkama@gmail.com} & 045-3490910
\end{tabular}

\vspace{1truecm}
\textbf{Yhteystiedot:}

\begin{tabular}{p{4.5cm}p{13cm}}
~~~$\bullet$~~Sähköpostilistat: & \texttt{paatti@korppi.jyu.fi},\linebreak \texttt{paatti\_opetus@korppi.jyu.fi} \\
~~~$\bullet$~~Sähköpostiarkistot: & \texttt{https://korppi.jyu.fi/list-archive/paatti/}, \texttt{https://korppi.jyu.fi/list-archive/\linebreak paatti\_opetus/} \\ 
\end{tabular}


% --- chapter 1 ---

%-----------------------------------------------------------------------------
% \mainmatter latoo automaattisesti sisällysluettelon ym. alkusivut, ja 
%% sen jälkeen alkaa dokumentin sisällysluettelossa näkyvät luvut.
\mainmatter

% \chapter{Pääluvun nimi} aloittaa pääluvun, \section{Alaluvun nimi} alaluvun,
% ja \subsection{Ala-alaluvun nimi} ala-alaluvun.
\chapter{Johdanto}

Iäkkäitä ihmisiä halutaan auttaa elämään tervettä ja itsenäistä elämää omassa kodissaan pidempään. Iäkkäillä on usein muistihäiriöitä, jotka estävät heitä noudattamasta hoito-ohjeita. Kuntoutettavia tulee siten muistuttaa hoito-ohjeiden noudattamisesta. Useasti varttuneempien ihmisten fyysinen aktiivisuus alenee, ja tämä johtaa toimintakyvyn heikkenemiseen, joka estää heitä elämästä itsenäisesti omassa kodissaan. Ikäihmisiä tulee motivoida liikkumaan enemmän omatoimisesti.

Työuupumuksesta kärsivät eivät useasti muista pitää taukoja elämässään ja työssään. Heitä pitää muistuttaa rentoutusharjoituksista, jotka helpottavat stressiä, auttavat toipumaan ja opettavat keinoja selviytyä uupumuksesta.

Mielenterveyspotilaiden hoito vaatii paljon hoitohenkilökunnan läsnäoloa. Läsnäolo ei kuitenkaan ole aina mahdollista, kun hätä on suurin. Potilaan tilaa tulee voida seurata tapaamisten välillä, sekä potilaan ja tutkijan tulee tarvittaessa saada yhteys toisiinsa tapaamisten välillä.

Jyväskylän yliopiston psykologian laitos haluaa joustavan yhteyden kuntoutettavan, omaisen ja tutkijan välille. Tutkijan ja kuntoutettavan välille halutaan yhteys, joka mahdollistaa rutiiniluonteisten tehtävien suorittamisen ilman tutkijan läsnäoloa ajasta ja paikasta riippumattomasti. Yhteys mahdollistaa myös nopeamman viestinnän kuntoutettavan ja tutkijan välillä sekä antaa mahdollisuuden tutkijalle ja omaiselle seurata kuntoutukseen liittyvien tapahtumien suorittamista lähes reaaliajassa.

Paatti-projekti toteutti Sovellusprojekti-kurssilla keväällä 2012 Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla tuetaan kuntoutettavien itsenäistä elämää ja kuntoutumista sekä tutkijoiden tekemää tutkimusta. Kuntoutettaviin kuuluu muun muassa iäkkäitä, työuupumuksesta kärsiviä ja mielenterveyspotilaita. Tietojärjestelmällä voidaan tukea tutkimusta ja parantaa kuntoutettavien hyvinvointia monin eri tavoin. 

Projektissa toteutettu tietojärjestelmä koostuu kahdesta erillisestä tutkijan ja kuntoutettavan käyttöliittymistä. Tutkijan käyttöliittymä on suunniteltu tutkijoiden ja omaisten käytettäväksi. Käyttöliittymällä voi hallita käyttäjiä, ryhmiä ja tutkimuksia sekä luoda kuntoutusohjelmia ryhmille. Kuntoutettavan käyttöliittymällä voi suorittaa kuntoutusohjelmia ja tarkastella suorittamiaan kuntoutusohjelman tapahtumia. Toteutetut prototyypit ovat yhteydessä palvelimella olevaan tietokantaan.

Sovellusraportissa kuvataan vaatimusmäärittelyn \cite{vaatimusmaarittely} toiminnallisten vaatimusten toteutusratkaisut ja toteutuminen. Lisäksi raportissa kuvataan sovelluksen käyttöliittymiä, yleisiä toteutusratkaisuja, toteutuksen tietorakenteita ja yhteyksiä tiedostoihin, puutteellisia toteutusratkaisuja, suoritettuja testauksia sekä jatkokehitysideoita \cite{luokkadokumentaatio}. Projektin tuloksia, käytänteitä, tehtävien työmääriä, työnjakoa, aikataulua, sekä riskejä ja muita projektin läpivientiin liittyviä asioita käsitellään projektiraportissa \cite{projektiraportti}. 

Luvussa 2 kuvataan aihealueeseen ja sovellukseen liittyvät termit ja niiden merkitys. Luvuissa 3 ja 4 kuvataan tutkijan ja kuntoutettavan käyttämien sovellusten käyttöliittymien näkymät ja toiminnot. Luvussa 5 kuvataan järjestelmän rakenne ja toteutusratkaisuja. Luvussa 6 kuvataan järjestelmän tietokannan taulujen ja rakenteiden merkitykset. Luvussa 7 kuvataan projektin ohjelmointikäytänteitä sekä testauskäytänteitä ja testauksen tuloksia. Luvussa 8 kuvataan projektin tavoitteiden toteutumista, järjestelmän tunnettuja virheitä ja puutteita sekä projektin aikana esiintulleita jatkokehitysideoita. Luvussa 9 sisältää käyttöohjeita sovelluksen ylläpitäjille.


% --- chapter 2 ---

\chapter{Termit}

Luvussa kuvataan projektissa käytettäviä aihealueen termejä sekä tekniikoita ja kehitysvälineitä.

\section{Aihealueen termit}
Projektin sovellusraportin aihealueen termejä ovat seuraavat:
% Termilistat ladotaan Ventry-ympäristöllä, parametrina pisin termi,
% jolloin sisentyy oikein:
\begin{Ventry}{Kuntoutusohjelma}
  \item[Hälytystehtävä] on tehtävätyyppi, joka lähettää järjestelmän kautta viestin toiselle käyttäjälle.
  \item[Kuntoutettava] on tietojärjestelmän käyttäjä, joka suorittaa kuntoutusohjelmia.
  \item[Kuntoutusohjelma] on tutkijan ryhmälle tai käyttäjälle laatima kokonaisuus aikataulutettuja tapahtumia.
  \item[Käyttäjärooli] on käyttäjän käyttöoikeuksia tietojärjestelmässä kuvaava rooli. Niitä ovat mm. kuntoutettava ja tutkija.
  \item[Mobiililaite] on älypuhelin tai sormitietokone.
  \item[Ohje] on tehtävään liittyvä kuvaus teksti-, ääni-, kuva- tai videomuodossa.
  \item[Omainen] on käyttäjä, jolla on oikeus seurata kuntoutettavan edistymistä ja aktiivisuutta.
  \item[Ryhmä] on käyttäjistä koostuva kokonaisuus, jolle mm. voidaan laatia kuntoutusohjelma.
  \item[Suorite] on tehtävän suorittamisesta tietokantaan tallennettu data.
  \item[Tapahtuma] on tutkijan laatima tehtävien kokonaisuus, joka liitetään osaksi kuntoutusohjelmaa.
  \item[Tehtävä] on tapahtuman sisällä oleva yksittäinen tehtävä, joka voi sisältää mm. tekstiä, ääntä, kuvan tai videon.
  \item[Tutkija] on käyttäjä, joka laatii kuntoutusohjelmia kuntoutettaville ja seuraa niiden toteutumisia.
  \item[Tutkijan käyttöliittymä] on käyttöliittymä, jolla tutkija luo tapahtumia, aikatauluttaa tapahtumia ja kuntoutusohjelmia, hallitsee käyttäjien ja ryhmien tietoja sekä muodostaa suoritteista erilaisia raportteja.
  \item[Tutkimus] on samaan tutkimusaiheeseen tai -kohteeseen liittyvien ryhmien kokonaisuus.
\end{Ventry}

\section{Vaatimusmäärittelyn termit}

Vaatimusmäärittelyssä esiintyviä termejä ovat seuraavat:
\begin{Ventry}{Tapahtumamuokkain} 
  \item[Etenemisvaihtoehto] on monivalintatehtävän yksi valinta, jonka valitsemisen jälkeen siirrytään seuraavaan tehtävään. 
  \item[Hälytyskomponentti] on tehtävä, joka lähettää viestin käyttäjän asetuksiin määritetyille henkilöille. 
  \item[Käyttäjäprofiili] on järjestelmässä olevan käyttäjän profiili, joka sisältää yksilöintitietoja ja käyttöoikeuksia.
  \item[Mediasisältö] koostuu tietojärjestelmässä olevista multimediatiedostoista, joita voidaan sisällyttää tehtäviin.
  \item[Muistutus] huomauttaa käyttäjää ajankohtaisista tapahtumista ääni-, värinä- ja/tai tekstimuotoisella viestillä. 
  \item[Sisältökomponentti] on tehtävä, joka esittää käyttäjälle informaatiota, kuten tekstiä, ääntä, valokuvan tai videon.
  \item[Syötekomponentti] on tehtävä, joka tallentaa järjestelmään käyttäjän antamaa informaatiota, kuten tekstiä, ääntä, valokuvan tai videon. 
  \item[Tapahtumamuokkain] on tutkijan käyttöliittymässä oleva kuntoutusohjelmissa käytettävien tapahtumien laatimiseen käytettävä työkalu.
  \item[Tapahtumatyyppi] on tapahtumalle asetettu tyyppi, jolla tapahtuman sisältö voidaan tunnistaa. Niitä voivat olla mm. liikunta- tai rentoutustapahtumat.
  \item[Valintakomponentti] on tehtävä, johon käyttäjä vastaa valitsemalla vaihtoehdon.
\end{Ventry}

\section{Tekniikat ja kehitysvälineet}
Dokumentissa esiintyviä tekniikoita ja kehitysvälineitä ovat seuraavat:
\begin{Ventry}{Kuntoutusohjelma}
  \item[CSS] on WWW-dokumenteille kehitetty tyylikieli.
  \item[Git] on hajautettu versiohallintajärjestelmä.
  \item[HTML5] on uusi versio WWW-sivujen tekemiseen käytetystä HTML-kuvauskielestä.
  \item[JavaDoc] on ohjelma, jonka avulla Javan lähdekoodista voidaan generoida luokkadokumentaatio.
  \item[JavaScript] on WWW-ympäristössä käytettävä komentosarjakieli, jolla voidaan mm. lisätä WWW-sivuille dynaamista toiminnallisuutta.
  \item[NetBeans] on integroitu ohjelmointiympäristö mm. Java- ja JavaScript-ohjelmointikielille.
  \item[Vaadin] on Java-kielisten WWW-sovellusten kehitysympäristö.
  \item[YouSource] on Git-versiohallintaohjelmistoa tukeva lähdekoodien julkistusjärjestelmä, jota käytetään WWW-käyttöliittymällä.
\end{Ventry}


% --- chapter 3 ---

\chapter{Tutkijan käyttöliittymä}

Toteutettu tutkijan käyttöliittymä ei sisällä kaikkia tarvittavia toiminnallisuuksia. Paatti-projektissa toteutettuihin toiminnallisuuksiin kuuluu sovelluksen sisäänkirjautuminen, käyttäjien luonti ja muokkaus, ryhmien luonti ja muokkaus, tutkimusten luonti ja muokkaus, tapahtumien luonti ja muokkaus sekä kuntoutusohjelmien luonti ja muokkaus. Projektin jälkeisessä jatkokehityksessä toteutetaan multimediatiedostojen lataaminen ja esikatselu, suoritedatasta luotavien raporttien luonti, viestien lähettäminen ja vastaanottaminen sekä ohjenäkymä. Luvussa esitellään pääosin tutkijan käytettäväksi toteutetun sovelluksen käyttöliittymän eri näkymät sekä niihin liittyvät toiminnot ja niiden väliset suhteet. 

\section{Sovelluksen näkymäkartta}

Kuvassa \ref{sov_tutkija_kartta} havainnollistetaan näkymäkartan avulla tutkijan käyttöliittymän välilehtinä esitettäviä näkymiä ja niiden toimintakokonaisuuksia alivälilehtinä. Luvuissa 3.3 -- 3.9 kuvataan kunkin näkymän toiminnallisuus ja yhteydet muihin näkymiin.

\begin{figure}[htp]
\centering
\scalebox{0.77}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tutkija_kartta.eps} }
\caption{Tutkijan käyttöliittymän näkymäkartta.} \label{sov_tutkija_kartta}
\end{figure}

Tutkijan käyttöliittymän sovellukseen kirjaudutaan sisäänkirjautumisnäkymästä. Sisäänkirjautuva käyttäjä kirjoittaa käyttäjätunnuksensa ja salasanansa kirjautuessaan sisään. Uloskirjautuminen sovelluksesta tapahtuu \textit{Oma Sivu} -näkymästä.

\section{Sovelluksen näkymien rakenne}

Sovelluksen toiminnallisuus on sijoitettu välilehtinä esitettäviin näkymiin. Välilehtiratkaisu mahdollistaa sulavan siirtymisen näkymästä toiseen yläreunan välilehtikuvakkeiden kautta. Muista navigointimahdollisuuksista näkymien välillä on mainintoja luvuissa 3.4 -- 3.8.

\begin{figure}[htp]
\centering
\scalebox{0.5}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_nakyma_valilehdet.eps} }
\caption{Tutkijan käyttöliittymän välilehtivalikko.} \label{t_nakyma_valilehdet}
\end{figure}

Näkymien rakenne on ulkoasultaan ja sijoittelultaan samanlainen. Vasemmalla puolella näkymää on hakukomponentti (katso kuva \ref{t_nakyma_haku}), jolla käyttäjä voi hakea tiettyyn näkymään liittyviä tietoja. Esimerkiksi käyttäjien hallintanäkymässä kyseisellä hakukomponentilla voi hakea tietokannasta järjestelmässä olevia käyttäjiä. 

\begin{figure}[htp]
\centering
\scalebox{0.5}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_nakyma_haku.eps} }
\caption{Tutkijan käyttöliittymän hakukomponentti.} \label{t_nakyma_haku}
\end{figure}

Näkymien oikealla puolella olevassa alivälilehdillä näytetään hakutuloslistasta valittuun tietokokonaisuuteen liittyviä tietoja (katso kuva \ref{t_nakyma_tietonakyma}). Niillä voidaan myös muokata kyseiseen tietokokonaisuuteen liittyviä tietoja.

\begin{figure}[htp]
\centering
\scalebox{0.8}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_nakyma_tietonakyma.eps} }
\caption{Tutkijan käyttöliittymän haetun kohteen alivälilehtivalikko.} \label{t_nakyma_tietonakyma}
\end{figure}

\newpage

\section{Sovelluksen päänäkymä}

Sovelluksen päänäkymänä toimii kuvan \ref{t_omasivu} \textit{Oma sivu} -näkymä, joka näyttää tutkijalle ensiarvoista tietoa kuntoutettavista. Näkymä myös huomauttaa tutkijalle, jos hänellä on jokin asia jäänyt kesken aiemmilla istunnoilla. Kyseinen näkymä avautuu aina ensimmäisenä, kun sovellukseen kirjaudutaan sisään. Tämän näkymän kautta kirjaudutaan myös ulos järjestelmästä.

\begin{figure}[htp]
\centering
\scalebox{0.4}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_omasivu.eps} }
\caption{Tutkijan käyttöliittymän päänäkymä.} \label{t_omasivu}
\end{figure}

Sovelluksen päänäkymän rakenne eroaa ulkoasultaan muista näkymistä, sillä päänäkymässä ei luoda tai muokata järjestelmän tietokannan tietoja, vaan päänäkymä toimii ensisijaisena informaationäkymänä sovelluksen käyttäjälle. 

Näkymään liittyvät toiminnallisuudet sovittiin tilaajien kanssa projektin jälkeiseen jatkokehitykseen. Uloskirjautumisen sijainnin muuttamista ja muita jatkokehitysideoita kuvataan luvussa 8.3.

\newpage

\section{Käyttäjien hallinta}

Käyttäjien hallintanäkymän kuvassa \ref{t_kayttajantiedot} tutkija voi luoda uusia käyttäjiä järjestelmään, hakea olemassa olevia käyttäjiä ja muokata heidän tietojaan, hallita käyttäjien ryhmiä sekä tarkastella käyttäjän suorittamien tapahtumien suoritedataa. Näkymän päätoimintakokonaisuudet ovat uuden käyttäjän luonti ja haetun käyttäjän tietojen muokkaaminen. Tietojen muokkaamisen osatoimintakokonaisuudet on jaettu alivälilehdelle ja ne ovat käyttäjän perustietojen muokkaaminen, käyttäjän ryhmien jäsenyyden tarkasteleminen, lisääminen ja poistaminen sekä tapahtumien suoritushistorian tarkastelu ja tallentaminen xls-tiedostoksi.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_kayttajantiedot.eps} }
\caption{Tutkijan käyttöliittymän \textit{Käyttäjät}-näkymä.} \label{t_kayttajantiedot}
\end{figure}

\textbf{Luotaessa uutta käyttäjää} tutkija painaa hakukomponentin \textit{Luo uusi} -painiketta, jolloin oikealla oleva alivälilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat käyttäjän perustiedot, jonka jälkeen hän voi tallentaa käyttäjän järjestelmän tietokantaan. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun käyttäjän muokkausta tai valita toisen käyttäjän muokattavaksi.

\newpage

\textbf{Käyttäjän tietoja muokattaessa} tutkija voi muokata käyttäjän perustietoja \textit{Käyttäjän tiedot} -alivälilehdellä. Muokattaviin käyttäjän perustietoihin kuuluvat etunimi, sukunimi, käyttäjätunnus ja käyttäjän kuvaus. Välilehdellä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu käyttäjä \textit{Tallenna käyttäjä} ja \textit{Poista käyttäjä} -painikkeilla. \textit{Käyttäjän ryhmät} -välilehdellä tutkija voi nähdä ryhmät, joissa käyttäjä on jäsenenä ja voi halutessaan lisätä käyttäjän uuteen ryhmään tai poistaa käyttäjän valitusta ryhmästä. Näkymästä voi myös päästä tarkastelemaan valitun käyttäjän ryhmän tietoja \textit{Tarkastele valittua ryhmää} -painikkeen avulla. \textit{Suoritetut tapahtumat} -välilehdellä tutkija voi tarkastella käyttäjän suorittamista tapahtumista kerättyä suoritedataa ja siirtää kyseisen datan xls-tiedostomuodossa Excel-taulukkolaskentaohjelmaan painamalla \textit{Vie .xls-muotoon} -painiketta.

\begin{figure}[htp]
\centering
\scalebox{0.55}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_kayttajanryhmat.eps} }
\caption{\textit{Käyttäjät}-näkymän \textit{Käyttäjät ryhmät}-alivälilehti.} \label{t_kayttajanryhmat}
\end{figure}

\begin{figure}[htp]
\centering
\scalebox{0.5}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=90]{t_kayttajansuoritushistoria.eps} }
\caption{\textit{Käyttäjät}-näkymän \textit{Käyttäjät ryhmät}-alivälilehti.} \label{t_kayttajansuoritushistoria}
\end{figure}

\newpage

\section{Ryhmien hallinta}

Ryhmien hallintanäkymässä kuvassa \ref{t_ryhmantiedot} tutkija voi luoda uusia ryhmiä järjestelmään, hakea olemassa olevia ryhmiä ja muokata niiden tietoja, hallita ryhmään kuuluvia käyttäjiä sekä hallita ryhmien kuntoutusohjelmia. Näkymän päätoimintakokonaisuudet ovat uuden ryhmän luonti ja haetun ryhmän tietojen muokkaaminen. Alivälilehdille jaetut tietojen muokkaamisen osatoimintakokonaisuudet ovat ryhmän perustietojen muokkaaminen, ryhmän käyttäjien jäsenyyksien tarkasteleminen, lisääminen ja poistaminen sekä ryhmän kuntoutusohjelmien tarkasteleminen, lisääminen ja poistaminen.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_ryhmantiedot.eps} }
\caption{Tutkijan käyttöliittymän \textit{Ryhmät}-näkymä.} \label{t_ryhmantiedot}
\end{figure}

\textbf{Luotaessa uutta ryhmää} tutkija painaa hakukomponentin \textit{Luo uusi} -painiketta, jolloin oikealla oleva alivälilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat ryhmän perustiedot, jonka jälkeen hän voi tallentaa ryhmän järjestelmän tietokantaan. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun ryhmän muokkausta tai valita toisen ryhmän muokattavaksi.

\newpage

\textbf{Ryhmän tietoja muokattaessa} tutkija voi muokata valitun ryhmän perustietoja \textit{Ryhmän tiedot} -välilehdellä. Muokattaviin ryhmän perustietoihin kuuluvat nimi, ryhmän rooli, ryhmään liitetty tutkimus ja ryhmän kuvaus. Välilehdellä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu ryhmä \textit{Poista ryhmä} -painikkeella. \textit{Ryhmän jäsenet} -välilehdellä tutkija voi nähdä ryhmään kuuluvat käyttäjät ja voi halutessaan joko lisätä ryhmään uuden käyttäjän tai poistaa ryhmästä valitun käyttäjän. Välilehdeltä voi myös päästä suoraan tarkastelemaan valitun ryhmän jäsenenä olevan käyttäjän tietoja \textit{Tarkastele valittua ryhmää} -painikkeen avulla.

\begin{figure}[htp]
\centering
\scalebox{0.4}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_ryhmanjasenet.eps} }
\caption{Tutkijan käyttöliittymän \textit{Ryhmät}-näkymä \textit{Ryhmän jäsenet}-alivälilehti.} \label{t_ryhmanjasenet}
\end{figure}

\textit{Ryhmän aikataulut} -välilehdellä tutkija voi tarkastella ryhmän sisältämiä kuntoutusohjelmia, lisätä uusia kuntoutusohjelmia ryhmälle sekä poistaa ryhmältä kuntoutusohjelmia. Näkymästä voi myös siirtyä tarkastelemaan ryhmällä olevia kuntoutusohjelman tietoja \textit{Tarkastele valittua aikataulua} -painikkeen avulla.

\begin{figure}[htp]
\centering
\scalebox{0.4}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_ryhmanaikataulut.eps} }
\caption{Tutkijan käyttöliittymän \textit{Ryhmät}-näkymä \textit{Ryhmän jäsenet}-alivälilehti.} \label{t_ryhmanaikataulut}
\end{figure}

\newpage

\section{Tutkimusten hallinta}

Tutkimusten hallintanäkymässä kuvassa \ref{t_tutkimukset} tutkija voi luoda uusia tutkimuksia järjestelmään sekä hakea ja muokata olemassa olevia tutkimuksia. Näkymän päätoimintakokonaisuudet ovat uuden tutkimuksen luonti sekä haetun tutkimuksen tietojen muokkaaminen.

\begin{figure}[htp]
\centering
\scalebox{0.52}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tutkimukset.eps} }
\caption{Tutkijan käyttöliittymän \textit{Tutkimukset}-näkymä.} \label{t_tutkimukset}
\end{figure}

\textbf{Luotaessa uutta tutkimusta} tutkija painaa hakukomponentin \textit{Luo uusi} -painiketta, jolloin oikealla oleva alivälilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat tutkimuksen perustiedot, jonka jälkeen hän voi tallentaa tutkimuksen järjestelmän tietokantaan. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun tutkimuksen muokkausta tai valita toisen tutkimuksen muokattavaksi.

\textbf{Tutkimuksen tietoja muokattaessa} tutkija voi muokata valitun tutkimuksen perustietoja \textit{Tutkimuksen tiedot} -välilehdellä. Muokattaviin tutkimuksen perustietoihin kuuluvat nimi ja tutkimuksen kuvaus. Välilehdellä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu tutkimus \textit{Tallenna tutkimus} ja \textit{Poista tutkimus} -painikkeilla. Välilehdellä näytetään myös tutkimukseen kuuluvat ryhmät, joita voi siirtyä tarkastelemaan \textit{Tarkastele valittua ryhmää} -painikkeen avulla.

\section{Tapahtumien luonti ja muokkaus}

Tapahtumien luonti- ja muokkausnäkymässä kuvassa \ref{t_tapahtumantiedot} tutkija voi luoda uusia tapahtumia järjestelmään sekä hakea ja muokata olemassa olevia tapahtumia. Näkymän päätoimintakokonaisuudet ovat uuden tapahtuman luonti sekä haetun tapahtuman muokkaaminen. Tapahtuman muokkaamisen osatoimintakokonaisuudet ovat tapahtuman perustietojen muokkaaminen sekä tapahtuman rakenteen ja sisällön muokkaaminen.

\textbf{Luotaessa uutta tapahtumaa} tutkija painaa hakukomponentin \textit{Luo uusi} -painiketta, jolloin oikealla oleva alivälilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat tapahtuman perustiedot, jonka jälkeen hän voi muokata tapahtuman rakennetta ja sisältöä tapahtumamuokkaimella, joka sijaitsee \textit{Tapahtuman sisältö} -välilehdessä. Tutkija voi tallentaa tapahtuman järjestelmän tietokantaan \textit{Tallenna tapahtuma} -painikkeella. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun tapahtuman muokkausta tai valita toisen tapahtuman muokattavaksi.

\newpage

\begin{figure}[htp]
\centering
\scalebox{0.85}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumantiedot.eps} }
\caption{Tutkijan käyttöliittymän \textit{Tapahtumat}-näkymä.} \label{t_tapahtumantiedot}
\end{figure}

\textbf{Tapahtuman tietoja muokattaessa} tutkija voi muokata valitun tapahtuman perustietoja \textit{Tapahtuman tiedot} -välilehdellä. Muokattaviin tapahtuman perustietoihin kuuluvat otsikko, kuvaus ja tyyppi. Välilehdellä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu tapahtuma \textit{Tallenna tapahtuma} ja \textit{Poista tapahtuma} -painikkeilla. \textit{Tapahtuman sisältö} -välilehdellä tutkija voi muokata tapahtuman rakennetta ja sisältöä tapahtumamuokkaimella.

\newpage

\begin{figure}[htp]
\centering
\scalebox{0.35}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumamuokkain.eps} }
\caption{\textit{Tapahtumat}-näkymän \textit{Tapahtuman muokkaus}-alivälilehti.} \label{t_tapahtumamuokkain}
\end{figure}

\textbf{Tapahtumamuokkaimen piirtoalueessa} (katso kuva \ref{t_tapahtumamuokkain}) näytetään tapahtuman rakenne. Uusia tehtäväkomponentteja lisätään piirtoalustaan painalla hiiren oikeaa painiketta piirtoalustan tyhjässä tilassa (katso kuva \ref{t_tapahtumat_hiirivalikko1}). Tämän jälkeen tutkija valitsee hiirivalikosta lisättäväksi halutun tehtäväkomponenttityypin. Kun tutkija painaa hiiren oikeaa painiketta tehtäväkomponentin sisällä (katso kuva \ref{t_tapahtumat_hiirivalikko2}), voi tutkija siirtää tai poistaa valitun tehtäväkomponentin tai luoda etenemispolun kahden komponentin välille. Etenemispolku kertoo seuraavaksi näytettävän tehtävän, kun halutaan siirtyä tapahtumaa suoritettaessa tehtävästä toiseen. Tehtäväkomponentin sisältöä voidaan muokata tapahtumamuokkaimen oikean puolen tietoalueessa, jossa näytetään piirtoalueesta hiirellä valittuun tehtäväkomponenttiin liittyviä tietoja.

\begin{figure}[htp]
\centering
\scalebox{0.7}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumat_hiirivalikko1.eps} }
\caption{Tapahtumamuokkaimen piirtoalueen hiirivalikko.} \label{t_tapahtumat_hiirivalikko1}
\end{figure}

\begin{figure}[htp]
\centering
\scalebox{0.7}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumat_hiirivalikko2.eps} }
\caption{Tapahtumamuokkaimen komponentin hiirivalikko.} \label{t_tapahtumat_hiirivalikko2}
\end{figure}

\newpage

\textbf{Lisättäviä tehtäväkomponenttityyppejä} ovat tekstikomponentti, monivalintakomponentti, liukusäädinkomponentti, sensorikomponentti, mediakomponentti ja hälytyskomponentti, joista projektissa ehdittiin toteuttaa teksti- ja monivalintakomponentti. Tekstikomponentin muokattaviin ominaisuuksiin kuuluvat otsikko ja tekstisisältö. Monivalintakomponentin muokattaviin ominaisuuksiin kuuluvat otsikko sekä etenemisvaihtoehtojen lisääminen, etenemisvaihtoehdon seuraavan tapahtuman osoitteen valitseminen, etenemisvaihtoehdon arvon valitseminen sekä etenemisvaihtoehdon tekstin lisääminen. Etenemisvaihtoehdon arvoa käytetään kuntoutettavan edistymisen seurannan laskemiseen ja analysointiin.

\begin{figure}[htp]
\centering
\scalebox{0.48}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumat_tekstikomponentti.eps} }
\caption{Tekstikomponentin asetusvalikko.} \label{t_tapahtumat_tekstikomponentti}
\end{figure}

\begin{figure}[htp]
\centering
\scalebox{0.48}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_tapahtumat_monivalintakomponentti.eps} }
\caption{Monivalintakomponentin asetusvalikko.} \label{t_tapahtumat_monivalintakomponentti}
\end{figure}

\newpage

\section{Kuntoutusohjelmien luonti ja muokkaus}

Kuntoutusohjelmien luonti- ja muokkausnäkymässä kuvassa \ref{t_kuntoutusohjelmantiedot} tutkija voi luoda uusia kuntoutusohjelmia järjestelmään sekä hakea ja muokata olemassa olevia kuntoutusohjelmia. Näkymän päätoimintakokonaisuudet ovat uuden kuntoutusohjelman luonti sekä haetun kuntoutusohjelman tietojen muokkaaminen. Tietojen muokkaamisen osatoimintakokonaisuudet ovat kuntoutusohjelman perustietojen muokkaaminen sekä kuntoutusohjelmassa olevien tapahtumien tarkasteleminen, lisääminen, poistaminen ja aikatauluttaminen.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_kuntoutusohjelmantiedot.eps} }
\caption{Kuntoutusohjelman tietojen muokkaus.} \label{t_kuntoutusohjelmantiedot}
\end{figure}

\textbf{Luotaessa uutta kuntoutusohjelmaa} tutkija painaa hakukomponentin \textit{Luo uusi} -painiketta, jolloin oikealla oleva alivälilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat kuntoutusohjelman perustiedot, jonka jälkeen hänen täytyy lisätä tapahtumia kuntoutusohjelmaan \textit{Kuntoutusohjelman muokkaaminen} -välilehdellä. Siinä tutkija voi lisätä järjestelmässä olevia tapahtumia kuntoutusohjelmaan, poistaa kuntoutusohjelmasta tapahtumia sekä aikatauluttaa kuntoutusohjelmaan lisäämiään tapahtumia. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun kuntoutusohjelman muokkausta tai valita toisen kuntoutusohjelman muokattavaksi.

\newpage

\textbf{Kuntoutusohjelman tietoja muokattaessa} tutkija voi muokata valitun kuntoutusohjelman perustietoja \textit{Aikataulun tiedot} -välilehdellä. Muokattaviin kuntoutusohjelman perustietoihin kuuluu kuntoutusohjelman kuvaus. Välilehdellä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu kuntoutusohjelma. \textit{Aikataulun muokkaus} -välilehdellä tutkija voi tarkastella kuntoutusohjelman sisältämiä tapahtumia ja niiden ajoitusta, lisätä uusia tapahtumia kuntoutusohjelmaan ja aikatauluttaa ne sekä poistaa tapahtumia kuntoutusohjelmasta.

Tutkija voi myös \textbf{luoda vapaaehtoisia kuntoutusohjelmia} \textit{Aikataulun muokkaus} -välilehdellä. Tällöin kuntoutusohjelmassa oleva tapahtuma asetetaan vapaaehtoiseksi \textit{Merkitse tapahtuma vapaaehtoiseksi harjoitteeksi} -asetuspainikkeella.

\begin{figure}[htp]
\centering
\scalebox{0.35}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{t_kuntoutusohjelmanmuokkaus.eps} }
\caption{Kuntoutusohjelman tapahtumien muokkaus.} \label{t_kuntoutusohjelmanmuokkaus}
\end{figure}

\newpage

\section{Jatkokehitykseen sovitut näkymät}

Tilaajan kanssa jatkokehitykseen sovitut näkymät ovat mediatiedostojen lataamis- ja tarkastelunäkymä, raporttinäkymä sekä ohjenäkymä. \textbf{Mediatiedostojen lataamis- ja tarkastelunäkymässä} tutkija voi lisätä mediatiedostoja järjestelmään ja esikatsella järjestelmässä olevia mediatiedostoja. Mediatiedostoilla tarkoitetaan kuva-, ääni- tai videotiedostoja. Mediatiedostoja voi järjestelmään lisäämisen jälkeen käyttää mediakomponentissa (katso luku 3.7) näytettävänä sisältönä. \textbf{Raporttinäkymässä} tutkija voi tarkastella järjestelmään tallentunutta suoritedataa tekstinä ja/tai graafisessa muodossa sekä luoda erilaisia raportteja eri tiedostoformaatteihin, esimerkiksi pdf-muotoon. \textbf{Ohjenäkymässä} tutkija voi lukea sovelluksen käyttöohjeita. Mahdollisesti kyseinen ohjenäkymä saattaa olla järkevä avautua omaan selainikkunaan, eikä sen välttämättä tarvitsisi sijaita päävälilehtenä.


% --- chapter 4 ---

\chapter{Kuntoutettavan käyttöliittymä}

Toteutettu kuntoutettavan käyttöliittymä ei sisällä kaikkia tarvittavia toiminnallisuuksia. Toteutettuihin toiminnallisuuksiin kuuluu sovelluksen sisäänkirjautuminen, edistymisen seuraaminen, ajoitettujen ja vapaaehtoisten tapahtumien suorittaminen. Paatti-projektin jälkeisessä jatkokehityksessä toteutetaan päiväkirjaviestien luonti ja lukeminen sekä ryhmäkohtaisten viestien lukeminen. Luvussa esitellään pääosin kuntoutettavan käytettäväksi toteutetun sovelluksen käyttöliittymän eri näkymät sekä niihin liittyvät toiminnot ja niiden väliset suhteet.

\section{Sovelluksen näkymäkartta}

Kuvassa \ref{sov_kuntoutettava_kartta} havainnollistetaan kuntoutettavan käyttöliittymän näkymien väliset suhteet näkymäkarttana. Luvuissa 4.3 -- 4.8 kuvataan kunkin näkymän toiminnallisuus ja yhteydet muihin näkymiin.

\begin{figure}[htp]
\centering
\scalebox{0.95}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_kuntoutettava_kartta.eps} }
\caption{Kuntoutettavan käyttöliittymän näkymäkartta.} \label{sov_kuntoutettava_kartta}
\end{figure}

Kuntoutettavan käyttöliittymän sovellukseen kirjaudutaan sisäänkirjautumisnäkymästä. Sisäänkirjautuva käyttäjä kirjoittaa käyttäjätunnuksensa ja salasanansa kirjautuessaan sisään. Uloskirjautuminen sovelluksesta tapahtuu painamalla päänäkymän vasemman alareunan painiketta (kuva 4.4).

\section{Sovelluksen näkymien rakenne}

Kuntoutettavan käyttöliittymän näkymien rakenne ja ulkoasu noudattaa samaa tyyliä koko sovelluksessa. Jokainen näkymä on jaettu kolmeen osaan. Ylimpänä on \textbf{otsikkotieto} (katso kuva \ref{k_nakyma_header}), jossa näytetään valikoissa valikon nimi ja tapahtumaa suoritettaessa tapahtuman nimi. Näkymämallin keskellä olevassa \textbf{sisältöalueessa} (katso kuva \ref{k_nakyma_content}) näytetään valikoissa navigointipainikkeet, alavalikoissa valikon sisältö ja tapahtumaa suoritettaessa tapahtuman tehtävän sisältö. 

Näkymämallissa alimpana on varattu \textbf{alue toimintopainikkeille} (kuva \ref{k_nakyma_footer}). Vasen toimintopainike toimii aina takaisin-, peruutus- tai kieltopainikkeena, kun keskimmäinen ja oikea painike toimivat eri tavalla eri näkymissä. Esimerkiksi tapahtumaa suoritettaessa keskimmäinen ja oikea painike toimivat tapahtuman tehtävien etenemis- ja paluupainikkeina. Oikeaa painiketta käytetään myös hyväksymispainikkeena tietyissä tilanteissa, kuten esimerkiksi tapahtuman keskeyttämisessä.

\newpage

\begin{figure}[htp]
\centering
\scalebox{0.45}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_nakyma_header.eps} }
\caption{Käyttöliittymän otsikkoalue.} \label{k_nakyma_header}
\end{figure}

\begin{figure}[htp]
\centering
\scalebox{0.45}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_nakyma_content.eps} }
\caption{Käyttöliittymän sisältöalue.} \label{k_nakyma_content}
\end{figure}

\begin{figure}[htp]
\centering
\scalebox{0.45}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_nakyma_footer.eps} }
\caption{Käyttöliittymän navigointipainikealue.} \label{k_nakyma_footer}
\end{figure}

\newpage

\section{Sovelluksen päänäkymä}

Sovelluksen päänäkymästä (katso kuva \ref{k_paanakyma}) pääsee näkymiin \textit{Oma profiili}, \textit{Tapahtumat} ja \textit{Harjoitteet} (katso luvut 4.4, 4.6 ja 4.8) vastaavilla painikkeilla. Näkymän vasemmalla painikkeella kuntoutettava voi kirjautua ulos sovelluksesta ja keskipainikkeella kuntoutettavalle avautuu näkymä, jossa näytetään sovellukseen liittyviä tietoja.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_paanakyma.eps} }
\caption{Sovelluksen päävalikko.} \label{k_paanakyma}
\end{figure}

\newpage

\section{Oma profiili -näkymä}

Kuvan \ref{k_omaprofiili} \textit{Oma profiili} -näkymän kautta pääsee näkymiin \textit{Edistyminen}, \textit{Päiväkirja} sekä \textit{Viestit} (katso luvut 4.5 ja 4.9) vastaavilla painikkeilla. Näkymän vasemmalla painikkeella kuntoutettava voi palata takaisin luvun 4.3 päänäkymään. Muilla alareunan painikkeilla ei näkymässä ole toiminnallisuutta.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_omaprofiili.eps} }
\caption{\textit{Oma profiili} -alavalikko.} \label{k_omaprofiili}
\end{figure}

\newpage

\section{Edistyminen-näkymä}

Kuntoutettava pääsee kuvan \textit{Edistyminen}-näkymään luvun 4.4 näkymän kautta. Näkymässä kuntoutettava voi tarkastella suorittamiaan tapahtumia. Päävalikon vasemmalla painikkeella kuntoutettava voi palata takaisin luvun 4.4 näkymään. Muilla alareunan painikkeilla ei näkymässä ole toiminnallisuutta.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_edistyminen.eps} }
\caption{\textit{Edistyminen}-alavalikko.} \label{k_edistyminen}
\end{figure}

\newpage

\section{Tapahtumat-näkymä}

Kuntoutettava pääsee kuvan \textit{Tapahtumat}-näkymään luvussa 4.3 esitetyn päänäkymän kautta. Näkymässä näytetään kuntoutettavalle suoritettavien tapahtumien lista. Kuntoutettava voi valita tapahtumalistasta suoritettavaksi haluamansa tapahtuman, jos se on ajoituksen osalta suoritettavissa sillä hetkellä. Tapahtuman suorittamiseen siirrytään painamalla lista-alkion oikealla puolella olevaa \textit{Aloita}-painiketta. 

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumat.eps} }
\caption{\textit{Tapahtumat}-näkymä.} \label{k_tapahtumat}
\end{figure}

\newpage

Kuntoutettava voi alareunan vasemmalla painikkeella palata takaisin päävalikkoon. Muilla alareunan painikkeilla voidaan valita näkymään näytettäväksi joko tulevia tai rästiin jääneitä tapahtumia, jolloin painettu painike painautuu pohjaan. Painamalla painettua painiketta toisen kerran näkymä näyttää listan kaikista suorittamattomista tapahtumista. 

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumat_rastit.eps} }
\caption{Rästissä olevat tapahtumat.} \label{k_tapahtumat_rastit}
\end{figure}

\newpage

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumat_tulevat.eps} }
\caption{Tulevat tapahtumat.} \label{k_tapahtumat_tulevat}
\end{figure}

\newpage

\section{Tapahtumien suorittaminen}

Tapahtuman suorittaminen aloitetaan luvuissa 4.6 ja 4.8 esiteltyjen \textit{Tapahtumat}- tai \textit{Harjoitteet}-näkymien kautta. Tapahtuma sisältää yhden tai useamman tehtävän, jonka kuntoutettavan toivotaan suorittavan. Jotkin tehtävätyyppien näytettävistä sisällöistä kaipaavat kuntoutettavan kosketussyötettä. Esimerkiksi monivalintatehtävässä kuntoutettavan on valittava vaihtoehdoista sopivin, ennen kuin hän voi edetä tapahtumassa eteenpäin.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumansuoritus.eps} }
\caption{Tapahtuman suorittaminen.} \label{k_tapahtumansuoritus}
\end{figure}

\newpage

Tapahtuman tehtäviä pääsee eteen- ja taaksepäin alareunan keskimmäisellä ja oikealla painikkeella. Alareunan vasemmalla painikkeella kuntoutettava voi peruuttaa tapahtuman suorittamisen. Tällöin kuntoutettavalta varmistetaan vielä, että hän haluaa varmasti poistua tapahtumasta. 

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumastapoistuminen.eps} }
\caption{Tapahtumasta poistumisen varmistusnäkym.} \label{k_tapahtumastapoistuminen}
\end{figure}

\newpage

Kun kuntoutettava on suorittanut tapahtuman, palaa sovellus takaisin \textit{Tapahtumat} tai \textit{Harjoitteet}-näkymään. Tapahtuman päättymisen jälkeen Kuntoutettavalle näytetään ilmoitus, että tapahtuma on päättynyt.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_tapahtumapaattyi.eps} }
\caption{Tapahtuman päättyminen.} \label{k_tapahtumapaattyi}
\end{figure}

\newpage

\section{Harjoitteet-näkymä}

Kuntoutettava pääsee \textit{Harjoitteet}-näkymään luvussa 4.3 esitetyn päänäkymän kautta. \textit{Harjoitteet}- ja \textit{Tapahtumat}-näkymät ovat ulkoasultaan ja toiminnallisuuksiltaan lähes samanlaisia. \textit{Harjoitteet}-näkymässä näkyy kuntoutettavalle suunnattuja vapaaehtoisia tapahtumia, joita hän voi suorittaa useamman kerran tai niitä ei ole välttämätöntä suorittaa ollenkaan. 

\begin{figure}[htp]
\centering
\scalebox{0.55}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_harjoitteet.eps} }
\caption{\textit{Harjoitteet}-näkymä.} \label{k_harjoitteet}
\end{figure}

\textit{Harjoitteet}-näkymän vasemman alareunan painikkeella kuntoutettava voi palata takaisin luvun 4.3 näkymään. Tapahtuman suorittamiseen siirrytään samalla tavalla kuin luvussa 4.6 kuvatussa \textit{Tapahtumat}-näkymässä.

\section{Jatkokehitykseen sovitut näkymät}

Tilaajan kanssa jatkokehitykseen sovitut näkymät ovat \textit{Päiväkirja} ja \textit{Viestit}. \textit{Päiväkirja}-näkymässä kuntoutettava voi tallentaa päiväkirjamerkintöjä joko kuva-, ääni- tai tekstimuodossa. Kukin päiväkirjan merkintä tallentuu järjestelmän tietokantaan. 

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_paivakirja.eps} }
\caption{\textit{Päiväkirja}-näkymä.} \label{k_paivakirja}
\end{figure}

\newpage

\textit{Viestit}-näkymässä kuntoutettava voi tarkastella hänelle tulleita ryhmäkohtaisia viestejä, joita tutkija on lähettänyt oman käyttöliittymänsä kautta. \textit{Viestit}-näkymän olennaisin käyttötarkoitus on toimia palautekanavana tutkijan ja kuntoutettavan välillä.

\begin{figure}[htp]
\centering
\scalebox{0.6}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{k_viestit.eps} }
\caption{\textit{Viestit}-näkymä.} \label{k_viestit}
\end{figure}

\newpage


% --- chapter 5 ---

\chapter{Tietojärjestelmän rakenne}

Sovellus koostuu kahdesta WWW-selainsovelluksesta, jotka ovat yhteydessä palvelimella olevaan projektissa suunniteltuun tietokantaan. Sovellus käyttää Vaadin-sovelluskehitysympäristön käyttöliittymäkirjastoja ja komponentteja. Prototyypin käyttöliittymistä kuntoutettavan mobiilisovellus noudattaa enemmän MVC-mallia, kun taas tutkijapuolen sovellus hyödyntää sitä vain osittain. Luvussa kuvataan sovelluksen rakenne ja sen toteutusratkaisut yleisellä tasolla.

\section{Tietojärjestelmän asiakas-palvelinarkkitehtuuri}

Kuvassa \ref{sov_tj_arkkitehtuuri} esitetään tietojärjestelmän yleinen rakenne sekä ulkopuoliset ohjelmistot, joita järjestelmä käyttää. Palvelimella olevaan MySQL-tietokannanhallintajär\-jestelmään  tallennetaan tietojärjestelmän tiedot. Tomcat-palvelin tarjoaa suoritusalustan tutkijan ja kuntoutettavan käyttöliittymille, joita käytetään WWW-selainten kautta mobiililaitteilla ja tietokoneilla.

\begin{figure}[htp]
\centering
\scalebox{0.8}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tj_arkkitehtuuri.eps} }
\caption{Tietojärjestelmän asiakas-palvelinarkkitehtuuri.} \label{sov_tj_arkkitehtuuri}
\end{figure}

Kuntoutettavan käyttöliittymä on suunniteltu käytettäväksi mobiililaitteella. Kuntoutettavan käyttöliittymä olisi tarkoitus käyttää PhoneGap-laajennusta käsittelemään mobiililaitteiden erilaisia antureita, kuten kiihtyvyysanturia, kameraa ja värinätoimintoa.

\section{Tietojärjestelmän rakenne ja rajapinnat}

Kuvassa \ref{sov_rakenne_ja_rajapinnat} kuvataan projektissa toteutetun tietojärjestelmän arkkitehtuuri kerrosmallina. Tietojärjestelmä hyödyntää Vaadin-sovelluskehitysalustan tarjoamaa rajapintaa. Luvuissa 5.3 -- 5.6 kuvataan tarkemmin valittuja rakenteita sekä lyhyesti niissä olevien komponenttien käyttötarkoitus. Kaikki projektissa toteutetut komponentit, luokat ja metodit kuvataan tarkemmin luokkadokumentaatiossa \cite{luokkadokumentaatio}. 

\begin{figure}[htp]
\centering
\scalebox{1}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_rakenne_ja_rajapinnat.eps} }
\caption{Tietojärjestelmän rakenne.} \label{sov_rakenne_ja_rajapinnat}
\end{figure}

Tietojärjestelmä hyödyntää myös seuraavanlaisia ulkopuolisia komponentteja:

\begin{Ventry}{SessionGuard}
  \item[log4j] on Java-kirjasto lokien kirjoittamiseen.
  \item[joda-time] on Java-kirjasto, jota käytetään tapahtumien aikojen esittämisessä ja laskemisessa.
  \item[SessionGuard] on Vaadinin lisäosa, joka pitää palvelimen ja sovelluksen yhteyden päällä, jotta käyttäjän ''istunto'' ei vanhene.
  \item[TableExport] on Vaadinin lisäosa, jota käytetään suoritedatan tallentamiseen Excel-taulukkomuodossa.
\end{Ventry}

\textbf{PaattiLoginUtils}-pakettia ei käsitellä tulevissa luvuissa tarkemmin sen yksinkertaisen rakenteen takia. Se on kokoelma luokkia, joiden avulla sisäänkirjaudutaan sovelluksiin.

\newpage

\section{PaattiResearchin rakenne ja komponentit}

Kuvassa \ref{sov_tj_paattiresearch} kuvataan PaattiResearch-paketin arkkitehtuuri kerrosmallina. Se sisältää kokoelman luokkia, joiden avulla käytetään tutkijan käyttöliittymää. Luvussa kuvataan tiiviisti kuvassa \ref{sov_tj_paattiresearch} olevien komponenttien käyttötarkoitus. 

\begin{figure}[htp]
\centering
\scalebox{1}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tj_paattiresearch.eps} }
\caption{PaattiResearchin rakenne.} \label{sov_tj_paattiresearch}
\end{figure}

PaattiResearch koostuu seuraavista komponenteista:

\begin{Ventry}{PaattiResearchApplication}
  \item[PaattiResearchApplication] on tutkijan käyttöliittymän ohjelma.
  \item[ApplicationTabSheet] sisältää kaikki tutkijan käyttöliittymän sovelluksen näkymien välilehdet.
  \item[ApplicationView] on abstraktiluokka, josta on peritty tutkijan käyttöliittymän sovelluksen muut näkymät.
  \item[ApplicationViewTab] on abstraktiluokka, josta on peritty tutkijan käyttöliittymän sovelluksen näkymissä olevat välilehdet.
  \item[SearchComponent] on tutkijan käyttöliittymän näkymissä oleva hakukomponentti.
\end{Ventry}

\newpage

\section{Paatin rakenne ja komponentit}

Kuvassa \ref{sov_tj_paatti} kuvataan Paatti-paketin arkkitehtuuri kerrosmallina. Se sisältää kokoelman luokkia, joiden avulla käytetään kuntoutettavan käyttöliittymää. Luvussa kuvataan tiiviisti kuvassa \ref{sov_tj_paatti} olevien komponenttien käyttötarkoitus. 

\begin{figure}[htp]
\centering
\scalebox{1}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tj_paatti.eps} }
\caption{Paatin rakenne.} \label{sov_tj_paatti}
\end{figure}

Paatti koostuu seuraavista komponenteista:

\begin{Ventry}{MobileViewHandler}
  \item[PaattiApplication] on kuntoutettavan käyttöliittymän ohjelma.
  \item[MobileViewHandler] on kuntoutettavan käyttöliittymän näkymähallitsija, joka hoitaa yhteyden kaikkien näkymien ja tietokannan välillä.
  \item[MobileView] on käyttöliittymän runko, johon asetetaan näkymän logiikka ja sisältö.
  \item[MobileViewLogic] on luokka, josta on peritty kuntoutettavan käyttöliittymän näkymien logiikat.
  \item[MenuView] on luokka, josta on peritty kuntoutettavan käyttöliittymän sovelluksen valikkonäkymät.
  \item[MobileContentView] on luokka, josta on peritty kuntoutettavan käyttöliittymän sovelluksen näkymät.
\end{Ventry}

\newpage

\section{PaattiDatabaseUtilsin rakenne ja komponentit}

Kuvassa \ref{sov_tj_databaseutils} kuvataan PaattiDatabaseUtils-paketin arkkitehtuuri kerrosmallina. Se sisältää kokoelman luokkia, joiden avulla käytetään tietojärjestelmän tietokantaa. Luvussa kuvataan tiiviisti kuvassa 5.5 olevien komponenttien käyttötarkoitus. 

\begin{figure}[htp]
\centering
\scalebox{0.8}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tj_databaseutils.eps} }
\caption{PaattiDatabaseUtilsin rakenne.} \label{sov_tj_databaseutils}
\end{figure}

PaattiDatabaseUtils koostuu seuraavista komponenteista:

\begin{Ventry}{PaattiResearchDatabase}
  \item[PaattiResearchDatabaseService] on tutkijan käyttöliittymän käyttämä rajapinta olennaisten tietokantametodien käyttöön. Sillä estetään myös kaikkien tietokantametodien käyttö.
  \item[PaattiMobileDatabaseService] on kuntoutettavan käyttöliittymän käyttämä rajapinta olennaisten tietokantametodien käyttöön. Sillä estetään myös kaikkien tietokantametodien käyttö.
  \item[PaattiDBService] on tietojärjestelmän tietokannan toteutus.
  \item[dbobjects] on käytön aikana olevien käyttäjän ja hänen ryhmien ja roolien väliaikainen talletuspaikka.
  \item[containers] on luokka, joka on peritty SQLContainerista ja jota käytetään tapahtumien tehtävien valintojen tallentamiseen.
  \item[queryDelegates] on luokka, joka avustaa tiedon käsittelyssä, laskemisessa ja tallentamisessa. Toteuttaa FreeformStatement\-Delegate-rajapintaa.
  \item[names] on luokka, joka sisältää tietokannan taulujen nimet.
\end{Ventry}

\newpage

\section{Toteutusratkaisujen kehittyminen}

Tietojärjestelmän toteutus aloitettiin maaliskuun alkupuolella kuntoutettavan käyttöliittymästä. Tietokannan suunnittelu ja tutkijan käyttöliittymän toteutus aloitettiin maaliskuun loppupuolella. Virtuaalipalvelimen ryhmä sai käyttönsä huhtikuun alkupuolella testausta varten.

\textbf{Kuntoutettavan käyttöliittymän} toteutusratkaisujen suurin muutos tapahtui näkymien näyttämisessä. Kuntoutettavan käyttöliittymä latasi sovellusta käytettäessä seuraavan näkymän uudelleen aina, kun näkymästä siirryttiin toiseen. Myöhemmin kuntoutettavan käyttöliittymän näkymien latausta muutettiin niin, että kaikki sovelluksen näkymät luodaan vain kerran silloin, kun niihin mennään sovelluksessa ensimmäisen kerran. Sovellus tallentaa luodut näkymät ja lataa näytettäviä näkymiä uudelleen sisäisestä tietorakenteesta.

\textbf{Tutkijan käyttöliittymän} toteutusratkaisujen suurin muutos tapahtui projektin viimeistelyvaiheessa toukokuun alkupuolella. Sovelluksen rakennetta muutettiin enemmän noudattamaan MVC-arkkitehtuuria. Sovellusta myös refaktoroitiin hyödyntämään enemmän perintää ja rajapintoja koodin siistimisen ja sovelluksen suorituskyvyn parantamisen vuoksi.


% --- chapter 6 ---

\chapter{Tietojärjestelmän tietokanta}

Projektryhmä suunnitteli tietokannan järjestelmälle. Tietokantaan tallennetaan sekä tutkijan luomia käyttäjiä, ryhmiä, tutkimuksia, kuntoutusohjelmia ja tapahtumia että kuntoutettavan tapahtumien suorittamisesta kerättyä suoritedataa. 

\section{Tietokannan ER-kaavio}

Kuvan \ref{sov_tietokanta} ER-kaaviossa on esitetty tietokannan taulut ja niiden kentät sekä suhteet toisiin tietokannan tauluihin. Luvuissa 6.2 -- 6.18 kuvataan tietokannan taulujen ja kenttien merkitys tarkemmin sekä kuvataan esimerkkitilanteita taulujen käyttöön liittyen.

Kuvan \ref{sov_tietokanta} tauluihin ei ole piirretty \texttt{rowStatus}-kenttää, sillä se on jokaisella taululla kenttänä. \texttt{RowStatus}-kenttään tallennetaan taulukossa olevan sarakkeen tila (kuten \texttt{ACTIVE} tai \texttt{DELETED}). Kyseiseen kenttään tallennetaan tekstimuotoista dataa (\texttt{string}). 

Tietokannan tauluista \texttt{BINARYDATA} ja \texttt{TEXTDATA} eivät ole tällä hetkellä käytössä.

\begin{figure}[htp]
\centering
\scalebox{0.42}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=-90]{sov_tietokanta.eps} }
\caption{Järjestelmän tietokanta ER-kaaviona.} \label{sov_tietokanta}
\end{figure}

\newpage

\section{USER-taulu}

\texttt{USER}-tauluun tallennetaan järjestelmän käyttäjät. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{userID}] on käyttäjän yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{firstName}] on käyttäjän etunimi (\texttt{string}).
  \item[\texttt{lastName}] on käyttäjän sukunimi (\texttt{string}).
  \item[\texttt{name}] on käyttäjän käyttäjätunnus (\texttt{string}).
  \item[\texttt{password}] on käyttäjän salasana (\texttt{string}).
  \item[\texttt{description}] on lyhyt kuvaus käyttäjästä (\texttt{string}).
 \end{Ventry}

\texttt{USER}-taulu on sidottu relaatiolla \texttt{TASKDATA}-, \texttt{EVENT}- ja \texttt{USERGROUP}-tauluihin. Yksi käyttäjä voi kuulua useampaan ryhmään, luoda ja muokata useita tapahtumia ja omistaa tapahtumista kerättyä suoritedataa.
 
\section{USERGROUP-taulu}

\texttt{USERGROUP}-tauluun tallennetaan järjestelmän käyttäjäryhmät. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{groupID}] on käyttäjäryhmän yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{name}] on ryhmän nimi (\texttt{string}).
  \item[\texttt{description}] on lyhyt kuvaus ryhmästä (\texttt{string}).
 \end{Ventry}
 
\texttt{USERGROUP}-taulu on sidottu \texttt{ROLE}-tauluun relaatiolla, joka määrää ryhmän roolin. Rooli voi olla esimerkiksi tutkija tai kuntoutettava. \texttt{RESEARCH}-relaatio \texttt{BELONGS}-tauluun ilmaisee, milloin ryhmä on lisätty tai poistettu tutkimuksesta ja kenen puolesta. 

\section{ROLE-taulu}

\texttt{ROLE}-tauluun tallennetaan järjestelmän ryhmien roolityypit. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{roleID}] on roolin yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{name}] on roolin nimi (\texttt{string}).
  \item[\texttt{description}] on lyhyt kuvaus roolista (\texttt{string}).
 \end{Ventry}

\section{RESEARCH-taulu}

\texttt{RESEARCH}-tauluun tallennetaan järjestelmän tutkimukset. Taulu sisältää seuraavanlaiset kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{researchID}] on tutkimuksen yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{name}] on tutkimuksen nimi (\texttt{string}).
  \item[\texttt{description}] on lyhyt kuvaus tutkimuksesta (\texttt{string}).
 \end{Ventry}

\section{SCHEDULE-taulu}

\texttt{SCHEDULE}-tauluun tallennetaan järjestelmän kuntoutusohjelmat. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{scheduleID}] on kuntoutusohjelman yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{zeroTime}] on kuntoutusohjelman alkamisajankohta (\texttt{Date}).
  \item[\texttt{description}] on lyhyt kuvaus kuntoutusohjelmasta (\texttt{string}).
 \end{Ventry}

\texttt{SCHEDULE}-taulu on sidottu relaatiolla \texttt{EVENT}- ja \texttt{USERGROUP}-tauluihin. Yksi kuntoutusohjelma voi sisältää useamman tapahtuman ja olla useammalla ryhmällä. 

\section{EVENT-taulu}

\texttt{EVENT}-tauluun tallennetaan järjestelmän tapahtumat. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{eventID}] on tapahtuman yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{title}] on tapahtuman otsikko (\texttt{string}).
  \item[\texttt{status}] on tapahtuman tila (\texttt{int}).
  \item[\texttt{origEventID}] on tapahtuman alkuperäisyyden ilmaisemiseen käytettävä tunnistenumero (\texttt{int}).
  \item[\texttt{estimatedTime}] on tapahtuman arvioitu kesto (\texttt{int}).
  \item[\texttt{description}] on lyhyt kuvaus tapahtumasta (\texttt{string}).
 \end{Ventry}

\texttt{EVENT}-taulu on sidottu relaatiolla \texttt{EVENT}-, \texttt{SCHEDULE}-, \texttt{EVENTTIME}-, \texttt{EVENTTYPE}- ja \texttt{TASK}-tauluihin. Tapahtuma voi kuulua vain yhteen kuntoutusohjelmaan. Tapahtumalle asetetaan vain yksi tyyppi, joka voi olla vain yhtä määrättyä tyyppiä. Relaatio \texttt{EVENTTIME}-tauluun kertoo tapahtuman ajastuksen kuntoutusohjelmassa.

\section{EVENTTIME-taulu}

\texttt{EVENTTIME}-tauluun tallennetaan aikataulutettujen tapahtumien ajoitus kuntoutusohjelmassa. Taulu sisältää seuraavat kentät:

\begin{Ventry}{executionTime}
  \item[\texttt{eventTimeID}] on ajan yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{absolute}] ilmaisee ajan absoluuttisuuden tai suhteellisuuden (\texttt{int}).
  \item[\texttt{year}] ilmaisee suoritushetken vuoden (\texttt{int}).
  \item[\texttt{month}] ilmaisee suoritushetken kuukauden (\texttt{int}).
  \item[\texttt{day}] ilmaisee suoritushetken päivän (\texttt{int}).
  \item[\texttt{weekday}] ilmaisee suoritushetken viikonpäivän (\texttt{string}).
  \item[\texttt{week}] ilmaisee suoritushetken viikon (\texttt{int}).
  \item[\texttt{fromHour}] ilmaisee suoritushetken aloitustunnin (\texttt{int}).
  \item[\texttt{toHour}] ilmaisee suoritushetken lopetustunnin (\texttt{int}).
  \item[\texttt{minute}] ilmaisee suoritushetken minuuttia (\texttt{int}).
 \end{Ventry}
 
Kentät \texttt{fromHour} ja \texttt{toHour} ilmaisevat ajanjaksoa, jolloin tapahtuma on tehtävissä. Jos kuntoutettava ei suorita tapahtumaa asetetulla ajankohdalla, tapahtuma siirtyy rästitapahtumaksi.

\section{EVENTTYPE-taulu}

\texttt{EVENTTYPE}-tauluun tallennetaan tapahtumatyypit (kuten kysely ja liikunta). Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{eventTypeID}] on tapahtumatyypin yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{description}] on tapahtumatyypin kuvaus (\texttt{string}).
 \end{Ventry}

\section{TASK-taulu}

\texttt{TASK}-tauluun tallennetaan tapahtumiin liittyvät tehtävät. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{taskID}] on tehtävän yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{content}] on tehtävän otsikko (\texttt{string}).
  \item[\texttt{url}] on tehtävän URL-osoite (\texttt{string}).
  \item[\texttt{sequence}] on tehtävän järjestys tapahtumassa (\texttt{int}).
  \item[\texttt{description}] on lyhyt kuvaus tehtävästä (\texttt{string}).
  \item[\texttt{posX}] on tapahtuman x-koordinaatti piirtoalueella (\texttt{int}).
  \item[\texttt{posY}] on tapahtuman y-koordinaatti piirtoalueella (\texttt{int}).
 \end{Ventry}

\texttt{TASK}-taulu on sidottu relaatiolla \texttt{EVENT}-, \texttt{TASKTYPE}- ja \texttt{CHOICE}-tauluihin. Yhdelle tehtävälle voidaan asettaa vain yksi tehtävätyyppi. Yksi tehtävä voi kuulua vain yhteen tapahtumaan.

\section{TASKTYPE-taulu}

\texttt{TASKTYPE}-tauluun tallennetaan tehtävätyypit (kuten teksti ja monivalinta). Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{taskTypeID}] on tehtävätyypin yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{textMin}] on tehtävätyypin tekstimuotoisen datan minimimäärä (\texttt{int}).
  \item[\texttt{textMax}] on tehtävätyypin tekstimuotoisen datan maksimimäärä (\texttt{int}).
  \item[\texttt{binaryDataMin}] on tehtävätyypin binäärimuotoisen datan minimimäärä (\texttt{int}).
  \item[\texttt{binaryDataMax}] on tehtävätyypin binäärimuotoisen datan maksimimäärä (\texttt{int}).
  \item[\texttt{description}] on lyhyt kuvaus tehtävätyypistä (\texttt{string}).
 \end{Ventry}

\section{CHOICE-taulu}

\texttt{CHOICE}-tauluun tallennetaan tehtävien sisällä olevat valinnat. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{choiceID}] on valinnan yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{value}] on valinnan arvo (\texttt{int}).
  \item[\texttt{sequence}] on valinnan järjestys tehtävässä (\texttt{int}).
  \item[\texttt{description}] on valinnassa näytettävä teksti  (\texttt{string}).
 \end{Ventry}

\texttt{CHOICE}-taulu on sidottu relaatiolla \texttt{TASK}- ja \texttt{TASKDATA}-tauluihin. Valinta kuuluu vain yhteen tehtävään ja vastaavasti johtaa vain yhteen tehtävään. Tehtävään voi kuulua yksi tai useampi valinta ja yhteen tehtävään voi johtaa useampi valinta.

\section{TASKDATA-taulu}

\texttt{TASKDATA}-tauluun tallennetaan tapahtumien suoritedataan liittyvät tiedot. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{taskdataID}] on suoritedatan yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{executionTime}] on suoritedatan suoritusajankohta (\texttt{timestamp}).
  \item[\texttt{sequence}] on suoritedatan järjestys tehtävässä (\texttt{int}).
 \end{Ventry}

\texttt{TASKDATA}-taulu on sidottu relaatiolla \texttt{CHOICE}-, \texttt{BINARYDATA}-, \texttt{TEXT}- ja \texttt{USER}-tau\-luihin. Käyttäjällä voi olla useampi tapahtumien suorittamisesta kerätty suoritedata. Suoritedata tallentuu aina, kun tapahtumassa siirrytään uuteen tehtävään. Suoritedata voi liittyä vain yhteen valintaan. 

\section{BINARYDATA-taulu}

\texttt{BINARYDATA}-tauluun tallennetaan binäärimuotoinen suoritedata (kuten kuva ja ääni). Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{binarydataID}] on binäärimuotoista dataa sisältävän suoritedatan yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{sequence}] on datan järjestys suoritedatassa (\texttt{int}).
  \item[\texttt{data}] on binaarimuotoinen suoritedata (\texttt{blob}).
 \end{Ventry}

\newpage

\section{TEXTDATA-taulu}

\texttt{TEXTDATA}-tauluun tallennetaan tekstimuotoinen suoritedata. Taulu sisältää seuraavat kentät:

 \begin{Ventry}{executionTime}
  \item[\texttt{textID}] on tekstimuotoista dataa sisältävän suoritedatan yksilöivä numero tietokannassa (\texttt{int}).
  \item[\texttt{sequence}] on datan järjestys suoritedatassa (\texttt{int}).
  \item[\texttt{data}] on tekstimuotoinen suoritedata (\texttt{text}).
 \end{Ventry}

\section{USER -- USERGROUP -relaatiotaulu}

\texttt{USER -- USERGROUP} -relaatiotauluun tallennetaan käyttäjäryhmän käyttäjien muokkausajankohta. Taulu sisältää seuraavan kentän:

 \begin{Ventry}{executionTime}
  \item[\texttt{editTime}] on editoimisen ajankohta (\texttt{timestamp}).
 \end{Ventry}
 
\section{USERGROUP -- RESEARCH -relaatiotaulu}

\texttt{USERGROUP -- RESEARCH} -relaatiotauluun tallennetaan tutkimuksen ryhmien muokkausajankohta ja kuvaus. Taulu sisältää seuraavan kentän:

 \begin{Ventry}{executionTime}
  \item[\texttt{editTime}] on editoimisen ajankohta (\texttt{timestamp}).
  \item[\texttt{editedBy}] kertoo muokkauksen tekijän (\texttt{string}).
 \end{Ventry}
 
\section{EVENT -- USER -relaatiotaulu}

\texttt{EVENT -- USER} -relaatiotauluun tallennetaan tapahtuman muokkausajankohta ja kuvaus. Taulu sisältää seuraavan kentän:

 \begin{Ventry}{executionTime}
  \item[\texttt{editTime}] on editoimisen ajankohta (\texttt{timestamp}).
  \item[\texttt{description}] on käyttäjän asettama muokkaussyy (\texttt{string}).
 \end{Ventry}


% --- chapter 7 ---

\chapter{Ohjelmointikäytänteet}

Luvussa kuvataan projektin ohjelmointikäytänteet. Projektissa noudatettiin suunnitteluvaiheessa määriteltyjä ohjelmointikäytänteitä.

\section{Lähdekoodin muotoilu ja tiedostojen nimeäminen}

Lähdekoodi ohjelmoitiin projektisuunnitelmassa \cite{projektisuunnitelma} sovittujen käytänteiden mukaisesti käyttäen mallina Javan yleisiä käytänteitä \cite{javakaytanteet}. Tiedostojen ja lähdekoodin nimeäminen toteutui suunnitelman mukaisesti ja verkkosivulle ja CD:lle sijoitetut dokumentit vastasivat määriteltyjä käytänteitä.

Luokkien nimissä ensimmäinen kirjain kirjoitettiin pienellä ja sanat kirjoitettiin yhteen isoin alkukirjaimin. Funktioiden ja muuttujien nimissä ensimmäinen kirjain kirjoitettiin pienellä ja sanat kirjoitettiin yhteen isoin alkukirjaimin. Lähdekooditiedostojen hakemistorakenne oli valmiiksi määritelty Vaadin-sovelluskehitysympäris\-tössä, eikä rakennetta muutettu. Muiden tiedostojen ja hakemistojen nimet kirjoitettiin pienillä kirjaimilla ja englanniksi.

\section{Lähdekoodin kommentointi}

Lähdekoodit kommentointiin englanniksi. Kommentit aloitettiin yksittäisten rivien tai rivin loppujen tapauksissa merkillä \texttt{//}. Useamman rivin tapauksessa kommentti aloitettiin merkillä \texttt{/*} ja päätettiin merkillä \texttt{*/}. Luokkien ja funktioiden kommentit aloitettiin \texttt{/**} ja päätettiin \texttt{*/}. Luokkadokumentointi muodostettiin JavaDocin avulla, jonka kommentointiohjeita noudatettiin lähdekoodissa.

\newpage

\section{Lähdekoodiesimerkki}

Sovelluksessa noudatettua lähdekoodin sisennystä ja kommentointia havainnollistaa seuraava esimerkki:

\begin{verbatim}
/**                                                                                                                                                                                 
* Layout for all the mobile views has slots for header,                                                                                                            
* footer and the content.                                                                                                                                                                         
*                                                                                                                                                                                  
* @author Lauri Satokangas, lauri.n.satokangas@student.jyu.fi 
* @date 13.5.2012                                                                                                       
*/                                                                                                                                                                                                                                          
public abstract class MobileView extends VerticalLayout {                                                                                                                                                                                    
                                                                                                                                                                                                                                             
    private Panel pageContent;
    private final HashMap<Object, Component> footerComponents;                                                                                                                                                                                                         
    
    // This is the left button in the footer layout.
    public Object FOOTER_BUTTON_LEFT = "leftfooterbutton";

    /**
     * Get the component in the footer.
     * @return footerComponent
     */
    public HashMap<Object, Component> getFooterComponents() {
        return footerComponents;
    }

...
\end{verbatim} 

\section{Kehitysympäristö}

Tietojärjestelmän sovellusten kehitystyökaluna käytettiin NetBeans IDE:n versiota 7.1. Lisäosina käytettiin Maven-automatisointityökalua lähdekoodin kääntämiseen ja Vaadin-sovellus\-kehitysalustan käyttöliittymäkirjastoja ja komponentteja sovelluksen toteutukseen \cite{learningvaadin} \cite{bookofvaadin}.

\section{Testauksen käytänteet}

Sovellusten toteutusvaiheessa jokainen ryhmän jäsen suoritti käytännön yksikkötestausta heti koodiin tekemiensä muutoksen jälkeen omatoimisesti. Ajan puutteen vuoksi tietojärjestelmälle ei laadittu järjestelmätestaussuunnitelmaa, eikä ryhmä ehtinyt myöskään laatia yksikkötestejä sovelluksille. Muutama testitiedosto tehtiin tietokantaa käsitteleville tiedostoille. Integraatiotestausta ryhmä suoritti projektin viimeistelyvaiheessa jonkin verran.

Ryhmälle jaettiin ennen toteutuksen aloittamista erilaisia mobiililaitteita ja sormitietokoneita. Niiden avulla ryhmä testasi kuntoutettavan sovellusta tietyn väliajoin ja sai näin arvokasta tietoa liittyen sovelluksen toimivuuteen eri mobiililaitteissa.

Ryhmälle järjestettiin maaliskuun puolessavälissä käytettävyyspäivä Meeri Mäntylän toimesta. Käytettävyyspäivän aikana ryhmä sai käyttöliittymien käytettävyyteen liittyvää tietoa ja palautetta projektissa toteutettavista käyttöliittymistä \cite{kaytettavyyspaivamuistio}.

Ryhmän jäsenet harjoittivat myös omatoimista käyttäjätestausta havaitakseen sovellusten toiminnallisuuksiin liittyviä puutteita ja bugeja. Ryhmä testasi sovellusten toiminnallisuuksien toimivuutta tasaisin väliajoin, varsinkin ennen projektin loppuesitystä. 

Sovellusta ryhmän ohella testasi pari muuta projektiorganisaatiosta projektin aikana. Laajimman palautteen sovellusten toimivuudesta projektiryhmä sai vastaavalta ohjaajalta Jukka-Pekka Santaselta \cite{santanen_mail_01} \cite{santanen_mail_02} \cite{santanen_mail_03} \cite{santanen_mail_04}. Sovelluksen testaukseen osallistui myös projektin jatkokehityksestä kiinnostunut Tero Kallioinen \cite{kallioinen_mail_01} \cite{kallioinen_mail_02}. 

Projektin tilaajien kiireellisen aikataulun vuoksi tilaajilta saatiin vain vähän palautetta liittyen sovellusten käyttöliittymien toimivuuteen. Tilaajien ainoat käyttötestaukset tapahtuivat projektin kahdessa viimeisessä kokouksessa. Projektin tilaajilta saatiin kuitenkin testidataa testiaineiston luomiselle, ja sitä hyödynnettiin projektissa jonkin verran.

Projektiryhmä ei ajan puutteen vuoksi ehtinyt testaamaan sovelluksia niiden loppukäyttäjillä. Tämä asia on otettava huomioon heti jatkokehityksen alkuvaiheessa.

\section{Testauksen tulokset}

Ryhmän jäsenten suorittamien sovellusten testausten tulokset osoittivat, että toteutetut sovellukset toimivat asetettujen pakollisten ja tärkeiden toiminnallisten vaatimusten mukaisesti. Usein toistuvia virheitä ei löydetty testausten aikana. Muita sovellusten tunnettuja puutteita ja virheitä kuvataan tarkemmin luvussa 8.2.


% --- chapter 8 ---

\chapter{Tavoitteiden toteutuminen}

Projektissa saatiin toteutettua kaikki 47 pakollista tai tärkeää ja 85:stä 28 mahdollista tai jatkokehitykseen asetettua toiminnallista vaatimusta.

Tilaajan kanssa sovittiin osia toteutuksesta jo aikaisessa vaiheessa jatkokehitykseen rajallisen ajan vuoksi. Jatkokehitykseen sovittiin tutkijan käyttöliittymästä mediatiedostojen hallintanäkymä, suoritedatan raporttinäkymä, viestien lähetys- ja lukunäkymä sekä ohjenäkymä. Kuntoutettavan käyttöliittymästä jatkokehitykseen sovittiin kiihtyvyysanturidatan lukeminen, päiväkirjamerkintöjen luku- ja talletusnäkymä sekä viestien lähetys- ja lukunäkymä. Luvussa kuvataan projektin vaatimusten toteutuminen, tunnetut virheet, puutteelliset toteutusratkaisut sekä jatkokehitysideat.

\section{Vaatimusten toteutuminen}

Luvussa kuvataan pääpiirteittäin sovellukselle asetettujen vaatimusten toteutuminen. Vaatimusmäärittely \cite{vaatimusmaarittely} käsittelee tarkemmin vaatimuksia ja niiden toteutumista.

\textbf{Tutkijan käyttöliittymän 72:sta vaatimuksesta} toteutettiin kaikki 27 pakollisiksi tai tärkeiksi asetettua vaatimusta. Näkymiä \textit{Oma sivu}, \textit{Media}, \textit{Raportti} ja \textit{Ohje} ei toteutettu projektissa ja ne sovittiin tilaajan kanssa jatkokehitykseen.

\textbf{Kuntoutettavan käyttöliittymän 42:sta vaatimuksesta} toteutettiin kaikki 12 pakollisiksi tai tärkeiksi asetettua vaatimusta. Vaatimukset yksinkertaisten kuvakkeiden lisäämisestä näkymiin vieviin painikkeisiin ja tapahtuman tyyppien ilmaisuun sekä näkymiin \textit{Päiväkirja}, \textit{Viestit} ja \textit{Ohje} liittyvät vaatimukset sovittiin jatkokehitykseen.

\textbf{Tapahtuman suorittamisen kahdeksasta vaatimuksesta} toteutettiin kaikki kolme pakollisiksi tai tärkeiksi asetettua vaatimusta. Kuntoutettava voi suorittaa tapahtumia ja keskeyttää suoritettavan tapahtuman.

\textbf{Sisäänkirjautumiseen liittyvistä mahdollisista vaatimuksista} toteutettiin kaksi projektissa. Sisäänkirjautuminen tallentaa kirjautumistiedot keksiin, jolloin esimerkiksi kuntoutettavan tarvitsee kirjautua sovellukseen vain yhden kerran, ellei hän poista keksitietoja oman mobiililaitteen selaimesta. Kirjautumistietojen salaamiseen liittyvä vaatimus sovittiin jatkokehitykseen.

\textbf{Tapahtumien tehtäväkomponentteihin liittyvistä 17:sta vaatimuksesta} toteutettiin kaikki seitsemän pakollisiksi tai tärkeiksi asetettua vaatimusta. Media-, sensori-, syöte-, liukusäädin- ja hälytystehtäväkomponentteja ei toteutettu projektissa, joten ne sovittiin jatkokehitykseen.

\textbf{Suoritedatan tallentamisesta eri tiedostomuodoissa} projektiryhmä toteutti vain xls-muotoiseen dataan liittyvän vaatimuksen. Muissa tiedostomuodoissa vietyä dataa ei ehditty projektin aikana edes harkitsemaan.

\textbf{Kiihtyvyysanturidatan ja muiden sensoridatojen keräämiseen asetettuja vaatimuksia} ei ehditty toteuttaa projektin aikana. Kiireisen aikataulun takia kuntoutettavan käyttöliittymää ei toteutettu projektissa hyödyntämään PhoneGap-rajapintaa kiihtyvyysanturidatan keräämiseen. Kyseiset vaatimukset sovittiin tilaajan kanssa jatkokehitykseen.

\textbf{Viesteihin liittyviä vaatimuksia} ei ehditty toteuttaa projektissa. Ryhmäkohtaisilla viesteillä tutkija voisi tiedottaa haluamiaan ryhmiä joistain tarpeellisista asioista. Viestien tarkoitus on luoda eri käyttäjäkuntien välille vuorovaikutus- ja palautekanavia.

Projektissa toteutettuja vaatimuksia ei kirjattu testatuiksi tai hyväksytyiksi, koska suunnitelmallista ja hallittua järjestelmätestausta ei ehditty suorittaa projektissa.

\section{Tutkijan käyttöliittymän tunnetut puutteet ja virheet}

\textbf{Järjestelmän käyttäjien roolit määräytyvät käyttäjän ryhmien jäsenyyksien mukaan}. Tämä tarkoittaa sitä, että yksi käyttäjä voi olla eri rooleissa eri ryhmissä. Järjestelmän rooleja on ajateltu käytettävän sovellusten käyttöoikeuksien jakamiseen. Esimerkiksi tutkijalla voisi olla täydet käyttöoikeudet tutkijan sovelluksessa, sekä omaisella tai opiskelijalla voisi olla rajoitetut tutkijan oikeudet sovelluksen käyttöön. Käyttöoikeuksien määräämisessä voi syntyä ongelmia silloin, kun yksi käyttäjä on jäsenenä useassa ryhmässä eri rooleilla. Ongelman voisi ratkaista asettamalla käyttäjäroolit \texttt{USER}- ja \texttt{USERGROUP}-taulujen välisen \texttt{BELONGS}-taulun kautta.

\textbf{Näkymien hakukomponentin \textit{Hae}-painikkeella pystyy myös valitsemaan valitun kohteen tiedot tarkasteltavaksi \textit{Valitse}-napin tapaan}. Hakukomponentin \textit{Hae}-painikkeella olisi vain tarkoitus hakea hakukenttään syötetyn tekstin perusteella tietoa tietokannasta.

\textbf{Tutkija ei pysty tällä hetkellä hakemaan käyttäjiä kuin käyttäjän käyttäjätunnuksen mukaan}. Tutkijan olisi halutessaan myös voitava hakea tietokannasta käyttäjiä sekä etunimen tai sukunimen mukaan.

\textbf{Tutkijalta ei kysytä varmennusta hänen tallentaessa muutoksia tai poistaessa valittua kohdetta}. Tällä voisi estää tahattomat poistot ja muutosten tallennukset. Vaihtoehtoisesti tutkija voisi asetuksistaan ottaa pois päältä varmennuksen kysymisen, jos jatkuva varmentaminen haittaa käyttöliittymän käytettävyyttä.

Käyttäjien salasanoihin liittyy pari puutteellista ratkaisua. \textbf{Käyttäjien salasanoja ei tallennetta salatussa muodossa tietokantaan} ja tutkijan käyttöliittymässä \textbf{tutkija näkee tarkasteltavan käyttäjän salasanan \textit{Käyttäjän tiedot} -alivälilehdellä}. Kyseiset puutteelliset toteutusratkaisut tulisi ottaa käsittelyyn projektin jatkokehityksen alkuvaiheessa.

\textbf{Tapahtumamuokkaimen alueen piirto tapahtuu palvelimella, joten palvelin lähettää aina uudelleenpiirretyn kuvan asiakaspäätteelle}. Tapahtumanmuokkaimen alueen piirto voisi jatkokehityksessä toteuttaa tapahtumaan asiakaspäässä, jos se on mahdollista. Ongelmia voi syntyä tapahtumamuokkaimen käytettävyyteen liittyen silloin, jos tapahtumamuokkainta muutetaan niin, että piirtoalueesta lähetettävien kuvien koko kasvaa suureksi.

\section{Kuntoutusohjelmat-näkymän tunnetut puutteet ja virheet}

Kuntoutusohjelmien aikatauluttamisnäkymässä \textbf{tutkijan ei ole mahdollista valita kaikkia tietokannan mahdollistavia ajoitukseen liittyviä ominaisuuksia}. Tällaisia ovat mm. absoluuttisen ajan asettaminen ja aikaväli, jolloin tapahtuman voi suorittaa.

Kuntoutusohjelmien \textbf{aikataulutukseen käytettävä ajanasetuskomponentti ilmoittaa virheestä}, jos tutkija syöttää syöteriville virheellisen aikatiedon. Ongelmaa ei tule, jos tutkija asettaa ajan vieressä olevan painikkeen painalluksen kautta avautuvasta päivämäärän ja ajan asetusikkunasta.

\textbf{Kuntoutusohjelman ajastetut tapahtumat eivät ota huomioon siirtoja kesä- tai talviaikaan}. Näin ollen ajastetut tapahtumat tulevat juuri siihen aikaan, kun ne on kuntoutusohjelmaan asetettu. Ongelmia syntyy, jos kuntoutusohjelma on ajoitettu kesä- ja talviajalle tai sitä suoritetaan sekä kesä- että talviaikana.

\textbf{Uuden kuntoutusohjelman tallentaminen luo tapahtumista uudet kopiot tietokantaan} suoritedatan tunnistamista varten. Näin käy myös, jos tutkija muokkaa ja tallentaa kussakin välissä jo olemassa olevan kuntoutusohjelman. Jos esimerkiksi tutkija luo kymmenen tapahtumaa sisältävän kuntoutusohjelman, yhdellä tapahtumalla on kymmenen monivalintatehtävää ja jokaisella niistä on kymmenen valintaa, tulee uuden kuntoutusohjelman tallennuksessa luotua kokonaisuudessaan 1001 uutta taulualkiota tietokantaan. Kyseinen kopioiminen voi aiheuttaa ongelmia jo pelkästään yhden käyttäjän toimesta.

\textbf{Kuntoutusohjelmaa tallentaessa} sovellus ilmoittaa virheestä, jos kuntoutusohjelmaan ei ole lisätty tapahtumia.

\section{Kuntoutettavan käyttöliittymän tunnetut puutteet ja virheet}

\textbf{Kuntoutettavan sovelluksen tapahtuman suorittamisessa on pieni bugi}. Kun kuntoutettava on monivalintatehtävässä, valitsee hän yhden vaihtoehdon ja menee tapahtumassa eteenpäin. Jos kuntoutettava palaa takaisin edelliseen tehtävään ja ei valitse vaihtoehtoa ja yrittää mennä tapahtumassa eteenpäin, niin tapahtuman teko päättyy siihen. 

\textbf{Kiihtyvyysanturidatan keräämiseen} käytettävälle PhoneGap-rajapinnalle on mahdollisesti tulossa tuki Vaadin-sovelluskehitysalustaan tulevaisuudessa. Jos kyseinen laajennus tulee saataville lähitulevaisuudessa, niin jatkokehittäjien kannattaa odottaa kyseistä laajennusta ennen kiihtyvyysanturiin liittyvien toiminnallisten vaatimusten toteuttamista.

\section{Yleiset jatkokehitysideat}

\textbf{Lokin kirjauksen} voisi asettaa tapahtumaan sovelluksia käytettäessä. Loki helpottaisi järjestelmän virheiden havaitsemista ja kyseiset tiedostot voi helposti arkistoida muualle.

\section{Tutkijan käyttöliittymän jatkokehitysideat}

Tutkijan käyttöliittymän yläreunaan päävälilehden yläpuolelle tulisi asettaa kapea alue, jossa näkyisi \textbf{sovelluksen nimi} ja jossa olisi oikeassa yläreunassa \textbf{uloskirjautumispainike}. Tällöin sovelluksesta uloskirjautuminen voisi tapahtua käyttöliittymän kaikkien välilehtien kautta.

\textbf{\textit{Oma sivu} -näkymä tulisi vaihtaa \textit{Viestit} -näkymäksi}. Siinä tutkija voisi tarkastella kuntoutettavilta tulleita viestejä ja hälytyksiä sekä lähettää ryhmille ryhmäkohtaisia viestejä. Kyseisen näkymän tulisi myös olla päänäkymä, kun tutkija kirjautuu sisään tutkijan käyttöliittymään.

Välilehtien sisälle sijoitetut \textbf{\textit{Tallenna} ja \textit{Poista}-painikkeet voisivat sijaita välilehtien ulkopuolella} alhaalla, jolloin tallentamisen ja poistamisen voisi tehdä riippumatta päällä olevasta välilehdestä.

Tutkijan tulisi pystyä \textbf{asettamaan käyttäjien tiedoista yhteyshenkilöitä käyttäjälle}. Yhteyshenkilöt määritellään, jos kuntoutettava suorittaessaan tapahtumia laukaisee hälytyskomponentin kriittisellä tavalla, jolloin yhteyshenkilöille lähetetään viesti kuntoutettavaan liittyen.

Käyttäjän syöttämiä \textbf{syötteitä syötekenttiin ei tarkasteta millään lailla}. Syötteiden tarkistuksella voitaisiin eliminoida \texttt{DROP TABLE *} -tyyppisten syötteiden meno tietokantaan.

\textbf{Kaikkien toimintojen järjestystä} käyttömäärien ja yleisyyden mukaan ei mietitty tarpeeksi projektin aikana. Esimerkiksi hakukomponentin toiminnot voisi sijoittaa yleisimmästä harvemmin käytettyihin painikkeisiin ylhäältä alas.

Tutkijan käyttöliittymä kaipaa \textbf{vihjetekstejä} useisiin paikkoihin. Sovelluksen käyttötestauksen palautteessa ilmeni, että tapahtumamuokkaimen käyttämisen oppiminen ei välttämättä ole aloittelijalle kaikista helpoin tehtävä.

Toteutettujen käyttöliittymien \textbf{ulkoasuihin} ei ehditty käyttämään tarpeeksi aikaa projektin aikana. Käyttöliittymien teema-asetuksia voi muokata CSS-tyylitiedos\-tojen kautta. Käyttöliittymien graafista linjaa kannattaa suunnitella paremmin asiaan perehtyneiden.

\section{Kuntoutusohjelmat-näkymän jatkokehitysideat}

Tutkijan tulisi olla mahdollista laatia \textbf{jaksottain tapahtuvia kuntoutusohjelmia}. Tämä tarkoittaisi sitä, että tutkijan olisi mahdollisuus tehdä tapahtumalle aika, joka toistuu säännöllisin väliajoin. Esimerkiksi tutkija voisi asettaa tapahtuman suoritettavaksi kerran viikossa yhden kuukauden ajan. 

Tutkijan tulisi olla mahdollista laatia \textbf{kuntoutusohjelmia, jotka sisältävät linkitettyjä tapahtumia}. Tämä tarkoittaisi sitä, että tutkijan olisi mahdollisuus linkittää kaksi tapahtumaa yhteen. Kun kuntoutettava suorittaa kyseisen tapahtuman loppuun, siirtyy hän tekemään suoraan toista tapahtumaa. 

\section{Tapahtumamuokkaimen jatkokehitysideat}

Tutkijoilla voisi olla \textbf{tapahtumien näkemiseen ja muokkaamiseen liittyviä erityisoikeuksia}. Esimerkiksi tapahtuman näkeminen hakulistalla ja muokkaus voisi olla rajattu vain sen luoneelle ja muokanneille sekä tapahtumaan sidottujen ryhmien tutkijoille. Tietokannan taulujen \texttt{rowStatus}-kentän toimintaa voisi laajentaa kattamaan kyseisen ominaisuuden käyttöliittymässä.

Tapahtuman muokkauksesta syntyvää \textbf{muutoshistoriaa} tulisi pystyä tarkastelemaan tapahtumaa muokattaessa. Muutoshistorian voisi sijoittaa omaan alivälilehteen, josta tutkija voisi tarkastella tapahtumaan tehtyjä muutoksia.

\textbf{Tapahtumamuokkaimeen liittyy useita parannusehdotuksia}: 

 \begin{compactitem}
  \item Yhden tehtävän siirtäminen piirtoalueella tulisi olla mahdollista raahamalla tapahtumaa hiiren painike pohjassa.
  \item Tehtävien etenemissuunnan tehtävien välillä tulisi esittää joko nuolella tai vastaavalla havainnollistavalla visualisoinnilla.
  \item Piirtoalueella näytettävät tehtävätyypit tulisi visuaalisesti olla erotettavissa muun kuin värin avulla.
  \item Tapahtumamuokkaimessa tulisi näyttää tapahtumassa olevat tehtävät listana käyttäjälle.
  \item Tutkijalla tulisi lisäksi myös olla mahdollisuus tehdä uusia tapahtumatyyppejä tapahtumille.
 \end{compactitem}

\section{Tietokannan jatkokehitysideat}

Tietojärjestelmälle voisi asettaa oman \textbf{testitietokannan} tietokannan testaukselle ja testaustiedostoille. Näin tietokantaa voisi testata eri kannalla, kuin mitä tuotantoversion tietojärjestelmä käyttäisi.

\textbf{Tiedon salauksen tietokantaan} voisi asettaa tapahtumaan osalle muistakin kuin salasanoille. Tällaisia kohteita voisivat olla käyttäjien etunimi, sukunimi ja käyttäjätunnus. Tällä hetkellä tietokantaan tallentuu vain salaamatonta dataa.


% --- chapter 9 ---

\chapter{Käyttöohjeita ylläpitäjälle}

Luvussa kuvataan lyhyesti, kuinka järjestelmän voi asettaa toimimaan palvelimella, kuinka tutkijan käyttöliittymään pystyy lisäämään uuden näkymän ja kuinka tapahtumamuokkaimissa käytettävien tehtäväkomponenttien lisäys tapahtuu.

\section{Sovelluksen asennus palvelimelle}

TODO

\section{Tietokokonaisuuden hallintanäkymän lisääminen}

TODO

\section{Tehtäväkomponenttien lisääminen}

TODO


% --- chapter 10 ---

\chapter{Yhteenveto}

Paatti-projekti toteutti Sovellusprojekti-kurssilla keväällä 2012 Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla tuetaan iäkkäiden, työuupumuksesta kärsivien ja mielenterveyspotilaiden itsenäistä elämää ja kuntoutumista sekä tuetaan tutkijoiden tekemää tutkimusta. Projektissa toteutettiin prototyypit tutkijan ja kuntoutettavan sovelluksista, joissa käsiteltävä tieto tallennetaan tietokantaan. Toteutettu järjestelmäkokonaisuus toimii asetettujen päätoiminnallisuuksien mukaisesti ja antaa siten hyvän pohjan tuotantoversion kehittämiselle.

Tietojärjestelmässä tutkija luo tutkimuksiinsa liittyen kuntoutettavista ryhmiä, joille määritetään omat kuntoutusohjelmat. Kuntoutusohjelmat sisältävät aikataulutettuja tapahtumia, jotka sisältävät määritetyssä järjestyksessä suoritettavia tehtäviä. Tehtävät voivat olla kysymyksen tai ohjeen muodossa ja voivat sisältää tekstiä tai monivalinnan. 

Kuntoutettavia voi siirtää ryhmästä toiseen edistymisen mukaan tutkijan toimesta. Kuntoutettava voi olla monessa ryhmässä, jolloin hän suorittaa useampaa kuntoutusohjelmaa samanaikaisesti. Tutkija pystyy seuraamaan kuntoutettavan tai ryhmän edistymistä omasta käyttöliittymästään. Tietojärjestelmän tietokantaan keräämää tietoa saa myös siirrettyä toisiin järjestelmiin xls-tiedostomuodossa.

Kuntoutettava näkee suoritettavat kuntoutusohjelman tapahtumat mobiililaitteessa olevasta WWW-sovelluksesta. Tapahtumat voivat olla esimerkiksi liikuntaharjoitteita, rentoutusharjoitteita tai lääkkeiden ottamisen muistutuksia.

Paatti-projektissa toteutettu tietojärjestelmän prototyyppi ei sisällä kaikkia vaadittuja toimintakokonaisuuksia. Tilaajien kanssa jatkokehitykseen sovittiin tutkijan käyttöliittymästä mediatiedostojen lataus ja esikatselunäkymä, suoritedatan graafiseen analysointiin käytettävä raporttinäkymä, viestien lukemiseen ja lähettämiseen tarkoitettu viestinäkymä sekä ohjenäkymä. Kuntoutettavan käyttöliittymästä tilaajien kanssa jatkokehitykseen sovittiin päiväkirjamerkintöjen tallentamiseen ja lukemiseen tarkoitettu päiväkirjanäkymä sekä viestien lukuun tarkoitettu viestinäkymä.

Projektin rajallinen aikataulu ei mahdollistanut kaikkien tilaajien vaatimusten toteuttamista ja siksi toteutettu järjestelmäprototyyppi kaipaa jatkokehitystä. Toteutunut järjestelmäprototyyppi sovittiin tilaajien kanssa vietäväksi jatkokehitykseen, jossa kehitetään projektin aikana toteuttamatta jääneet toiminnallisuudet sekä korjataan sovelluksissa esiintyvät puutteet ja heikot toteutusratkaisut.


%LÄHTEET
\begin{thebibliography}{1}
%Katso kirjoitusohjeen luku 2.3 ja 2.4.

\bibitem{learningvaadin}
  Frankel Nicolas, 
  ''Learning Vaadin'',
  Packt Publishing,
  2011

\bibitem{kallioinen_mail_01}
  Kallioinen Tero,
  ''Havaintoja tapahtumista'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 8.5.2012.

\bibitem{kallioinen_mail_02}
  Kallioinen Tero,
  ''Pari havaintoa ja ideaa'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 16.5.2012.

\bibitem{kaytettavyyspaivamuistio}
  Keränen Tapio, Salminen Toni, Salokangas Jari ja Satokangas Lauri,
  ''Paatti-projekti, Käytettävyyspäivän muistio'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

\bibitem{luokkadokumentaatio}
  Keränen Tapio, Salminen Toni, Salokangas Jari ja Satokangas Lauri,
  ''Paatti-projekti, Luokkadokumentaatio'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

\bibitem{projektiraportti}
  Keränen Tapio, Salminen Toni, Salokangas Jari ja Satokangas Lauri,
  ''Paatti-projekti, Projektiraportti'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

\bibitem{projektisuunnitelma}
  Keränen Tapio, Salminen Toni, Salokangas Jari ja Satokangas Lauri,
  ''Paatti-projekti, Projektisuunnitelma'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

\bibitem{vaatimusmaarittely}
  Keränen Tapio, Salminen Toni, Salokangas Jari ja Satokangas Lauri,
  ''Paatti-projekti, Vaatimusmäärittely'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

\bibitem{javakaytanteet}
  Oracle,
  ''Code Conventions for the Java Programming Language'',
  saatavilla PDF-muodossa <URL: \texttt{http://www.oracle.com/technetwork/java/\\codeconventions-150003.pdf}>,
  viitattu 25.3.2012.

\bibitem{santanen_mail_01}
  Santanen Jukka-Pekka,
  ''Huomioita kuntoutettavan käyttoliittymästä'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 7.5.2012.

\bibitem{santanen_mail_02}
  Santanen Jukka-Pekka,
  ''Huomioita tutkijan käyttoliittymästä'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 7.5.2012.

\bibitem{santanen_mail_03}
  Santanen Jukka-Pekka,
  ''Huomioita tapahtumien hallintanäkymästä'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 15.5.2012.

\bibitem{santanen_mail_04}
  Santanen Jukka-Pekka,
  ''Huomioita tapahtumien hallintanäkymästä jatkuvat'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  lähetetty 15.5.2012.

\bibitem{sovellusprojektienohje}
  Santanen Jukka-Pekka,
  ''Tietotekniikan Sovellusprojektien ohje'',
  saatavilla HTML-muodossa <URL: \texttt{http://www.mit.jyu.fi/opetus/\\sovellusprojektit/projohje.html}>,
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  11.9.2006.

\bibitem{bookofvaadin}
 Vaadin Ltd,
 ''Book of Vaadin - 4th Edition'',
 2012


\end{thebibliography}

% Dokumentin  lopetus
\end{document}
