% .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.1.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 toteuttaa 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 niin käyttöliittymän, rakenteen, ohjelmointikäytänteiden sekä tavoitteiden toteutumisen osalta.} 

% Tiivistelmä projektista
\projectabstract{Paatti-projekti suunnittelee ja toteuttaa Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla tuetaan vanhusten, 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, olioluokat, rajapinnat, rakenne, sovellus, sovellusprojekti, tavoitteet, testaus, 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, lukuja ''Johdanto'' ja ''Ohjelmointikäytänteet'' sekä kirjoitettu luvut ''Käyttöliittymä (tutkija)'', ''Käyttöliittymä (kuntoutettava)'', ''Sovelluksen rakenne'' (osittain), ''Tavoitteiden toteutuminen'' (osittain) sekä ''Yhteenveto''. & JS\\
\hline
0.0.3    & 13.5.2012  & Lisätty kuvat lukuihin 3.1, 4.1, 5.1 ja 5.4, 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 4.3 ja 4.4 sekä muokattu lukuja ''Sovelluksen tietokanta'', ''Tunnetut puutteet ja virheet'' ja ''Jatkokehitysideat''. & JS\\
\hline
0.1.0    & 14.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/} \\ 
~~~$\bullet$~~Työhuone: & Agora C222.2, puh. 040-8053308
\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}

Paatti-projekti toteuttaa 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. 

Tietojärjestelmässä tutkija luo tutkimuksiin kuntoutettavista ryhmiä, joille määritetään omat kuntoutusohjelmat. Kuntoutusohjelmat sisältävät aikataulutettuja tapahtumia, jotka sisältävät tehtäviä. Yksittäinen tehtävä voi sisältää tekstiä, kuvan, videon tai äänitallenteen. Tehtävät voivat olla joko kysymyksen tai ohjeen muodossa. Tutkija voi sisällyttää tapahtumaan myös hälytystehtävän, joka ilmoittaa järjestelmän kautta, jos kuntoutettava vastaa tietyllä tavalla. Hälytystehtävää voi käyttää esimerkiksi kysymyksissä, jotka koskevat potilaan itsetuhoisuutta. Kuntoutettavia siirretään ryhmästä toiseen edistymisen mukaan joko automaattisesti tai 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 ja antamaan heille palautetta järjestelmän kautta.  Tietojärjestelmän tietokantaan keräämää tietoa saa myös siirrettyä toisiin järjestelmiin.

Kuntoutettava saa muistutuksia mobiililaitteessa käyttämäänsä WWW-sovellukseen kuntoutusohjelmaan liittyvistä tapahtumista. Tapahtumat voivat olla esimerkiksi liikuntaharjoitteita, rentoutusharjoitteita tai lääkkeiden ottamisen muistutuksia.\linebreak WWW-sovelluksella voidaan myös tallentaa tapahtuman aikana anturidataa, kuten kiihtyvyysanturin tai kameran dataa. Kuntoutettavat voivat myös käyttää järjestelmää päiväkirjana, johon he voivat tehdä merkintöjä kirjoittamalla, ottamalla valokuvia, äänittämällä tallenteita tai kuvaamalla videoita. Järjestelmän kautta kuntoutettava voi myös lähettää tutkijoille viestejä.


Sovellusraportissa kuvataan, kuinka vaatimusmäärittelyn \cite{vaatimusmaarittely} toiminnalliset vaatimukset toteutettiin ohjelmallisesti. Lisäksi tässä raportissa kuvataan sovelluksen käyttöliittymiä, toteutuksen sisäistä rakennetta ja yhteyksiä tiedostoihin, puutteellisia toteutusratkaisuja, suoritettuja testauksia sekä jatkokehitysideoita. Projektin tuloksia, käytänteitä, tehtävien työmääriä, työnjakoa, aikataulutusta, sekä riskejä ja muita projektin läpivientiin liittyviä asioita käsitellään projektiraportissa [6]. 

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 projektin ohjelmointikäytänteet. Luvussa 6.5 kuvataan projektin testauskäytänteet ja testauksen tulokset. Luvussa 7 kuvataan projektin tavoitteiden toteutumista, järjestelmän tunnettuja virheitä ja puutteita sekä projektin aikana esiintulleita jatkokehitysideoita. Luvussa 8 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 aihealueen termejä ovat seuraavat:
% Termilistat ladotaan Ventry-ympäristöllä, parametrina pisin termi,
% jolloin sisentyy oikein:
\begin{Ventry}{Sovellusprojekti}
  \item[Fyysinen aktiivisuus] viittaa kuntoutettavan harrastamaan liikunnan määrään.
  \item[Hälytystehtävä] on tehtävätyyppi, joka lähettää järjestelmän kautta viestin toiselle käyttäjälle.
  \item[Interventio] on psykologisen tiedon, menetelmän ja osaamisen avulla tapahtuva vaikuttaminen.
  \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. 1
  \item[Mobiililaite] on älypuhelin tai sormitietokone.
  \item[Metatieto] on kuvailevaa tietoa tiedosta, jota hyödynnetään tiedon yksilöinnissä ja haussa.
  \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[Profiiliviesti] on järjestelmän kautta lähetettävä viesti.
  \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[Toimintakyky] on kuntoutettavan kyky tehdä hänelle hyödyllisiä asioita.
  \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, 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}{Sovellusprojekti} 
  \item[Etenemisvaihtoehto] on monivalintatehtävän yksi valinta. 
  \item[Hälytyskomponentti] on tehtävä, joka lähettää profiiliviestin komponentin asetuksiin määritetyille henkilöille. 
  \item[Kotoistus] on toimi, jolla tietojärjestelmä käännetään vieraalle kielelle.
  \item[Käyttäjäprofiili] on järjestelmässä olevan käyttäjän profiili, joka sisältää tunnistetietoja 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ää tapahtuneesta asiasta. Muistutus voi olla ääni-, värinä- ja tekstimuodossa. 
  \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 työkalu tapahtuman laatimiseen.
  \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}{Sovellusprojekti}
  \item[CSS] on WWW-dokumenteille kehitetty tyylikieli.
  \item[FreeMind] on ajatuskarttasovellus.
  \item[GanttProject] on ajan- ja resurssienhallintaohjelma projekteille.
  \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[jQuery] on kaikille selaimille tarkoitettu ilmainen ja avoimen lähdekoodin lisenssin alainen JavaScript-kirjasto.
  \item[\LaTeX] on ladontaohjelmisto.
  \item[Lähdekoodi] on tekstimuotoista ohjelmointikielistä listausta.
  \item[NetBeans] on integroitu ohjelmointiympäristö mm. Java- ja JavaScript-ohjelmointikielille.
  \item[OpenOffice.org] on avoimeen lähdekoodiin perustuva toimisto-ohjelmisto.
  \item[PDF] on ohjelmistoriippumaton siirrettävä tiedostomuoto do\-ku\-men\-teil\-le.
  \item[Vaadin] on Java-sovelluskehitysympäristö WWW-sovellusten luomiseen.
  \item[YouSource] on Git-versiohallintaohjelmistoa tukeva lähdekoodien julkistusjärjestelmä, jota käytetään WWW-käyttöliittymällä.
