TEKNINEN MÄÄRITTELY Virtuaaliyhteisöiden muodostaminen Versio 1.2

Samankaltaiset tiedostot
TEKNINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 2)

TEKNINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.1

VAATIMUSMÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0 (luonnos 4)

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

TOIMINNALLINEN MÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.0

VAATIMUSMÄÄRITTELY Virtuaaliyhteisöjen muodostaminen Versio 1.2

TESTIRAPORTTI - JÄRJESTELMÄ, ADMIN Virtuaaliyhteisöjen muodostaminen Versio 1.0

LAATUKATSELMUS LU Virtuaaliyhteisöjen muodostamien Saved

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

EDISTYMISRAPORTTI - T2 Virtuaaliyhteisöjen muodostaminen Versio 1.2

TESTIRAPORTTI - JÄRJESTELMÄ, PORTAL Virtuaaliyhteisöjen muodostaminen Versio 1.0

EDISTYMISRAPORTTI - T4 Virtuaaliyhteisöjen muodostaminen Versio 1.0

TESTIRAPORTTI - VYM JA KANTA Virtuaaliyhteisöjen muodostaminen Versio 1.0

TESTIRAPORTTI - XMLREADER-LUOKKA Virtuaaliyhteisöjen muodostaminen Versio 1.0 (luonnos 2)

TESTIRAPORTTI - XMLREADER LUOKKA Virtuaaliyhteisöjen muodostaminen Versio 1.0

DOKUMETTIENHALLINTASUUNNITELMA Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 1)

Järjestelmäarkkitehtuuri (TK081702)

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

PILETTI. Tekninen vaatimusmäärittely. v. 0.2

TOIMINNALLINEN MÄÄRITTELY MS

EDISTYMISRAPORTTI - PS Virtuaaliyhteisöjen muodostaminen Versio 1.0

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

13/20: Kierrätys kannattaa koodaamisessakin

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Rajapinta (interface)

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmiston toteutussuunnitelma

TESTAUSSUUNNITELMA Virtuaaliyhteisöjen muodostaminen Versio 1.1

Suunnitteluvaihe prosessissa

Ohjelmoinnin jatkokurssi, kurssikoe

18. Abstraktit tietotyypit 18.1

EDISTYMISRAPORTTI - T1 Virtuaaliyhteisöjen muodostaminen Versio 1.0 (luonnos 1)

Inspire-prosessin tilannekatsaus 01 / 2012

Valppaan asennus- ja käyttöohje

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta

Ohjelmistojen suunnittelu

Johdatus rakenteisiin dokumentteihin

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

opiskelun suunnittelujärjestelmä, kurki ja ilmo käyttävät kaikki samaa tietokantaa, ja uusi järjestelmä tulee osaksi tätä.

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Käyttöopas. ADAP-KOOL AK-ST 500 Oy Danfoss Ab / Kylmäosasto 1

Tekninen suunnitelma - StatbeatMOBILE

ELM GROUP 04. Teemu Laakso Henrik Talarmo

DOKUMENTTIENHALLINTASUUNNITELMA Virtuaaliyhteisöjen muodostaminen Versio 1.1

20. Javan omat luokat 20.1

ohjelman arkkitehtuurista.

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

T Testiraportti - integraatiotestaus

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Interfacing Product Data Management System

PROJEKTISUUNNITELMA Virtuaaliyhteisöjen muodostaminen Versio 1.0 (Luonnos 5)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Ohjelmistojen mallintaminen, mallintaminen ja UML

T Projektikatselmus

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Maiju Mykkänen Susanna Sällinen

Action Request System

Lohdutus - tietokantadokumentti

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

T Testiraportti - järjestelmätestaus

Sähköpostitilin luonti

L models. Tekninen määrittely. Ryhmä Rajoitteiset

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Harjoitus 5 (viikko 41)

16. Javan omat luokat 16.1

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1

Uudelleenkäytön jako kahteen

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Convergence of messaging

Modulaariset tietosisältömäärittelyt Tilannekatsaus

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kansallinen ASPAtietojärjestelmä

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Java kahdessa tunnissa. Jyry Suvilehto

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

Internet-pohjainen ryhmätyöympäristö

Yhteentoimivuutta edistävien työkalujen kehittäminen

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Transkriptio:

TEKNINEN MÄÄRITTELY Versio 1.2 Edited by Checked by Approved by Harri Kauhanen Tuomo Marttila

