next_inactive up previous


Suunnitteludokumentti

Convergence of messaging

The Converge Group


Sisältö

0.0.1     21.10.2002   Dokumentti luotu                    Olli Pettay
0.1       21.11.2002   Muutoksia rakenteeseen ym.          Joni Karppinen
0.1.1     25.11.2002   Järjestelmän ydin -kappaletta 
                       täydennetty                         Mikko Hiipakka
0.1.2     25.11.2002   Ajastettujen sääntöjen käsittely    Olli Pettay
0.1.3     25.11.2002   Tietosuunnitelma                    Olli Pettay
0.1.4     25.11.2002   Tiedonhaku                          Anssi Johansson
0.1.5     30.11.2002   Tiedonhakukappaletta täydennetty    Anssi Johansson
0.2        2.12.2002   Asiakasmoduulia käsitteleviä kohtia
                       päivitetty                          Joni Karppinen
0.2.1      3.12.2002   FTR korjauksia                      Mikko Hiipakka
1.0        5.12.2002   Jäädytetty                          Mikko Hiipakka

Johdanto

Dokumentin tarkoitus

Tämän suunnitteludokumentti esittää teknisen mallin ohjelmistotuotantoprojektin ''Convergence of Messaging'' tuotteena syntyvästä järjestelmästä määrittelydokumentin vaatimusten pohjalta.

Määritelmät, termit ja lyhenteet


Taulukko 1: Dokumentissa käytetyt termit ja lyhenteet
HTML Hypertext Markup Language, WWW-sivujen
  kuvauksessa käytetty kieli
  http://www.w3.org/MarkUp/
HTTP Hypertext Transfer Protocol
  http://www.w3.org/Protocols/
Javadoc Java-kielen kommentointityökalu
  http://java.sun.com/j2se/javadoc/ 
XML Extensible Markup Language
  http://www.w3.org/TR/REC-xml
DOM Document Object Model,
  määritys dokumenttien luonnille, muuttamiselle ja läpikäynnille,
  käytetään usein XML-dokumenttien yhteydessä
  http://www.w3.org/DOM/
XPath XML Path Language,
  kyselykieli XML:lle
  http://www.w3.org/TR/xpath
XUpdate Kieli XML-dokumenttien muuttamiseksi,
  http://www.xmldb.org/xupdate/xupdate-wd.html
IMAP Internet Message Access Protocol,
  protokolla sähköpostien noutoa varten
  http://www.imap.org/
SSL Secure Sockets Layer,
  verkkoliikenteen salausmenetelmä
  http://wp.netscape.com/eng/ssl3/


Dokumentin rakenne

Dokumentin luokkakuvausten kirjoittamisessa on noudatettu muutamaa sääntöä. Kaikki kuvatut luokat, kentät ja metodit ellei toisin ole mainittu ovat näkyvyydeltää public, mitä ei siis kirjoiteta kuvauksiin mukaan. Toinen noudatettu sääntö on, että luokkakuvauksissa aliluokkien kuvauksissa määritellään vain kokonaan uudet sekä yläluokan korvatut metodit.
Ensimmäinen luku esittelee dokumentin sisällön ja rakenteen sekä dokumentissa käytetyt termit ja lyhenteet.
Toisessa luvussa on mainittu ne lisäykset määrittelydokumenttiin, jotka ovat tulleet esiin määrittelydokumentin kirjoittamisen jälkeen.
Kolmas luku sisältää järjestelmän tietosuunnitelma.
Neljännessä luvussa kuvataan järjestelmän arkkitehtuuri yleisellä tasolla.
Viidennessä luvussa on kuvattuna järjestelmän ytimen luokkarakenne, luokkien tehtävät ja metodit, sekä ytimen rajapinnat.
Kuudennessa luvussa kuvataan tiedonhakumoduulin yhteydet sähköpostipalvelimille sekä rajapinnat järjestelmän muihin osiin.
Seitsemännessä luvussa kuvataan asiakasmoduulin tarjoamat rajapinnat asiakasohjelmalle ja järjestelmän ytimelle.
Kahdeksannessa luvussa kuvataan asiakasohjelman toiminta.
Yhdeksännessä luvussa määritellään ohjelmakoodin ulkonäköasioita.
AttributeInterface -rajapinnan toteutusesimerkit on sisällytetty dokumenttiin liitteenä A.

Lisäyksiä määrittelydokumenttiin

Viestien lähetys

Järjestelmä tukee myös erilaisten viestien lähettämistä. Tietyntyyppisen viestin lähettämisen järjestelmän ulkopuolelle hoitaa yleensä se moduuli joka myös vastaanottaa kyseisentyyppisiä viestejä. Esimerkiksi jos järjestelmään joskus tehtäisiin liittymä USENET-uutisryhmiä varten, osaisi kyseinen lisäkomponentti sekä hakea viestit uutisryhmäpalvelimelta että lähettää palvelimelle uusia viestejä.

Toteutettavassa prototyypissä tuetaan sähköpostiviestien lähettämistä. Sitä ei kuitenkaan hoida sama IMAP-moduuli joka hakee viestejä palvelimelta, vaan tätä varten on poikkeuksellisesti erillinen, SMTP-protokollaa osaava, lähetysmoduuli.

Tietosuunnitelma