\end{Ventry}


% --- chapter 3 ---

\chapter{Käyttöliittymä (tutkija)}

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 sovelluksen näkymien väliset suhteet näkymäkarttana. Kappaleen muissa alaluvuissa kuvataan kunkin näkymän toiminnallisuus ja yhteydet muihin näkymiin.

\begin{figure}[htp]
\centering
\scalebox{0.64}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_tutkija_kartta.eps} }
\caption{Sovelluksen näkymäkartta.} \label{sov_tutkija_kartta}
\end{figure}

Tutkijan käyttöliittymän näkymät ovat
 \begin{compactitem}
  \item Oma sivu -näkymä (päänäkymä),
  \item käyttäjien hallinta,
  \item ryhmien hallinta,
  \item tutkimusten hallinta,
  \item kuntoutusohjelmien luonti ja muokkaus,
  \item tapahtumien luonti ja muokkaus,
  \item multimediatiedostojen lataus ja esikatselu (toteuttamatta),
  \item raporttien luonti (toteuttamatta) sekä
  \item ohjenäkymä (toteuttamatta).
 \end{compactitem}

\section{Sovelluksen näkymien rakenne}

Sovelluksen toiminnallisuus on sijoitettu välilehtien sisään. Tämä välilehtiratkaisu mahdollistaa sulavan siirtymisen näkymästä toiseen. Välilehtien välillä siirtyminen tapahtuu pääosin yläreunan välilehtikuvakkeiden kautta, mikä näkyy jokaisessa näkymässä yläreunassa. Muista navigointimahdollisuuksista näkymien välillä on mainintoja seuraavissa kappaleissa.

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 informaatiovirtana sovelluksen käyttäjälle. Muiden näkymien rakenne on ulkoasultaan samanlainen. Vasemmalla puolella ruutua on hakukomponentti, joka hakee tiettyyn näkymään liittyviä tietoja. Esimerkiksi käyttäjien hallintanäkymässä kyseinen hakukomponentti hakee tietokannasta järjestelmässä olevia käyttäjiä. Näkymien oikealla puolella on välilehti, jossa näytetään haettuun tietokokonaisuuteen liittyviä tietoja ja jossa voidaan muokata kyseiseen tietokokonaisuuteen liittyviä tietoja.

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

Sovelluksen päänäkymänä toimii Oma sivu -näkymä, jonka tarkoituksena on näyttää tutkijalle ensiarvoista tietoa kuntoutettavista. Näkymä myös huomauttaa tutkijalle, jos hänellä on jokin asia jäänyt kesken hänen kirjautuessaan ulos järjestelmästä. 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ä.

Kyseiseen näkymään liittyviä toiminnallisuuksia ei toteutettu projektin aikana. Uloskirjautumisen sijainnin muuttamisesta ja muista jatkokehitysideoista on mainintoja kappaleessa 8.4. 

\section{Käyttäjien hallinta}

Käyttäjien hallintanäkymässä tutkija voi luoda uusia käyttäjiä järjestelmään, hakea ja muokata olemassa olevia käyttäjiä, hallinnoida käyttäjien ryhmiä sekä tarkastella käyttäjän suorittamien tapahtumien suoritedataa.

Tutkijalla on kaksi päätoimintakokonaisuutta, jotka hän voi suorittaa tässä näkymässä. Nämä toimintakokonaisuudet ovat uuden käyttäjän luonti sekä haetun käyttäjän tietojen muokkaaminen. Tietojen muokkaamisen osatoimintakokonaisuudet ovat käyttäjän perustietojen muokkaaminen, käyttäjän ryhmien jäsenyyden tarkasteleminen, lisääminen ja poistaminen sekä tapahtumasuoritushistoria tarkastelu ja ulosotto.

Tutkijan luodessa uutta käyttäjää tutkija painaa vasemmalla puolella olevan hakukomponentin Luo uusi -painiketta, jolloin oikealla oleva vä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.