i Sisällysluettelo DOKUMENTIN VERSIOT 1 1. JOHDANTO 2 1.1. Tarkoitus ja kattavuus 2 1.2. Tuote ja ympäristö 2 1.3. Määritelmät, merkintätavat ja lyhenteet 2 1.4. Viittaukset muihin dokumentteihin 2 1.5. Yleiskatsaus dokumenttiin 3 2. JÄRJESTELMÄN YLEISKUVAUS 4 2.1. Sovellusalueen kuvaus 4 2.2. Järjestelmän liittyminen ympäristöönsä 4 2.3. Laitteistoympäristön kuvaus 4 2.4. Ohjelmistoympäristön kuvaus 4 3. ARKKITEHTUURIN KUVAUS 5 3.1. Yleistä 5 3.2. Ratkaisun "filosofia" (suunnitteluperiaatteet) 5 3.3. Tietokanta-arkkitehtuuri 6 3.4. Ohjelmistoarkkitehtuuri, moduulit ja prosessit 6 4. MODUULI KUVAUKSET 7 4.1. Yleistä 7 4.2. Perustietorakenteet 8 4.3. AMOK luokat 9 4.4. AMOK Tietorakenteet 10 4.5. AMOK moduuli 11 4.5.1. Amok, User ja Community 11 4.6. AMOK Wrapper-moduuli 12 4.6.1. UserServicesAmok 12 4.6.2. UiConverter 12

ii Sisällysluettelo 4.6.3. XML luokat 14 4.7. VYM 14 4.7.1. Vym rajapinta 14 4.7.2. Db luokat 15 4.7.3. VymMachine luokat 15 5. XML TIETORAKENTEET 16 5.1. Yleistä 16 5.2. DTD-määrittelyt 16 5.2.1. profile.dtd 16 5.2.2. service.dtd 16 5.2.3. community.dtd 17 5.2.4. ui.dtd 17

1(20) Dokumentin versiot Vers Muuttaja Pvm Muutos Tarkastanut Hyväksynyt 1.0 Tuomo Marttila 3.11.2000 Ensimmäinen luonnos. Luonnos 1 1.0 Harri Kauhanen 7.11.2000 Kirjoitusvirheiden korjausta. Luonnos 2 1.1 Harri Kauhanen 7.12.2000 Suunniteltujen moduuli/luokkakuvausten lisäykset ja kommentointi. Ensimmäisen luonnoksen luokkien dokumentointia poistettu, sillä varsinainen API dokumentointi generoidaan koodista automaattisesti. Luonnos 1 1.1 Tuomo Marttila 8.12.2000 Tehty lisäyksiä. Luonnos 1 1.1 Harri Kauhanen 11.12.2000 Liästty luku 6 (XML) Harri Kauhanen 1.2 Juha Parhankangas 29.1.2001 DTD-osion päivitykset Luonnos 1 1.2 Tuomo Marttila 13.2.2001 Rakenne muutokset päivitetty Luonnos 2 1.2 Tuomo Marttila 19.3.2001 Muutoksien päivittäminen Luonnos 3 1.2 Harri Kauhanen 23.4.2001 Viittaukset korjattu ja ulkoasu korjattu. Poistettu luku 6 tarpeettomana. Tuomo Marttila

2(20) 1. JOHDANTO 1.1. Tarkoitus ja kattavuus Tässä dokumentissa määritetään VYM:n rakenne moduulitasolla. 1.2. Tuote ja ympäristö Tuotteen kuvaus on määritetty dokumentissa vaatimusmäärittely [3] kohdassa 1.5. 1.3. Määritelmät, merkintätavat ja lyhenteet AMOK Käyttäjäprofiili Sääntö VYM VYMK Virtuaaliyhteisö Adapterikomponentti. AMOK on järjestelmän osa, joka tarjoaa rajapinnat ulkoisille liittymille järjestelmään ja ohjaa asiakassovelluksen pyynnöt joko suoraan kantaan tai VYM:lle, riippuen pyynnön laadusta. Käyttäjäprofiili sisältää yhden käyttäjän tiedot. Profiili määritellään ensisijaisesti käyttäjän syöttämien tietojen mukaan, mutta se saattaa myös muuttua oppiessaan käyttäjän toimista. Käyttäjäprofiili on ohjelmiston kannalta ekvivalentti käyttäjän kanssa. Virtuaaliyhteisöjä muodostetaan sääntöjen avulla. Sääntöä ei tule ymmärtää välttämättä predikaattilogiikan avulla muodostettuna, vaan sääntö on mikä tahansa rajoite, jonka avulla voidaan tutkia käyttäjäprofiileja ja määrittää, kuuluuko henkilö profiilinsa perusteella ryhmään vai ei. Virtuaaliyhteisöjen muodostajakone. Keskeisin osa sovellusta, joka muodostaa virtuaaliyhteisöt käyttäjäprofiileista sääntöjen perusteella. VYM:n osa, joka laskee varsinaiset yhteisöt. Virtuaaliyhteisö muodostuu joukosta käyttäjiä (käyttäjäprofiileja), joilla on samanlaisia harrastuksia ja kiinnostuksen kohteita. Virtuaaliyhteisön jäsenten tulee voida kommunikoida keskenään. Lisäksi jokaisen yhteisön jäsenen tulee voida ottaa selville, mihin yhteisöihin hän kuuluu. Sääntöjen avulla voidaan profiileista muodostaa virtuaaliyhteisöjä. Jotta virtuaaliyhteisö voisi kommunikoida, tulee virtuaaliyhteisön määrittää media ja protokolla, joiden avulla kommunikaatio voidaan suorittaa. Lisäksi tulee määrittää tapa, jolla henkilö voi ottaa selville, mihin yhteisöihin hän kuuluu. Määritelmä, joka toteuttaa edellä mainitut ehdot, on nelikko (A,B,C,D), jossa A on osajoukko kaikista käyttäjäprofiileista. A:n alkiot toteuttavat säännöstön B, joka on määritelty kullekin virtuaaliyhteisölle erikseen. C on joukko, joka koostuu kommunikaatiotavoista. C siis toisin sanoen määrittelee, millä tavoilla yhteisön sisällä kommunikoidaan. D on toiminto, jonka avulla käyttäjä voi ottaa selville, mihin yhteisöihin hän kuuluu. 1.4. Viittaukset muihin dokumentteihin # Documentti Selitys 1 API dokumentaatio JavaDoc kommenteista tuotettu luokkien tarkka dokumentointi 2 Toiminnallinen määrittely Tehtävän tuotteen tarkka määrittely toiminnallisella tasolla. Tietokannan kuvaus. 3 Vaatimusmäärittely Projektille ja tehtävälle tuotteet asetetut (asiakkaan) vaatimukset.

