\documentclass[12pt,a4paper]{article}
\usepackage[finnish]{babel}
\usepackage[dvips]{graphicx}
\usepackage{t1enc}
\usepackage{latexsym}
\begin{document}

%%%%%%%%%%%%% KANSILEHTI %%%%%%%%%%%%%%%%

\begin{titlepage}
\vspace*{1.8cm}
\noindent
\begin{flushleft}
\setlength{\baselineskip}{2\baselineskip}
{\Huge \bf JouTo} \\
{\large \bf Toimittajan ty�v�line} \\
\vspace{1cm}
{\Large \bf Toteutusdokumentti} \\
{\large Versio 0.3}
\end{flushleft}
\vspace{2cm}

\noindent

\vspace{\fill}
\vspace{2.5cm}
\begin{tabbing}
mmmmmmmmmmmmmmmmm\= Projektiryhm�mmm\= Helena Ahonen-Mykam\= \kill
\> 17.4.2001 \\
\> {\sc Helsingin yliopisto} \\
\> Tietojenk�sittelytieteen laitos \\
\> Ohjelmistotuotantoprojekti, kev�t 2001, ryhm� 3\\
\> Projektiryhm�: \> Petri Hellemaa (PH)\\
\>                \> Antti Koskinen (AK)\\
\>                \> Lari Laine (LL)\\
\>                \> Jarno Saarto (JS)\\
\>                \> Eija Teitto (ET)\\
\>                \> Harri Tuuloskoski (HT)\\
\> Ohjaaja:       \> Kim Viljanen\\
\> Vastuuhenkil�: \> Raine Kauppinen\\
\> Asiakkaat:     \> Helena Ahonen-Myka\\
\>                \> Greger Lind�n\\
\end{tabbing}
\end{titlepage}

\setlength{\parindent}{0pt}
\setlength{\parskip}{1.0ex plus 0.5ex minus 0.2ex}
\advance\textheight by 15mm
\advance\textwidth by 10mm
\hoffset=-4mm
\advance\hsize by 10mm
\pagestyle{empty}
\markright{}

%%%%%%%%%%%%% VERSIOHISTORIA %%%%%%%%%%%%%%%%