Käyttäjän tietoja muokattaessa tutkija voi muokata käyttäjän perustietoja Käyttäjän tiedot -välilehdessä, joka avautuu ensimmäisenä tutkijalle, kun hän joko luo tai muokkaa käyttäjää. Muokattaviin käyttäjän perustietoihin kuuluu mm. nimi, sukunimi, käyttäjätunnus sekä käyttäjän kuvaus. Tässä välilehdessä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu käyttäjä. Käyttäjän ryhmät -välilehdessä tutkija voi nähdä, missä ryhmissä käyttäjä on jäsenenä ja voi halutessaan joko 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ä suoraan tarkastelemaan valitun käyttäjän ryhmän tietoja painikkeen avulla. Tapahtumasuoritushisto-ria-välilehdessä tutkija voi tarkastella käyttäjän tapahtumista lähettämää suoritedataa ja viedä kyseisen datan xls-tiedostomuodossa Excel-taulukkolaskentaohjelmaan.

\section{Ryhmien hallinta}

Ryhmien hallintanäkymässä tutkija voi luoda uusia ryhmiä järjestelmään, hakea ja muokata olemassa olevia ryhmiä, hallinnoida ryhmään kuuluvia käyttäjiä sekä hallinnoida ryhmien kuntoutusohjelmia.

Tutkijalla on kaksi päätoimintakokonaisuutta, jotka hän voi suorittaa tässä näkymässä. Nämä toimintakokonaisuudet ovat uuden ryhmän luonti sekä haetun ryhmän tietojen muokkaaminen. 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.

Tutkijan luodessa uutta ryhmää tutkija painaa vasemmalla puolella olevan hakukomponentin Luo uusi -painiketta, jolloin oikealla oleva vä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.

Ryhmän tietoja muokattaessa tutkija voi muokata ryhmän perustietoja Ryhmän tiedot -välilehdessä, joka avautuu ensimmäisenä tutkijalle, kun hän joko luo tai muokkaa ryhmää. Muokattaviin ryhmän perustietoihin kuuluu mm. nimi, ryhmän rooli, ryhmään liitetty tutkimus sekä ryhmän kuvaus. Tässä välilehdessä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu ryhmä. Ryhmän jäsenet -välileh-dessä tutkija voi nähdä, ketä käyttäjiä kuuluu ryhmään ja voi halutessaan joko lisätä ryhmään uuden käyttäjän tai poistaa ryhmästä valitun käyttäjän. Näkymästä voi myös päästä suoraan tarkastelemaan valitun ryhmän jäsenenä olevan käyttäjän tietoja painikkeen avulla. Ryhmän aikataulut -välilehdessä tutkija voi tarkastella ryhmän sisältämiä kuntoutusohjelmia, lisätä uusia kuntoutusohjelmia ryhmälle sekä poistaa ryhmältä kuntoutusohjelmia. Tästä näkymästä voi hypätä myös tarkastelemaan ryhmällä olevian kuntoutusohjelman tietoja painikkeen avulla.

\section{Tutkimusten hallinta}

Tutkimusten hallintanäkymässä tutkija voi luoda uusia tutkimuksia järjestelmään sekä hakea ja muokata olemassa olevia tutkimuksia.

Tutkijalla on kaksi päätoimintakokonaisuutta, jotka hän voi suorittaa tässä näkymässä. Nämä toimintakokonaisuudet ovat uuden tutkimuksen luonti sekä haetun tutkimuksen tietojen muokkaaminen.

Tutkijan luodessa uutta tutkimusta tutkija painaa vasemmalla puolella olevan hakukomponentin Luo uusi -painiketta, jolloin oikealla oleva välilehti aktivoituu muokattavaksi. Tämän jälkeen tutkija syöttää pakollisiin syötekenttiin tarvittavat tutkimuksen perustiedot, jonka jälkeen hän voi tallentaa ryhmän järjestelmän tietokantaan. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun tutkimuksen muokkausta tai valita toisen tutkimuksen muokattavaksi.

Tutkimuksen tietoja muokattaessa tutkija voi muokata tutkimuksen perustietoja Tutkimuksen tiedot -välilehdessä, joka avautuu ensimmäisenä tutkijalle, kun hän joko luo tai muokkaa ryhmää ja joka on näkymän ainoa välilehti. Muokattaviin tutkimuksen perustietoihin kuuluu mm. nimi ja tutkimuksen kuvaus. Tässä välilehdessä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu tutkimus. Tässä välilehdessä näytetään myös tutkimukseen kuuluvat ryhmät, joita voi hypätä tarkastelemaan painikkeen avulla.

\section{Kuntoutusohjelmien luonti ja muokkaus}

Kuntoutusohjelmien luonti- ja muokkausnäkymässä tutkija voi luoda uusia kuntoutusohjelmia järjestelmään sekä hakea ja muokata olemassa olevia kuntoutusohjelmia.

Tutkijalla on kaksi päätoimintakokonaisuutta, jotka hän voi suorittaa tässä näkymässä. Nämä 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.

Tutkijan luodessa uutta kuntoutusohjelmaa tutkija painaa vasemmalla puolella olevan hakukomponentin Luo uusi -painiketta, jolloin oikealla oleva vä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 Aikataulun muokkaaminen -välilehdessä. Tässä välilehdessä 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.

Kuntoutusohjelman tietoja muokattaessa tutkija voi muokata kuntoutusohjelman perustietoja Aikataulun tiedot -välilehdessä, joka avautuu ensimmäisenä tutkijalle, kun hän luo uutta kuntoutusohjelmaa. Muokattaviin kuntoutusohjelman perustietoihin kuuluu kuntoutusohjelman kuvaus. Tässä välilehdessä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu kuntoutusohjelma. Aikataulun muokkaus -välilehdessä tutkija voi tarkastella kuntoutusohjelman sisältämiä tapahtumia ja niiden ajoitusta, lisätä uusia tapahtumia kuntoutusohjelmaan ja aikatauluttaa ne sekä poistaa tapahtumia kuntoutusohjelmasta.