3(20) 1.5. Yleiskatsaus dokumenttiin Luvussa 2 kuvataan järjestelmän eri osat hyvin yleisellä tasolla. Luvussa 3 kuvataan järjestelmän arkkitehtuuri. Tietokanta-arkkitehtuuri on kuvattu kohdassa 3.3. Luvussa 4 käsitellään eri moduulien kuvaukset. Kohdassa 4.1 on järjestelmän yleiskuva ja kohdassa 4.2 perustietorakenteet. Kohdissa 4.3, 4.4, 4.5 ja 4.7 käsitellään AMOK:ia ja kohdassa 4.8 VYM:iä. Luvussa 5 käsitellään määriteltyjä XML formaatteja.

4(20) 2. JÄRJESTELMÄN YLEISKUVAUS 2.1. Sovellusalueen kuvaus VYM on virtuaaliyhteisöjä muodostava kone, joka liittyy johonkin sitä tarvitsevaan palveluun. 2.2. Järjestelmän liittyminen ympäristöönsä VYM liittyy portaaliin AMOK:n rajapinnan kautta. Käytännössä ensivaiheessa on kyseessä Java luokkarajapinta. 2.3. Laitteistoympäristön kuvaus VYM on täysin palvelinsovellus ja vaatii toiminnallisessa määrittelyssä [2] kuvatun laitteiston. 2.4. Ohjelmistoympäristön kuvaus VYM kirjoitetaan Javalla, ja sen tulisi toimia missä tahansa käyttöjärjestelmässä, jossa on JDK 1.2.2

5(20) 3. ARKKITEHTUURIN KUVAUS 3.1. Yleistä Arkkitehtuuriksi on valittu modulaarinen rakenne, jotta VYM-kone voidaan helposti vaihtaa sopivampaan mahdolliseen. Eri osat toteutetaan Java-luokkina. Seuraavat moduulit ovat välttämättömiä VYM:n toiminnalle. AMOK hoitaa järjestelmänhallinta työkalun (AdminTool), portaalin tai minkä tahansa VYM-järjestelmää käyttävän systeemin yhteydet varsinaiseen VYM:in. VYM:n logiikka ohjaa kantaa ja varsinaista VYM-konetta. Kone sisältää kaiken älykkyyden mitä tarvitaan virtuaaliyhteisöjen muodostamiseen. Tietokanta sisältää käyttäjäprofiilit, palveluprofiilit ja yhteisöprofiilit, sekä näiden väliset suhteet. Järjestelmänhallinta -sovelluksessa on käyttöliittymä jolla voidaan lisätä ja päivittää käyttäjä-, palvelu- ja yhteisöprofiileja. Demoportaali on loppukäyttäjän käyttöliittymä järjestelmään. Loppukäyttäjän palveluja on luonnollisesti rajattu siten, että käyttäjä voi muuttaa vain omia tietojaan. 3.2. Ratkaisun "filosofia" (suunnitteluperiaatteet) VYM tehdään oliopohjaisena. Eri komponentit ovat Java-luokkia. Vaikka AMOK ja VYMK esitetään eri osina, ne toimivat käytännössä samassa koneessa, ja keskustelevat keskenään Java-luokkarajapinnan yli. Javan käyttö on asiakkaan vaatimus ja toteutuksen kannalta on helpompaa tehdä AMOK:sta ja VYMK:sta yhtenäinen. VYM on palvelinsovellus, eikä sillä ole varsinaista käyttöliittymää. Admin-sovellus tulee palvelemaan VYM:n käyttöliittymänä ylläpidolle, ja ulkoinen portaali tarjoaa käyttöliittymän käyttäjälle. Kaikki tieto moduulien välillä välitetään parametreina. Globaaleja muuttujia ei tulla käyttämään. Myös AMOK:n ja VYMKin välillä tieto siirretään parametreina. Tietokantana on Oracle 8i relaatiokanta. Se on kuvattu toiminnallisen määrittelyn [2] luvussa 3. Tietoa VYM-järjestelmään voidaan syöttää tai lukea käyttäen suoraan AMOKrajapintaa, mutta vaihtoehtoisesti dataa voidaan välittää myös XML-kuvauksina. Tietorakenteet on esitetty luvussa 6.