Järjestelmä käyttää tietojen säilyttämiseen Apache-organisaation Xindice XML-tietokantaa. Järjestelmän dynaamisesta luonteesta johtuen ei tietokannan dokumenttien rakenteelle voida asettaa tiukkoja muotovaatimuksia. Esimerkiksi viestien tallennuksessa käytettävän XML:n muoto riippuu muun muassa viestin tyypistä (onko se esimerkiksi sähköposti) ja siitä millaisia attribuuttimäärityksiä järjestelmään on tehty. Attribuuttiluokkia saatetaan tulevaisuudessa lisätä järjestelmään dynaamisesti, joten voi olla mahdollista että viestien muoto muuttuu järjestelmän toiminnan aikana.

Vaikka varsinaisille XML-dokumenteille ei tässä määritellä muotoa, tulee dokumenttien kantaantallettaminen määritellä. Xindicen avulla dokumenttien joukkoja ryhmitellään kokoelmiksi (collection). Tietokannan juuri on /db ja sen alaisuudessa seuraavat kokoelmat:

Arkkitehtuuri

Järjestelmä voidaan jakaa toiminnallisesti kolmeen eri moduuliin: tiedonhakumoduuliin, järjestelmän ytimeen ja asiakasmoduuliin.

Ytimen rooli järjestelmässä on hallinnoida ryhmiä ja käyttäjiä sekä näihin liitettyjä tietoja kuten kontekstimallit ja profiilit. Toimintoja, joista ydin huolehtii ovat tietokantaoperaatiot, viestien käsittely kontekstimallivertailujen ja profiilisääntöjen perusteella sekä ajastettujen toimintojen hallinta. Sen tehtäviin kuuluu myös suuri osa asiakasmoduulin tarjoaman käyttöliittymän palveluista, muun muassa näkymien hallinta ja tiedonlähdeasetusten ylläpitäminen.

Tiedonhakumoduuli huolehtii yhteyksistä järjestelmän ulkopuolella oleville palvelimille. Näitä palvelimia ovat esimerkiksi sähköpostipalvelimet (sekä saapuvat että lähtevät viestit), uutisryhmäpalvelimet, WWW-palvelimet ym. Tiedonhakumoduuli myös muokkaa saapuneet viestit järjestelmän vaatimaan sisäiseen muotoon.

Asiakasmoduuli yhdistää järjestelmän ja järjestelmän käyttäjän. Kaikki tieto järjestelmältä asiakkaalle ja asiakkaalta järjestelmään välitetään asiakasmoduulin kautta.
Asiakasmoduuli huolehtii järjestelmän ytimestä tulevien viestien muuttamisesta järjestelmän sisäisestä muodosta kunkin asiakasohjelman ymmärtämään muotoon, esimerkiksi muuttaen viestin HTML-muotoon toimitettaessa viestiä WWW-sovellukselle. Asiakasmoduulissa muutetaan myös asiakkaalta tuleva tieto järjestelmän sisäiseen muotoon, esimerkiksi käyttäjän luodessa uusia kontekstimalleja tai profiileja.

Kuva 1: Arkkitehtuuri
\includegraphics[height=0.9\textheight]{graphics/arkkitehtuuri.eps}

Järjestelmän ydin

Luokat

Pakkaus converge.kernel

Kuva 2: Ytimen luokkakaavio, jossa soikiot kuvaavat säikeitä
\includegraphics[height=0.72\textheight]{graphics/suunnittelu_kernel.eps}


ContextModel

ContextModel-luokka tarjoaa attribuuttien hallintaa sekä vertailun viestiolion attribuutteihin. Kontekstimalli-ilmentymälle voidaan määritellä joukko attribuutteja, joihin liitetään arvo sekä vertailussa käytettävä laskusääntö. Näiden avulla luokka laskee itselleen arvon siitä kuinka hyvin viestiolion attribuuttien arvot toteuttavat laskusäännön määrittelemällä tavalla malliin liitettyjen attribuuttien arvovälejä. Saatu arvo liitetään viestiolioon ContextModelValueAttribute-tyyppisenä ( kts. luku A.1, sivulla [*] ) attribuuttina.

Määrittely
:
class ContextModel implements XMLContentInterface
Konstruktorit
:
Metodit
:


ContextModelHandler

ContextModelHandler-luokan toiminta alkaa kun tiedonhakumoduuli lähettää järjestelmään saapuneen viestin luokan käsiteltäväksi. Toteutuksen tulee tukea viestien jatkuvaa saapumista siten, että viestien vastaanotto on säikeistettyä toimintaa. Kun uusi säie on käynnistetty viestin käsittelyyn, suoritetaan kontekstimallimuuttujien arvovälien vertailu viestiolion tarjoamiin konteksti- ja viestiattribuutteihin. Tämä vertailu suoritetaan kaikille vastaanottajana (useamman vastaaottajan viestit käsitellään jokaiselle erikseen) käsiteltävään käyttäjäan liitetyille kontekstimalleille (tämän tuloksena kontekstimallit liittävät itselleen saamat arvot viestiolioon nimetyiksi attribuuteiksi). Lopuksi suorittava säie antaa käsittelemänsä viestin edelleen käsiteltäväksi ProfileHandler-luokalle, jonka toiminta suoritetaan siis samassa säikeessä kuin ContextModelHandler:kin toiminta.

Määrittely
:
Public class ContextModelHandler
Private class Process extends Thread
Metodit
:

ProfileHandler