\section{Tapahtumien luonti ja muokkaus}

Tapahtumien luonti- ja muokkausnäkymässä tutkija voi luoda uusia tapahtumia järjestelmään sekä hakea ja muokata olemassa olevia tapahtumia.

Tutkijalla on kaksi päätoimintakokonaisuutta, jotka hän voi suorittaa tässä näkymässä. Nämä toimintakokonaisuudet ovat uuden tapahtuman luonti sekä haetun tapahtuman muokkaaminen. Tapahtuman muokkaamisen osatoimintakokonaisuudet ovat tapahtuman perustietojen muokkaaminen sekä tapahtuman rakenteen ja sisällön muokkaaminen.

Tutkijan luodessa uutta tapahtumaa tutkija painaa vasemmalla puolella olevan hakukomponentin Luo uusi -painiketta, jolloin oikealla oleva vä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 Tapahtuman sisältö- välilehdessä. Tämän jälkeen tutkija voi tallentaa tapahtuman järjestelmän tietokantaan. Tutkija voi tallentamisen jälkeen jatkaa juuri tallennetun tapahtuman muokkausta tai valita toisen tapahtuman muokattavaksi.

Tapahtuman tietoja muokattaessa tutkija voi muokata tapahtuman perustietoja Tapahtuman tiedot -välilehdessä, joka avautuu ensimmäisenä tutkijalle, kun hän luo uutta tapahtumaa. Muokattaviin tapahtuman perustietoihin kuuluu mm. otsikko, kuvaus ja tyyppi. Tässä välilehdessä voidaan myös tallentaa tai poistaa kyseinen muokattavaksi valittu ryhmä. Tapahtuman sisältö -välilehdessä tutkija muokata tapahtuman rakennetta ja sisältöä tapahtumamuokkaimella.

Tapahtumamuokkaimen vasemmalla puolella on piirtoalue, jossa näytetään tapahtuman rakenne ja johon tutkija lisää uusia tehtäväkomponentteja. Uusia tehtäväkomponentteja lisätään piirtoalustaan painalla hiiren oikeaa painiketta piirtoalustan tyhjässä tilassa. Tämän jälkeen tutkija valitsee luodusta menuvalikosta lisättäväksi halutun tehtäväkomponenttityypin. Tehtävänkomponentin sisältöä voidaan muokata tapahtumamuokkaimen oikean puolen näkymässä, jossa näytetään valittuun tehtäväkomponenttiin liittyviä tietoja. Painamalla hiiren vasenta painiketta tehtäväkomponentin sisällä avautuu edellä mainittuun kohtaan tehtäväkomponenttiin liittyviä tietoja. Kun tutkija painaa hiiren oikeaa painiketta tehtäväkomponentin sisällä, voi tutkija tällöin siirtää tai poistaa valitun tehtäväkomponentin tai luoda polun kahden komponentin välille. Tämä polku kertoo, mihin tehtävään edetään, kun halutaan siirtyä tapahtumaa suoritettaessa tehtävästä toiseen.

Tutkija voi lisätä tapahtumaan erilaisia tehtäväkomponenttityyppejä, joita ovat tekstikomponentti, monivalintakomponentti, liukusäädin-komponentti, sensorikomponentti, mediakomponentti sekä hälytyskomponentti. Kyseisistä tehtäväkomponenteista toteutettiin teksti- ja monivalintakomponentti. Tekstikomponentin muokattaviin ominaisuuksiin kuuluu otsikko ja tekstisisältö, kun taas monivalintakomponentin muokattaviin ominaisuuksiin kuuluu otsikko sekä polkujen lisääminen, polun suunnanjohtamisen valitseminen, polun arvon valitseminen sekä polun tekstin lisääminen.

\section{Toteuttamatta jääneet näkymät}

Tässä kohdassa kuvaillaan toteuttamatta jääneiden näkymien toiminnallisuuksia. Nämä toteuttamatta jääneet näkymät ovat mediatiedostojen lataamis- ja tarkastelunäkymä, raporttinäkymä sekä ohjenäkymä.

Mediatiedostojen lataamis- ja tarkastelunäkymässä tutkija voi lisätä mediatiedostoja järjestelmään tai esikatsella järjestelmässä olevia mediatiedostoja. Mediatiedostoja voi järjestelmään lisäämisen jälkeen käyttää mediakomponentin näytettävänä sisältönä.

Raporttinäkymässä tutkija voi tarkastella järjestelmään tallentunutta suoritedataa laajemmin sekä luoda erilaisia raportteja eri tiedostoformaatteihin, esimerkiksi pdf-muotoon.

Ohjenäkymässä tutkija voi lukea sovelluksen käyttöohjeita, kun tutkijalle tulee tarve saada ohjeistusta sovelluksen käyttöön. Mahdollisesti kyseinen ohjenäkymä avautuisi omaan selainikkunaan, eikä täten välttämättä tarvitsisi sijaita itse sovelluksessa välilehtenä.


% --- chapter 4 ---

\chapter{Käyttöliittymä (kuntoutettava)}

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 sovelluksen näkymien väliset suhteet näkymäkarttana. Kappaleen muissa alaluvuissa kuvataan kunkin näkymän toiminnallisuus ja yhteydet muihin näkymiin.

\begin{figure}[htp]
\centering
\scalebox{0.85}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_kuntoutettava_kartta.eps} }
\caption{Sovelluksen näkymäkartta.} \label{sov_kuntoutettava_kartta}
\end{figure}