6(20) 3.3. Tietokanta-arkkitehtuuri Tietokannan rakenne on kuvattu toiminnallisen määrittelyn [2] luvussa 3. Koska kyseessä on tutkimusprojekti emme tässä projektissa tee suojattua ja varmistettua kantaa. Tuotantoympäristössä VYM-palvelun tarjoaja määrittää muun muassa käytettävyystason. Käytännössä VYM:n tulee toimia 24h/vrk, mikä tarkoittaa kahdennettua palvelinta. Koska kanta tulee käytännössä kasvamaan melko nopeasti, on kannan tilaa tarkkailtava, ja tarpeen vaatiessa on kanta järjestettävä uudelleen, jotta kannan rakenne pysyisi tehokkaana. 3.4. Ohjelmistoarkkitehtuuri, moduulit ja prosessit Seuraavassa luvussa on kuvattu ohjelmiston tekninen rakenne moduuli- ja luokkatasolla. Kuvauksissa on käytetty UML kaavioita ja toimintaa on kuvailtu yleisellä tasolla. Luokkien tarkka dokumentointi ei sisälly tähän määrittelyasiakirjaan, vaan luokkien tarkka tekninen kuvaus löytyy on-line HTML versiona VYM projektin kotisivuilta osoitteesta: http://hazard.iki.fi/vym/api/ Tietovirrat luokkien välillä ovat niin selkeät, että niitä ei ole erikseen mallinnettu.

7(20) 4. MODUULI KUVAUKSET 4.1. Yleistä VYM-järjestelmä komponenttiesityksenä Kok o järjestelmän voisi jak aa periaatteessa seuraaviin k omponentteihin. Kohdat, joissa k omponenttien välinen k esk ustelu on rapapinnan (pallo) k autta, voitas periaatteessa toteuttaa jollain hajautussysteemillä. Esim. k äyttäen Corbaa. Toinen esimerkk i voisi olla VymMachine:n toteuttaminen natiivina threadina, jos Java:n tehot loppuisivatkin k esken. A mokwrapper Amok Vym VymMachine Vym VymMachin e UserService s Admin Tool VymDb UserPortal Oheisessa kuvassa on esitetty VYM järjestelmä kokonaisuudessaan moduulitasolla. Moduulien tarkempi kuvaus on esitetty seuraavissa kappaleissa. Karkeasti yksinkertaistettuna moduulien toiminta on seuraava: VymMachine: Yhteisöjen muodostamisen äly Vym: Älykkään järjestelmän rajapinta ulospäin. Yhteisöjen muodostamisen logiikka. Koneen ja kannan ohjaus VymDb: Tietokanta rajapintoineen. Amok: Muodostaa Vym:n yksinkertaisesta rajapinnasta käyttäjä-, palvelu- ja yhteisöluokat, jotka itse tietävät tilansa. Esim. käyttäjältä voidaan kysyä suoraan ne yhteisöt, joihin se kuuluu. AmokWrapper: Kokoelma luokkia, jotka laajentavat Amok moduulia. Esim. käyttäjien luonti suoraan XML kuvauksesta. AdminTool: Työkalu käyttäjien, yhteisöjen, palveluiden ja itse järjestelmän hallintaan. UserPortal: Loppukäyttäjälle suunnattu palvelu, jonka palvelut on rajattu käyttäjän itsenä muokkaamiseen.