ProfileHandlerissa aluksi käyttäjän oletusprofiilin säännöt, viesti ja tyhjä toimintatapahtuma annetaan DroolsHandlerille. Tämän jälkeen vertaillaan viestiolion eri kontekstimalliarvoja jokaisen profiilin hallinnoimien kontekstimallien kynnysarvoihin. Arvon ylityksestä seuraa viestin ja sääntöjen antaminen DroolsHandlerille, joka muokkaa toimintatapahtumaolioita sääntöjen mukaan. Saadut toimintatapahtumat annetaan viestin kanssa EventMonitorille.

Määrittely
:
class ProfileHandler
Konstruktorit
:
Metodit
:

RuleHandler

RuleHandler hoitaa käyttän profiiliin liitettyjen sääntöjen käsittelystä.
Määrittely
:
class RuleHandler
Metodit
:

ActionEvent

ActionEvent-olioita käytetään Droolsin sääntöjenkäsittelyn yhteydessä keräämään sääntöjen päättelyn seurauksena syntyneitä toimintoja EventManagerin ymmärtämään muotoon.
Määrittely
:
class ActionEvent
Konstruktorit
:
Metodit
:

EventMonitor

EventMonitorissa hallitaan ytimen sisään tulleiden viestien käsittelyssä ja ajastetuissa säännöissä syntyneiden tapahtumaolioiden tallentamista siihen saakka, kunnes omassa säikeessä toimiva EventManager hoitaa viestien jatkokäsittelyn.
Määrittely
:
class EventMonitor
Metodit
:

EventManager

EventManager-luokka suorittaa tapahtumaolioiden määrittelemiä toimintoja. ActionInterface-tyyppisten olioiden avulla se suorittaa muun muassa viestien kantaanlisäyksen, näkymien hallinnan ja viestien lähettämiseen liittyvät toiminnot.
Määrittely
:
class EventManager extends Thread
Metodit
:

ActionLoader

ActionLoader-luokalla ladataan (tarvittaessa dynaamisesti) ActionInterface-rajapinnan toteuttavia luokkia järjestelmän käyttöön.
Määrittely
:
class ActionLoader
Metodit
:


View

View-tyyppisillä olioilla kuvataan tietokannan näkymien sisältöä.
Määrittely
:
class View implements XMLContentInterface
Metodit
:


ViewMonitor

Järjestelmässä ViewMonitor-luokka huolehtii viestien ja näkymien muutosten synkronoinnista.
Määrittely
:
class ViewMonitor
Metodit
:

ViewEvent

ViewEvent on apuluokka ViewMonitorin ja ViewManagerin välillä. ViewEvent-olioiden avulla ViewManager suorittaa viestiin ja näkymiin liitettyviä pyydettyjä toimintoja.
Määrittely
:
class ViewEvent
Konstruktorit
:
Kentät
:

ViewManager

ViewManager huolehtii ViewMonitorille annettujen näkymien ja viestien muutospyyntöjen käsittelemisestä. Järjestelmässä oleva yksi ainoa ViewManager kuuntelee ViewMonitorille tulevia pyyntöjä ja suorittaa niitä saapumisjärjestyksessä. Mahdolliset muutokset tietokantaan hoidetaan DatabaseProviderin kautta.
Määrittely
:
class ViewManager
Metodit
:

DatabaseProvider

DatabaseProvider tarjoaa tietokantapalveluita muille järjestelmän olioille. Tietokantana se käyttää Apache organisaation Xindice XML-tietokantaa, ja tästä syystä suoritettavat kyselyt ovat lähinnä DOM-puiden läpikäyntiä. Tulevaisuudessa myös XPath-kyselyt ja XUpdate-päivitykset voivat olla mahdollisia.
Määrittely
:
class DatabaseProvider
Metodit
:

Crypt

Crypt-luokka tarjoaa palveluita datan salaamiseksi salasanan avulla.
Määrittely
:
class Crypt
Metodit
:


User

User-luokan ilmentymillä ylläpidetään järjestelmässä eri käyttäjien tietoja. Ilmentymät sisältävät profiileja, kontekstimalleja, viittauksia tiedonlähteisiin, ominaisuusolioita ja kontaktilistan.
Määrittely
:
class User
Konstruktorit
:
Metodit
:


UserManager

UserManager hallinnoi käyttäjäolioita ja huolehtii niiden kantaantallennuksesta.
Määrittely
:
class UserManager
Metodit
:


Group

Järjestelmän ylläpitäjä voi muodostaa käyttäjäryhmiä, joita kuvaa Group-luokka. Käyttäjäryhmien toiminta on useilta osin sama kuin varsinaisilla käyttäjillä, mutta ryhmillä ei ole näkymiä eikä kontaktilistoja. Ryhmälle tullut viesti käsitellään samoin kuin tavallisetkin viestit, mutta ProfileHandler ei annakaan viestiä EventMonitorille, vaan siitä luodaan kopio jokaista ryhmän jäsentä varten, mitkä käsitellään uudestaan jokaisen ryhmän jäsenen kontekstimallien ja sääntöjen avulla.
Määrittely
:
class Group extends User implements XMLContentInterface
Konstruktorit
:
Metodit
:


GroupManager

GroupManager hallinnoi ryhmäolioita ja huolehtii niiden kantaantallennuksesta.
Määrittely
:
class GroupManager
Metodit
:


Profile

Profile-oliolla kuvataan järjestelmässä käyttäjään liitettyä profiilia. Se sisältää tiedon siihen liitettyjen kontekstimallien kynnysarvoista, ajastetuista säännöistä ja varsinaisista viestin hallintaan liittyvistä säännöistä.