Kuntoutettavan käyttöliittymän näkymät ovat
 \begin{compactitem}
  \item tapahtumakalenteri,
  \item vapaaehtoiset tapahtumat,
  \item oma edistyminen,
  \item päiväkirja sekä
  \item viestit.
 \end{compactitem}

\section{Sovelluksen näkymien rakenne}

Sovelluksen näkymien rakenne noudattaa samaa tyyliä koko sovelluksessa. Jokainen näkymä noudattaa näkymämallia, joka on jaettu kolmeen osaan: ylhäällä on kaistale otsikkotiedolle, jossa näytetään esimerkiksi menuvalikoissa valikon nimi sekä tapahtumaa suoritettaessa tapahtuman nimi. Näkymämallin keskelle on asetettu sisältötila, jossa näytetään kuhunkin näkymään liittyvä sisältö: menuvalikoissa menunavigointipainikkeet, alavalikoissa valikon sisältö ja tapahtumaa suoritettaessa tapahtuman tehtävän sisältö. Näkymämallin alhaalle on varattu tila toimintopainikkeille. 

Vasen toimintopainike toimii aina takaisin-, peruutus- tai kieltopainikkeena, kun taas keski- ja oikea painike toimivat eri tavalla eri näkymissä. Esimerkiksi tapahtumaa suoritettaessa keski- ja oikea painike toimivat tapahtuman tehtävien etenemis- ja paluupainikkeina. Oikeaa painiketta käytetään myös OK-painikkeena tietyissä tilanteissa, kuten esimerkiksi tapahtuman keskeyttämisessä.

\pagebreak

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

Sovelluksen päänäkymästä pääsee Oma profiili -, Tapahtumat- sekä Harjoitteet-nä-kymään. Päävalikon vasemmalla painikkeella kuntoutettava voi kirjautua ulos sovelluksesta, keskipainikkeella kuntoutettavalle avautuu näkymä, jossa näytetään sovellukseen liittyviä tietoja ja oikealla painikkeella kuntoutettavalle avautuu ohjenäkymä, jossa on käyttöohjeet sovelluksen käyttöön.

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

\section{Oma profiili -näkymä}

Oma profiili -näkymän kautta pääsee Edistyminen-, Päiväkirja- sekä Viestit-näkymään. Päävalikon vasemmalla painikkeella kuntoutettava voi palata takaisin päänäkymään. Muilla alareunan painikkeilla ei ole toiminnallisuutta.

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

Edistyminen-näkymässä kuntoutettava voi tarkastella tapahtumasuoritushistoriaansa. Päiväkirja- ja Viestit-näkymiä ei toteutettu tämän projektin aikana.

\section{Tapahtumat-näkymä}

Kuntoutettava pääsee Tapahtumat-näkymään päävalikon kautta. Näkymän keskiössä näytetään kuntoutettavalle hänen suorittamattomien tapahtumien lista. Kuntoutettava voi vasemman alareunan painikkeella palata takaisin päävalikkoon, muilla alareunan painikkeilla voidaan erotella näkymään näytettäväksi joko tulevia tai rästiin jääneitä tapahtumia. Kuntoutettava voi valita tapahtumalistasta suoritettavaksi haluamansa tapahtuman, jos se on suoritettavissa sillä hetkellä. Tapahtuman suorittamiseen siirrytään painamalla lista-alkion oikealla puolella olevaa Aloita-painiketta.

\section{Harjoitteet-näkymä}

Kuntoutettava pääsee Harjoitteet-näkymään Tapahtumat-näkymän tapaan päävalikon kautta. Edellä mainitut näkymät ovat ulkoasultaan ja toiminnallisuuksiltaan lähes samanlaisia. Ainoa ero niiden välillä on se, että 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. Harjoitteet-näkymän alareunojen painikkeet toimivat samalla tavoin kuin Tapahtumat-näkymäs-sä, ainostaan tapahtumien erottelu tapahtuu tapahtuman tyypin mukaan. Tapahtuman suorittamiseen siirrytään samalla tavalla kuin Tapahtumat-näkymässä.

\section{Tapahtumien suorittaminen}

Tapahtuman suorittaminen aloitetaan Tapahtumat- tai Harjoitteet näkymän kautta. Tapahtuma sisältää yhden tai useamman tehtävän, jonka kuntoutettavan toivotaan suorittavan. Tapahtumassa pääsee eteen- ja taaksepäin alareunan keski- ja oikealla painikkeella. Alareunan vasemmalla painikkeella kuntoutettava voi peruuttaa tapahtuman tekemisen. Tällöin kuntoutettavalta varmistetaan vielä, että hän haluaa varmasti poistua tapahtumasta. 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.

\section{Toteuttamatta jääneet näkymät}

Tässä kohdassa kuvaillaan toteuttamatta jääneiden näkymien toiminnallisuuksia. Nämä toteuttamatta jääneet näkymät ovat Päiväkirja- sekä Viestit-näkymä.

Päiväkirja-näkymässä kuntoutettava voi kirjoittaa päiväkirjamerkintöjä joko teksti-, ääni- tai kuvamuodossa. Kukin päiväkirjan merkintä tallentuu järjestelmän tietokantaan.

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. Viestit-näkymän olennaisin merkitys on toimia palautekanavan tutkijan ja kuntoutettavan välillä.


% --- chapter 5 ---

\chapter{Sovelluksen rakenne}

Luvussa kuvataan sovelluksen rakenne ja sen toteutustapa. Sovellus koostuu kahdesta selainsovelluksesta, jotka ovat yhteydessä palvelimella olevaan projektissa toteutettuun 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 ei noudata varsinaisesti mitään arkkitehtuuria.

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