{\large \bf Dokumentin versiohistoria}
{\small
\begin{tabbing}
00.0m\= 00.00.0000mi\= \kill
0.1 \> 6.4.2001 \> Ensimm�inen hahmotelma (AK)\\
0.2 \> 12.4.2001 \> Liitetty yleiskuvaus ja muutokset suunnitteluun (AK)\\
0.3 \> 17.4.2001 \> Liitetty muutamat luokkakuvaukset (AK)\\
\end{tabbing}

\newpage
\tableofcontents
\newpage

\pagestyle{myheadings}
\markright{}
\setcounter{page}{1}


%%%%%%%%%%%%%%%%%%%%%%%ASIASIS�LT�

%%%%%%%%% JOHDANTO %%%%%%%%%

\section{Johdanto (AK)} \label{Johdanto}

T�ss� kappaleessa k�yd��n l�pi t�m�n dokumentin tarkoitus ja dokumentissa k�ytett�vien m��ritelmien ja lyhenteiden kuvausta. Johdanto-luvusta l�ytyy my�s viitteet sek� dokumentin rakenteen selvitys.

\subsection{Dokumentin tarkoitus}

T�ss� toteutusdokumentissa esitellaan JouTo-ohjelmistotuotantoprojektin tuotteena syntyv�n uutistoimittajan ty�v�lineen toteutus. JouTo on lyhenne englannin kielen sanoista "A Journalist's Tool".

\subsection{M��ritelm�t, termit, lyhenteet}\label{M��ritelm�t, termit, lyhenteet}

{\small
\begin{description}
\item[CSS] Cascading Style Sheets, W3C:n kehitt�m�, suosittu
HTML- ja XML-dokumenttien ulkoasun m��rittelyyn tarkoitettu kieli. \\
{\footnotesize Lis�tietoja: {\tt http://www.w3.org/Style/CSS/}}
\item[DoReMi] Document Management, Information Retrieval, Text and Data Mining.
TKTL:n tutkimusryhm�, joka vet�� TYTTI-projektia. \\
{\footnotesize Lis�tietoja: {\tt http://www.cs.helsinki.fi/research/doremi/}}
\item[DTD] Document Type Definition, rakenteisten dokumenttien rakenteen m��rittely. \\
\item[EPS] Encapsulated PostScript, kehystetty versio PostScript-kielisest�
ohjelmasta. Ohjelmatiedostoon lis�tty kehys m��ritt�� rajat tiedoston
sis�ll�lle ja mahdollistaa sen sijoittamisen haluttuun kohtaan sivua.
\item[HTML] Hypertext Markup Language, WWW-sivujen sis�ll�n
kuvauksessa k�ytetty koodaus. \\
{\footnotesize Lis�tietoja: {\tt http://www.w3.org/pub/WWW/MarkUp/}}
\item[IPTC] International Press Telecommunications Council, kansainv�linen yhteisty�elin,
joka organisoi uutisten m��rittely� ja ryhmittely�.\\
{\footnotesize Lis�tietoja: {\tt http://www.iptc.org/}}
\item[Java] Sunin kehitt�m� ohjelmointikieli ja j�rjestelm�riippumaton
ajoymp�rist�. \\
{\footnotesize Lis�tietoja: {\tt http://www.sun.com/java/}}
\item[Javadoc] Sunin kehitt�m� java-koodin dokumentointikieli\\
{\footnotesize Lis�tietoja: {\tt http://www.sun.com/java/}}
\item[Java SDK] Sunin kehitt�m� Java-ohjelmointiymp�rist�.\\
{\footnotesize Lis�tietoja: {\tt http://www.javasoft.com/products/}}
\item[JDBC] Java Database Connectivity, Java-kielen rajapinta tietokantojen k�ytt��n.
\item[NITF] News Industry Text Format, toimittajien kehitt�m� ja standardoima
XML-pohjainen uutisartikkelien m��rittelykieli.
{\footnotesize Lis�tietoja: {\tt http://www.nitf.org}}
\item[PostScript] Adoben kehitt�m� suosittu sivunkuvauskieli.
Tulostettava sivu voidaan l�hett�� PostScript-kirjoittimelle tiiviin�
PostScript-ohjelmana tilaaviev�n raakadatan sijaan.
\item[TKTL] Helsingin yliopiston tietojenk�sittelytieteen laitos. \\
{\footnotesize Lis�tietoja: {\tt http://www.cs.helsinki.fi}}
\item[TYTTI] Tietoty�l�isen ty�asema. Vuosina 2000-2002 k�ynniss�
oleva tutkimusprojekti Helsingin yliopiston tietojenk�sittelytieteen
laitoksella, rahoittajina TEKES sek� viisi
suomalaisyrityst�: Nokia, Alma Media, Sanoma-WSOY, Vaisala ja
Lingsoft. TYTTI-projektin vastuuhenkil� Helena Ahonen-Myka ja
projektip��llikk� Greger Lind�n toimivat JouTo-projektin
asiakkaina. \\
{\footnotesize Lis�tietoja: {\tt http://www.cs.helsinki.fi/research/doremi/TYTTI/index.html}}
\item[W3C] World Wide Web Consortium, kansainv�linen yhteisty�elin,
joka koordinoi WWW-tekniikan ja -standardien kehityst�. \\
{\footnotesize Lis�tietoja: {\tt http://www.w3.org/pub/WWW/Consortium/}}
\item[WWW] World-Wide Web, Internetiss� toimiva palvelu, joka
mahdollistaa tekstin ja kuvien jakamisen helposti ja edullisesti
verkon lukemattomille k�ytt�jille. WWW:ss� aineisto jaetaan
sivuihin, jotka sijoitetaan WWW-palvelimelle tavallisina tiedostoina
ja hakemistoina.
\item[XML] Extensible Markup Language, W3C:n kehitt�m�
rakenteisten dokumenttien m��rittelykieli. \\
{\footnotesize Lis�tietoja: {\tt http://www.w3.org/XML/}}
\item[XSL] Extensible Stylesheet Language, W3C:n kehitt�m�
XML-dokumenttien ulkoasun m��ritykseen tarkoitettu kieli. \\
{\footnotesize Lis�tietoja: {\tt http://www.w3.org/Style/XSL/}}
\end{description}
}

\subsection{Viitteet}\label{Viitteet}

{\small
\begin{description}
\item{NITFDTD} News Industry Text Format DTD version 2.5 8/2000,\\ {\tt http://www.nitf.org}
\item{HTTP-protokolla} Hypertext Transfer Protocol -- HTTP/1.1,\\ {\tt ftp://ftp.isi.edu/in-notes/rfc2616.txt}
\end{description}
}

\subsection{Dokumentin rakenne}\label{Dokumentin rakenne}

\newpage

\section {J�rjestelm�n yleiskuvaus} \label{J�rjestelm�n yleiskuvaus}

Luvussa kuvataan j�rjestelm�n yleinen toiminta ja sen
k�ytt�j�t sek� esitell��n millaisissa ymp�rist�ss� j�rjestelm�
on toimii.

\subsection {Yleinen toiminta} \label{Yleinen toiminta}

Ohjelmiston arkkitehtuuri on asiakas-palvelin pohjainen. 
Asiakaskoneissa py�ritett�v� sovellus vaatii Pentium-teholuokan koneen,
jossa on toimiva tietoliikenneyhteys. Palvelimen puolen
tehovaatimukset on esitetty m��rittelydokumentissa kappaleessa 7.2.
\emph{Palvelimen suorituskyky}. Toimintaynp�rist�ksi oletetaan
toimituksen sis�inen verkko.

Asiakkaan puolen ohjelmisto on WWW-selaimessa toimiva Java-sovelma 
(applet), ja palvelimen puolen ohjelmisto (servlet) huolehtii tietojen 
tallennuksesta sek� latauksesta tietokannasta.

\subsection {K�ytt�j�t} \label{k�ytt�j�t}

Jouto-projektin editorin k�ytt�ji� ovat eri uutisalueiden toimittajat. 
Uutistoimittajien teht�viin nykyisin kuuluu varsinaisen toimittajan ty�n
lis�ksi my�s artikkelien kirjoitus ja muokkaus s�hk�iseen muotoon.
Editori-osa muokkaa k�ytt�liittym�n valitun artikkelin mukaisesti ja
huolehtii ett� k�ytt�j� voi luoda vain valitun artikkelin mukaisia
rakenteita. T�t� ty�t� varten voidaan k�ytt�� JouTo-projektin tuotetta, 
jonka k�ytt�minen ei edellytet� suurta tietoteknist� osaamista 
toimittajilta. Editori-osa toimii rajapintana k�ytt�j�n ja varsinaisen 
ohjelmiston toiminnan v�lill�.

Ohjelmalla tuotettujen artikkeleiden k�ytt�j�piiriin kuuluu my�s 
yll�pitohenkil�it�. He voivat hakea toimittajien kirjoittamia
artikkeleita tietokannasta ja taittaa ne lehteen sopivaksi sek� 
suorittaa muita jatkotoimenpiteit�. Yll�pit�henkil�t voivat my�s 
vastata artikkelien DTD:eist�. N�it� kaikkia toimintoja ei toteuta 
tuotteemme editorilla vaan niit� voidaan k�ytt�� esimerkiksi 
tietokannasta k�sin.

JouTo-j�rjestelm�n yll�pito olisi l�hinn� tietokannan yll�pitoa. 
J�rjestelm�n yll�pit�j�n k�ytt�tapauksia tukevia ominaisuuksia ei
kuitenkaan toteuteta.

Niit� olisivat ainakin:

\begin{itemize}
\item k�ytt�profiilien lis�ys, muokkaus ja poisto
\item vanhentuneiden artikkelien tuhoaminen
\item dokumenttityyppim��rittelyjen lis�ys, muokkaus ja poisto
\end{itemize}

\subsection {Toteutusymp�rist�} \label{Toteutusymp�rist�} 

Demoversio ohjelmistosta toimi Helsingin yliopiston 
tietokonej�rjestelm�ss� sek� Linux- ett� Windows-ymp�rist�iss�,
jossa ohjelmiston kehitt�minen on toteutettu. Demoversio k�ytt�� 
tietokantaa, joka on Oracle 8-pohjainen ja sijaitsee Helsingin 
Yliopiston atk-keskuksen \emph{kontti}-\-tieto\-kanta\-palvelimella. 

Ohjelmistoa k�ytet��n WWW-selaimen kautta. Ohjelmiston asiakkaan 
puolen k�ytt�liittym�, editori, toteutettiin  WWW-selaimessa toimivana 
graafisena Java applettina. Appletissa k�ytet��n Javan version 
1.2 ominaisuuksia ja valmiita komponentteja, kuten Swing-kirjastoa. 
Lis�ksi k�ytet��n JouTo-projektin ulkopuolella toteutettuja 
Java-kirjastoja, Xerces XML-parseria, Mark Wutkan tekem�� 
DTD-parseria ja aelfred-parseria.  N�iden lis�ksi ohjelmistossa luodaan 
omia tietorakenteita sek� XML-puun k�sittely� ett� varsinaisen
artikkelin muokkausta varten.

Tietokanta -operaatioista ja tietokannan k�sittelyst� huolehtivat
 JouTo-projektissa luodut Java Servlet-komponentit. N�m�
komponentit k�ytt�v�t JDBC-rajapintaa tietokannan k�sittelyss�. 
JDBC-tietokantarajapinta kuuluu osana Java 1.2 -standardiin.

\subsection {Toimintaymp�rist�} \label{Toimintaymp�rist�} 

JouTo-projektin editori toimii siin� ymp�sit�ss�, jossa tuotteen
kehitt�minen on toteutettu.

Jos demoversiosta kehitet��n varsinainen tuote, t�ll�in 
toimintaymp�rist�ksi on oletettu toimituksen sis�inen verkko. 
Uutistoimittajat kirjoittavat artikkeleitaan tietokoneen ��rell� usein
toimittajan ty�paikalla, toimituksessa. Toimittajilla on k�yt�ss��n 
tietokoneita, jotka ovat yhteydess� verkon sis�ll� olevaan palvelimeen. 
Artikkelit kirjoitetaan ja muokataan tietokoneella ja tallennetetaan
sek� ladataan palvelimella olevaan tietokantaan. Koska kyseess� on 
tomituksen sis�inen verkko, voimme olettaa yhteyksien olevan 
suojattuja.

\subsection {Asennustiedot} \label{Asennustiedot} 

\subsection {J�rjestelm�n liittyv�t tiedostot ja l�hdekoodi} 
\label{J�rjestelm�n liittyv�t tiedostot ja l�hdekoodi} 

\newpage

%%%%%%%%%%
%\section {J�rjestelm�n yleisarkkitehtuuri}
%
%T�m� luku kuvaa j�rjestelm�n yleisen toimintaperiaatteen.
%
%\subsection {J�rjestelm�n toimintaperiaate}
%
%J�rjestelm�n asiakas-palvelin -mallin mukainen yleisarkkitehtuuri on
%esitetty kuvassa...
%
%\newpage

\section {Suunnitteluun toteutuksen aikana tehdyt muutokset ja rajoitukset}

J�rjestelm�n suunnittelu on kuvattu suunnitteludokumentissa. 
T�ss� luvussa esitell��n toteutuksen aikana suunnitteluun tehdyt
muutokset p��piirteiss��n.

\subsection {Toimintaymp�rist�}

J�rjestelm� suunniteltiin alunperin toimimaan selaimessa toimivana applettina. Toteutuksen aikana huomattiin, ett� Tietojenk�sittelytieteen laitoksen ATK-ymp�rist�n Java Runtime Environment oli v��r�ss� versiossa, eik� tarvittavaa versiota saatu asentumaan. N�in ollen ohjelmaa ei voitu ajaa laitoksen koneiden selaimissa. Ohjelma toteutettiin toimimaan siten my�s omana sovelluksenaan. 

Tietokanta saatiin toimimaan suunniteludokumentissa selvitetyll� tavalla Tietojenk�sittelytieteen tietokantapalvelmilla (db.cs.helsinki.fi).

\subsection {Yleisarkkitehtuuri}

Yleisarkkitehtuurissa ei ole tehty muutoksia. Arkkitehtuuri kuvataan kuvassa \ref{arkkitehtuurikuva}. Yleinen arkkitehtuurikuvaus on esitelty ja selitetty suunnitteludokumentissa. 

\begin{figure}[!h]  
\centering
\includegraphics{taso2.eps} 
\caption{Ohjelmiston arkkitehtuurikuvaus} \label{arkkitehtuurikuva}
\end{figure}

\subsection {Luokkarakenne}

J�rjestelm�n luokkarakenteen muutokset on kuvattu kappaleessa \ref{luokkarakenne} \emph{J�rjestelm�n luokkarakenne}. 

\subsection {DTD:hen tehdyt muutokset}

Suunnitteluvaiheessa p��tettiin toteuttaa JouTo-projektia varten oma DTD, joka on rajoitettu versio NITF v.2.5 DTD:st�. Sovelluksessa k�ytett�v� DTD luotiin JouTo-j�rjestelm�n toimintoja vastaaviksi. Toteutettu DTD on kuvattu liitteess� (Liite \ref{toteutettuDTD}).
 
J�rjestelm�n ideana oli luoda mahdollisuus k�ytt�� my�s muita DTD:eit�. Toteuksen aikana luotiin siten toteutusta DTD:st� viel� rajoitetumpi DTD kolumnien (esim. p��kirjoituksia) varten. My�s t�m� DTD l�ytyy liitteist� (Liite \ref{kolumniDTD}).

\newpage

\section {J�rjestelm�n luokat} \label{luokkarakenne}

T�ss� luvussa esitell��n toteutetun j�rjestelm�n luokat. T�m�n luvun tarkoituksena on k�yd� l�pi vain muutokset jotka tehtiin toteutusvaiheessa. Varsinaiset luokat esitell��n suunnitteludokumentissa.

\subsection{IPTC}\label{IPTC-luokka}

IPTC-luokka on suunnitteluvaiheen j�lkeen lis�tty luokka.
IPTC-luokan teht�v� on tallettaa IPTC-numeroiden ja niiden
kuvausten suhde, sek� eri IPTC-tasojen v�liset suhteet. Jokainen
IPTC-numero talletetaan luokan instanssiin, jossa on tieto
IPTC-numerosta, sen kuvauksesta sek� mahdollisen ylemm�n tason
is�elementin numerosta.

Luokka saa luonnin yhteydess� siihen liittyv�t tiedot, jotka eiv�t
muutu sen elini�n aikana. N�it� tietoja on tarkoitus lukea suoraan
luokan muuttujista UIManager-luokasta.

\subsubsection{Rajapinnat}

Luokan rajapintana toimivat sen julkiset muuttujat, joita
k�sitell��n suoraan. Mit��n erillisi� rajapintametodeja luokassa
ei ole.

\subsubsection{Attribuutit}

{\em public String ownIPTC}
Kyseisen ilmentym�n IPTC-numero.

{\em public String parentIPTC}
Mahdollisen yl�luokan IPTC-numero.

{\em public String iptcString}
T�m�n ilmentym�n IPTC-numeron kuvaus luonnollisella kielell�.

\subsection{Editor}

Editor-luokka on suunnitteluvaiheen j�lkeen lis�tty luokka.
Editor-luokan tarkoituksena on toimia ohjelman k�ynnist�j�n�
luomalla UIManagerista uusi ilmentym� ja asettamalla sen
ominaisuuden halutuiksi. Editor-luokan avulla pystyy ohjelmistoa
ajamaan niin Applettina kuin sovelluksena vain v�h�isin muutoksin
ohjelmakoodiin.

Editor-luokalle ei anneta parametrej�. Luokka tekee varsinaiset
toimensa omassa konstruktorissaan tai init()-metodissaan riippuen
ajetaanko ohjelmaa Applettina vai sovelluksena. Editor-luokka on
JApplet-luokan aliluokka.

\subsubsection*{Editor()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] Luokan konstruktori, joka ajetaan kun ohjelmaa suoritetaan
sovelluksena. Konstruktori k�ynnist�� UIManagerin kutsumalla
createUIManager()- metodia, ja asettaa ohjelmaan tiedot ett� sit�
ajetaan nyt sovelluksena.
\end{description}

\subsubsection*{void createUIManager()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�m� metodi luo uuden ilmentym�n UIManager-luokasta, asettaa sen
koon ja sijainnin sek� ikkunankuuntelijan. K�yt�nn�ss� siis t�m�
metodi siis k�ynnist�� koko ohjelman.
\end{description}

\subsubsection*{void destroy()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�m� metodi huolehtii ohjelman sammuttamisesta ja UIManagerin
luoman ikkunan sulkemisesta. Mik�li ohjelmaa ajetaan sovelluksena,
niin metodi kutsuu lopuksi System-luokan exit()-metodia, joka
aiheuttaa ohjelman lopullisen keskeytyksen.
\end{description}

\subsubsection*{void start()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�m� metodia kutsutaan WWW-selaimen toimesta automaattisesti,
kun Appletti k�ynnistet��n ja sit� ryhdyt��n j�lleen suorittamaan.
Editor-luokan start()-metodi ei sis�ll� mit��n toimintoja.
\end{description}

\subsubsection*{void stop()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�m� metodia kutsutaan WWW-selaimen toimesta automaattisesti,
kun Appletin toiminta pys�ytet��n. Editor-luokan stop()-metodi ei
sis�ll� mit��n toimintoja.
\end{description}
%\subsubsection{Attribuutit}

\subsubsection*{void getParameterInfo()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�m� metodi lukee Appletille annetut parametrit. T�m� metodi
on varattu tulevalle ohjelmiston kehitykselle, eik� sit� k�ytet�
t�ss� vaiheessa mihink��n.
\end{description}
%\subsubsection{Attribuutit}

\subsubsection*{String getAppletInfo()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] Merkkijonon, joka ilmoittaa appletin tiedot
\item[toiminta:] T�m� metodi tarjoaa ulkoisille objekteille mahdollisuuden
tiedustella Appletin ominaisuuksia. T�m� metodi on varattu tulevaa
ohjelman- kehityst� varten, eik� sit� k�ytet� t�ss� vaiheessa
mihink��n.
\end{description}
%\subsubsection{Attribuutit}

\subsubsection*{void init()}
\begin{description}
\item[parametrit:] -
\item[palauttaa:] -
\item[toiminta:] T�t� metodia kutsutaan automaattisesti, kun ohjelmaa ajetaan
Applettina. Metodi kutsuu createUIManager()-metodia, ja asettaa
tiedot, ett� t�l� hetkell� ohjelmaa ajetaan Applettina.
\end{description}

\subsubsection*{void main(String[] args)}
\begin{description}
\item[parametrit:] Merkkijonotaulukko annetuista parametreist�
\item[palauttaa:] -
\item[toiminta:] T�t� metodia kutsutaan automaattisesti, kun ohjelma
k�ynnistet��n sovelluksen�. Se kutsuu tekee Editor-luokasta
(itsest��n) uuden ilmentym�n, ja n�inollen k�ynnist�� oman
konstruktorinsa.
\end{description}

\subsubsection{Attribuutit}

Luokalla ei ole julkisia attribuutteja. Luokalla on yksi sis�inen
attribuutti

{\em private isStandAlone}
Tieto siit� ajetaanko ohjelmaa t�ll� hetkell� Applettina ja
sovelluksena.

\subsection{UIManager}
\subsubsection{Muutetut metodit kuvauksineen}
\subsubsection*{void save()}
\begin{description}
\item[parametrit:] Boolean saveAs, joka kertoo metodille, onko
kyseess� save-, vai saveAs toiminto.
\item[palauttaa:] boolean arvon operaation onnistumisesta.
\item[toiminta:] Sama kuin suunniteltu.
\end{description}

\subsubsection*{void load() -> boolean loadArticle() }
Metodin nimi muutettiin load:sta loadArticleen.
\begin{description}
\item[parametrit:] -
\item[palauttaa:] boolean arvon operaation onnistumisesta.
\item[toiminta:] Sama kuin suunniteltu.
\end{description}

\subsubsection*{Node new() -> Node showCreateNewArticleDialog() }
Metodin nimi muutettiin new:st� showCreateNewArticleDialog:iin.
\begin{description}
\item[parametrit:] Sama kuin suunniteltu.
\item[palauttaa:] Sama kuin suunniteltu.
\item[toiminta:] Sama kuin suunniteltu.
\end{description}

\subsubsection{Muutetut attribuutit kuvauksineen}
{\em TextDialog textDialog -> JDialog dialog} \\
Attribuutin nimi on muutettu.\\\\
{\em TreeManager treeManager -> Treemanager treemanager}\\
Attribuutin nimi on muutettu.\\\\
{\em ClipBoardManager clipBoardManager -> ClipboardManager clipboardmanager}\\
Attribuutin nimi on muutettu.\\\\
{\em int documentID -> int articleID}\\
Attribuutin nimi on muutettu.\\

\subsubsection{Lis�tyt metodit ja attribuutit kuvauksineen}
\subsubsection*{Image getImage(String name)}
\begin{description}
\item[parametrit:] Tagin nimi, joka ilmaisee haettavan kuvan.
\item[palauttaa:] Kahvan haluttuun kuvaan.
\item[toiminta:] Metodi etsii halutun kuvan Pair-listasta, ja palauttaa siihen viitteen.
\end{description}

\subsubsection*{boolean copy(Areaselection selection)}
\begin{description}
\item[parametrit:] Valittu alue bodysta.
\item[palauttaa:] Boolean arvon operaation onnistumisesta.
\item[toiminta:] Metodi k�ytt�� ClipboardManagerin copy-toimintoa.
\end{description}

\subsubsection*{boolean cut(Areaselection selection)}
\begin{description}
\item[parametrit:] Valittu alue bodysta.
\item[palauttaa:] Boolean arvon operaation onnistumisesta.
\item[toiminta:] Metodi k�ytt�� ClipboardManagerin cut-toimintoa.
\end{description}

\subsubsection*{boolean showLoadArticleDialog() }
\begin{description}
\item[parametrit:] -
\item[palauttaa:] Boolean arvon metodin onnistumisesta.
\item[toiminta:] Metodi n�ytt�� k�ytt�j�lle dialogin, jonka avulla
k�ytt�j� voi ladata haluamansa artikkelin. Metodi k�ytt��
loadArticle-metodia dokumentin lataamiseen.
\end{description}

\subsubsection*{boolean showSaveArticleDialog() }
\begin{description}
\item[parametrit:] -
\item[palauttaa:] Boolean arvon metodin onnistumisesta.
\item[toiminta:] Metodi n�ytt�� k�ytt�j�lle dialogin, jonka avulla
k�ytt�j� voi tallentaa artikkelistaa uuden kopion tietokantaan.
Metodi k�ytt�� saveArticle-metodia dokumentin tallentamiseen.
\end{description}

\subsubsection*{void showTextDialog(String text, String header, int dialogType)}
\begin{description}
\item[parametrit:] N�ytett�v� teksti, ikkunan otsikko ja dialogi tyyppi. Dialogityyppi vaihtelee v�lill� 1-3.
\item[palauttaa:] -
\item[toiminta:] Metodi n�ytt�� halutun tyyppisen dialogin.
Dialogit n�ytt�v�t halutun tekstin, ja niiss� on yksi nappi: OK.
\end{description}

\subsubsection*{boolean setButtonsActive(Areaselection selection)}
\begin{description}
\item[parametrit:] Valittu alue bodysta.
\item[palauttaa:] boolean arvon operaation onnistumisesta.
\item[toiminta:] Metodi tutkii selection-muuttujan, clipboardmanager.canCut:in,
clipboardmanager.canCopyn ja clipboardmanager.canPasten
avulla mitk� napit ovat aktiivisia. Se my�s aktivoi tarvittavat
napit k�ytt�liittym�st�.
\end{description}

\subsubsection*{boolean loadDTD(int dtdIdentification)}
\begin{description}
\item[parametrit:] Ladattavan DTD:n tunniste.
\item[palauttaa:] boolean arvon operaation onnistumisesta.
\item[toiminta:] Metodi lataa DTD:n tietokannasta.
\end{description}


\subsubsection{Poistetut metodit ja attribuutit}
UIManagerista on poistettu seuraavat suunnitellut metodit:
\begin{enumerate}
  \item paste (String Text)
  \item setUndoer (Object Reference)
  \item undo()
  \item new()
\end{enumerate}

UIManagerista on poistettu seuraavat suunnitellut attribuutit:
\begin{enumerate}
  \item SaveAsDialog saveAsDialog
  \item OpenDocumentDialog openDocumentDialog
  \item Node bodyRoot
  \item Node headersRoot
  \item Object undoer
\end{enumerate}

\subsection{BodyPanel}\label{BodyPanel}

BodyPanel on toteutettu suunnitteludokumentissa m��ritellyll� tavalla.

\subsection{Body}\label{Body}

Body-komponentti on toteutettu l�hes samanlaisena kuin suunnitteludokumentissa on suunniteltu. L�hinn� muutokset koskeva piirto-osaa. Piirt�minen on toteutettu kolmeen metodiin joista yhdess� k�yd��n puuta l�pi ja kahdessa muussa piirret��n. Toinen suunnitteluun tehty muutos on my�s se ett� attributeDialog ja popupmenu on toteutettu Body-luokan sis�lle, eik� niille ole omia luokkia.

{\bf private Element curParent -> currentNode}

\subsubsection*{void paint(Graphics vg)}

\begin{description}
\item[parametrit:]	Saa parametrin� k�sitelt�v�n solmun ja piirtoalustan.
\item[palauttaa:]		---
\item[toiminta:]		
\end{description}

\subsubsection*{void drawNode(TreeNode node, Graphics g)}

\begin{description}
\item[parametrit:]	Saa parametrin� k�sitelt�v�n solmun ja piirtoalustan.
\item[palauttaa:]		---
\item[toiminta:]		K�y rekursiivisesti l�pi koko XML-puun. Ensin kutsuu drawImage:a joka piirt�� alku tagin. Sen j�lkeen, jos solmulla on lapsia k�yd��n kaikki lapset l�pi kutsumalla t�t� samaa funktiota. Lopuksi kun lapsia ei en�� l�ydy, jos ollaan PCDATA elementiss�, tulostetaan PCDATA:n sis�lt� kutsumalla splitRow-funktiota. T�m�n j�lkeen rekursiosta takaisin palattaessa kutsutaan viel� drawImage:a, joka piirt�� loppu tagin.
\end{description}

\subsubsection*{void drawImage(TreeNode node, boolean start, Graphics g)}

\begin{description}
\item[parametrit:]	Saa parametrin� k�sitelt�v�n solmun, tiedon onko piirrett�v� kuva alku- vai loppukuva ja piirtoalustan.
\item[palauttaa:]		---
\item[toiminta:]		Piirt�� sek� tagi-kuvat ett� li-elementtien numeroinnit ja pallot. Tarkistaa my�s osuuko kursori kyseisen kuvan p��lle, jos osuu muuttaa currentNode-muuttujan sis�lt��.
\end{description}

\subsubsection*{void splitRow(PCData node, Graphics g)}

\begin{description}
\item[parametrit:]	Saa parametrin� k�sitelt�v�n solmun ja piirtoalustan.
\item[palauttaa:]		---
\item[toiminta:]		Rivitt�� parametrin� saadun PCData-elementin sis�lt�m�n tekstin. Tarkistaa my�s kursorinpaikan ja korjaa sit� tarvittaessa. Muuttaa my�s kursorinpaikan mukaan currentNode-muuttujan sis�lt��.  		
\end{description}

\subsection{Communications}

Communications on toteutettu suunnitteludokumentissa m��ritellyll� tavalla.

\subsection{Servletit}

Kaikki servletit on toteutettu suunnitteludokumentissa m��ritellyll� tavalla.

%%%%%%%%%%%%%%%%%%%%%%%%% JATKOKEHITYS
\newpage

\section {Jatkokehitysajatuksia} \label{jatko}

Toteutettu j�rjestelm� on toimiva yhdistyksen WWW-j�rjestelm�n
perusrunko. T�ss� luvussa esitell��n muutamia ajatuksia j�rjestelm�n
jatkokehittelylle.

\subsection {Turvallisuusn�k�kohdat}

\subsection {Yll�pidett�vyys}

\subsection {J�rjestelm�n toiminnot} 

\newpage

%%%%%%%%LIITTEET
\appendix

%%%%%%%%%%%%%%%%%%%% DTD %%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Liite: Toteutettu DTD}\label{toteutettuDTD}
\begin{verbatim}
<!ENTITY % enriched-text '
        #PCDATA
        | location
        | object.title
        | org
        | person
        | a
        | br
        | em
        | q
        '>
<!ENTITY % block.content "p | hl2 | media | ol | ul | pre ">

<!ELEMENT nitf (head, body)>
<!ATTLIST nitf
        version      CDATA    #FIXED    "-//IPTC-NAA//DTD NITF-XML 2.1//EN"
        change.date  CDATA    #FIXED    "4 July 2000"
        change.time  CDATA    #FIXED    "1900"
        >
<!ELEMENT head (title, tobject, docdata)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT tobject (tobject.subject)>
<!ATTLIST tobject
        tobject.type            CDATA   "news"
        >
        <!ELEMENT tobject.subject  EMPTY>
        <!ATTLIST tobject.subject
                tobject.subject.ipr             CDATA           "IPTC"
                tobject.subject.refnum          NMTOKEN         #REQUIRED
                >
<!ELEMENT docdata (
        evloc,
        doc-id,
        date.issue,
        doc.copyright?,
        key-list
        )>
        <!ELEMENT evloc EMPTY>
        <!ATTLIST evloc
                city            CDATA   #IMPLIED
                >
        <!ELEMENT doc-id EMPTY>
        <!ATTLIST doc-id
                id-string       CDATA   #IMPLIED
                >
        <!ELEMENT date.issue EMPTY>
        <!ATTLIST date.issue
                norm            CDATA   #IMPLIED
                >
        <!ELEMENT doc.copyright EMPTY>
        <!ATTLIST doc.copyright
                year            NMTOKEN         #IMPLIED
                holder          CDATA           #IMPLIED
                >
        <!ELEMENT key-list (keyword)*>
                <!ELEMENT keyword EMPTY>
                <!ATTLIST keyword
                        key             CDATA   #REQUIRED
                        >
<!ELEMENT body (body.head, body.content)>
<!ELEMENT body.head (
        hedline,
        byline,
        distributor?,
        abstract
        )>
<!ELEMENT hedline (hl1, hl2*)>
        <!ELEMENT hl1 (%enriched-text;)*>
        <!ELEMENT hl2 (%enriched-text;)*>
<!ELEMENT byline (#PCDATA)>
<!ELEMENT distributor (#PCDATA)>
<!ELEMENT abstract (p)>
<!ELEMENT body.content (%block.content;)*>
<!ELEMENT p (%enriched-text;)*>
<!ELEMENT media (media-reference, media-caption?)>
<!ATTLIST media
        media-type      CDATA #FIXED "image"
        >
        <!ELEMENT media-reference (#PCDATA)>
        <!ATTLIST media-reference
                data-location           CDATA           #REQUIRED
					 mime-type					 CDATA			  #REQUIRED
                >
        <!ELEMENT media-caption (%enriched-text;)*>
<!ELEMENT ol (li)+>
<!ELEMENT ul (li)+>
        <!ELEMENT li (%enriched-text;)*>
<!ELEMENT pre (#PCDATA)>
<!ELEMENT location (#PCDATA)>
<!ELEMENT object.title (#PCDATA)>
<!ATTLIST object.title 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT org (#PCDATA)>
<!ATTLIST org 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT person (#PCDATA)>
<!ATTLIST person 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT a (%enriched-text;)*>
<!ATTLIST a
        href            CDATA           #IMPLIED
        name            CDATA           #IMPLIED
        title           CDATA           #IMPLIED
        >
<!ELEMENT br EMPTY>
<!ELEMENT em (%enriched-text;)*>
<!ELEMENT q (%enriched-text;)*>
<!ATTLIST q
        quote-source    CDATA   #IMPLIED
        >
\end{verbatim}
\newpage

%%%%%%%%%%%%%%%%%%%% KOLUMNIDTD %%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Liite: Kolumni DTD}\label{kolumniDTD}
\begin{verbatim}
<!ENTITY % enriched-text '
        #PCDATA
        | location
        | object.title
        | org
        | person
        | a
        | br
        | em
        | q
        '>
<!ENTITY % block.content "p | hl2 ">

<!ELEMENT nitf (head, body)>
<!ATTLIST nitf
        version      CDATA    #FIXED    "-//IPTC-NAA//DTD NITF-XML 2.1//EN"
        change.date  CDATA    #FIXED    "4 July 2000"
        change.time  CDATA    #FIXED    "1900"
        >
<!ELEMENT head (title, docdata)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT docdata (
        doc-id,
        date.issue,
        doc.copyright?,
        key-list
        )>
        <!ELEMENT doc-id EMPTY>
        <!ATTLIST doc-id
                id-string       CDATA   #IMPLIED
                >
        <!ELEMENT date.issue EMPTY>
        <!ATTLIST date.issue
                norm            CDATA   #IMPLIED
                >
        <!ELEMENT doc.copyright EMPTY>
        <!ATTLIST doc.copyright
                year            NMTOKEN         #IMPLIED
                holder          CDATA           #IMPLIED
                >
        <!ELEMENT key-list (keyword)*>
                <!ELEMENT keyword EMPTY>
                <!ATTLIST keyword
                        key             CDATA   #REQUIRED
                        >
<!ELEMENT body (body.head, body.content*)>
<!ELEMENT body.head (
        hedline,
        byline,
        distributor?,
        abstract
        )>
<!ELEMENT hedline (hl1, hl2*)>
        <!ELEMENT hl1 (%enriched-text;)*>
        <!ELEMENT hl2 (%enriched-text;)*>
<!ELEMENT byline (#PCDATA)>
<!ELEMENT distributor (#PCDATA)>
<!ELEMENT abstract (p)>
<!ELEMENT body.content (%block.content;)*>
<!ELEMENT p (%enriched-text;)*>
<!ELEMENT media (media-reference, media-caption?)>
<!ATTLIST media
        media-type      CDATA #FIXED "image"
        >
        <!ELEMENT media-reference (#PCDATA)>
        <!ATTLIST media-reference
                data-location           CDATA           #REQUIRED
					 mime-type					 CDATA			  #REQUIRED
                >
        <!ELEMENT media-caption (%enriched-text;)*>
<!ELEMENT location (#PCDATA)>
<!ELEMENT object.title (#PCDATA)>
<!ATTLIST object.title 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT org (#PCDATA)>
<!ATTLIST org 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT person (#PCDATA)>
<!ATTLIST person 
	idsrc 	CDATA 	#REQUIRED
	value 	CDATA 	#REQUIRED
	>
<!ELEMENT a (%enriched-text;)*>
<!ATTLIST a
        href            CDATA           #IMPLIED
        name            CDATA           #IMPLIED
        title           CDATA           #IMPLIED
        >
<!ELEMENT br EMPTY>
<!ELEMENT em (%enriched-text;)*>
<!ELEMENT q (%enriched-text;)*>
<!ATTLIST q
        quote-source    CDATA   #IMPLIED
        >
\end{verbatim}

\end{document}