Määrittely
:
class Profile implements XMLContentInterface
Konstruktorit
:
Metodit
:


Rule

Rule-luokalla kuvataan järjestelmässä käytettäviä sääntöjä, jotka ovat muodoltaan ehdot-toiminnot -pareja.
Määrittely
:
class Rule implements XMLContentInterface
Konstruktorit
:
Kentät
:
Metodit
:


Contact

Contact-luokka kuvaa yhtä kontaktilistassa olevaa tietoalkiota. Rakenteeltaan Contact on nimetty hajautustaulu, eli sillä on nimi ja muut tiedot esitetään avain-arvo -pareina.
Määrittely
:
class Contact implements XMLContentInterface
Konstruktorit
:
Metodit
:


ContactList

Jokaisella järjestelmän käyttäjällä on yksi kontaktilista (ContactList), joka voi sisältää sekä varsinaisia kontaktitietoja (Contact) että toisia kontaktilistoja.
Määrittely
:
class ContactList implements XMLContentInterface
Konstruktorit
:
Metodit
:

ScheduledRule

ScheduledRule muuttaa Rule-luokan määrityksiä siten, että sääntöjä voidaan käyttää myös ajastetuissa säännöissä. Tämä tarkoittaa erityisesti Droolsin käyttämän Message-olioviittauksen muuttamista User-tyyppiseksi.
Määrittely
:
class ScheduledRule extends Rule
Metodit
:

ScheduleManager

ScheduleManager käy säännöllisin väliajoin läpi käyttäjien aktiivisten profiilien ajastetut säännöt ja mikäli jokin sääntö tulee laukaista, käytetään hyväksi DroolsHandlerin palveluita. Tämän jälkeen sääntöjen käsittelyssä syntynyt ActionEvent annetaan EventMonitorille, jolta EventManager sen myöhemmin pyytää ja suorittaa halutun toiminnon.
Määrittely
:
class ScheduleManager extends Thread
Metodit
:


Scheduler

Scheduler kuvaa aikaväliä tai tarkkaa aikaa, jolloin jonkin toiminnon pitäisi tapahtua.
Määrittely
:
class Scheduler implements XMLContentInterface
Konstruktorit
:
Kentät
:
Metodit
:

XMLUtil

XMLUtil-luokka tarjoaa XML:n käsittelyä helpottavia staattisia metodeja.
Määrittely
:
class XMLUtil
Kentät
:
Metodit
:


Log

Log-luokkaa käytetään järjestelmän lokitietojen tallennukseen.
Määrittely
:
class Log
Kentät
:
Metodit
:

Rajapinnat

ActionInterface

ActionInterface:lla määritetään ne toiminnallisuudet, jotka jokaisen järjestelmään toteutettavan toiminnallisuusluokan on tarjottava. Toteutusvaiheessa tällaisia luokkia tullaan tekemään esimerkiksi viestien lähettämistä ja hakua varten.
Määrittely
:
interface ActionEvent extends XMLContentInterface
Metodit
:


XMLContentInterface

XMLContentInterface-rajapinnan toteuttavien luokkien on osattava luoda omasta tietosisällöstään XML-kuvaus, jonka avulla ilmentymät voidaan myöhemmin palauttaa samaan tilaan kuin missä ne olivat kuvauksen luonnin yhteydessä.
Määrittely
:
interface XMLContentInterface
Metodit
:

Attribuuttiluokat ja -rajapinnat

pakkaus converge.attribute

UserPropertyInterface

UserPropertyInterface:lla määritetään ne ominaisuudet, jotka jokaisen käyttäjäolioon liitettävien ominaisuuksien toteutusluokkien on tarjottava. Tällaisia ominaisuuksia ovat kaikki käyttäjän ulkomaailman kontekstia kuvaavat tiedot esimerkiksi käyttäjän paikkatieto ( ''paikannus''=''Helsinki,Kallio,Toinen Linja 10'' ) tai päätelaitteen saavutettavuus ( ''GSM-OnLine''=''false'' ).
Määrittely
:
interface UserPropertyInterface
Metodit
:


AttributeInterface

AttributeInterface:lla määritetään ne ominaisuudet, jotka jokaisen attribuuttien käsittelyn toteuttavien luokkien on tarjottava.
Määrittely
:
interface AttributeInterface extends XMLContentInterface
Metodit
:


MessageAttributeInterface

MessageAttributeInterface:lla määritetään kaikki ne ominaisuudet, jotka viestiolioon liitettävien attribuuttiolioiden toteutusluokkien on tarjottava.
Määrittely
:
interface MessageAttributeInterface extends AttributeInterface
Metodit
:


ContextModelAttributeInterface

ContextModelAttributeInterface:lla määritetään ne ominaisuudet, jotka kontekstimalliolioon liitettävien attribuuttiolioiden toteutusluokkien on tarjottava.
Määrittely
:
interface ContextModelAttributeInterface extends AttributeInterface
Metodit
:

AttributeLoader

AttributeLoader-luokalla ladataan (tarvittaessa dynaamisesti) AttributeInterface -rajapinnan toteuttavia luokkia järjestelmän käyttöön.
Määrittely
:
class AttributeLoader
Metodit
:

Rajapinta tiedonhakumoduulille

Ytimen tiedonhakumoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Rajapinta asiakasmoduulille