Kuvassa \ref{sov_arkkitehtuuri} esitetään tietojärjestelmän yleinen rakenne sekä ulkopuoliset ohjelmistot, joita järjestelmä käyttää. Palvelimella suoritetaan MySQL-tietokannanhallintajär\-jestelmää, jonne tallennetaan tietojärjestelmän tiedot. Tomcat-palvelin suorittaa tutkijan ja kuntoutettavan käyttöliittymiä, joita käytetään WWW-selain\-ten kautta mobiililaitteilla ja tietokoneilla.

\begin{figure}[htp]
\centering
\scalebox{0.8}{\includegraphics[trim = 0mm 0mm 0mm 0mm, angle=0]{sov_arkkitehtuuri.eps} }
\caption{Tietojärjestelmän asiakas-palvelinarkkitehtuuri.} \label{sov_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.

Tutkijan ja omaisen käyttöliittymä on suunniteltu käytettäväksi tietokoneella. Tutkijan käyttöliittymässä on toiminnallisuuksia, jotka vaativat suuren näytön ja hiiren käyttöä. Tutkijan käyttöliittymää voi kuitenkin joiltakin osin käyttää myös sormitietokoneella.

\section{Sovelluksen rakenne ja rajapinnat}

TODO

\section{Sovelluksen komponentit}

TODO

\section{Sovelluksen tietokanta}

Projektin aikana toteutettiin oma tietokanta järjestelmälle. Tietokantaan tallennetaan tutkijan luomia käyttäjiä, ryhmiä, tutkimuksia, kuntoutusohjelmia sekä tapahtumia ja kuntoutettavan tapahtumien suorittamisesta tulevaa suoritedataa. Seuraavassa kerrotaan kaikkien tietokannassa olevien taulujen merkitys ja niiden suhteet toisiin tietokannan tauluihin.

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

\newpage

Tietokannan taulut ja niiden merkitys:
 \begin{compactitem}
  \item USER-tauluun tallennetaan kaikki järjestelmän käyttäjät.
  \item USERGROUP-tauluun tallennetaan kaikki järjestelmän ryhmät.
  \item ROLE-tauluun tallennetaan järjestelmän ryhmien roolityypit.
  \item RESEARCH-tauluun tallennetaan kaikki järjestelmän tutkimukset.
  \item SCHEDULE-tauluun tallennetaan kaikki järjestelmän kuntoutusohjelmat.
  \item EVENT-tauluun tallennetaan kaikki järjestelmän tapahtumat.
  \item EVENTTIME-tauluun tallennetaan kaikkien aikataulutettujen tapahtumien ajoitus kuntoutusohjelmassa.
  \item EVENTTYPE-tauluun tallennetaan tapahtumatyypit (kysely, liikunta jne.).
  \item TASK-tauluun tallennetaan kaikki tapahtumiin liittyvät tehtävät.
  \item TASKTYPE-tauluun tallennetaan tehtävätyypit (teksti, monivalinta jne.).
  \item CHOICE-tauluun tallennetaan kaikki tehtävien sisällä olevat valinnat.
  \item TASKDATA-tauluun tallennetaan kaikki tapahtumien suoritedataan liittyvät tiedot.
  \item BINARYDATA-tauluun tallennetaan kaikki binäärimuotoinen suoritedata (kuva, ääni jne.).
  \item TASKDATA-tauluun tallennetaan kaikki tekstimuotoinen suoritedata.
 \end{compactitem}

Tämän lisäksi jokaiseen taululla on rowStatus-rivi, johon tallennetaan taulukossa olevan sarakkeen tila (esim. ACTIVE, DELETED).

\section{Toteutusratkaisujen kehittyminen}

Ryhmälle jaettiin hyvissä ajoin ennen toteutuksen aloitusta erilaisia mobiililaitteita ja sormitietokoneita. Niiden avulla ryhmä sai arvokasta tietoa liittyen sovelluksen toimivuuteen eri mobiililaitteissa sekä pystyi paremmin hahmottamaan sovelluksen koon eri mobiililaitteissa. Mobiililaitteiden näyttöjen pienyyden hahmottamisen takia ryhmä pystyi ottamaan ajoissa huomioon kuntoutettavan käyttöliittymän ulkoasua ja toiminnallisuutta suunniteltaessa.

Ennen toteutuksen aloittamista projektiryhmä suunnitteli kunkin projektissa toteutettavan sovelluksen rakenteen ja käyttöliittymän. Suunnitelmien valmistumisen jälkeen projektin yksi jäsen aloitti kuntoutettavan sovelluksen toteuttamisen muiden keskittyessä vielä muihin projektin tehtäviin. Toinen projektin jäsen aloitti tutkijapuolen sovelluksen toteutuksen hahmottelun muutamaa viikkoa myöhemmin. Projektiryhmä suunnitteli toteutukseen kuuluvalla ajanjaksolla yhdessä tietokantahahmotelmaa ja sai apua tietokannan suunnittelussa tietokantakonsultilta. Tietokantahahmotelman valmistuttua projektiryhmä loi sovellukselle tietokannan ja alkoi toteuttamaan tietokantaa tarvitsevia ominaisuuksia kuhunkin sovellukseen. 

Sovellusten toteutus lähti käyntiin varsin vaivattomasti, sillä Vaadin sisälsi itsessään paljon hyödyllisiä ominaisuuksia ja komponentteja. Täten ryhmän oli helpohko lähteä toteuttamaan sovelluksia valmiiden kirjastojen ja komponenttien avulla. Toteutuksen edistymiseen auttoi myös se, että yhdellä projektin jäsenistä oli aiempaa kokemusta Vaadin-sovelluskehitysalustasta. Kyseinen jäsen toteutti myös muutaman prototyypin aikaisessa vaiheessa, millä varmistettiin alustassa olevien tarvittavien komponenttien toimivuus.

Sovelluksen mobiilipuolen toteutuksesta vastasi pääosin yksi ryhmän jäsen muiden jäsenten keskittyessä tutkijan sovellukseen. Tutkijan sovelluksen toteutus jaettiin osiin, jotta jokainen kolmesta jäsenestä pääsisi toteuttamaan jotain sovelluksen osaa. Projektin toteutukseen suunnatun ajan lähestyessään loppuaan ryhmä päätti pitää sovellusten toteutukseen määrätyt roolit projektin loppuun saakka sellaisenaan. Projektin loppuesityksen jälkeen tutkijan sovellus koki vielä isoja rakennemuutoksia, joita tarvittiin tehdä yhden tietokantaongelman ratkaisemiseksi.


% --- chapter 6 ---

\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}. Luokkien nimissä ensimmäinen kirjain kirjoitettiin isolla ja sanat kirjoitettiin yhteen isoin alkukirjaimin. Funktioiden ja muuttujien nimissä ensimmäinen kirjain kirjoitettiin pienellä ja sanat kirjoitettiin yhteen isoin alkukirjaimin.