8(20) 4.2. Perustietorakenteet Perustietorakenteet Näitä "perustietorak enteit a" k äytetään k aikk ialla VYM järjes telmäs sä. Myös VYM:iä k äyttävät liittymät (portaali, hallintat yök alut jne.) k äyttävät näitä samoja tietorak enteita. Luok k ak uvauk sista puuttuvat setxxx ja getxxx metodit jotk a kuitenkin oikeasti löytyvät kaikille jäsenmuuttujille. int userid String userlogin String userfirstname String userlastname UserData UserData(String login, String firstname, String lastname) UserData(String login, String firstname, String lastname, Communication communication) int communityid String communityname String description int communityhostuserid CommunityData CommunityData(String cname, String cdesc, int chost, Algortihm alg) CommunityData(String cname, String cdesc, int chost, Algortihm alg, Communication comm) -communication Communication String communicationname String communicatiovalue -communication Communication(String name, String value) Algorithm -algorithm Algorithm(int type, String data) ServiceData int serviceid String servicename String servicedescription String address SeviceData(String sname, String sdescription) SeviceData(String sname, String sdescription, String saddress) String name int number Feature Käyttäjien/palveluiden/yh teisöjen "ominaisuudet" muodostetaan tekemällä näistä ArrayList ProfileFeature(String featurename, int Number)

9(20) 4.3. AMOK luokat Kaikki AMOK luokat AmokTools UserServices ideana oli antaa "rajoitettu" rajapinta ulospäin (estäen esim. yhteisöjen muokkauksen). Käytännössä tämä todettiin turhaksi ja lisää turhaan yhden vaiheen käyttäjien käsittelyyn. <<Interface>> UserServices (from com.comptel.vym.amok.wrapper) UserServicesAmok (from com.comptel.vym.amok.wrapper) Amok Community <<Interface>> +vym Vym (from com.comptel.vym) +vym +vym User Service UiConverter (from com.comptel.vym.amok.wrapper) <<abstract>> UiUnit (from com.comptel.vym.amok.wrapper) XMLReader (from com.comptel.vym.amok.wrapper) XMLWriter (from com.comptel.vym.amok.wrapper) SliderUiUnit (from com.comptel.vym.amok.wrapper) RButtonUiUnit (from com.comptel.vym.amok.wrapper)

10(20) 4.4. AMOK Tietorakenteet AMOK ja sen tietorakenteet AMOK ja sen luok at muodostaa "fik summan" rajapinnan k oneen k äyttöön. User, S ervice ja Community luok at tarjoavat sellaista toiminnallisuutta, että järjestelmän k äytön tulisi olla helppoa. E simerk ik si User-luok alta voidaan k ysyä suoraan mihin yhteisöihin se k uuluu ja päinvastoin. Toiminta on myös läpinäkyvää - esim. käyttäjäprofiilin päivityksen jälk een ei tarvitse pyytää erillistä päivitystä, vaan uudet yhteisöt voidaan k ysyä samantien (toiminta riippuu täysin alla olevasta k onees ta). AMOK toimii myös "välimuistina" Vym k oneeseen päin jonk a ansiosta esim. käyttäjän tiedot voidaan hak ea User luokan omasta "välimuistista". Itse VYM-kone ei tarvitse näitä luokkia. Community Community(CommunityData communitydata, Vym vym) getcommunitydata() : CommunityData updatecommunitydata(communitydata communitydata) getfeatures() : ArrayList <Feature> updatefeatures(arraylist <Feature>) getusers() : ArrayList <User> getservices() : ArrayList <Service> User User(UserData userdata, Vym vym) getuserdata() : UserData updateuserdata(userdata userdata) getfeatures() : ArrayList <Feature> updatefeatures(arraylist <Feature>) getcommunities() : ArrayList <Community> Amok createuser(userdata userdata) : User removeuser(user user) finduser(string username) : User getallusers() : ArrayList <User> createcommunity(community community) : Community removecommunity(community community) findcommunity(string communityname) getallcommunitites() : ArrayList <Community> createservice(servicedata servicedata) : Service removeservice(service service) getallservices() : ArrayList <Service> +vym +vym +vym Vym (from com.comptel.vym) Service Service(ServiceData servicedata, Vym vym) getservicedata() : ServiceData updateservicedata(servicedata servicedata) getfeatures() : ArrayList <Feature> updatefeatures(arraylist <Feature>) getcommunities() : ArrayList <Community> AmokTools Apuluokk a, joka os aa mm. konvertoida listan käyttäjä ID:tä User luokiksi.