Ytimen asiakasmoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Tiedonhakumoduuli

Tiedonhakumoduuli huolehtii yhteyksistä muihin Internetin palvelimiin. Moduuli käyttää hyväkseen JavaMail- ja Java Secure Socket Extension -paketteja (katso http://java.sun.com/products/javamail/ ja http://java.sun.com/products/jsse/). Järjestelmän ydin kutsuu tiedonhakumoduulia kun käyttäjälle saapuneet uudet viestit halutaan noutaa, ja viestit noudettuaan tiedonhakumoduuli muuttaa ne järjestelmän sisäiseen muotoon ja välittää ne järjestemän ytimelle jatkokäsittelyä varten.

Luokat

Pakkaus converge.service

Kuva 3: Tiedonhakumoduulin luokkakaavio
\includegraphics[height=0.29\textheight]{graphics/suunnittelu_service.eps}


DataSource

DataSource on abstrakti yläluokka kaikille tiedonlähteille. Luokka tarjoaa aliluokilleen joitakin tiettyjä yleisiä metodeja, mutta suurin osa metodeista pitää tehdä tiedonlähdekohtaisesti. DataSource-luokasta ei tehdä koskaan ilmentymiä, ainoastaan sen aliluokista.

Määrittely
:
public abstract class DataSource
implements converge.kernel.XMLContentInterface
Kentät
:
Metodit
:


IMAP

IMAP on DataSource-luokan aliluokka ja laajentaa DataSourcea toteuttamalla tuen IMAP-postilaatikoille.
Määrittely
:
public class IMAP
extends DataSource
Konstruktorit
:
Kentät
:
Metodit
:


HTTP

HTTP hakee tiedostoja HTTP-protokollan avulla, käytetään ensisijaisesti liitetiedostojen hakemiseen.
Määrittely
:
class HTTP
Metodit
:


SMTP

SMTP hoitaa sähköpostiviestien lähettämisen.
Määrittely
:
public class SMTP
Metodit
:


Message

Message sisältää viestin järjestelmän sisäisessä muodossa.
Määrittely
:
public class Message
implements converge.kernel.XMLContentInterface
Konstruktorit
:
Kentät
:
Metodit
:


Email

Email on luokka, joka osaa muuntaa saamansa Internetin sähköpostiviestin järjestelmän sisäiseen muotoon.
Määrittely
:
public class Email
Metodit
:


Attribute

Attribute on abstrakti yliluokka muille Attribute-sarjan luokille. Yksi Attribute-sarjan aliluokan ilmentymä pitää sisällään yhden viestin attribuutin (lähettäjä, otsikko, lähetysaika, tärkeys, viestityyppi). Erityyppisiä attribuutteja varten luodaan omia aliluokkia Attributesta, esim. merkkijonoja varten on luokka AttributeString.
Määrittely
:
public abstract class Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Kentät
:
Metodit
:

AttributeString

Attribute-luokan aliluokka, joka osaa käsitellä merkkijonoja.
Määrittely
:
public class AttributeString
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributeDate

Attribute-luokan aliluokka, joka osaa käsitellä päivämääriä (esim. viestin lähetysaika).
Määrittely
:
public class AttributeDate
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributePriority

Attribute-luokan aliluokka, joka osaa käsitellä viestin mukana tullutta Priority-arvoa (normal, high, low).
Määrittely
:
public class AttributePriority
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:

AttributePrecedence

Attribute-luokan aliluokka, joka osaa käsitellä viestin mukana tullutta Precedence-arvoa (bulk, normal, priority ym.)
Määrittely
:
public class AttributePrecedence
extends Attribute
implements converge.attribute.MessageAttributeInterface,
converge.attribute.ContextModelAttributeInterface
Konstruktorit
:
Metodit
:


Attachment

Kaikista liitetiedostoista tallennetaan tietokantaan ainoastaan liitetiedoston osoite. Jos viestin mukana tulee perinteinen liitetiedosto, se korvataan pointterilla IMAP-postilaatikkoon, jolloin URLiksi tulee esim. imap://kayttaja@palvelin/msgid/liitenro.

Jos viestin liitetiedostona tulee määrätynmuotoinen osoitteen sisältämä tekstitiedosto, asetetaan viestin liitetiedoston osoitteeksi saapunut osoite. Tekstitiedosto noudattaa mm. Internet Explorerin käyttämää url-tiedostomuotoa.

[InternetShortcut]
URL=http://miuku.net/
Modified=10DA2746B38FC2015C

Määrittely
:
public class Attachment
extends Thread
implements converge.kernel.XMLContentInterface
Konstruktorit
:
Kentät
:
Metodit
:


AttachmentAttributes

Tietovarasto liitetiedoston ominaisuuksille.
Määrittely
:
public class AttachmentAttributes
Konstruktorit
:
Kentät
:
Metodit
:


ConvergeSSLSocketFactory

Käytetään SSL-IMAP -yhteyksissä.
Määrittely
:
class ConvergeSSLSocketFactory
Konstruktorit
:
Metodit
:


ConvergeTrustManager

Käytetään SSL-IMAP -yhteyksissä.
Määrittely
:
class ConvergeTrustManager implements X509TrustManager
Metodit
:

Rajapinta järjestelmän ytimelle

Tiedonhakumoduulin järjestelmän ytimelle tarjoamat rajapinnat löytyvät seuraavista luokista:

Rajapinta asiakasmoduulille

Tiedonhakumoduulin asiakasmoduulille tarjoamat rajapinnat löytyvät seuraavista luokista:

Asiakasmoduuli

Asiakasmoduuli toimii välittäjänä järjestelmän ytimen ja erilaisten asiakasohjelmien tai päätelaitteiden välillä. Jokaista tuettua asiakasohjelmatyyppiä kohden on asiakasmoduulissa oma komponentti, joka osaa kaikki tarvittavat protokollat joiden avulla kyseisen ohjelman tai päätelaitteen kanssa voidaan kommunikoida.

Ohjelmointirajapinta jota vasten uudentyyppisiä asiakasohjelmaluokkia voidaan rakentaa, koostuu ClientHandler -yläluokasta ja ClientManager-luokan tarjoamista metodeista.

Huomautus: asiakasmoduulin ne osat jotka toteuttavat tämän prototyypin ainoan asiakasohjelmatyypin, WWW-asiakasohjelman, on kuvattu seuraavassa luvussa.

Kuva 4: Asiakasmoduuli
\includegraphics[height=0.7\textwidth]{graphics/clientmanager.eps}

Luokat

Pakkaus converge.clientmanager

ClientManager

Järjestelmässä on yksi ClientManager-ilmentymä, jonka tehtävä (tässä prototyypissä) on mm. pitää kirjaa aktiivisista käyttäjistä, hoitaa sessionhallintaa ja välittää User-olioita asiakasohjelmaluokille.

Ytimelle tarjottavat palvelut

Erityyppisille asiakasohjelmaluokille tarjottavat palvelut

Muut metodit

ClientHandler

ClientHandler on abstrakti yläluokka kaikentyyppisten asiakasohjelmien käsittelijöille. Siinä on määritelty joitakin metodeja ja muuttujia, jotka ovat yhteisiä kaikille aliluokille, mutta jokainen aliluokka totetuttaa omalla tavallaan.

Metodit

Asiakasohjelma

Järjestelmän prototyyppiä varten tehdään WWW:ssä toimiva asiakasohjelma. Tämä ohjelma sisältää varsin rajoitetun määrän toiminnallisuutta, eikä esimerkiksi käyttöliittymän suunnittelussa ole nähty siinä määrin vaivaa kuin ''oikean'' asiakasohjelman kohdalla pitäisi tehdä. Sen avulla on kuitenkin mahdollista käyttää järjestelmän yleisimpiä toimintoja.

Asiakasmoduuliin kuuluu Javalla tehty palvelin, joka kuuntelee jotakin TCP/IP -porttia ja ymmärtää HTTP-protokollaa. Asiakasohjelmana toimii siis oikeastaan WWW-selain, jolla käyttäjä voi suoraan ottaa yhteyden järjestelmään. Tässä luvussa ei käsitellä varsinaista asiakasohjelmaa (WWW-selainta), vaan esitellään ne järjestelmän (asiakasmoduulin) osat, jotka mahdollistavat WWW-selaimen käyttämisen asiakasohjelmana.

HTTP-palvelimen toiminnallisuutta toteuteta itse, vaan prototyypissä käytetään valmista webcore1-nimistä open source Java-palvelinta. Kaikki dynaamista HTML:ää tuottavat luokat toteuttavat webcore-järjestelmään kuuluvan WebRequestable -rajapinnan. Webcoren toimintaa ei tässä dokumentissa kuitenkaan tarkemmin selitetä, sillä yksittäisen asiakasohjelmatyypin toteutus ei ole koko järjestelmän kannalta kovin oleellista.

Luokat

WebClientHandler

WebClientHandler on ClientHandler-luokan aliluokka. Tämä on prototyypin ainoa luokka joka mahdollistaa järjestelmän käytön jollain tietyllä päätelaiteella / asiakasohjelmalla, tässä tapauksessa WWW-selaimella.

Tässä toteutuksessa WebClientHandlerilla on vain muutama tehtävä; se huolehtii webcore-palvelimen käynnistyksestä ja lisäksi tarjoaa ClientManagerille (ja sitä kautta ytimelle) alkeellisen toteutuksen viestin lähettämisestä. (WWW-asiakkaalle ei varsinaisesti voida suoraan lähettää viestiä, vaan kaikki toiminta tapahtuu asiakasohjelman aloitteesta. WebClientHandler tarjoaa tässä metodin, joka kertoo onko kyseisellä käyttäjälle uusia viestejä; HTML:ää tuottavat luokat voivat lisätä tämän tiedon selaimelle palautettavaan HTML-sivuun.)

ClientManagerille tarjottavat palvelut

Webcore-luokille tarjottavat palvelut

Muut metodit

HTML:ää tuottavat webcore-luokat

Nämä luokat huolehtivat tietynlaisten sivujen luomisesta (generoivat siis HTML:ää) ja palauttamisesta varsinaiselle asiakasohjelmalle eli WWW-selaimelle. Muutenkin suurin osa asiakasmoduulin toiminnallisuudesta löytyy näistä luokista.

Sessionhallinta hoidetaan HTTP-''keksien'' (cookie) ja yksilöllisten session-id -tunnusten avulla. Sisäänkirjautumisen jälkeen jokainen selaimelta tuleva HTTP-pyyntö sisältää session-id:n, ja pyynnön käsittevä webcore-luokka kutsuu ClientManagerin getUserBySessionId -metodia, joka palauttaa session-id:tä vastaavan User-olion. Tämän jälkeen kyseinen webcore-luokka voi suoraan käyttää User-oliota esimerkiksi listatakseen käyttäjän tietyn näkymän viestit, tai tehdäkseen käyttäjän pyytämiä muutoksia tiettyyn profiiliin tai kontekstimalliin.



Lista webcore-luokista

Login - sisään- ja uloskirjautumiseen liittyvät asiat, etusivu
Profile - profiilien luominen, muokkaaminen ja poistaminen
ContextModel - kontekstimallien luominen, muokkaaminen ja poistaminen
Main - sisäänkirjautumisen jälkeinen pääsivu, lista kaikista näkymistä
View - yhden näkymän sisältö
Message - viestin näyttäminen
Send - viestin kirjoittaminen ja lähetys
Settings - asetusten muokkaaminen (sisältää tässä prototyypissä myös ainoan tiedonlähteen, eli IMAP-palvelimen, asetukset)
ContactList - kontaktilistan muokkaaminen
HtmlUtils - tänne on koottu useissa luokissa tarvittavia metodeita, esimerkiksi sellaisen HTML:n tuottaminen, joka lisätään useille tai kaikille tuotettaville sivuille

Periaattessa kaiken HTML:n voisi generoida esimerkiksi vain yhdessä luokassa; tämä toiminnallisuus on jaettu useampaan luokkaan lähinnä selkeyden vuoksi.

Käyttöliittymä

Sisäänkirjautuminen

Jotta käyttäjä voi kirjautua sisään järjestelmään, tulee hänen olla kirjautunut järjestelmän käyttäjäksi.
Sisäänkirjautuminen tapahtuu menemällä järjestelmän aloitussivulle. Aloitussivulla käyttäjä syöttää olemassa olevan käyttäjätunnuksen Name-kenttään sekä käyttäjätunnusta vastaavan salasanan Password-kenttään. Jos käyttäjätunnus ja salasana ovat oikeat, käyttäjä siirtyy Converge-systeemin pääsivulle. Jos taas käyttäjätunnus tai sitä vastaava salasana on väärin, kehotetaan käyttäjää tarkastamaan käyttäjätunnuksensa ja syöttämään salasanansa uudelleen.

Uloskirjautuminen

Käyttäjä kirjautuu järjestelmästä ulos painamalla käyttöliittymän logout-linkkiä. Tämän jälkeen järjestelmä kirjaa käyttäjän ulos ja käyttäjälle avautuu palvelun aloitussivu.

Vastaanotettujen viestien käsittely

Jotta käyttäjä pääsee käsittelemään vastaanottamiaan viestejään, on hänen ensin kirjauduttava sisään järjestelmään.

Viestin lukeminen

:
Käyttäjä pääsee lukemaan viestejään valitsemalla ensin näkymän, josta haluaa viestit lukea. Näkymä valitaan aloitussivun pudotusvalikosta (views). Tämän jälkeen painamalla Go to -nappulaa käyttäjälle avautuu näyttö, jossa kyseisen näkymän sisältämät viestit ovat. Näistä viesteistä käyttäjä voi valita viestin luettavaksi painamalla kyseistä viestin otsikkoa.

Viestin poistaminen

:
Kun käyttäjä haluaa poistaa tietyn viestin tietystä näkymästä, menee hän ensin siihen näkymään, josta haluaa viestin poistaa. Tämän jälkeen käyttäjä painaa Delete-painiketta viestin otsikon vieressä, jolloin viite viestiin poistetaan tästä näkymästä.
Jos viestiin ei jää enää yhtään viitettä mihinkään näkymään, alkuperäinen viesti poistetaan lopullisesti.

Liitetiedostojen käsittely

Koska käyttäjälle toimitettavat viestit eivät sisällä itse liitetiedostoa, vaan pointterin siihen, tarjoaa järjestelmä käyttäjälle seuraavia keinoja liitetiedostojen käsittelyyn.

Liitetiedoston noutaminen

:
Käyttäjä voi lukea viestin sisältämän liitetiedosta avaamalla sen viestin, joka sisältää halutun liitetiedoston. Tässä viestissä on linkki, jota painamalla kyseinen liitetiedosto noudetaan käyttäjälle sen alkuperäisestä sijainnista.

Liitetiedoston poistaminen

:
Liitetiedostojen erillistä poistamista ei toteuteta, vaan pointterit liitetiedostoihin ovat olemassa niin kauan, kuin alkuperäinen, liitetiedoston sisältänyt viesti on olemassa.

Profiilien käsittely

Jotta käyttäjä pääsee muokkaamaan profiileitaan, on hänen ensin kirjauduttava sisään järjestelmään.

Profiilin luominen

:
Käyttäjä luo uuden profiilin siirtymällä Converge Systemin pääsivulta Profiles-sivulle, josta painaa Add New Profile -painiketta. Tämän jälkeen käyttäjälle avautuu lomake, jossa hän voi valita jo olemassaolevia ja luoda uusia sääntöjä liitettäväksi luotavaan profiiliin tai määrittää, milloin profiili on aktiivinen. Lopuksi käyttäjä tallentaa uuden profiilinsa.

Profiilin muokkaaminen

:
Käyttäjä muokkaa olemassa olevia profiilejaan siirtymällä Converge Systemin pääsivulta Profiles-sivulle ja valitsemalla sieltä pudotusvalikosta, profiilin, jota haluaa muokata. Tämän jälkeen käyttäjälle avautuu lomake, jossa ovat profiiliin liittyvät säännöt. Tämän jälkeen käyttäjä voi muokata tai poistaa sääntöjä, lisätä kokonaan uusia sääntöjä tai muuttaa aikaa, jolloin profiili on aktiivinen. Tehtyään haluamansa muutokset profiiliin, käyttäjä tallentaa profiilin.

Profiilin poistaminen

:
Profiilien poistaminen tapahtuu siirtymällä Converge Systemin pääsivulta Profiles-sivulle, josta käyttäjä valitsee profiilin, jonka haluaa poistaa. Tämän jälkeen käyttäjä painaa Delete-painiketta, jolloin profiili poistetaan lopullisesti järjestelmästä. Käyttäjä voi poistaa vain olemassaolevia profiileita, jotka ovat hänen omiaan.

Kontekstimallien käsittely

Jotta käyttäjä pääsee käsittelemään kontekstimallejaan, on hänen ensin kirjauduttava sisään järjestelmään.

Kontekstimallin luominen

:
Käyttäjä luo uuden kontekstimallin siirtymällä Converge Systemin pääsivulta Contextmodels-sivulle, josta painaa Add New Contextmodel -painiketta. Tämän jälkeen käyttäjälle avautuu lomake, jossa hän voi valita haluamiaan attribuutteja kuvaamaan uuttaa kontekstimalliaan. Valitessaan haluamansa attribuutin, käyttäjä määrittää sille arvon tai arvovälin, joka kuuluu luotavaan kontekstimalliin. Valittuaan tarvittavat attribuutit kuvaamaan kontekstimallia, käyttäjä tallentaa kontekstimallin.

Kontekstimalli muokkaaminen

:
Kontekstimallin muokkaaminen tapahtuu valitsemalla Converge-systemin pääsivulta valikosta Contextmodels muokattavaksi haluttu kontekstimalli ja painamalla Edit-painiketta. Tämän jälkeen käyttäjälle avautuu vastaava lomake, kuin kontekstimallia luotaessa, mutta johon on valmiiksi täytetty käyttäjän kyseistä profiilia kuvaavat attribuutit. Käyttäjä voi muokata näiden attribuuttien arvoja tai arvovälejä sekä poistaa jo olemassaolevia tai lisätä uusia attribuutteja. Muokattuaan kontekstimallin mieleisekseen käyttäjä tallentaa kontekstimallin.

Kontekstimallin poistaminen

:
Käyttäjä poistaa olemassa olevan kontekstimallin siirtymällä Converge Systemin pääsivulta Contextmodels-sivulle ja sieltä valitsemalla poistettavan kontekstimallin ja painamalla Delete-painiketta.

Muuta huomioitavaa

Koodin ulkoasu

Koodin nimeämisessä, kommentoinnissa sekä muissa ohjelmointiteknisissä asioissa noudatetaan pääsääntöisesti Catharina Candolinin Java Style Guide -dokumenttia2.

Muutama erityishuomio:

Kieli

Koodin kieli on englanti, kommentit kirjoitetaan kuitenkin suomeksi.

Sisennys

Ei käytetä tabia. Sisennys tapahtuu 4:llä välilyönnillä.

Kommentointi

Käytetään Javadoc-tyylistä kommentointia tavalliseen tapaan jokaisen luokan, metodin ja muuttujan kohdalla. Myös muita selventäviä kommentteja lisätään koodiin runsaasti. Java-kielen normaaleja ominaisuuksia ei kuitenkaan kommentoida:
i++; // Lisätään i:hin 1

Varataan /* ...*/ -kommentit koodin väliaikaista poistamista varten; varsinaiseen kommentointiin käytetään siis // -merkintää.

Aaltosulkeet

Aaltosulkeita käytetään näin:

public void example(int i){
   ...
}

AttributeInterface -rajapinnan toteutusesimerkkejä


ContextModelValueAttribute

ContextModelValueAttribute on attribuutin toteutusluokka, joka on tarkoitettu viestiolioon liitettäväksi (implements MessageAttributeInterface) ja sen toiminnallisuus on tarkoitettu käsittelemään kontekstimalliolion itselleen määrittelemää arvoa, joka kuvastaa prosentuaalisesti ( kokonaislukuna 0-100 ) vertailun onnistumista.
Määrittely
:
class ContextModelValueAttribute implements MessageAttributeInterface
Konstruktorit
:
Metodit
:

AttributeStringArray

AttributeStringArray-luokka on toteutus luokka viestiolioon liitettävillä ( implements MessageAttributeInterface ) attribuuteille, joiden arvotietosisältö voi olla moniosainen tekstiarvo.
Määrittely
:
class AttributeStringArray implements MessageAttributeInterface
Konstruktorit
:
Metodit
:

Tästä dokumentista ...

Convergence of messaging

Tämä dokumentti tehtiin ohjelmistolla LaTeX2HTML translator Version 2002 (1.62)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, Ross Moore, Mathematics Department, Macquarie University, Sydney.

Komentoriviargumentit olivat:
latex2html -split 0 suunnitteludokumentti.tex.

Komennon ajoi Joni J Karppinen 2002-12-10


Footnotes

...webcore1
Lisätietoja osoitteesta http://www.hunter-lovell.org/webcore/doc/overview.html
... -dokumenttia2
http://www.cs.hut.fi/%7Ecandolin/java/styleguide.html

next_inactive up previous
Joni J Karppinen 2002-12-10