\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 projektin aikana.

\section{Lähdekoodiesimerkki}

Sovelluksessa toteutettua 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ö}

Sovelluksen kehitystyökaluna käytettiin NetBeans IDE:n versiota 7.1, lisäosina Maven-automatisointityökalu lähdekoodin kääntämiselle ja Vaadin-sovelluskehitysalustan käyttöliittymäkirjastoja ja komponentteja sovelluksen toteutukseen.

\section{Testauksen käytänteet}

Sovellusten toteutusvaiheessa jokainen ryhmän jäsen toteutti käytännön testausta heti koodiin tekemiensä muutoksen jälkeen omatoimisesti hyvien ohjelmointikäytänteiden mukaisesti. Ajan puutteen vuoksi tietojärjestelmälle ei laadittu testaussuunnitelmaa eikä ryhmä myöskään ehtinyt luoda yksikkötestejä sovelluksille. Muutama testitiedosto saatiin luotua tietokantaa käsitteleville tiedostoille. Järjestelmätestausta ryhmä suoritti projektissa jonkin verran.

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

Sovelluksella oli vain muutama ulkopuolinen testaaja projektin aikana. Laajimman palautteen sovellusten toimivuudesta projektiryhmä sai vastaavalta ohjaajalta Jukka-Pekka Santaselta. Sovelluksen testaukseen osallistui myös projektin jatkokehityksestä kiinnostunut Tero Kallioinen. 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.

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ä. 

Projektiryhmä ei ajan puutteen vuoksi ehtinyt testaamaan sovelluksia niiden loppukäyttäjillä. Tämä asia on otettava huomioon jatkokehityksessä sekä järjestettävä kuntoon mahdollisesti jatkokehityksen alkuvaiheessa.


% --- chapter 7 ---

\chapter{Tavoitteiden toteutuminen}

Luvussa kuvataan projektin vaatimusten toteutuminen, tunnetut virheet ja puutteelliset toteutusratkaisut sekä jatkokehitysideat. Projektissa saatiin toteutettua lähes kaikki pakollisiksi tai tärkeiksi asetetut toiminnalliset vaatimukset. Ryhmä siirsi osia toteutuksesta jo aikaisessa vaiheessa jatkokehitykseen rajallisen ajan vuoksi.

\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 vaatimuksista} toteutettiin kaikki pakollisiksi tai tärkeiksi asetetut vaatimukset. Oma sivu -, media-, raportti- ja ohjenäkymää ei toteutettu projektissa ja ne siirrettiin jatkokehitykseen.

\textbf{Kuntoutettavan käyttöliittymän vaatimuksista} toteutettiin kaikki pakollisiksi tai tärkeiksi asetetut vaatimukset kahta vaatimusta lukuunottamatta. Vaatimus yksinkertaisten kuvakkeiden lisäämisestä näkymiin vieviin painikkeisiin ja tapahtuman tyyppien ilmaisuun ryhmä päätti jättää toteuttamatta projektin aikana. Päiväkirja-, Viestit- ja ohjenäkymiin liittyvät vaatimukset siirrettiin jatkokehitykseen.

\textbf{Tapahtumaan suorittamiseen asetetuista vaatimuksista} toteutettiin kaikki pakollisiksi tai tärkeiksi asetetut vaatimukset. Kuntoutettava voi suorittaa tapahtumia ja keskeyttää suoritettavan tapahtuman.

\textbf{Sisäänkirjautumiseen liittyvät vaatimukset} toteutettiin projektissa. Sisäänkirjautuminen tallentaa kirjautumistiedot keksiin, jolloin esimerkiksi kuntoutettavan tarvitsee kirjautua sovellukseena vain yhden kerran, ellei hän poista keksitietoja oman mobiililaitteen selaimesta.

\textbf{Tapahtumien tehtäväkomponentteihin liittyvistä vaatimuksista} toteutettiin kaikki pakollisiksi tai tärkeiksi asetetut vaatimukset. Media-, sensori-, syöte-, liukusäädin- ja hälytystehtäväkomponentteja ei toteutettu projektissa ja ne siirrettiin jatkokehitykseen.

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