11(20) 4.5. AMOK moduuli AMOK ja sen tietorakenteet AMO K ja sen luok at muodostaa "fik s umm an" rajapinnan k oneen k äyttöön. Comm unity ja User luok at tarjoavat sellaista toiminnallisuutta, että järjestelm än k äytön tulisi olla helppoa. Esimerk ik si User-luok alta voidaan k ysyä suoraan mihin yhteisöihin se k uuluu ja päinvastoin. Toiminta on myös läpinäk yvää - esim. k äyttäjäprofiilin päivityk sen jälk een ei tarvitse pyytää erillistä päivitystä, vaan uudet yhteisöt voidaan k ysyä samantien (toiminta riippuu täys in alla olevasta k oneesta). Itse VYM-k one ei tarvitse näitä luok k ia. Community Data (from com.comptel.vym) Feature (from com.comptel.vym) UserData (from com.comptel.vym) Community User Community(CommunityData communitydata, Vym vym) getcommunitydata() : CommunityData updatecommunitydata(communitydata communitydata) getfeatures() : ArrayList <Feature> updatefeatures(arraylist <Feature>) getusers() : ArrayList <User> User(UserData userdata, Vym vym) getuserdata() : UserData updateuserdata(userdata userdata) getfeatures() : ArrayList <Feature> updatefeatures(arraylist <Feature>) getcommunities() : ArrayList <Community> Amok createuser(userdata userdata) : User removeuser(user user) finduser(string u sernam e) : User getallusers() : ArrayList <User> createcommunity(community community) : Community removecommunity(community community) findcommunity(string communityname) getallcomm unitites() : ArrayList <Community> +vym +vym +vym Vym (from com.comptel.vym) Vym luokat UserData jne. ei kuulu suoraan User luokkaan, vaan tiedot saadaam Vym-rajapinnasta. Sama idea Communicaty-luokkaa. 4.5.1. Amok, User ja Community Nämä kolme luokkaa paketoivat VYM-rajapinnan sisäänsä niin, että esim. käyttäjältä voidaan suoraan kysyä mihin yhteisöihin ne kuuluvat. Toisaalta käyttäjän tietojen päivittäminen ohjataan myös suoraan VYM:in (ja sitä kautta kantaan ja varsinaiselle koneelle).

12(20) 4.6. AMOK Wrapper-moduuli UserPortal ja AMOK luokat Hoitaa mm. tietoturvaa: käyttäjän salasanan tarkistukset, piilottaa ominaisuuksia jne. Interface:n perintä saattaa olla turhaa, mutta näin se ainakin "simuloi" esim. Corba rajapintatoteutusta. Tästä olisi periaatteessa helppo tehdä oikea Corba rajapinta muuttamalla Java Interface IDL kuvaukseksi. UserPortal luok alle tarjotaan vielä oma rajapintansa. Periaatteessa UserPortal voisi k äyttää suoraan Amok :ia ja UiConverteria. Turvallisempaa olisi kuitenk in tarjota jok u UserServices:n tapainen rajapinta päätelaiteliittymien k ehittäjille. Amok itsessään ei ole mitenk ään suojattu, joten palik k a välissä on tarpeen. UserServicesAmok Amok (from com.comptel.vym.amok) UserServices createuser(userdata userdata) loginuser(string username, string password) getuserdata() : UserData updateuserdata(userdata userdata) getuserprofile() : ArrayList <UiUnit> updateuserprofile(arraylist <UiUnit>) getusercommunities() : ArrayList <CommunityData> UiConverter convertfeaturestoui(arraylist <Feature> profile) : ArrayList <UiUnit> convertuitofeatures(arraylist <UiUnit> uiprofile) : A rraylist <Feature> Us erportal (from com.c omptel.vym.userportal) Xm lui Osaa konvertoida erilaisia profiileja "käyttöliittymänä esitettävään muotoon" ja päinvastoin. 4.6.1. UserServicesAmok Tarjoaa rajapinnan portaalille ja välittää tiedot itse AMOK:iin. 4.6.2. UiConverter Hoitaa tietokonversion esim. käyttäjän profiilista käyttöliittymäksi ja toisinpäin. VYMkoneen profiilit ei sisällä tietoa siitä, miten tietoja tulisi kysyä esim. loppukäyttäjältä. Tämän luokka siis osaa muuttaa yksinkertaisen profiilin sellaiseksi, että mahdolliset arvoalueet on rajattu ja tiedot voidaan esittää käyttöliittymän komponentteina (esim. radiobuttonit, sliderit jne.)

13(20) AMOK:n apuluokat käyttöliittymien tekoon UiUnit:sta perittyt luokat esittävä käyttöliittymäkomponentteja, joilla voi olla esim. rajattu arvoalue. Komponentit voivat olla periaatteessa minkälaisia vain ja miten ne esitetään loppuk äyttäjälle on käyttöliittymäluokan "ongelma". UiConverter osaa muuttaa listan Feature:ita listaksi k äyttöliittymäelementtejä ja päinvastoin. Apuna tässä tarvitaa ui.xml nimistä tiedostoa, joka määrittelee sen, minkälainen esitystapa ja arvoalue milläk in ominaisuudella (Feature) on. "Käyttöliittymä" tehdään muodostamalla näistä ArrayList UiConverter convertfeaturestoui(arraylist <Feature> profile) : ArrayList <UiUnit> convertuitofeatures(arraylist <UiUnit> uiprofile) : ArrayList <Feature> getemptyfeatures() : ArrayList <Feature> getemptyui() : ArrayList <UiUnit> <<abstract>> Ui Unit getname() : String getexplanation() : String setname(string name) setexplanation(string expl) <<abstract>> getvalue() : float <<abstract>> isnumerable() : boolean RBut tonuiuni t getnumofoptions() : int getoptionname(int index) : String getoptionvalue(int index) : int setselected(int index, String optionname) getchecked() : int setchecked(int index) setvalue(float value) setoptionname(string name) setoptionvalue(float value) SliderUiUnit SliderProfileUnit() getmintext() : String getmaxtext() : String getminvalue) : float() getmaxvalue() : float setvalue(float value) setmintext(string mintext) setmaxtextstring maxtext)() setminvalue(float minvalue) setmaxvalue(float maxvalue)

14(20) 4.6.3. XML luokat AMOK:n apuluokat XML käsittelyyn XMLReader ja XMLWriter luok kien avulla VYM järjestelmään voidaan tuoda käyttäjiä/palveluita/yhteisöjä muista järjestelmistä. Sama onnistuu siis myös toisinpäin, eli VYM järjestelmän tiedot voidaan muuttaa XML esitykseksi. Myös AMOK:n UiConverter tarvitsee XMLReaderin palveluita käyttöliittymäelementtien muodostamiseen. XMLReader XMLReader(InputStream sourcesteram) initreader(inputstream sourcesteram) isreadok() : boolean geterrormessage() : String readuserprofile() : boolean getuserdata() : UserData readservice() : boolean getservicedata() : ServiceData readvirtualcommunity() : boolean getcommunitydata() : CommunityData getfeatureslist() : ArrayList <Feature> readuiunit() : boolean getuiunit() : UiUnit getcurrentuiclassname() : String XMLWriter XMLWriter(OutputStream os) init(outputstream os) writeuserprofile(userdata u, ArrayList <Feature> featurelist) : boolean writeservice(servicedata s, ArrayList <Feature> featurelist) : boolean writecirtualcommunity(communitydata d, ArrayList <Feature> featurelist) : boolean writeui(uiunit ui) : boolean finalizewriting(string style) : boolean 4.7. VYM VYM luokat (VYM kone ja tietokantayhteys) <<Interface>> Vym StubVym EssentialVym DatabaseHandler (from com.comptel.vym.db) VymEngine ExpandedVym CommunityHandler (from co m.comptel.vym.d b) UserHandler (from com.comptel.vym.db) ServiceHandler (from com.comptel.vym.db) 4.7.1. Vym rajapinta Rajapinta tarjoaa palvelut käyttäjien, palveluiden ja luokkien hallintaan. Rajapinnan toteuttavat luokat saavat käsitellä annettuja käyttäjä-, palvelu- tai yhteisötietoja

15(20) haluamallaan tavalla, mutta tyypillisesti Vym-luokka ohjaa suoraan kantaa ja kun esim. uusi käyttäjä luodaan tai käyttäjäprofiili muuttuu, niin kutsutaan varsinaisesti VYMkonetta (VymMachine). VYM rajapinta Vym createuser(userdata userdata) removeuser(int userid) getuserdata(int userid) : UserData getuserdata(string login) : UserData updateuserdata(userdata userdata) getuserfeatures(int userid) : ArrayList <Feature> updateuserfeatures(int userid, ArrayList <ProfileFeature>) getusercommunities(int userid) : int[] createservice(servicedata servicedata) removeservice(int serviceid) getservicedata(int serviceid) : ServiceData updateservicedata(servicedata servicedata) getservicefeatures(int serviceid) : ArrayList <Feature> updateservicefeatures(int serviceid, ArrayList <Feature>) getservicecommunities(int serviceid) createcommunity(communitydata communitydata) removecommunity(string communityname) getcommunitydata(string communityname) : CommunityData updatecommunitydata(string communityname, CommunityData) getcommunityrules(string communityname) : ArrayList <Rule> updatecommunityrules(string communityname, ArrayList <Rule>) getcommunityusers(string communityname) : ArrayList <String> getallusers() : int[] getallservices() : int[] getallcommunities() : int[] Vym luok at ovat k ok o yhteisön muodostuksen äly ja logiik ka. Itse Vym tarjoaa rajapinnan käyttäjien, palveluiden ja yhteisöjen muokkaamiseen. Muutosten vaikutuksesta yhteisöjen rakenne voi muuttuua. Kaikki tämä tapahtuu läpinäkyvästi eli Vym-rajapinnan käyttäjän ei tarvitse käsk eä tekemään yhteisöjen päivitystä, vaan profiilin muutos riittää (tämä riippuu loppujen lopuksi toteutettavasta koneesta - kone voi reagoida mihin tahansa käyttäjän operaatioon haluamallaan tavalla). Ei tee mitään järkevää, mutta voidaan käyttää esim. käyttöliittymän apuna, kun Vym kone tai kanta ei vielä oikeasti toimi StubVym EssentialVym 4.7.2. Db luokat DbHandler ja siitä perityt luokat hoitavat yhteyden tietokantaan. UserHandler hoitaa käyttäjiin liittyvät, ServiceHandler palveluihin liittyvät ja CommunityHandler yhteisöihin liittyvät toimenpiteet. 4.7.3. VymMachine luokat VymMachine luokat ovat erilaisia koneita, jotka osaavat liittää käyttäjiä / palveluja yhteisöihin.