\textbf{Kiihtyvyysanturindatan ja muiden sensoridatan keräämiseen asetettuja vaatimuksia} ei toteutettu projektin aikana. Kuntoutettavan käyttöliittymää ei asetettu projektissa hyödyntämään PhoneGap-rajapintaa. Kyseiset vaatimukset on siirretty jatkokehitykseen.

\textbf{Viestitykseen asetettuja vaatimuksia} ei toteutettu projektissa. Ryhmäkohtaisilla viesteillä tutkija voisi tiedoittaa haluamiaan ryhmiä jostain tarpeellisista asioista. Viestien tarkoitus on luoda eri käyttäjäkuntien välille vuorovaikutus- ja palautekanavia.

\section{Tunnetut puutteet ja virheet}

Tutkijapuolen sovelluksessa kuntoutusohjelmien aikatauluttamisnäkymässä \textbf{tutkijan ei ole mahdollista valita kaikkia ajoitukseen liittyviä ominaisuuksia}. Tällaisia ovat mm. absoluuttisen ajan asettaminen, ja aikaväli, jolloin tapahtuman voi suorittaa. Tutkijan tulisi myös pystyä asettamaan kuntoutusohjelmassa oleva tapahtuma vapaaehtoiseksi, jolloin tapahtuma näkyisi kuntoutettavalle hänen omassa sovelluksessaan Harjoitteet-näkymässä.

Tutkijapuolen sovelluksessa kuntoutusohjelmien \textbf{aikatauluttamisessa käytettävään ajanasetuskomponenttiin ei ole ohjelmoitu tarkistinta}, jos tutkija syöttää ajanasetuskomponentin syöteriville virheellisen aikatiedon. Ongelmaa ei tule, jos tutkija asettaa ajan vieressä olevan painikkeen painalluksen kautta tulevasta päivämäärän ja ajanasetusikkunasta.

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

\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, eli esimerkiksi tutkijalla voisi olla täydet käyttöoikeudet tutkijan sovelluksessa ja 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 ryhmissä, joille on määritelty eri roolit.

\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. 

\section{Jatkokehitysideat}

Tutkijan käyttöliittymän yläreunaan välilehden yläpuolelle tulisi asettaa kaistale, jossa näkyisi sovelluksen tai käyttäjän nimi ja jossa olisi oikeassa yläreunassa uloskirjautumispainike. Tällöin sovelluksesta uloskirjautuminen voisi tapahtua mistä välilehden näkymästä tahansa.

Näkymien välilehtien yläpuolelle tulisi asettaa kaistale, missä olisi nimitieto siitä, minkä tai kenen tietoja tutkija on muokkaamassa sillä hetkellä.

Tutkijan käyttöliittymä kaipaa vihjetekstejä useisiin paikkoihin. Ulkopuolisten käyttötestauksen palautteessa ilmeni, että tapahtumamuokkaimen käyttämisen oppiminen ei välttämättä ole aloittejijalle kaikista helpoin tehtävä.

Millä tavalla meidän mielestä kiihtyvyysanturi + muut ominaisuudet olisi mielekästä toteuttaa?

CONTINUE


% --- chapter 8 ---

\chapter{Käyttöohjeita tutkijalle}

Luvussa kuvataan lyhyesti, kuinka järjestelmän voi asettaa kuntoon pyörimään palvelimelle.


\section{Sovelluksen asennus palvelimelle}

TODO


% --- chapter 9 ---

\chapter{Yhteenveto}

Paatti-projekti toteutti Sovellusprojekti-kurssilla keväällä 2012 Jyväskylän yliopiston psykologian laitokselle prototyypin tietojärjestelmästä, jolla tuetaan muun muassa iäkkäiden, työuupumuksesta kärsivien ja mielenterveyspotilaiden itsenäistä elämää ja kuntoutumista sekä tuetaan tutkijoiden tekemää tutkimusta.

Projektissa onnistuttiin toteuttamaan prototyypit vaadituista kahdesta sovelluksesta: toinen kuntoutusohjelmien luomiseen ja niiden aikatauluttamisen ryhmille sekä toinen kuntoutusohjelmien seuraamiseen ja tekemiseen. Toteutettu järjestelmäkokonaisuus toimii asetettujen päätoiminnallisuuksien mukaisesti ja on siten periaatteessa myös valmis käytettäväksi.

Projektin rajallinen aikataulu ei mahdollistanut kaikkien tilaajien vaatimusten toteuttamista ja siksi toteutettu järjestelmäprototyyppi kaipaa joiltain osin jatkokehitystä. Toteutunut järjestelmäprototyyppi viedään jatkokehitykseen, jossa tehdään projektin aikana jääneet toiminnallisuudet sekä korjataan sovelluksissa esiintyvät puutteet ja ongelmat.

%LÄHTEET
\begin{thebibliography}{1}
%Katso kirjoitusohjeen luku 2.3 ja 2.4.
\bibitem{judosuunnitelma}
  Petri Huttunen, Marko Malinen ja Olli Wirpi,
  ''Judo-projekti, Projektisuunnitelma'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2011.

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

\bibitem{tabusuunnitelma}
  Tuomas Kumpulainen, Kari Tuurihalme, Outa Walkama ja Tuomas Virtanen,
  ''Tabu-projekti, Sovellusraportti'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2009.

\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{sovellusprojektienohje}
  Jukka-Pekka Santanen,
  ''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{projektiraportti}
  Tapio Keränen, Toni Salminen, Jari Salokangas ja Lauri Satokangas,
  ''Paatti-projekti, Projektiraportti'',
  Jyväskylän yliopisto,
  tietotekniikan laitos,
  2012.

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

\end{thebibliography}

% Dokumentin  lopetus
\end{document}