16(20) 5. XML tietorakenteet 5.1. Yleistä VYM-sovellusta varten on laadittu XML kuvaukset seuraavia tietorakenteita varten: käyttäjät palvelut yhteisöt käyttöliittymä (konvertointi) Näistä kolmea ensimmäistä käytetään tilanteisiin, jolloin järjestelmään halutaan syöttää paljon dataa tai päinvastoin kun järjestelmästä halutaan siirtää dataa muihin järjestelmiin. Neljäs kuvaa sen, kuinka käyttäjien, palveluiden ja yhteisöjen profiilit esitetään käyttäjälle. Esimerkiksi profiilin elementille voidaan näin määritellä arvoalueita ja esitystapa sille, miten tieto lopulta käyttäjältä kysytään. XML kuvaukset muutetaan VYM:n sisäisiksi tietorakenteiksi ja päinvastoin tarkoitusta varten laadittavilla luokilla. 5.2. DTD-määrittelyt 5.2.1. profile.dtd <?xml version="1.0"?> <!ELEMENT PROFILELIST (PROFILE*)> <!ELEMENT PROFILE (FIRSTNAME,LASTNAME,USERID,COMMUNICATION,FEATURELIST)> <!ELEMENT FIRSTNAME (#PCDATA)> <!ELEMENT LASTNAME (#PCDATA)> <!ELEMENT USERID (#PCDATA)> <!ELEMENT COMMUNICATION (NAME (NAME,VALUE)> <!ELEMENT FEATURELIST (FEATURE+) <!ELEMENT FEATURE (NAME,NUMBER)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT VALUE (#PCDATA)> <!ELEMENT NUMBER (#PCDATA)> 5.2.2. service.dtd <?xml version="1.0"?> <!ELEMENT SERVICELIST (SERVICE*)> <!ELEMENT SERVICE (NAME,INFO,ADDRESS,FEATURELIST)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT INFO (#PCDATA)> <!ELEMENT ADDRESS (#PCDATA)> <!ELEMENT FEATURELIST (FEATURE+)> <!ELEMENT FEATURE (NAME,NUMBER)> <!ELEMENT NUMBER (#PCDATA)>

17(20) 5.2.3. community.dtd <?xml version="1.0"?> <!ELEMENT COMMUNITYLIST (COMMUNITY*)> <!ELEMENT COMMUNITY (NAME,INFO,ALGORITHM,COMMUNICATION,FEATURELIST)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT INFO (#PCDATA)> <!ELEMENT COMMUNICATION (NAME (NAME,VALUE))> <!ELEMENT VALUE (#PCDATA)> <!ELEMENT ALGORITHM (TYPE, DATA)> <!ELEMENT TYPE (#PCDATA)> <!ELEMENT DATA (#PCDATA)> <!ELEMENT FEATURELIST (FEATURE+)> <!ELEMENT FEATURE (NAME,NUMBER)> <!ELEMENT NUMBER (#PCDATA)> 5.2.4. ui.dtd <?xml version="1.0"?> <!ELEMENT UILIST (UI*)> <!ELEMENT UI (NAME,DESCRIPTION,ITEM)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT ITEM (RBUTTON SLIDER TEXTFIELD)> <!ELEMENT RBUTTON ((NAME,VALUE)+)> <!ELEMENT SLIDER (INTEGER,MINTEXT,MAXTEXT,MINVALUE,MAXVALUE)> <!ELEMENT INTEGER (#PCDATA)> <!ELEMENT MINTEXT (#PCDATA)> <!ELEMENT MAXTEXT (#PCDATA)> <!ELEMENT VALUE (#PCDATA)> <!ELEMENT TEXTFIELD (#PCDATA)> <!ELEMENT DESCRIPTION (#PCDATA)> <!ELEMENT MINVALUE (#PCDATA)> <!ELEMENT MAXVALUE (#PCDATA)>