Hogeschool Gent ¨le Wetenschappen Departement Industrie Vakgroep Elektronica Academiejaar 2004–2005
FIM for iTV
Koen De Voegt
Promotoren: Ir. K. Handekyn (Alcatel Antwerpen) Ir. L. Colman (Hogeschool Gent) Scriptie voorgedragen tot het behalen van het diploma van Industrieel Ingenieur Elektronica optie ICT
Woord vooraf
Het schrijven van een afstudeerscriptie vormt een belangrijk deel van iemands opleiding. Om tot een degelijk resultaat te komen is er dan ook een degelijke begeleiding noodzakelijk. De mensen die hiervoor in mijn geval gezorgd hebben wil ik dan ook uitvoerig bedanken. Allereerste wil ik mijn stage begeleider ir. Koen Handekyn en het ganse ReNA-team van Alcatel Antwerpen bedanken. Zij gaven mij de kans te werken met zeer boeiende technologie in een inspirerende omgeving. Verder bedank ik ook graag ir. Luc Colman, voor zijn wijze raad bij de opbouw van dit schrijven. Als laatste bedank ik iedereen die geholpen heeft bij het vinden van schrijf- en typfouten. Waarbij ik in het bijzonder mijn zus Veerle De Voegt wil vermelden. Koen De Voegt Antwerpen, 20 mei 2005
i
Abstract Keywords: interactive television, calendar, SMS, instant messaging.
Abstract: This work examines how the modern family can use several new technologies to manage it’s information. This is called FIM or Family Information Management. The family information examined in this work is the family calendar, the grocerylist and miscellaneous note’s. The new technologies described are iTV, or Interactive Television, Instant Messaging and SMS. By combining these technologies the information will be available to the different family members via TV, PC and mobile phone. In concrete this work describes the development of two applications. One is used to read calendar information from a server and display it on TV. The other application will allow the use of an instant messaging client to edit the same calendar information. This all will show potential new ways for sharing information between family members using modern technology.
ii
Inhoudsopgave Woord vooraf
i
Abstract
ii
Inhoudsopgave
iii
Inleiding
vii
1 Situering 1.1 Stage . . . . . . 1.2 AmigoTV . . . 1.2.1 Werking 1.2.2 Opbouw 1.3 Opdracht . . . 1.4 FIM . . . . . . 1.5 Overzicht . . .
I
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
Gebruikte technologie¨ en
7
2 Ontwikkelings hulpmiddelen 2.1 Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Log4j . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Lumbermill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 iTV 3.1 3.2 3.3
Middleware Gesloten middleware . . . Open middleware . . . . . MHP . . . . . . . . . . . . 3.3.1 Invoer . . . . . . . 3.3.2 Grafische weergave
4 iCal 4.1 Kalender applicaties . . . 4.2 Mogelijkheden . . . . . . . 4.3 iCal4j . . . . . . . . . . . 4.3.1 Bestanden openen
1 1 1 1 2 3 3 5
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
iii
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
. . . . .
. . . .
8 8 9 9
. . . . .
10 11 11 11 12 12
. . . .
14 14 15 16 16
INHOUDSOPGAVE 4.3.2
iv
Wijzigingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5 Jabber 5.1 Smack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 19
6 WebDAV 6.1 Jakarta Slide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 21
7 Javadoc 7.1 @author 7.2 @param 7.3 @return 7.4 @see . .
22 22 23 23 23
II
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Ontwikkeling applicaties
24
8 De TV-GUI 8.1 Beperkingen . . . . . . . . . . 8.2 Structuur van de code . . . . 8.3 De applicatie opstarten . . . 8.4 Het Overzichtsscherm . . . . 8.5 Het Vandaag”-scherm . . . . ” 8.6 Het Morgen”-scherm . . . . ” 8.7 Het Deze Week”-scherm . . ” 8.8 Het Deze Maand”-scherm . . ” 8.9 Het Notitie”-scherm . . . . . ” 8.10 Het Boodschappen”-scherm ” 8.11 Gegevensopslag . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
25 25 25 26 26 27 28 28 29 29 30 30
9 Het 9.1 9.2 9.3 9.4 9.5 9.6 9.7
AWT pakket De AComponent en AAbstractComponent De ALabel klasse . . . . . . . . . . . . . . De AMultilineLabel klasse . . . . . . . . . De AShortLabel klasse . . . . . . . . . . . De AList klasse . . . . . . . . . . . . . . . De BoxLayout klasse . . . . . . . . . . . . De GridLayout klasse . . . . . . . . . . .
klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
31 31 32 33 33 33 33 34
10 Het 10.1 10.2 10.3 10.4 10.5 10.6 10.7
Model pakket De -View klassen . . . . De NormalTV klasse . . De FridgeTV klasse . . . De Models klasse . . . . De ModelsView klasse . De ScenesViewItf klasse De ScenesImpl klasse . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
35 35 36 36 36 37 37 37
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
INHOUDSOPGAVE
v
11 Het GUI pakket 11.1 De InternalFrameUI klasse . . . 11.2 De -ViewUI klassen . . . . . . . 11.2.1 De DayViewUI klasse . 11.2.2 De WeekViewUI klasse . 11.2.3 De MonthViewUI klasse 11.3 De DayOfMonth klasse . . . . . 11.4 De CommandBarUI klasse . . . 11.5 De FridgeTVUI klasse . . . . . 11.6 De DefaultSkin klasse . . . . . 11.7 De ScenesUI klasse . . . . . . . 11.8 De Gui klasse . . . . . . . . . . 11.9 De Images klasse . . . . . . . . 11.10De Constants klasse . . . . . . 12 De IM-Interface 12.1 Werking . . . . . . . . 12.1.1 Afspraken . . . 12.1.2 Boodschappen 12.1.3 Notities . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
38 38 38 38 39 39 39 40 40 40 40 41 41 41
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
42 42 42 43 43
13 Het IM Interface pakket 13.1 De Constants klasse . . . . . . . . 13.2 De Grocery klasse . . . . . . . . . 13.3 De GroceryList klasse . . . . . . . 13.4 De Note klasse . . . . . . . . . . . 13.5 De NoteList klasse . . . . . . . . . 13.6 De InitData klasse . . . . . . . . . 13.7 De AppointmentList klasse . . . . 13.8 De FridgeTV klasse . . . . . . . . . 13.9 De FridgeTVPacketFilter klasse . . 13.10De FridgeTVPacketListener klasse 13.11De FridgeTVRosterListener klasse 13.12De MessageParser klasse . . . . . . 13.13De UserList klasse . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
45 45 45 45 46 46 46 46 47 47 47 47 48 48
. . . . . . . .
49 49 49 49 50 50 50 50 51
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
14 Gedeelde klassen 14.1 iCal Bestanden Lezen . . . . . . . . . . 14.1.1 De OpenLocalFile klasse . . . . . 14.1.2 De OpenRemoteFile klasse . . . 14.1.3 De OpenSecureRemoteFile klasse 14.2 iCal Bestanden Schrijven . . . . . . . . 14.2.1 De SaveLocalFile klasse . . . . . 14.2.2 De SaveSecureRemoteFile klasse 14.3 De TestMain klasse . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
INHOUDSOPGAVE
vi
15 SMS 15.1 SMS gateway . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2 Andere gateways . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2.1 MSN Mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52 52 52 53
III
54
Opzetten demo-opstelling
16 Demo opstelling 16.1 Opzet . . . . . . . . . . . . . . . . 16.2 Jabber server . . . . . . . . . . . . 16.3 iCalendar Server . . . . . . . . . . 16.4 TV-GUI . . . . . . . . . . . . . . . 16.4.1 Uitvoer op een TV scherm . 16.4.2 De afstandsbediening . . . . 16.4.3 Overlay . . . . . . . . . . . 16.5 Mozilla Calendar . . . . . . . . . . 16.6 Jabber . . . . . . . . . . . . . . . .
. . . . . . . . .
55 55 55 56 56 56 56 58 58 58
Conclusie TV-GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IM-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59 59 60 60
Lijst van figuren
62
Lijst van tabellen
63
IV
64
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
Bijlagen
A Code Voorbeelden A.1 Uitlijning AMultilineLabel . . . . . . . . . A.2 Uitlijnen elementen in GridLayout . . . . A.3 Invullen list in DayView . . . . . . . . . . A.4 Opbouw scherm in DayViewUI . . . . . . A.5 Ophalen elementen uit list in DayViewUI B CD-ROM
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
65 65 67 68 70 71 72
Inleiding Vele van de ontwikkelingen in computer- en internettechnologie die onze maatschappij de laatste decennia doormaakte zijn nog steeds niet in de gehele bevolking doorgedrongen. Dit is vooral te wijten aan het feit dat de PC nog steeds ontbreekt in groot aantal huisgezinnen, maar een familie zonder televisie is in onze maatschappij vrijwel onbestaande. Met de nakende opkomst van de interactieve televisie (iTV) zullen vele van de, in oorsprong, PC-toepassingen nu voor een aanzienlijk grotere groep mensen beschikbaar worden. Dit schrijven behandelt het elektronisch beheer van kalenderinformatie, meer en dit specifiek in het kader van het gezin. Toepassingen die dit mogelijk maken op PC zijn reeds in grote verscheidenheid beschikbaar. Ze worden PIM’s genoemd, ofwel Personal Information Managers. Naar analogie wordt er hier gesproken over FIM, ofwel Family Information Manager. Een andere zeer veel gebruikte technologie is SMS. Er zal dan ook getracht worden SMS te gebruiken om voor een mobiele functionaliteit te zorgen. Concreet wordt hier de ontwikkeling van een applicatie om kalendergegevens op het interactieve televisieplatform weer te geven besproken. Evenals de ontwikkeling van een afzonderlijke applicatie die het mogelijk maakt deze gegevens via een instant messaging client in te voeren en op te vragen. Er wordt verder ook onderzocht of deze laatste wijze van gegevens opvragen en invoeren kan uitgebreid worden naar een mobiel platform via SMS. Met dit alles wordt geprobeerd een beeld te schetsen van de manier waarop een moderne familie in de nabije toekomst haar informatie zou kunnen beheren.
vii
Hoofdstuk 1
Situering 1.1
Stage
Om mijn eindwerk te maken heb ik stage gelopen bij Alcatel te Antwerpen. Meer bepaald bij de ReNA-groep van het Research & Innovation departement. ReNA staat voor Residential Networked Applications. In het Residential Networked Applications Project Plan 2005” ” wordt de volgende omschrijving van de objectieven van de ReNA-groep gegeven: The ReNA’s project’s objective is to design and prototype innovative applications, generating appealling experiences for the broadband family, leveraging Alcatel’s service platforms and broadband solutions. ReNA application concepts can be positioned in the interactive TV space of converged triple play solutions. Prototyping activities anchor the application concepts in Alcatel’s portofolio of service solutions. Users trials ensure the applications are aligned with end-users’ expectations and provide the business division with lead customers. Het is dus het doel van de ReNA groep om prototype applicaties te ontwikkelen die gebruik maken van de zogenaamde triple play”-technologie¨en. Triple play is hoge snelheid internet, ” IP-telefonie en interactieve breedband video over ´e´en enkele verbinding. Met deze toepassingen is het de bedoeling gebruikers-testen uit te voeren. Op het ogenblik werkt men bij ReNA aan twee projecten namelijk de Personal Broadcaster en AmigoTV. Het project dat in dit werk beschreven wordt, sluit zeer nauw aan bij AmigoTV. Er wordt in de volgende deel dan ook meer informatie over AmigoTV gegeven.
1.2 1.2.1
AmigoTV Werking
Bij AmigoTV draait alles om het samen televisie kijken. Waarbij de TV kijker van zijn vrienden Buddies” kan zien welk programma zij op dit ogenblik aan het bekijken zijn. (Figuur ” 1.2 (a)) Hij kan dan eventueel beslissen om naar hetzelfde TV programma te gaan kijken en via voice chat met elkaar in contact treden. (Figuur 1.1) Dit is eventueel met meerder gebruikers op verschillende locaties tegelijkertijd mogelijk. Deze verschillende gebruikers die naar hetzelfde programma kijken en met elkaar kunnen praten bevinden zich nu virtueel in dezelfde kamer of Room”. ” 1
HOOFDSTUK 1. SITUERING
2
Figuur 1.1: Voice chat met AmigoTV
Zoals in afbeelding 1.2 (b) te zien is, kan een gebruiker tijdens het gezamenlijk televisie kijken, verschillende animaties starten. Die verschijnen dan op het scherm van alle TV-kijkers die zich in dezelfde kamer bevinden. Dit is vergelijkbaar met de Winks” die in de laatste versie ” MSN messenger te vinden zijn.
(a)
(b)
Figuur 1.2: (a) Weergeven welke TV programma’s je buddies bekijken. (b) Een Animatie verzenden.
1.2.2
Opbouw
Zoals in Figuur 1.3 te zien is, is er voor de gebruiker maar een zeer gelimiteerde infrastructuur noodzakelijk. Dit is namelijk een breedband router, een set-top box (STB), een afstandsbediening en een microfoon. De besturing gebeurt met een gewone afstandsbediening. Navigatie gebeurt met behulp van de kleurknoppen en de pijltjestoetsen. Er wordt steeds gezorgd voor een eenvoudige intu¨ıtieve besturing. Dit moet garanderen dat deze applicatie dicht bij de TV ervaring staat die de gebruiker gewoon is. Dit is wat men de lean back experience” noemt ”
HOOFDSTUK 1. SITUERING
3
Figuur 1.3: Benodigdheden AmigoTV
in tegenstelling tot bijvoorbeeld PC gebruik dat als lean forward experience” bestempeld ” wordt. Een gebruik van andere invoerapparaten zoals draadloze muis of toetsenbord zouden deze gebruikerservaring veranderen.
1.3
Opdracht
In dit schrijven wordt onderzocht hoe een moderne familie van de verschillende technologie¨en gebruik kan maken om op een effici¨ente manier zijn informatie te beheren. Er wordt gedacht aan de familiekalender, maar ook aan simpele dingen zoals het boodschappenlijstje of de notities op een prikbord in de keuken of met magneetjes op de koelkast. Deze zaken zouden op een elektronische manier bewaard kunnen worden. Via deze weg kunnen zij dan ook van op verschillende plaatsen geraadpleegd worden. En bijkomend voordeel is dat informatie in multimediale vorm kan gebruikt worden. Er moet voor gezorgd worden dat de gegevens snel en door ieder gezinslid bekeken en gewijzigd kunnen worden. Hiervoor wordt er uitsluitend gebruik gemaakt van wijd verspreide en toegankelijke technologie. Dit is met name de TV, via de uitbreidingen die iTV, of interactieve televisie, bied. En het zeer populaire en commercieel zeer aantrekkelijke SMS. Er wordt eveneens voor gezorgd dat de link met de PC omgeving niet verloren gaat.
1.4
FIM
Programma’s die in een PC-omgeving instaan voor kalenderbeheer worden PIM’s genoemd. PIM is de afkorting van Personal Information Managment. Analoog hieraan spreken wij over Family Information Managment, ofwel FIM. Om de sterke verwantschap met AmigoTV te benadrukken werden de applicaties die in dit kader ontwikkeld werden FrigoTV genoemd.
HOOFDSTUK 1. SITUERING
4
Dit is de naam van de gebruikersgerichte dienst die met behulp van deze applicaties zal aangeboden worden. De opdracht, in sectie 1.3 beschreven, is zeer ruim en weinig concreet. Het bouwen van een applicatie die al deze aspecten ten volle ondersteunt was dan ook niet mogelijk in de beperkte periode die voor dit project beschikbaar was. E´en van de weinige vereisten was dat er voor de iTV component gewerkt moest worden in het reeds voor AmigoTV opgezette framework. Dit om later een eventuele integratie in dit project te vergemakkelijken. Dit betekent dat er gewerkt moest worden met de bij Alcatel in ontwikkeling zijnde AWT1 . De ontwikkeling van AmigoTV gebeurde in java. Bij het uitdenken van de vormgeving en functionaliteit moest er dus ook reeds met AmigoTV rekening gehouden worden. Zoals bijvoorbeeld het onderaan weergeven van de functies die bij de kleurknoppen van de afstandsbediening horen en de functionaliteit van de rode knop die steeds voor een stap terug zorgt. Aangezien de functie van de rode knop al vast lag bleven er nog drie knoppen over. De link tussen de gele knop en de traditioneel gele notitiepapiertjes leek voor de hand liggend. Aan de groene knop werd alle kalenderinformatie verbonden. Aan de blauwe het boodschappenlijstje.
Figuur 1.4: Schema
Aangezien snelle toegang tot de gegevens wenselijk is, wordt er een overzichtsscherm voorzien. Dit scherm zal de afspraken van de huidige dag, de meest recente notities en het boodschap1
AWT: abstract windowing toolkit
HOOFDSTUK 1. SITUERING
5
penlijstje bevatten. Als vormgeving werd er voor dit overzichtscherm gekozen voor een ijskast. Dit zou een herkenbare situatie voor de gebruiker moeten scheppen. Het zou tevens van een voldoende hoge grafische kwaliteit moeten zijn om de TV-ervaring van de gebruiker niet verloren te laten gaan. E´en van de eigenschappen die SMS gebruik van verschillende elektronische diensten kenmerkt is het tekstuele karakter. Op PC bestaat er een vergelijkbaar systeem dat ogenblikkelijke communicatie van kleine tekstberichten toelaat. Dit is instant messaging (IM). Het is in eerste instantie voor dit platform dat er een tekstuele interface zal ontworpen worden. Er zal later onderzocht worden of deze interface via SMS toegankelijk kan gemaakt worden. Het meest populaire open source IM protocol, met name Jabber, werd voor deze opdracht gekozen. Een eigenschap die Jabber van de andere IM protocollen onderscheidt is de mogelijkheid om met andere IM protocollen samen te werken. Voor de opbouw van de kalenderapplicatie werd er in eerste instantie onderzocht welke de bestaande kalender applicaties op PC zijn. Het belangrijkste dat hierbij werd vastgesteld is dat er ´e´en standaard is die vaak wordt gebruikt om kalendergegevens op te slaan. Dit is de iCalendar standaard. Er zal dan ook van deze standaard gebruik gemaakt worden. Voor het uitwisselen van iCalendar wordt er gebruik gemaakt van een WebDAV server. Er zal dan ook van zo’n server gebruik gemaakt worden om de kalendergegevens op te slaan. Er moet namelijk rekening mee gehouden worden dat niet elke STB over een opslag capaciteit beschikt. Het gebruik van de WebDAV server geeft ons de mogelijkheid om FrigoTV in twee delen te splitsen. Een deel, de TV-GUI zal op een STB worden uitgevoerd. Het andere deel, de IM-Interface zal op een server worden uitgevoerd. Dit heeft verschillende voordelen. Als eerste beperkt het de belasting op de STB die zo laag mogelijk dient gehouden te worden. Tevens bevrijdt het ons bij het ontwikkelen van de IM-Interface toepassing van alle beperking die geldig zijn op het STB platform. Verder is de IM-Interface nu als een aparte optie in ons dienstenpakket beschikbaar. In figuur 1.4 wordt er een duidelijker beeld geschetst van deze architectuur.
1.5
Overzicht
In het eerste deel worden de gebruikte technologie¨en besproken. Om te beginnen bespreken we in hoofdstuk 2 de hulpmiddelen die gebruikt werden. In de daaropvolgende hoofdstukken 3, 4, 5, en 6 worden de gebruikte standaarden verduidelijkt. Ook wordt er vermeld met welke programma bibliotheken het gebruik van deze standaarden gerealiseerd wordt. In het tweede deel wordt de werking en de opbouw van de applicaties gedetailleerder besproken. De werking van de TV-GUI wordt besproken in hoofdstuk 8. In de hoofdstukken 9, 10 en 11 wordt er dieper ingegaan op de opbouw van deze component. In hoofdstuk 12 wordt de werking van de IM-Interface besproken, de opbouw wordt besproken in hoofdstuk 13. In Hoofdstuk 14 wordt besproken hoe de toegang tot bestanden gerealiseerd wordt. Deze bestandstoegang wordt in beide toepassingen gebruikt. In een laatste deel bespreken we het opzetten van een concrete demo opstelling. Dit zo-
HOOFDSTUK 1. SITUERING
6
wel wat betreft de configuratie aan de server zijde als aan de client zijde van de verschillende benodigde componenten. Voor een goed begrip van de hoofdstukken 9, 10, 11, 13 en 14 is kennis van object geori¨enteerd programmeren in java noodzakelijk.
Deel I
Gebruikte technologie¨ en
7
Hoofdstuk 2
Ontwikkelings hulpmiddelen 2.1
Eclipse
Eclipse is een open-source framework voor software-ontwikkelomgevingen. Daarnaast is Eclipse ook zelfstandig te gebruiken als krachtige Java-ontwikkelingsomgeving. Het is een zogenaamde IDE of Integrated Development Environment. Eclipse heeft een open structuur waardoor het mogelijk is de functionaliteit uit te breiden door middel van plug-ins. Deze applicatie kan gevonden worden op http://www.eclipse.org.
Figuur 2.1: Eclipse
Eclipse wordt actief ondersteund door IBM, dat verschillende van zijn eigen producten, bouwt rondom de Eclipse-code. De naam Eclipse (zonsverduistering) is opmerkelijk, omdat de Javawereld gedomineerd wordt door concurrent Sun (zon).
8
HOOFDSTUK 2. ONTWIKKELINGS HULPMIDDELEN
2.2
9
Log4j
Deze java-bibliotheken worden gebruikt om de verschillende stappen die de applicatie doorloopt makkelijk te kunnen volgen. Dit om het debuggen te vergemakkelijken. Na het declareren van de logger kan met behulp van de hieronder vermelde commando’s informatie vanuit de applicatie naar buiten gebracht worden. Deze bibliotheken maken deel uit van het open source project apache, bekend van de apache web server. Meer informatie is beschikbaar op http://logging.apache.org/log4j. private static final Logger log = Logger.getLogger(klasse.class); log.debug("String"); log.warn("String"); log.error("String"); log.fatal("String"); De manier waarop deze gegevens naar buiten gebracht worden kan ingesteld worden via een configuratie bestand, log4j.properties. Dit bestand moet zich in het build path van het project bevinden.
2.3
Lumbermill
Dit is een applicatie die tijdens de ontwikkelingsfase gebruik kan worden om de door log4j verzamelde debug informatie overzichtelijk weer te geven. Ook dit is een open source project. De verschillende soorten informatie die log4j verzameld, worden elk met een specifieke kleur weergegeven. Lumbermill kan teruggevonden worden op http://traxel.com/lumbermill/.
Figuur 2.2: Lumbermill
Hoofdstuk 3
iTV Middleware iTV1 Middleware bevindt zich tussen de hardware van de STB en de toepassingssoftware. (Figuur 3.1) Het zorgt voor decodering van de inkomende gegevens, gegevensverwerking, schermhandelingen en verwerking van de gebruikersinvoer. De iTV Middleware maakt het simpeler om complexe applicaties te ontwikkelen. Het laat toe om toepassingen uit te voeren op elke STB waarop de iTV Middleware draait. De ontwikkelaar van deze gebruikerstoepassingen hoeft geen rekening te houden met de specifieke hardware van de verschillende types STB.
Figuur 3.1: iTV Middleware
Er zijn vele verschillende soorten iTV middleware: MHP, MHEG, OpenCable, OpenTV, Microsoft TV, Liberate, NDS, ... Deze middleware bieden een software ontwikkelingsomgeving, die toegang tot de functies die de STB aanbiedt, verleend. Er wordt meestal met C/C++ of java gewerkt. Eventueel is er ook HTML ondersteuning. Deze middleware kan in twee delen opgesplitst worden, de open en gesloten middleware. Deze delen komen overeen met respectievelijk een verticale en horizontale markt. 1
iTV: interactieve televisie
10
HOOFDSTUK 3. ITV MIDDLEWARE
3.1
11
Gesloten middleware
Gesloten middleware komt overeen met verticale markt benadering. Interactieve televisie werd traditioneel beheerst door verticale betaal-TV waarbij de inhoud, de levering en het platform door hetzelfde bedrijf geleverd werden. Onder gesloten middleware valt onder andere OpenTV Core, MediaHighway, Microsoft TV, power TV, NDS, Liberty, Liberate, ... Hoewel gesloten middleware een groot marktaandeel hebben en ongeveer dezelfde diensten bieden (soms zelfs meer) zijn er toch enkele ernstige nadelen aan verbonden. Er zijn te veel verschillende middleware verkopers die elk hun eigen middleware aanbieden voor verschillende marktsegmenten. Applicaties gebaseerd op gesloten middleware zijn niet herbruikbaar. Er zou dus door de programmeur bijvoorbeeld een aparte applicatie voorzien moeten worden voor de kabel- of satellietversie van de dienst. Bovendien is er aan gesloten middleware een licentiekost verbonden. Deze nadelen beperken sterk het markt potentieel van gesloten middleware.
3.2
Open middleware
Open middleware correspondeert met een horizontale markt visie. Een open middleware is een standaard die voor de hele industrie bruikbaar is. Het kan door iedereen ge¨ımplementeerd worden. Voorbeelden van open middleware zijn MHP, OpenCable, MHEG, DAVIC, ... Op MHP zullen we in de volgende sectie dieper ingaan.
3.3
MHP
MHP, ofwel Multimedia Home Platform, is een voorbeeld van open iTV Middleware. MHP is een op java gebaseerde open standaard voor interactieve televisie. Deze standaard werd gedefinieerd door het DVB2 consortium. Deze technologie is gebaseerd op bestaande open standaards zoals DVB, MPEG3 en JavaTV. Deze standaard is nog steeds in volle ontwikkeling, de huidige versie is MHP 1.1. De integrale tekst die deze standaard beschrijft kan teruggevonden worden op http://www.mhp.org. De MHP software API is gemaakt met als doel de open middleware standaard voor alle interactieve TV applicaties te zijn. Het laat ontwikkelaars toe om te werken zonder rekening te moeten houden met de specificaties van een STB. MHP definieert een generische interface tussen de interactieve televisie applicaties en het platform waarop ze worden uitgevoerd. Deze interface ontkoppelt de verschillende toepassingen van de specifieke hardware en software details van verschillende MHP platform implementaties. Dit geeft leveranciers van digitale inhoud de mogelijkheid om alle verschillende types platformen, gaande van low-end tot high-end Set-Top boxen, ge¨ıntegreerde digitale televisietoestellen en multimedia PC’s te ondersteunen. Enkele aspecten van MHP die voor ons belangrijk zijn, worden hieronder verder verduidelijkt. Het moet de lezer duidelijk zijn dat dit een zeer beperkte selectie is. Bijvoorbeeld DVB-HTML of toegang tot Smart Card lezers wordt hier volledig ter zijde gelaten. 2 3
DVB: Digital Video Broadcasting MPEG: Moving Picture Experts Group
HOOFDSTUK 3. ITV MIDDLEWARE
3.3.1
12
Invoer
De meeste MHP ontvangers zullen gebruikersinvoer krijgen van een afstandsbediening. Hoewel invoer van een toetsenbord en eventueel zelfs een muis ook beschikbaar kan zijn, is het onwaarschijnlijk dat dit in veel gevallen gebruikt zal worden. Onze applicatie dient dan ook uitsluitend met een afstandsbediening gebruikt te worden. Tabel 3.1 geeft de door MHP gedefinieerde standaard afstandsbedieningtoetsen. Naam constante VK UP VK DOWN VK LEFT VK RIGHT VK ENTER VK 0 tot VK 9 VK TELETEXT VK COLORED KEY VK COLORED KEY VK COLORED KEY VK COLORED KEY
0 1 2 3
Toets boven pijl onder pijl linkse pijl rechtse pijl enter (ook bekend als select of OK) nummer toetsen teletext toets eerste kleur toets (rood) tweede kleur toets (groen) derde kleur toets (geel) vierde kleur toets (blauw)
niet niet niet niet niet
Toets code gestandaardiseerd gestandaardiseerd gestandaardiseerd gestandaardiseerd gestandaardiseerd 48 - 57 459 403 404 405 406
Tabel 3.1: Afstandsbedieningstoetsen MHP
Hoewel de afstandsbediening nog andere toetscodes kan genereren, zijn dit de enige waarvan de werking op elke ontvanger gegarandeerd wordt. Onze applicatie zal dan ook uitsluitend van de in Tabel 3.1 vermelde toetsen gebruikmaken. Een volledige lijst van gedefinieerde toetsen kan in de org.havi.ui.event.HRcEvent klasse van de MHP specificatie gevonden worden.
3.3.2
Grafische weergave
Het grafische model is waarschijnlijk ´e´en van de meest complexe delen van MHP. Er zijn namelijk vele verschillende zaken waarmee rekening moet worden gehouden wanneer we met afbeeldingen werken in een TV omgeving. Een aantal van de zaken waarmee er bijvoorbeeld rekening dient gehouden te worden, zijn: De pixel aspect ratio: Televisie en video toepassingen gebruiken vaak niet-vierkante pixels, terwijl grafische API’s voor computer er veelal vanuit gaan dat pixels vierkant zijn. Aspect Ratio: Standaard TV werkt met een aspect ratio van 4:3, breedbeeld echter met een 16:9 aspect ratio of soms zelfs met 14:9. Kleur weergave: Op PC wordt er overwegend met RGB4 gewerkt om kleuren voor te stellen op TV gebruikt men YUV5 , althans bij PAL. De omzetting tussen beiden wordt door MHP verzorgd. 4 5
RGB: Red Green Blue YUV: Y luminance/brightness U and V chrominance/color
HOOFDSTUK 3. ITV MIDDLEWARE
13
Figuur 3.2: De 3 grafische lagen
Een iTV scherm wordt typisch opgebouwd uit minimum 3 lagen. (Figuur 3.2) Een achtergrondlaag, een video-laag en een grafische-overleg-laag. De achtergrond-laag is meestal slechts in staat om een stilstaand beeld weer te geven. Hierboven bevindt zich de video laag, hier worden de televisieprogramma’s weergegeven. De bovenste laag is de grafische laag, hierop wordt er door de grafische operaties in MHP effectief getekend. Transparantie wordt door MHP ondersteund in verschillende gradaties. Er zijn er drie die gegarandeerd ondersteund worden: volledige, 30% en geen transparantie. MHP ondersteunt slechts vier types afbeeldingformaten namelijk; GIF, JPEG, PNG en MPEG I-Frame. Het kleuren palet is gelimiteerd tot 188 kleuren voor GIF, JPEG en PNG. MPEG I-Frame kan wel van het volledige kleurenpallet gebruik maken.
Hoofdstuk 4
iCal ICal, ofwel internet calendar is een open standaard die een bestandsformaat definieert voor het opslaan van Kalender informatie. Internet Calendar wordt besproken in RFC24451 . De huidige versie is iCalendar v2.0. De oudere versie iCalendar v1.0 wordt soms ook vCal genoemd. De informatie wordt opgeslagen in plaintext-bestanden met extensie .ics. Mede dankzij de populariteit van het programma iCal van Apple, dat enkel voor de Mac beschikbaar is, wordt dit bestandsformaat nu door vele verschillende applicaties ondersteund.
4.1
Kalender applicaties
In volgende tabel wordt een overzicht gegeven van enkele van de programma’s die iCal ondersteunen, gegroepeerd naargelang platform: • Mac OS X – Apple iCal
http://www.apple.com/ical/
• Linux – Evolution
http://www.gnome.org/projects/evolution/
– Mozilla Calendar http://www.mozilla.org/projects/calendar/ Plug-in voor de gekende Mozilla browsers. (oa. Mozilla Firefox) – Mozilla Sunbird http://www.mozilla.org/projects/calendar/sunbird.html De stand-alone versie van Mozilla Calendar. – KDE Kontact
http://www.kontact.org/
• Windows – Mozilla Calendar
http://www.mozilla.org/projects/calendar/
– Mozilla Sunbird http://www.mozilla.org/projects/calendar/sunbird.html – Windates
http://www.rockinsoftware.com/windates.aspx
– eventSherpa 1
http://www.eventsherpa.com/
http://www.ietf.org/rfc/rfc2445.txt
14
HOOFDSTUK 4. ICAL
15
– Calendar http://www.osx-e.com/modules.php?modid=1&action=show&id=7 onvolledige Apple iCal kloon Het ontbreken van, misschien wel het meest bekende kalenderprogramma, MS Outlook, is een zeer jammerlijke zaak. Hoewel Outlook iCal niet volledig ondersteund, waardoor de echte voordelen van iCal voor Outlook gebruikers onbeschikbaar zijn, is het wel mogelijk om gedownloade iCal bestanden in te voeren. Het uitvoeren kan Outlook alleen per afspraak en niet als een volledige kalender. Door gebruik te maken van het programma outport, te vinden op http://outport.sourceforge.net/, kunnen we de kalendergegevens wel exporteren naar ´e´en iCal-bestand. Dit moet dan gebeuren via de Evolution Calendar en Evolution Tasks opties, de iCalendar optie van outport cre¨eert weerom afzonderlijke bestanden per afspraak of taak. Taken en afspraken komen, door gebruik te maken van deze methode, nog steeds in twee afzonderlijke bestanden terecht. Deze werkwijze is getest met Outlook 2000. Verder zijn er ook nog enkele mogelijkheden om iCal bestanden online weer te geven in een browservenster. Enkele voorbeelden hiervan zijn: • Linux – Brown Bear Calcium Web Calendar http://www.brownbearsw.com/calcium/ Perl CGI applicatie (platform onafhankelijk) – PHPiCalendar PHP applicatie (platform onafhankelijk)
http://phpicalendar.net/
• Windows – Brown Bear iCal Web Calendar http://www.brownbearsw.com/ical/ volledige server applicatie speciefiek voor kalender bestanden – Brown Bear Calcium Web Calendar http://www.brownbearsw.com/calcium/ Perl CGI applicatie (platform onafhankelijk) – PHPiCalendar PHP applicatie (platform onafhankelijk)
http://phpicalendar.net/
Dit alles toont aan dat de iCal standaard een wijde ondersteuning geniet en dus een uitstekende keuze vormt als bestandsformaat voor onze kalender applicatie.
4.2
Mogelijkheden
Met de lancering van Apple iCal werden er een paar nieuwe mogelijkheden toegevoegd aan de traditionele kalendertoepassingen. Het was nu mogelijk om meerdere verschillende kalenderbestanden tegelijk weer te geven. Het feit dat deze bestanden rechtstreeks gelezen en geschreven konden worden van een online locatie, zorgt ervoor dat er een hele nieuwe wereld open ging. Het is nu mogelijk om bepaalde kalenders publiek of aan een bepaalde groep mensen aan te bieden. Deze kalenderinformatie kan dan gewoon weergegeven worden tussen de priv´e kalender gegevens van de geabonneerde” gebruiker. Wijzigingen in de publieke ka” lender worden onmiddellijk op de server gepubliceerd. Wanneer een gebruiker opnieuw zijn
HOOFDSTUK 4. ICAL
16
agenda raadpleegt zijn steeds de meest recente gegevens beschikbaar. Er is van synchronisatie geen sprake omdat alles wordt opgeslagen in een enkel bestand dat voor alle gebruikers toegankelijk is. Deze mogelijkheden maken het gebruik van complexe server applicaties zoals Microsoft Exchange of Novell GroupWise onnodig. De bestanden worden op een gewone webserver (http-server) geplaatst. Om deze mogelijkheden te verduidelijken worden hieronder enkele voorbeelden gegeven: • Kalenders van allerhande clubs en verenigingen. Bijvoorbeeld: – Beschikbaarheid van sportvelden of materieel voor sportclubs. – Verzameltijden voor jeugdverenigingen. – Activiteiten georganiseerd door studentenclub. • Uurroosters van studenten: In dit verband is het misschien interessant om te verwijzen naar het open-source project UW Calendar van de Universiteit van Washington (http: //www.washington.edu/ucal/) • Lokale vuilnisomhaling • De nationale voetbal competitie Hierna geef ik een overzicht van enkele sites die zich specialiseren in het aanbieden van iCal bestanden. Ze beschikken over een uitgebreid archief van kalenders. • iCal Exchange: biedt een gratis locatie aan om kalenders op te slaan. Dit kan zowel voor publiek als priv´e gebruik zijn. De mogelijkheid om verschillende paswoorden te defini¨eren is een betalende optie. Hiermee is het bijvoorbeeld mogelijk paswoorden met leesen schrijftoestemming voor het bestuur aan te maken en paswoorden met enkel leestoestemming voor de leden. (http://www.icalx.com of http://www.icalexchange.com) • iCalShare: biedt de mogelijkheid om kalenders publiekelijk te delen. Het biedt eveneens de mogelijkheid om te bladeren en te zoeken door kalenders die zich reeds op deze server bevinden en zich er desgewenst op in te schrijven. (http://www.icalshare.com)
4.3
iCal4j
Mijn applicatie maakt gebruik van de java programma bibliotheken iCal4j2 om toegang te krijgen tot iCalendar bestanden. Dit pakket kan gevonden worden op http://ical4j. sourceforge.net/. De API die bij dit pakket hoort is beschikbaar op http://ical4j. sourceforge.net/api/. Met dit pakket is het onder andere mogelijk iCal bestanden te parsen door gebruik te maken van enkele zeer simpele regels programmacode.
4.3.1
Bestanden openen
ICalendar bestanden zijn gewone tekstbestanden en kunnen dus met de gewone voorzieningen uit java worden ingelezen. Het codevoorbeeld hieronder geeft weer hoe men de java inputstream, met behulp van de iCal4j klasse builder, omzet naar een iCalendar klasse. 2
iCal4j: internet calendar for java
HOOFDSTUK 4. ICAL
17
ICalendar iCalendar; CalendarBuilder builder = new CalendarBuilder(); iCalendar = builder.build(in); Hierin is in” de inputstream die het iCal bestand bevat. Hierna is de informatie die het ” bestand bevat simpelweg toegankelijk via de objecten: VALARM, VEVENT, VFREEBUSY, VJOURNAL, VTIMEONE en VTODO. Onze toepassingen maken enkel gebruik van de component VEVENT. Toegang tot de achtereenvolgende componenten wordt als volgt gerealiseerd. for (Iterator i = iCalendar.getComponents().iterator(); i.hasNext();) { Component component = (Component) i.next(); if (component.getName() == Component.VEVENT) { VEvent ve = new VEvent(component.getProperties()); } }
4.3.2
Wijzigingen
Aangezien het gaat om een open source programma bibliotheek beschikt de gebruiker over de volledige broncode en staat het hem dus vrij om hier wijzigingen aan te brengen. Ik heb ´e´en wijziging aangebracht in het iCal4j pakket. Om voor een duidelijk onderscheid te zorgen tussen de klassen, net.fortuna.ical4j.model.Calendar en java.util.Calendar, heb ik de naam van de eerste klasse veranderd van net.fortuna.ical4j.model.Calendar naar net.fortuna.ical4j.model.ICalendar. De klasse ICalendar bevat nu gegevens in iCal formaat, de klasse Calendar bevat allerhande functies die handig zijn om met data te werken. Het opnieuw benoemen geeft u de mogelijkheid om beide klassen vanuit dezelfde klasse aan te roepen zonder dat de volledige pakketnaam steeds moet meegegeven worden.
Hoofdstuk 5
Jabber Jabber is een open protocol dat op XML gebaseerd is. Het kan gebruik worden voor Instant Messaging. Op Jabber gebaseerde software wordt gebruikt op duizenden servers verspreid over het internet en wordt door miljoenen mensen wereldwijd gebruikt. Deze getallen volgens de Jabber Software Foundation vind je terug op http://www.jabber.org. Het Jabber project is in 1998 begonnen door Jeremie Miller, de eerste belangrijke publieke publicatie gebeurde in mei 2000. Het belangrijkste product is Jabberd, een server waarmee Jabber clients verbonden worden zodat ze met elkaar kunnen chatten. Met deze server kunnen er zowel een priv´e Jabber netwerk opgezet worden (achter een firewall) of de server kan deel gaan uitmaken van het globale publieke netwerk. De belangrijkste kenmerken van jabber zijn de gedistribueerde aard van het IM systeem en het gebruik van XML streams. Een uniek kenmerk van het Jabber systeem is het gebruik van transports of gateways. Deze laten het de gebruikers toe verbinding te maken met netwerken die van een ander protocol gebruik maken: zoals AIM en ICQ, die van het OSCAR1 protocol gebruik maken, MSN Messenger en Windows Messenger, die van de .NET Messenger Service gebruik maken, SMS of e-mail. In tegenstelling tot multi-protocol-clients zoals Trillian of Gaim, zorgt Jabber voor toegang op het server niveau. Dit komt tot stand door communicatie via speciale gateway serviceses die op de server actief zijn. Elke Jabber gebruiker kan zich registreren bij ´e´en van deze gateways. De gebruiker moet enkel de informatie verstrekken die noodzakelijk is om op dat netwerk in te loggen. Hierna is communicatie met gebruikers van dat netwerk mogelijk alsof het Jabber gebruikers waren. Dit heeft tot gevolg dat elke client, die het Jabber protocol volledig ondersteunt kan gebruikt worden om toegang te krijgen tot elk netwerk waarnaar er gateways bestaan zonder dat er extra code nodig is in de client. De basis van het Jabber protocol wordt nu beheerd door de Jabber Software Foundation. Het is door de IEFT2 aanvaard als standaard onder de naam XMPP3 , met RFC nummer 3920. Het wordt vaak beschouwd als een concurrent van SIMPLE4 , gebaseerd op het SIP5 protocol, als het standaardprotocol voor instant messaging en aanwezigheidsmelding. Het 1
OSCAR: Open System for CommunicAtion in Realtime IEFT: Internet Engineering Task Force 3 XMPP: Extensible Messaging and Presence Protocol 4 SIMPLE: SIP for Instant Messaging and Presence Leveraging Extensions 5 SIP: Session Initiation Protocol 2
18
HOOFDSTUK 5. JABBER
19
ontwerp van XMMP is echter bedoel om een meer algemene middleware voor communicatie tussen applicaties voor alle doeleinden te vormen.
5.1
Smack
Om de communicatie tussen de applicatie en de Jabber server te verzorgen wordt er gebruik gemaakt van een programma bibliotheek. Er is een waaier aan programma bibliotheken voorhanden die voor XMPP communicatie kunnen instaan. Een overzicht van al deze pakketten kan gevonden worden op http://www.jabber.org/software/libraries.shtml. Een groot aantal van de keuzemogelijkheden die op deze site te vinden zijn vallen weg, aangezien het aangewezen is in het hele project enkel de java-programmeertaal te gebruiken. Uit de overgebleven bibliotheken werd Smack gekozen. Dit omdat bij de aanvang van het project Smack een van de meest volledige API’s was die voor jabber beschikbaar was. Smack is een Open Source XMPP client bibliotheek voor instant messaging. Dat Smack enkel ondersteuning biedt voor het ontwerp van client toepassingen is geen bezwaar. Hoewel de applicatie op een server uitgevoerd zal worden is het ten opzichte van de Jabber server een client toepassing. De Smack bibliotheken kunnen gevonden worden op http://www.jivesoftware.org/smack/. De documentatie over Smack is eveneens online te vinden op http://www.jivesoftware.org/ builds/smack/docs/latest/documentation/ en http://www.jivesoftware.org/builds/ smack/docs/latest/javadoc/.
Hoofdstuk 6
WebDAV WebDAV is een IETF werkgroep. De afkorting staat voor Web-based Distributed Authering and Versioning. De term wordt ook gebruikt om te verwijzen naar het protocol dat deze groep definieerde. Dit protocol is veeleer een uitbreiding op het http protocol dan een protocol op zich. Na aanvang van het werk werd het duidelijk dat de afhandeling van zowel Distributed Authering als Versioning een te grote taak was zodat beide zaken gesplitst werden. De WebDAV groep besloot de versioning in eerste instantie niet meer in het opzet mee te nemen. Het protocol bestaat uit een set van nieuwe methoden en headers om in http gebruikt te worden. Dit protocol onderscheidt zich omdat het ´e´en van de eerste was dat van XML gebruikt maakt. WebDAV voegt de methoden in tabel 6.1 aan het http protocol toe. Methode PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK
Omschrijving Ophalen van de eigenschappen van een resource. Gebruikt om meerder eigenschappen te veranderen of te verwijderen. Gebruikt om een resource van de ene naar de ander URI te kopi¨eren. Gebruikt om een resource van de ene naar de ander URI te kopi¨eren. Gebruikt om een resource van de ene naar de andere URI te verplaatsen. Gebruikt om toegang tot een resource te blokkeren voor andere processen. Om toegang te deblokkeren. Tabel 6.1: De WebDAV http extensies
Een resource is een aan http specifieke term die ruwweg gedefinieerd wordt als hetgeen waarnaar een URI1 verwijst. De WebDAV werkgroep werkt nog steeds verder aan een aantal uitbreidingen. 1
URI: Uniform Resource Identifier
20
HOOFDSTUK 6. WEBDAV
6.1
21
Jakarta Slide
Om toegang te krijgen tot een WebDAV server werd er gebruik gemaakt van de Jakarta Slide bibliotheken. Deze bibliotheken werden slechts in zeer beperkte mate gebruikt. Het is namelijk enkel voor het schrijven naar de server noodzaak om van de WebDAV uitbreidingen gebruik te maken. Lezen van de WebDAV server zelfs als hij beveiligd is, gebeurt steeds via het gewone http protocol. Dit kan dus ook steeds gebeuren met klassen die deel uit maken van de standaard java bibliotheken. Dit open source project is van de hand van de makers van de zeer bekende Apache webserver. Hoewel de applicatie ontworpen is voor gebruik op een server, wordt er toch uitsluitend van de client bibliotheken gebruik gemaakt. De toepassing is namelijk een client van de WebDAV server. Deze programma bibliotheek en meer informatie erover kan gevonden worden op http://jakarta.apache.org/slide/. De API vindt men op http://jakarta.apache.org/slide/clientjavadoc/index.html.
Hoofdstuk 7
Javadoc Met javadoc kunnen er aan de hand van commentaar, dat rechtstreeks tussen de code wordt ingevoerd, automatisch HTML bestanden gegenereerd worden in de kenmerkende stijl van java-API1 ’s. Een voorbeeld hiervan is: bijvoorbeeld de ”JavaTM 2 Platform, Standard Edition, v 1.4.2 API Specification”. Dit is terug te vinden op http://java.sun.com/j2se/1. 4.2/docs/api/. Het commentaar dat voor javadoc bestemd is onderscheidt zich van het normale java commentaar doordat de begintag een extra sterretje bevat. De javadoc compiler veronderstelt steeds dat het commentaar aangaande een bepaalde constante, variabele, klasse, constructor of methode zich onmiddellijk boven de respectievelijke declaratie bevindt. /* * normaal java commentaar */ /** * java commentaar bestemd voor de javadoc compiler */ Om het samenstellen van deze documentatie meer mogelijkheden te geven is het noodzakelijk uw commentaar van een aantal eenvoudige tags te voorzien. Verder in dit hoofdstuk een overzicht van enkele van de van deze tags waarvan ik veelvuldig gebruik gemaakt heb. Het aanroepen van de javadoc compiler kan op eenvoudige grafisch wijze gebeuren vanuit Eclipse. Meer informatie kan gevonden worden op: http://java.sun.com/j2se/1.5.0/docs/ tooldocs/solaris/javadoc.html
7.1
@author
Deze tag wordt meestal onderaan de commentaarblok, behorend bij klasse, geplaatst. Hij wordt gebruikt om de auteur van deze klasse kenbaar te maken. /** * @ author Koen De Voegt */ 1
API: Application Programming Interface
22
HOOFDSTUK 7. JAVADOC
7.2
23
@param
Dit wordt gebruikt om te verduidelijken met welke parameters een bepaalde methode moet aangeroepen worden. /** * @param text The text to be displayed by the label. * @param size Sets the size of this label. */
7.3
@return
@return dient om verduidelijking te geven bij de teruggegeven waarden van een methode. /** * @return The value of the align property, one of the following constants * defined in ALabel: LEFT_ALIGNMENT, CENTER_ALIGNMENT, RIGHT_ALIGNMENT. */
7.4
@see
Deze tag geeft See Also” in het HTML bestand. Hiermee wordt meestal verwezen naar ” methoden die verwante functies hebben. De See-tag heeft de volgende vorm: @see package.class#member label Men kan respectievelijk het pakket, de klasse en het deel van de klasse waar naar verwezen wordt, opgeven. Deze verwijzingen zijn relatief, zodat het pakket en de klasse eventueel weggelaten kunnen worden. Ook het label kan weggelaten worden, in dit geval wordt gewoon de naam van definitie van de methode waarnaar verwezen wordt, gebruikt. /** * @see ALabel#getHorizontalMargin() */
Deel II
Ontwikkeling applicaties
24
Hoofdstuk 8
De TV-GUI Dit hoofdstuk geeft een overzicht van de functionaliteit van de TV-GUI en de verschillende elementen waarmee tijdens het ontwerp rekening werd gehouden.
8.1
Beperkingen
De belangrijkste beperkingen zijn: • Hoewel de software ontwikkeling op PC gebeurde, is de uiteindelijke toepassing voor gebruik op een STB1 bedoeld. Er moest dus met de beperkingen die eigen zijn aan dit platform rekening gehouden worden. Er kan dus niet van alle standaard java bibliotheken gebruik gemaakt worden. • De invoer moet gebeuren via een standaard afstandsbediening. Deze beschikt over een beperkte hoeveelheid toetsen waarvan er bovendien slechts enkele beschikbaar zijn, namelijk de cijfertoetsen 0-9, de vier richtingspijltjes, de selectieknop en de vier kleurknoppen. • De codering van bestandsformaten die gebruikt kunnen worden zijn ook sterk beperkt. Deze formaten zijn GIF, JPEG, PNG, MPEG I-Frame. Ook qua kleurenpallet bestaan er beperkingen. In mijn applicatie werd er enkel van stilstaande beelden gebruik gemaakt. Deze werden allemaal naar het PNG-formaat geconverteerd. Al deze beperkingen zijn in de MHP2 standaard uitgebreid gedefinieerd.
8.2
Structuur van de code
Hoewel de TV-GUI vanuit het gebruikersstandpunt een afzonderlijke applicatie is, vormt het gezien vanuit het standpunt van de ontwikkelaar ´e´en geheel met de code van het AmigoTV project. Het was dus aangewezen de voor AmigoTV reeds uitgedachte structuur gewoon over te nemen. Voor mijn applicatie werden drie pakketten gebruikt: • com.alcatel.rena.amigotv.client.gui.awt.* Dit pakket is de verzameling basiscomponenten die veelvuldig gebruikt worden om de GUI op te bouwen. 1 2
STB: set-top box MHP: Multimedia Home Platform
25
HOOFDSTUK 8. DE TV-GUI
26
• com.alcatel.rena.amigotv.client.gui.model.* Dit pakket bevat alle klassen die met de beheersing van de gegevens en de controle van het programmaverloop te maken hebben. • com.alcatel.rena.amigotv.client.gui.* Dit pakket groepeert alle klassen die met de visuele voorstelling te maken hebben. Hoewel het overnemen van de structuur en delen van een reeds bestaande applicatie, een heleboel werk uitspaart, introduceert deze manier van werken wel een nieuwe moeilijkheidsgraad. Er moet namelijk werk geleverd worden gebaseerd op code die onvolledig is, die nog in constante evolutie is en die helemaal niet gedocumenteerd is. Dit laatste op uitzondering van zeer summiere commentaar die zich rechtstreeks tussen de code zelf bevindt. Om de samenwerking tussen softwareontwikkelaars die aan dezelfde code werken eenvoudiger te doen verlopen bestaan er versie-controle-systemen. Bij Alcatel werd er gebruik gemaakt van Subversion ook gekend onder de afkorting SVN. Dit alles zorgde ervoor dat het doorgronden van deze code dan ook zeer veel tijd in beslag nam. Een uitgebreidere bespreking van deze pakketten kan in de hoofdstukken 9, 10 en 11 teruggevonden worden.
8.3
De applicatie opstarten
Als het AmigoTV-icoontje (Figuur 8.1) in de linker bovenhoek over het televisie beeld verschijnt, betekent dit dat de applicatie correct gestart is. Met de rode knop van de afstandsbediening wordt het login scherm van AmigoTV weergegeven. Met de groene knop komt men op het overzichtsscherm van de kalenderapplicatie. Hieronder worden de verschillende schermen, waaruit de kalenderapplicatie is opgebouwd, overlopen.
Figuur 8.1: Het AmigoTV-icoontje
8.4
Het Overzichtsscherm
Onderaan het scherm wordt in de gepaste kleur de functie van de knoppen op de afstandsbediening weergegeven. Dit zou voor de gebruiker een vertrouwd beeld moeten zijn aangezien ook Teletext op een gelijkaardige manier werkt. Om eenvoudige toegang tot de applicatie te garanderen moet er voor het uitlezen van gegevens enkel gebruik van de kleurtoetsen gemaakt worden. Verder werd het aantal schermen waaruit de applicatie opgebouwd is, bewust beperkt. Vanaf het overzichtsscherm kan men met de rode knop steeds terugkeren naar het normale televisieprogramma, dit naar analogie met AmigoTV. Met de groene knop kan vanuit het overzichtsscherm door de verschillende kalenderschermen gebladerd worden. Deze schermen zijn achter´e´envolgens het Vandaag”-, Morgen”-, Deze Week”- en Deze Maand”-scherm. ” ” ” ”
HOOFDSTUK 8. DE TV-GUI
27
Figuur 8.2: Het Overzichtsscherm
Met de gele knop wordt de meest recente notitie weergegeven. De Blauwe knop zorgt voor de weergave van het boodschappenlijstje.
8.5
Het Vandaag”-scherm ”
Dit scherm (Figuur 8.3) geeft een duidelijk overzicht van de huidige dag. Het toont een lijst van de afspraken die deze dag plaatsvinden en de tijdstippen waarop ze aanvangen en eindigen. Met de groene knop kan men verder gaan naar het Morgen”-scherm. De rode knop ” kan gebruikt worden om opnieuw het overzichtsscherm te bereiken. De functionaliteit van de rode toets blijft verder in de applicatie onveranderd.
Figuur 8.3: Het Vandaag”-scherm ”
HOOFDSTUK 8. DE TV-GUI
8.6
28
Het Morgen”-scherm ”
In Figuur 8.4 worden op identieke wijze als in het Vandaag”-scherm de afspraken van de op ” vandaag volgende dag weergegeven. De groene toets brengt u nu verder naar het weekoverzicht.
Figuur 8.4: Het Morgen”-scherm ”
8.7
Het Deze Week”-scherm ”
Dit scherm (Figuur 8.5) geeft een overzicht van de afspraken van de huidige week. De beginen eindtijd van de afspraken worden wegens plaatsgebrek niet meer weergegeven. De eventueel te lange omschrijving van de afspraak wordt automatisch afgekort tot de juiste breedte van de kolom. Het weekend wordt in mat blauw weergegeven.
Figuur 8.5: Het Deze Week”-scherm ”
HOOFDSTUK 8. DE TV-GUI
8.8
29
Het Deze Maand”-scherm ”
Op het Deze Maand”-scherm (Figuur 8.6) wordt een overzicht van de volledige maand ge” geven. De afspraken worden ingekort zoals dat ook bij het weekoverzicht gebeurd, bovendien worden nu enkel de eerste twee afspraken van de dag getoond. De weekends worden net zoals bij het Deze Week”-scherm in het lichtblauw weergegeven en de huidige dag in het ” donkerblauw.
Figuur 8.6: Het Deze Maand”-scherm ”
8.9
Het Notitie”-scherm ”
Door vanaf dit scherm (Figuur 8.7) herhaaldelijk op de gele toets te drukken kan er op cyclische wijze door de verschillende aanwezige notities gebladerd worden. Dit gebeurt chronologisch te beginnen met de meest recente notitie. Met de rode knop kan er zoals steeds naar het overzichtsscherm worden teruggekeerd.
Figuur 8.7: Het Notitie”-scherm ”
HOOFDSTUK 8. DE TV-GUI
8.10
30
Het Boodschappen”-scherm ”
Deze functionaliteit is in de traditionele PIM’s3 ongezien. Het biedt de gebruiker de mogelijkheid om op ´e´en centrale plaats een boodschappenlijstje, samengesteld door de verschillende familieleden, bij te houden. Deze functie komt uiteraard maar ten volle tot haar recht indien men daadwerkelijk over mobiele toegang tot zijn gegevens beschikt. Dit zou er dan voor moeten zorgen dat, vanuit de supermarkt bijvoorbeeld, steeds de meest recente boodschappenlijst opgevraagd kan worden.
Figuur 8.8: Het Boodschappen”-scherm ”
8.11
Gegevensopslag
Voor het opslagen van de kalendergegevens die de applicatie verzamelt, werd er gezocht naar een reeds bestaand bestandsformaat. Het werd na enig opzoek werk duidelijk dat er ´e´en standaard was die veruit de ruimste ondersteuning genoot. Toen bleek dat er bovendien Open Source bibliotheken bestonden die de toegang tot deze bestanden sterk vereenvoudigen lag onze keuze vast. Er werd gekozen voor het iCalender (iCal) bestandstype. Meer informatie over iCal kan gevonden worden in Appendix 4. Bestanden kunnen zowel lokaal als op afstand opgeslagen worden. Dit is noodzakelijk omdat niet elke STB over opslagcapaciteit beschikt. De op afstand opgeslagen bestanden kunnen zich zowel op een beveiligde als op een publiek toegankelijke server bevinden. De bestandstoegang wordt uitgebreider besproken in hoofdstuk 14. De applicatie is tot op heden niet configureerbaar. Dus het gebruik van al deze mogelijkheden is voorlopig enkel hardcoded te verwezenlijken.
3
PIM: Personal Information Managers
Hoofdstuk 9
Het AWT pakket In dit hoofdstuk worden de basis elementen besproken die nodig zijn om een GUI op het interactieve televisie platform op te bouwen. Dit opbouwen van basiscomponenten is nodig om een applicatie te krijgen die compatibel is met de MHP standaard, waarover meer in Sectie 3.3. Andere AWT pakketten, zoals java.awt, zijn ontwikkeld voor de verschillende PC platformen niet voor een STB. Deze AWT’s zijn dan ook niet bruikbaar op een platform voor interactieve televisie waar specifieke beperkingen, zoals voorgeschreven in de MHP standaard, gelden. Het basiswerk voor de Alcatel-Awt werd gedaan door Michael Brackx. In dit hoofdstuk bespreek ik de klassen die ik aan het AWT pakket heb toegevoegd of waaraan ik aanzienlijke wijziging heb gedaan. Via Javadoc werd er over deze componenten een uitgebreide documentatie samengesteld. Deze is beschikbaar op de CD-ROM in bijlage. Meer over het aanmaken van deze javadocs kan in Appendix 7 gevonden worden. Voor de uitbereidingen die gemaakt werden, werd indien mogelijk gestreefd naar een naamgeving en functionaliteit die de naamgeving en functionaliteit van de java-AWT zo sterk mogelijk benaderd.
9.1
De AComponent en AAbstractComponent klassen
Dit zijn twee zeer fundamentele componenten. In het oorspronkelijke Alcatel AWT pakket werd er steeds met lay-outs gewerkt waarbij de container zijn grootte aangepast werd aan de inhoud die hij op dat moment bevatte. (Bijvoorbeeld de LeftGrowingLayout) Dit is niet steeds bruikbaar indien men wisselende hoeveelheden gegevens op een overzichtelijke manier wil weergeven. Een maandoverzicht waarop alleen de dagen zichtbaar zijn waarop er reeds iets gepland is, zou toch wel zeer onoverzichtelijk zijn bijvoorbeeld. Het was dus noodzakelijk nieuwe lay-outs te maken die op een fundamenteel andere manier werken dan diegene die reeds in ons pakket bestonden, maar die toch moesten voldoen aan de vooraf gedefinieerde interfaces. Bij deze lay-outs, zoals GridLayout bijvoorbeeld, wordt de ruimte die in de container beschikbaar is verdeeld over de verschillende componenten die hij bevat. Dit maakt het noodzakelijk om met twee verschillende afmetingen te werken, namelijk de size en preferredSize. De size bepaalt de afmetingen die daadwerkelijk weergegeven zullen worden. De preferredSize bevat een richtgrote die slechts in bepaalde gevallen gebruikt wordt. Zo zal een BoxLayout bijvoorbeeld afhankelijk van zijn instelling enkel de hoogte of de breedte van deze preferredSize 31
HOOFDSTUK 9. HET AWT PAKKET
32
gebruiken maar nooit beide. Omdat alle grafische componenten aan een lay-out moeten toegewezen kunnen worden, was het nodig ondersteuning voor deze preferredSize in de absolute basis klassen, waarop de hele AWT gebouwd is, in te voegen. Deze basisklassen zijn AComponent en AAbstractComponent. Aan de interface AComponent werden de methoden setPreferredSize, getPreferredSize toegevoegd zodat zij vanuit alle afgeleide klassen steeds toegankelijk zijn. In de abstracte klasse AAbstractComponent worden de methoden setPreferredSize, getPreferredSize daadwerkelijk ge¨ımplementeerd. Ook het attribuut preferredSize dat de daadwerkelijke gegevens bevat wordt hierin gedefinieerd.
9.2
De ALabel klasse
Deze component bestond ook reeds, maar was zeer beperkt in mogelijkheden. Er kon alleen gecentreerde tekst weergegeven worden. Door toevoegen van de methode setAlign(int align) werd er voor gezorgd dat de tekst nu rechts, links of gecentreerd kan worden weergegeven. Men roept deze methode best aan met als argument ´e´en van deze constanten: ALabel.RIGHT ALIGNMENT, ALabel.LEFT ALIGNMENT of ALabel.CENTER ALIGNMENT. Met de methode setHorizontalMargin(int horizontalMargin) kan er een marge worden ingesteld die er voor zorgt dat de links of recht uitgelijnde tekst niet tegen de rand van het label aan plakt. In Figuur 9.1 zien we bovenaan een gecentreerd label met als tekst Note” ” en onderaan een rechts uitgelijnd label met als tekst Jessy”. ”
Figuur 9.1: ALabel en AMultilineLabel
HOOFDSTUK 9. HET AWT PAKKET
9.3
33
De AMultilineLabel klasse
AMultilineLabel is een uitbereiding van ALabel. Het zal de tekst die het moet weergeven automatisch verdelen over verschillende lijnen afhankelijk van de breedte die voorzien is om het label weer te geven. Hierbij kan men de tekst uitlijnen met behulp van dezelfde methoden die in ALabel beschikbaar zijn. In Figuur 9.1 zien we hoe een AMultilineLabel gebruikt wordt voor de weergave van een Post-it. In bijlage kan het algoritme gevonden worden dat ontwikkeld werd om een String over verschillende lijnen af te drukken. (Sectie A.1)
9.4
De AShortLabel klasse
Ook AShortLabel is een uitbereiding van ALabel. Indien er te weinig plaats is in een label om alle karakters van de toegewezen string weer te geven zal dit type label er voor zorgen dat de tekst wordt afgebroken op de juiste plaats en dat er op die plaats ...1 ” wordt weergegeven. ” Een voorbeeld hiervan is te zien in Figuur 9.2, waarin zowel het woord multimedia als DSP zich elk in een afzonderlijk AShortLabel bevinden.
Figuur 9.2: AShortLabel
9.5
De AList klasse
De klasse AList is een extensie van de klasse AContainer. Deze klasse biedt de mogelijkheid om verschillende AComponents te groeperen. Deze componenten worden dan onder elkaar geschikt. Er kan met de methode add zowel ´e´en component als een List van Componenten toegevoegd worden. Componenten die niet weergegeven kunnen worden op de beschikbare plaats, worden wel steeds opgeslagen. De AList wordt veelvuldig gebruikt om afspraken weer te geven in de verschillende kalenderschermen. Voorbeelden van een AList zijn onder andere te zien in Figuur 9.2 en 9.3.
9.6
De BoxLayout klasse
BoxLayout is een implementatie van ALayout. De klasse heeft twee constructoren BoxLayout() en BoxLayout(int axis). Als de eerste constructor gebruikt wordt, worden de componenten via de standaard waarde, de Y-as, geordend. Met de tweede constructor kan er bepaald worden via welke as er gewerkt moet worden. Als waarde voor de axis variabele kan men best ´e´en van twee constanten, BoxLayout.X AXIS of BoxLayout.Y AXIS, nemen. Indien deze lay-out met de methode setLayout() aan een container (AContainer) wordt toegekend 1
unicode teken \u2026
HOOFDSTUK 9. HET AWT PAKKET
34
worden alle componenten die deze container bevat geordend volgens de ingestelde as. (X-as van links naar rechts, Y-as van boven naar onder) Indien de X-as/Y-as geselecteerd werd zullen de componenten de hoogte/breedte van de container overnemen. De breedte/hoogte wordt gelijk aan de waarde preferredSize.width/preferredSize.height. De laatst toegewezen component krijgt steeds alle overige ruimte. In Figuur 9.3 werd er van een BoxLayout gebruik gemaakt. Het scherm is opgebouwd uit een ALabel (met de tekst Today”), een AImage (de ” lijn) en een AList (die de uren en afspraken bevat).
Figuur 9.3: BoxLayout
9.7
De GridLayout klasse
GridLayout is eveneens een implementatie van ALayout. De standaard constructor van GridLayout voorziet een rooster van 3 rijen en 3 kolommen. Via de constructor GridLayout(int cols, int rows) kan er een rooster verkregen worden met een willekeurig aantal rijen en kolommen. De componenten zullen de rooster van links naar rechts en van boven naar beneden invullen. Er kunnen al dan niet rasterlijnen weergegeven worden door de methode setShowLines(boolean showLines) te gebruiken. Indien de ruimte die in de container voorzien is niet volledig gelijkmatig verdeeld kan worden over de verschillende rijen en kolommen, wordt het eventuele overschot aan de aan de rechtse kolom en onderste rij toegewezen. In Figuur 9.4 wordt er van een GridLayout met rasterlijnen gebruik gemaakt. In sectie A.2 van de bijlagen kan de code die voor de uitlijning van de aan een gridlayout toegevoegde elementen zorgt.
Figuur 9.4: GridLayout
Hoofdstuk 10
Het Model pakket In het pakket Model bevinden zich alle klassen die te maken hebben met de loop van het programma en met de verwerking van gegevens. In dit hoofdstuk worden de klassen besproken die ik aan dit pakket heb toegevoegd en diegene waaraan ik aanzienlijke toevoegingen heb gedaan. De klassen die ik zelf geschreven heb, zijn DayView, WeekView, MonthView, NoteView en GroceryListView, gegroepeerd in de sectie De -View klassen (Sectie 10.1) en FridgeTV (Sectie 10.3). Van deze klassen zijn er op de bijlage-CD-ROM javadocs beschikbaar. Verder worden de klassen Models, ModelsView, ScenesImpl, ScenesViewItf en NormalTV besproken. In deze klassen waren toevoegingen nodig om de applicatie te laten werken volgens de door de AmigoTV ontwikkelaars reeds vooropgestelde principes.
10.1
De -View klassen
De klassen DayView, WeekView, MonthView, NoteView en GroceryListView zijn de klassen die gegevens verzorgen voor de overeenkomstige klassen DayViewUI, WeekViewUI, MonthViewUI, NoteViewUI en GroceryViewUI. Het zijn allen klassen die een extensie zijn van de abstracte klasse AbstractMenu. De Constructors van de klassen DayView, WeekView en MonthView worden telkens opgeroepen met als parameter de naam van het ICalendar bestand dat alle kalender gegevens bevat van onze gebruiker. Dit iCal bestand wordt dan ingelezen met behulp van de klassen besproken in Sectie 14.1. Hierna halen deze drie klassen dan de gepaste informatie op uit het ICalendar object en slaan die informatie op in een ArrayList. De respectievelijke -UI klasse zal deze gegevens uit de ArrayList terug ophalen en op het scherm weergeven. Bij DayView moet er als parameter eveneens meegegeven worden om welke dag het gaat (Vandaag of morgen). Dit gebeurt door middel van de constanten DayView.TODAY of DayView.TOMORROW. Dit omdat de klasse DayView zowel gebruikt wordt om de gegevens over vandaag als over morgen op te slaan. Hierbij vermelden we dat er aan DayViewUI niks specifiek moet worden doorgegeven. De klasse NoteView wordt opgeroepen met als parameter een object van de klasse NoteList dat alle notities bevat. De klasse GroceryListView met een object van de klasse GroceryList. Al deze klassen staan tevens in voor het bijhouden van de labels die bij de verschillende 35
HOOFDSTUK 10. HET MODEL PAKKET
36
kleurknoppen op de afstandsbediening horen en die onderaan elk applicatiescherm worden weergegeven. Deze labels worden via de methoden getGreenLabel(), getYellowLabel() en getBlueLabel() opgevraagd door de klasse CommandBarUI die wordt besproken in Sectie 11.4. Merk op dat het rode label, dat doorheen al de verschillende toepassingsvensters hetzelfde label en functie behoudt, hier niet wordt bijgehouden. Ook de functies die de kleurknoppen moeten vervullen, wederom met uitzondering van de rode kleurknop, worden in deze klassen bijgehouden, meer bepaalt in de methoden: onGreenCommand(), onYellowCommand() en onBlueCommand(). Deze methoden moeten er in onze applicatie meestal enkel voor instaan dat de huidige -View wordt verborgen en dat de correcte -View zichtbaar wordt. De code waarin in de klasse DayView gebruik wordt gemaakt om de list in te vullen is terug te vinden in sectie A.3 van de bijlagen.
10.2
De NormalTV klasse
Hier wordt de verwerking van de invoer gedaan die tijdens het gewone TV kijken wordt ontvangen. Deze klasse luistert enkel naar de vier kleur knoppen. Waarvan er slechts twee daadwerkelijk gebruikt worden: De rode om AmigoTV te starten en de Groene om FrigoTV te starten. Deze laatste functionaliteit toevoegen was dus ook het enige dat er aan deze klasse gewijzigd moest worden. Dit gebeurt door de reeds bestaande methode onGreenCommand() in te vullen. De methode showFridgeScreen() uit de hieronder besproken klasse (Sectie 10.7) ScenesImpl wordt hier aangeroepen.
10.3
De FridgeTV klasse
Deze klasse is een extensie van AbstractCommandBarModel en een implementatie van CommandBarModel. De klasse FridgeTV is de models klasse die geladen wordt wanneer er tijdens het normale TV kijken op de groene knop gedrukt wordt. Het staat in voor de labels die worden weergegeven wanneer er geen enkele -View geladen is. Ook de functionaliteit die bij deze labels hoort zit in deze klasse. Dit alles verloopt analoog met de werking van de -View klassen. Dus via onder andere de methoden: getGreenLabel(), onGreenCommand(), ... De FridgeTV klasse is geen extensie van AbstractMenu zoals de -View klassen (Sectie 10.1) omdat het geen gegevens bevat. In tegenstelling tot de NormalTV klasse (Sectie 10.2) worden de labels hier wel weergegeven, de interface om dit te verwezenlijken is de CommandBarModel klasse.
10.4
De Models klasse
In deze klasse wordt er van elke verschillende -View klasse een concreet object aangemaakt. Deze objecten hebben steeds dezelfde naam als de overeenkomstige klasse. Dit op uitzondering van de eerste letter. Bij een klasse begint de naam steeds met een hoofdletter. De naam van het afgeleide object begint steeds met een kleine letter. Deze manier van werken is gebruikelijk in het java programmeren. Van de klasse DayView worden hier zowel een object todayView als tomorrowView gemaakt. Aan de vier views die kalender gegevens weergeven, namelijk todayview, tommorowview weekview en monthview, wordt eveneens de bestandsnaam van het te openen kalender bestand als parameter doorgegeven. De klassen noteView en groceryListView worden ge¨ınitialiseerd met als parameter respectievelijk een noteList en een
HOOFDSTUK 10. HET MODEL PAKKET
37
groceryList. Deze worden, door de methoden InitData.initNotes en InitData.initGroceries uit te voeren, gevuld met voorbeeld waarden.
10.5
De ModelsView klasse
Deze klasse zorgt voor de link tussen het Model-pakket en het Gui-pakket. Voor elke bestaande -view wordt er hier een methode voorzien die het mogelijk maakt om deze -views op te roepen vanuit een -UI klasse. Dit gebeurt in de kalender applicatie enkel in de klasse FridgeTVUI (Sectie 11.5).
10.6
De ScenesViewItf klasse
Aan deze interface klasse wordt enkel een constante string toegevoegd met als naam FRIDGETV en als waarde fridgetv”. Deze string zal in het pakket gui gebruikt worden om te ” controleren welke model klasse geladen moet worden om een gegeven sc`ene weer te geven. Een sc`ene is een samenstelling van verschillende elementen die samen worden weergegeven. Een sc`ene bevat bijvoorbeeld een achtergrond, commandbar en ´e´en of meerdere views of menu’s die al dan niet zichtbaar zijn. Andere sc`enes zijn bijvoorbeeld normaltv, die enkel het AmigoTV icoontje bevat, of login, het AmigoTV loginscherm.
10.7
De ScenesImpl klasse
In deze klasse wordt door ´e´en van de constanten, waarover in de vorige sectie (Sectie 10.6) sprake was, toe te kennen aan de variabele scene, bijgehouden in welke Sc`ene we ons op dit ogenblik daadwerkelijk bevinden. In deze klasse blijven de benodigde wijzigingen dan ook zeer beperkt. Er wordt hier enkel de methode showFridgeScreen() toegevoegd. In deze methode wordt de variabele scene op FRIDGETV gezet. Ook wordt de enable methode van de juiste sc`ene aangeroepen zodat de toetsaanslagen nu door deze sc`ene afgehandeld kunnen worden. Hierna is het nog noodzakelijk de methode triggerSceneChanged aan te roepen zodat de wijzigingen ook daadwerkelijk zullen weergegeven worden.
Hoofdstuk 11
Het GUI pakket De grafische gebruikers interface van de kalenderapplicatie wordt opgebouwd uit een grote verzameling klassen. Deze klassen zijn onder andere de eerder reeds vermelde klassen: DayViewUI, WeekViewUI, MonthViewUI, NoteViewUI en GroceryListViewUI, de klasse FridgeTV, die het overzichtsscherm weergeeft, InternalFrameUI, de ouderklasse van de verschillende ViewUI klassen en de DayOfMonthUI klasse, bevat ´e´en dag op een maand en week overzicht. Verder zijn er ook in dit pakket wijzigingen aangebracht in verschillende reeds bestaande klassen, namelijk: CommandBarUI, DefaultSkin, ScenesUI, Gui, Images en Constants. Van de klassen die volledig door mij werden geschreven zijn de javadocs beschikbaar op de CD-ROM.
11.1
De InternalFrameUI klasse
Deze klasse werd aangemaakt om een basisklasse te hebben voor de verschillende -ViewUI klassen. In AmigoTV worden deze voorgrondcomponenten steeds op AbstractMenuUI gebaseerd. Klasse die hierop gebaseerd zijn leveren een menu op waarin elk element geselecteerd kan worden. In de kalenderapplicatie kunnen geen elementen geselecteerd worden. InternalFrameUI is dus een vereenvoudigde versie van AbstractMenuUI die geen ondersteuning voor selectie biedt. InternalFrameUI is op zijn beurt een extensie van AContainer, zodat ook al de afgeleiden van InternalFrameUI door overerving hiervan afgeleid zijn.
11.2
De -ViewUI klassen
Al deze klassen zijn een extensie van de InternalFrameUI klasse. Deze klassen bevatten de opbouw van de grafische componenten. Ze maken hiervoor veelvuldig gebruik van de componenten uit het AWT pakket. Verder bevatten ze allen een methode layout. Deze methode zorgt er voor dat effectieve kalendergegevens worden weergegeven. Het leest daarvoor gegevens in uit een ArrayList. Deze ArrayList wordt van zijn elementen voorzien door de overeenkomstige -View klasse. Indien de gegevens veranderen is dit de enige methode uit de -ViewUI die moet worden aangeroepen om de veranderingen weer te geven.
11.2.1
De DayViewUI klasse
Deze klasse wordt zowel voor de weergave van het vandaag”- als het morgen”-scherm ge” ” bruikt. De weergave wordt opgebouwd door een BoxLayout(Sectie 9.6) in de Y-richting te 38
HOOFDSTUK 11. HET GUI PAKKET
39
gebruiken. Hieraan wordt achtereenvolgens een ALabel, een AImage en een AList toegevoegd. Verder wordt er een nog achtergrond afbeelding ingesteld. De achtergrond die in het huidige ontwerp gebruikt wordt kan op een eenvoudige en snelle manier vanuit code gegenereerd worden. Het gebruiken van een afbeelding kan hier dan ook vooral gezien worden als voorbereiding op een meer grafische vormgeving in toekomstige versies. De code waar de gegevens uit de list worden opgehaald en op het scherm worden weergegeven is terug te vinden in bijlage sectie A.5. Verder wordt er in sectie A.4 weergeven hoe het scherm opgebouwd wordt.
11.2.2
De WeekViewUI klasse
De basisstructuur van deze klasse is opnieuw een boxlayout volgens de Y-as. Met hierin een ALabel, een AImage en een AContainer. Aan deze container wordt dan een GridLayout toegewezen met ´e´en rij en zeven kolommen. Aan elk van deze zeven kolommen wordt een DayOfMonthUI toegevoegd. De weekdag waarmee een week begint wordt bepaald door de methode getFirstDayOfWeek van de klasse Calendar te raadplegen. Dit is afhankelijk van de Windows instellingen.
11.2.3
De MonthViewUI klasse
Hier wordt er als basis ook weer hetzelfde stramien gebruikt. Een BoxLayout (Y-as), met een ALabel, een AImage en een AContainer. Deze klasse maakt dan gebruik van een andere layout, namelijk de GridLayout om aan de AContainer toe te wijzen. Met behulp van deze layout wordt een rooster gecre¨eerd van 7 op 5 of 7 op 6. Dit omdat sommige maanden gespreid zijn over vijf en sommige over zes weken. De weergave van de afzonderlijke dagen word wederom door de klasse DayOfMonthUI verzorgd.
11.3
De DayOfMonth klasse
De DayOfMonth klasse wordt zoals eerder reeds vermeld, gebruikt om de afzonderlijke dagen weer te geven. Dit zowel in het Deze Week”-scherm als in het Deze Maand”-scherm. ” ” Verschillende instellingen bepalen het uitzicht van deze klasse. De dag en datum worden als parameters doorgegeven aan de constructor. Via de methode setEvents worden de afspraken van de dag doorgegeven. Methode setLongHeader wordt gebruikt om het onderscheid te maken tussen de twee voorstellingswijzen. De ene met enkel de dag voluit gecentreerd die bij het Deze Week”-scherm gebruikt wordt. Dit is de LongHeader voorstelling. De andere ” met de afgekorte dag links bovenaan en de datum rechts bovenaan zoals die in het Deze ” Maand”-scherm gebruikt wordt. Beide voorstellingswijzen worden opgebouwd door gebruik te maken van een BoxLayout volgens de Y-as. Bij de LongHeader voorstelling bevat deze BoxLayout een ALabel, met de gecentreerde dag en een AList. Bij de andere voorstelling bevat deze BoxLayout een AContainer en een AList. De AContainer bevat op zijn beurt twee ALabels ´e´en links en ´e´en rechts uitgelijnd. Deze worden geordend door een BoxLayout volgens de X-as. Ze bevatten respectievelijk de verkorte dag en de datum. Met de methode setWeekday wordt er bepaald of het een week- of weekenddag is. Dit vertaalt zich in een wijziging van de achtergrondkleur. De methode setWeekday zorgt eveneens voor een wijziging van de achtergrond kleur. Dit om de huidige dag aan te geven. De RGB waarden van de kleuren die in de applicatie gebruikt werden, werden bepaald met behulp van deze website: http://www.jafar.com/java/csel/.
HOOFDSTUK 11. HET GUI PAKKET
11.4
40
De CommandBarUI klasse
De wijzigingen, die in deze klasse aangebracht werden, hebben niet alleen effect op de kalender applicatie maar ook op AmigoTV. De CommandBarUI is verantwoordelijk voor het weergeven van de labels, die bij de kleurenknoppen op de afstandsbediening horen. In de oorspronkelijke applicatie werden deze labels steeds weergegeven op een zwarte balk onderaan. Om deze weergave mooier te maken werd er beslist deze zwarte balk weg te laten. Om te garanderen dat de labels echter nog steeds voldoende duidelijk weergegeven werden op elke achtergrond moest er een zwarte rand voorzien worden rondom alle letters van de vier labels. Op Figuur 11.1 is het verschil tussen beide implementaties van de CommandBarUI zichtbaar.
Figuur 11.1: Twee versies van de CommandBarUI klasse
11.5
De FridgeTVUI klasse
Dit is een uitbreiding van de klasse AContainer. Aan deze container worden al verschillende elementen toegevoegd die in deze sc`ene zichtbaar kunnen gemaakt worden. Dit zijn dus de achtergrond afbeelding, alle -ViewUI klassen en de commandbarUI. De -ViewUI klassen worden dus reeds bij het weergeven van de sc`ene geladen.
11.6
De DefaultSkin klasse
In deze klasse kunnen verschillende constante waarden voor de verschillende -ViewUIs ingesteld worden. Er wordt de locatie op het scherm van de verschillende -ViewUIs bijgehouden, het lettertype, de kleur van het lettertype, evenals als de klassen die bij de verschillende -ViewUIs horen.
11.7
De ScenesUI klasse
ScenesUI zorgt ervoor dat de juiste sc`ene wordt weergegeven. Dit gebeurt door de verschillende constanten in ScenesViewItf (Sectie 10.6) te vergelijken met de variabele waarde die de methode getScene uit de klasse Models teruggeeft. Hier moet de sc`ene FridgeTV toegevoegd worden.
HOOFDSTUK 11. HET GUI PAKKET
11.8
41
De Gui klasse
Dit is het bestand dat als eerste wordt aangeroepen als de applicatie gestart wordt. In de keyListener klasse worden bepaalde toetsaanslagen opgevangen. Deze toetsen worden tijdens de ontwikkelingsfase gebruikt om de applicatie te bedienen. Bepaalde toetsen op het toetsenbord nemen de functie van de knoppen op de afstandsbediening over. Tabel 11.1 geeft een overzicht van alle toetsen waar op de applicatie mogelijk kan reageren. Afstandsbediening boven onder links rechts OK rood groen geel blauw
Toetsenbord a & pijl boven d & pijl onder pijl links pijl rechts s & spatie u i o p
Tabel 11.1: Afstandsbedieningstoetsen TV-GUI
Voor een makkelijke bediening van de applicatie werden er aan de voor AmigoTV reeds gedefinieerde toetsen, nog enkele toetsen toegevoegd. Met name de pijltjes en de spatiebalk.
11.9
De Images klasse
De init methode van deze klasse wordt tijdens het opstarten van de applicatie aangeroepen. In deze methode bevinden zich verwijzingen naar alle klassen die van afbeeldingen gebruikmaken. Deze klasse maakt deel uit van het mechanisme om alle afbeeldingen op voorhand in te laden zodat de applicatie op een vlotte manier kan werken.
11.10
De Constants klasse
Deze klasse wordt er enkel voor gebruikt om bepaalde constanten die veelvuldig in de applicatie gebruikt worden te groeperen. Deze klasse bevat dus geen constructoren of methodes. Het lettertype dat in de TV-GUI gebruikt wordt, wordt in de constante FRIDGETV FONT opgeslagen. Dit font wordt in alle -ViewUI klassen gebruikt.
Hoofdstuk 12
De IM-Interface Deze applicatie zorgt ervoor dat de kalendergegevens toegankelijk worden via de verschillende IM clients, zoals MSN, ICQ, Yahoo!, AOL en jabber.
12.1
Werking
De gebruiker zal op zijn IM client een contactpersoon moeten toevoegen die geen echte persoon voorstelt maar waarachter de toepassing schuil gaat. Men zal dan via het zenden van gewone berichtjes naar deze contactpersoon gegevens kunnen opvragen en gegevens kunnen wijzigingen. Dit kan natuurlijk door de verschillende familieleden vanaf verschillende plaatsen tegelijkertijd gebeuren. Er moet echter wel rekening gehouden met een zekere syntax om de juiste werking van de applicatie te garanderen. Er is bewust gekozen om deze syntax zeer eenvoudige en natuurlijk te houden. De commando’s zijn niet hoofdletter gevoelig. De applicatie antwoordt steeds door samen te vatten welke wijzigingen er gemaakt werden.
12.1.1
Afspraken
Het opvragen van kalendergegevens gebeurt via de commando,s vandaag” en morgen”. ” ” Kim zegt: vandaag FrigoTV zegt: De afspraken van vandaag zijn: 08:30-15:40 17:30-19:00 20:00-22:00
School Bij Oma gaan eten Huiswerk maken bij Joyce
Het toevoegen van een afspraak aan de kalender gebeurt door te werken met het commando afspraak” gevolg door ofwel vandaag” ofwel morgen”. Dan komt er eventueel de begin” ” ” en eindtijd. Deze tijden kunnen weggelaten worden. Indien er ´e´en tijd meegegeven wordt dan zal zowel de begin- als eindtijd deze waarde aannemen. Als er geen enkel uur wordt meegegeven wordt er een afspraak voor de ganse dag gemaakt. De uren dienen steeds in 24u-notatie gegeven te worden. Het opgegeven uur mag uit ´e´en of twee cijfers bestaan. De minuten moeten steeds uit twee cijfers bestaan. Er mogen geen seconden meegegeven worden. 42
HOOFDSTUK 12. DE IM-INTERFACE
43
Er wordt verondersteld dat alle afspraken op dezelfde dag aanvangen en eindigen. Als laatste argument wordt de omschrijving van de afspraak gegeven. Kim zegt: afspraak vandaag 17:30 19:00 Bij Oma gaan eten FirgoTV zegt: Deze afspraak werd toegevoegd: vandaag van 17:30 tot 19:00. bij oma gaan eten
12.1.2
Boodschappen
Met behulp van het commando boodschappenlijst” wordt er een overzicht van de huidige ” boodschappenlijst opgevraagd. Naast elk item dat zich op de boodschappenlijst bevindt, wordt eveneens aangegeven wie dat item op de boodschappenlijst geplaatst heeft. Mama zegt: Boodschappenlijst FrigoTV zegt: De huidige boodschappenlijst is: brood boter melk eieren Fanta
Mama Mama Mama Mama Kim
Nieuwe boodschappen op het lijstje toevoegen gebeurt met boodschap” gevolgd door een of ” meerdere items. Deze items worden dan op de boodschappenlijst toegevoegd. De applicatie achterhaalt zelf wie de boodschappen op de lijst heeft toegevoegd. Mama zegt: Boodschap boter melk eieren FrigoTV zegt: Deze boodschappen werden toegevoegd: boter melk eieren
12.1.3
Mama Mama Mama
Notities
Alle berichtjes die niet beginnen met ´e´en van de voorgaande commando’s worden beschouwd als notities. Papa zegt: Ik kom vanavond een uurtje later thuis. FrigoTV zegt:
HOOFDSTUK 12. DE IM-INTERFACE Deze notitie werd op je prikbord bevestigd: ik kom vanavond een uurtje later thuis.
44
Hoofdstuk 13
Het IM Interface pakket Hier wordt het pakket beschreven dat voor de werking van de IM Interface (Hoofdstuk 12) zorgt. De volledige naam van dit pakket is: be.devoegt.koen.IM Interface. De javadocs die bij dit pakket horen evenals de volledige code programmacode kan op de CD-ROM in bijlage teruggevonden worden.
13.1
De Constants klasse
Deze klasse wordt er enkel voor gebruikt om bepaalde constanten die veelvuldig in de applicatie gebruikt worden te groeperen. De configuratie van de IM Interface kan gebeuren door enkel de, in deze klasse gedefinieerde constanten, te wijzigen. Deze klasse bevat geen constructoren of methodes. Deze contanten zijn opgesomd in tabel 13.1. Naam constante ICALSERVER ICALUSERNAME ICALPASSWORD JABBERSERVER JABBERUSERNAME JABBERPASSWORD
Functie De volledige URL van het iCal bestand. De gebruikers naam op de iCal server. Het wachtwoord op de iCal server. De naam van de Jabber server. De gebruikers naam op de Jabber server. Het wachtwoord op de Jabber server.
Tabel 13.1: De constanten
13.2
De Grocery klasse
Deze klasse is een zeer elementaire basisklasse die de nickname van de gebruiker die deze boodschap toevoegde en de naam van de boodschap groepeert.
13.3
De GroceryList klasse
In deze klasse wordt de verzameling van alle boodschappen bijgehouden. Door de methode addGrocerie worden boodschappen toegevoegd. Deze methode geeft de String terug die naar 45
HOOFDSTUK 13. HET IM INTERFACE PAKKET
46
de gebruiker wordt teruggezonden. De methode toString geeft eveneens een String terug. Deze String bevat alle boodschappen die zich op de boodschappenlijst bevinden. Hij wordt gebruikt wanneer de gebruiker de opdracht Boodschappenlijst” doorstuurd. Deze klasse ” wordt aangeroepen vanuit de MessageParser klasse.
13.4
De Note klasse
Deze klasse is zeer vergelijkbaar met Grocery. Het is eveneens een elementaire basisklasse die de gebruikersnaam van de zender van de boodschap, alsook de boodschap zelf groepeert.
13.5
De NoteList klasse
NoteList is een klasse die sterke verwantschap kent met GroceryList. Deze klasse staat namelijk in voor het opslaan van notities. Laat het toe ´e´en of meerdere Note’s tegelijk toe te voegen aan de NoteList. Geeft een de Note met gespecificeerde index in de lijst, of een lijst van alle Note’s terug.
13.6
De InitData klasse
Dit is een klasse die enkel gebruikt wordt om de NoteList en GroceryList te vullen met test waarden. Deze klasse heeft geen enkel nut in een afgewerkte applicatie. Deze klasse wordt ook gebruikt door de TV-GUI.
13.7
De AppointmentList klasse
In deze klasse bevinden zich maar twee methoden. Dit zijn met name addAppointment en getAppointment. Zoals de naam doet vermoeden wordt addApointment gebruikt om afspraken toe te voegen aan de AppointmentList. Er moeten vier argumenten meegegeven worden. Als eerste een string die de volledige body van het ontvangen bericht bevat. Dit bevat dus ook de identificatie Afspraak” die aan de MessageParser reeds duidelijk maakt dat deze methode gebruikt ” moet worden. Het tweede argument is een int die aanduid om welke dag het gaat. Deze wordt best meegegeven door middel van de constanten TODAY en TOMORROW. Het derde en vierde argument zijn een String die een aanvangs- en eindtijd bevatten. In deze methode wordt eerst het kalenderbestand ingelezen. Vervolgens wordt gecontroleerd of er geen, ´e´en of twee tijden werden meegegeven. Vervolgens wordt er een nieuwe afspraak gecre¨eerd. Deze wordt vervolgens aan de reeds bestaande kalender toegevoegd. Waarna de kalender opnieuw wordt opgeslagen. Als laatste geeft deze klasse een String terug die het antwoord bevat dat gegeven wordt wanneer een afspraak werd toegevoegd. De methode getAppointment wordt gebruikt om de afspraken van een bepaalde dag weer te geven. Deze methode heeft maar een argument nodig. Er wordt een int meegegeven die net zoals bij addAppointment aanduidt om welke dag het gaat. In deze methode wordt eerst het kalenderbestand geopend. Dan wordt er doorheen dit ganse bestand ge¨ıtereerd. Om zo
HOOFDSTUK 13. HET IM INTERFACE PAKKET
47
alle afspraken op die gegeven dag plaatsvinden te verzamelen. Van al deze gegevens wordt dan een String samengesteld die door de methode wordt teruggegeven. Het iCal bestand wordt in deze klasse geopend met behulp van de in Hoofdstuk 14 besproken klassen.
13.8
De FridgeTV klasse
Dit de klasse die de main van de IM-Interface toepassing bevat. Hierin wordt de verbinding met de server opgezet. De SubscriptionMode wordt op SUBSCRIPTION MANUAL gezet. Dit zorgt ervoor dat niemand zich op de status van onze applicatie kan abonneren. Deze instelling gebeurt door met een gewone Jabber chat client in te loggen onder de gebruikersnaam van onze applicatie. Hierna wordt de status gezet. Dan wordt aan de connectie met behulp van de methode addPacketListener een instantie van de FridgeTVPacketListener en de FridgeTVPacketListener klasse toegevoegd. Dit zorgt ervoor dat de invoer die via de connectie aangevoerd wordt en die door de filter toegelaten wordt kan verwerkt worden door de listener. Hierna wordt er in het programma gewacht tot het opdracht krijgt om te stoppen. Alle verdere verwerking gebeurt via de listener.
13.9
De FridgeTVPacketFilter klasse
De binnenkomende berichten worden door deze klasse gefilterd. Deze klasse is een extensie van de klasse PacketTypeFilter. De constructor van deze onderliggende klasse wordt in deze klasse aangeroepen met als argument Message.class. Dit zorgt ervoor dat de bovenliggende filter (FridgeTVPacketFilter) enkel nog maar berichten te verwerken krijgt die van het type boodschap zijn. En dus niets dat te maken heeft met de werking van Jabber, zoals bijvoorbeeld status of keep alive berichten. In FridgeTVPacketFilter worden enkel gebruikers die tot de gebruikersgroep familie of vrienden behoren geaccepteerd. Het is duidelijk dat het niet wenselijk is dat iedereen op het publieke Jabber-netwerk toegang heeft tot onze gegevens.
13.10
De FridgeTVPacketListener klasse
In deze klasse worden alle berichten, die door de FridgeTVPacketFilter (Sectie 13.9) worden doorgelaten, verwerkt. Aan de constructor van deze klasse wordt de connectie die in het hoofdprogramma (Sectie 13.8) wordt gemaakt doorgegeven. Dit is noodzakelijk omdat het deze klasse is die de antwoorden naar de gebruiker terugzendt. De inhoud van de antwoorden bekomt deze klasse door gebruik te maken van de MessageParser. (Sectie 13.12)
13.11
De FridgeTVRosterListener klasse
Wordt gebruikt om statusberichten ivm het roster te ontvangen en weer te geven. Deze klasse is enkel noodzakelijk tijdens de verdere ontwikkeling van de IM Interface. De applicatie zelf heeft in eerste instantie geen boodschap aan de status informatie van de gebruikers. Indien men de applicatie zou willen uitbreiden met een geautomatiseerd bericht, dat verstuurd wordt
HOOFDSTUK 13. HET IM INTERFACE PAKKET
48
telkens een herkende gebruiker online komt, dan moet deze klasse wel ge¨ımplementeerd zijn en nog verder uitgebreid worden.
13.12
De MessageParser klasse
De enige methode in deze klasse is getReply. Deze klasse maakt gebruik van de klassen GroceryList, NoteList en AppointmentList (Secties 13.3, 13.5 en 13.7). De methode getReply heeft als argumenten twee Strings. De eerste String bevat de volledige body van de boodschap. De tweede bevat de naam van de afzender. De klasse detecteert of de boodschap aanvangt met ´e´en van de vijf gekende commando’s (boodschappenlijst, boodschap, vandaag, morgen, afspraak). Indien dit niet het geval is wordt er verondersteld dat men een notitie wil toevoegen. Indien men een afspraak wil toevoegen wordt er reeds in deze klasse nagegaan over welke dag het gaat en of dat er al dan niet aanvangs- en eindtijd meegegeven is. Deze klasse geeft een String terug die het antwoord op het verzonden bericht vormt.
13.13
De UserList klasse
Deze klasse wordt door de klasse FridgeTVPacketFilter (Sectie 13.9) gebruikt om de leden van de familie en de vrienden op te slaan. Bij het aanmaken van deze lijsten wordt er via drie boolean’s meegegeven of gebruikers die tot deze groep behoren toestemming hebben notities, boodschappen of afspraken toe te voegen. Van deze laatste functionaliteit wordt in de huidige versie echter nog geen gebruik gemaakt. Een gebruiker die zich op ´e´en van de twee lijsten bevindt heeft volledige toegang tot de applicatie.
Hoofdstuk 14
Gedeelde klassen De klassen die gebruikt worden om toegang te krijgen tot gegevens in het iCal bestandsformaat worden zowel in de TV-GUI als in de IM-interface gebruikt. Daarom werden deze klassen in een apart pakket, namelijk be.devoegt.koen.iCal RW, gestoken. Dit is een afkorting voor iCalendar Read/Write. In alle codevoorbeelden in dit hoofdstuk wordt de afhandeling van de opgeworpen exceptions voor de duidelijkheid weg gelaten. Over het bestandstype kan er meer informatie teruggevonden worden in Bijlage 4. De javadocs van de door mij geschreven klassen evenals de volledige programmacode die bij dit pakket horen kunnen teruggevonden worden op de CD-ROM in bijlage.
14.1
iCal Bestanden Lezen
Om bestanden in te lezen werden er drie klassen voorzien, elk met een verschillend doel. De klassen OpenLocalFile wordt gebruikt om lokaal bewaarde bestanden te openen. Om onbeveiligde bestanden van op server in te lezen is er de klasse OpenRemoteFile. Bestanden op een beveiligde server kunnen geopend worden met de klasse OpenSecureRemoteFile.
14.1.1
De OpenLocalFile klasse
De klasse OpenLocalFile krijgt bij het aanroepen als parameter de string file” mee. Deze ” string bevat de bestandsnaam eventueel aangevuld met het pad. Het openen van een lokaal bestand wordt op de volgende manier verwezenlijkt: fin = new FileInputStream(file); iCalendar = builder.build(fin); fin.close();
14.1.2
De OpenRemoteFile klasse
Het openen van een bestand dat zich op een publiek toegankelijke webserver bevindt, vraagt iets meer stappen. Hieronder verduidelijken we dit met een code voorbeeld. Hierin is urlString de volledige url met inbegrip van de protocol aanduiding (http://) en de bestandsnaam. Deze variabele wordt eveneens als parameter meegegeven. URL url = new URL(urlString); URLConnection conn = url.openConnection(); 49
HOOFDSTUK 14. GEDEELDE KLASSEN
50
conn.setDoInput(true); conn.setUseCaches(false); fin = conn.getInputStream(); iCalendar = builder.build(fin); fin.close();
14.1.3
De OpenSecureRemoteFile klasse
Een bestand dat op een beveiligde webserver opgeslagen is, gebeurt met de klasse OpenSecureRemoteFile. Aan deze klasse moet niet enkel de variabele urlString meegegeven worden, maar eveneens de variabelen username en password. InputStream fin; CalendarBuilder builder = new CalendarBuilder(); Authenticator.setDefault(this); URL urlString = new URL(urlString); fin = urlString.openStream(); iCalendar = builder.build(fin); fin.close(); De klasse OpenSecureRemoteFile is een extensie van de klasse Authenticator. Via de methode PasswordAuthentication worden wachtwoord en gebruikersnaam verschaft.
14.2
iCal Bestanden Schrijven
14.2.1
De SaveLocalFile klasse
Om bestanden weg te schrijven naar een lokaal bestandssysteem beschikt dit pakket over de klasse SaveLocalFile. Hier wordt net zoals bij OpenLocalFile met de string file” gewerkt. ” FileOutputStream fout = new FileOutputStream(file); CalendarOutputter outputter = new CalendarOutputter(); outputter.output(iCalendar, fout); fout.close();
14.2.2
De SaveSecureRemoteFile klasse
Deze klasse wordt aangeroepen met als variabelen de Strings urlString, username en password en het iCalendar object. Voor het opslaan van gegevens op een WebDAV server wordt de Jakarta Slide programma bibliotheek gebruikt. FileOutputStream fout = new FileOutputStream(file); CalendarOutputter outputter = new CalendarOutputter(); outputter.output(iCalendar, fout); fout.close(); HttpURL hurl = new HttpURL(server);
HOOFDSTUK 14. GEDEELDE KLASSEN
51
hurl.setUserinfo(username, password); WebdavResource wdr = new WebdavResource(hurl); File outFile = new File(file); wdr.putMethod(path, outFile); wdr.close(); De variabele urlString wordt in de eerste stap opgesplitst in drie anders Strings, namelijk server, path en file. De variabele server bevat de naam van de server en de protocol aanduiding. De variabelen path en file bevatten respectievelijk het absolute pad op de server (met inbegrip van de bestandsnaam) en de bestandsnaam afzonderlijk. In de eerste fase wordt er een tijdelijk bestand opgeslagen met dezelfde naam, dat bestand wordt in het tweede deel van de routine met behulp van putMethod verzonden naar de server. Deze manier van werken is duidelijk geen ideale oplossing.
14.3
De TestMain klasse
Verder bevat dit pakket nog een testklasse. Deze klasse TestMain is een uitvoerbare klasse die gebruik maakt van de bovenstaande klassen. Ze kan bestanden inlezen van een lokaal bestandssyteem, een publieke en een priv´e server. Ze voegt hierna een test afspraak toe. Deze afspraak heeft als omschrijving Test Appointment!!!”. Ze vangt steeds op het huidige ” tijdstip aan en duurt ´e´en uur. Hierna slaat de klasse de kalender opnieuw op. Met behulp van constanten die in deze klasse gedefinieerd worden kunnen de gebruikte bestanden ingesteld worden.
Hoofdstuk 15
SMS Om het mobiele aspect aan de applicatie toe te voegen werden er verschillende mogelijke werkwijzen onderzocht. De eerste methode onderzocht de bestaande SMS gateways voor jabber. De tweede methode bekeek een eventuele werking via een ander IM protocol.
15.1
SMS gateway
Er zijn verschillende SMS-gateways voor Jabber beschikbaar. De meeste transports laten echter enkel ´e´enrichtingsverkeer, van internet naar GSM, toe. Een voorbeelden hiervan is http://www.amessage.be. In tegenstelling tot wat de naam doet vermoeden bevindt deze server zich in Duitsland. Deze diensten zijn echter niet bruikbaar omdat onze applicatie niet elk SMS berichten moet kunnen versturen.
Figuur 15.1: Netwerk infrasructuur voor verzenden SMS.
Een server die wel tweerichtingsverkeer toelaat is http://aspsms.com. De registratie, van een virtueel telefoonnummer om SMS te ontvangen, op deze dienst is niet kosteloos (120 euro per jaar). Deze prijs werd te hoog geacht voor gebruik in een demo-opstelling. Een schema van de werking wordt gegeven in figuur 15.1. Facturatie gebeurt via een kredietkaart. Meer informatie kan gevonden worden op http://www.chatopus.com/articles/sms.html en http://www.aspsms.com/solutions/3rd-party/jabbertosms/.
15.2
Andere gateways
In deze sectie wordt er alleen dieper ingegaan op de diensten van MSN Mobile. Geen van de andere IM netwerken werken samen met ´e´en van de Belgische GSM-operatoren. Dit heeft tot
52
HOOFDSTUK 15. SMS
53
gevolg dat via deze diensten werken steeds een meer kost met zich meebrengt, en vaak zelfs onmogelijk is zonder een GSM abonnement in ´e´en van de landen waarin de dienst actief is.
15.2.1
MSN Mobile
De diensten van MSN Mobile bieden tweerichtingsverkeer tussen MSN-messenger en een GSM aan. Via deze dienst is het mogelijk locale GSM-operatoren te gebruiken. In Belgi¨e zijn dit Mobistar en Proximus. Hierbij wordt er een bestaand GSM-nummer gekoppeld aan een bestaande MSN-account. De facturatie gebeurt via de GSM-operatoren. Zowel een SMS verzonden naar een MSN-account als een IM-bericht ontvangen op een GSM wordt gefactureerd aan de eigenaar van de betrokken GSM. Er kan eveneens een opgevraagd worden welke leden van de contactlijst er op dit moment online zijn. Dit gebeurt door het verzenden van een SMS met als enige tekst LS naar een nummer dat bij de registratie van een MSN mobile account wordt meegedeeld. Hierop wordt dan onmiddellijk geantwoord met een SMS die een overzicht van de online contactpersonen bevat.
Figuur 15.2: Netwerk infrasructuur voor verzenden SMS via MSN.
Deze opstelling blijkt in de praktijk echter niet te werken. Als er een Jabber account online is, kan men met behulp van MSN Mobile de status opvragen. Deze wordt dan correct weergegeven. Het verzenden van een SMS naar deze contactpersoon lukt echter niet. De boodschap gaat zonder foutmelding verloren. Ze wordt ook niet verstuurd naar het e-mail adres van de ontvanger. Dit is wat er anders gebeurt met een bericht dat naar een offline contact wordt verstuurd, die zijn GSM nummer niet bij MSN mobile geregistreerd heeft. Het versturen van een bericht met behulp van een Jabber client naar een MSN-account waaraan via MSN Mobile een GSM nummer verbonden is, geeft een foutmelding. Deze fouten zijn waarschijnlijk te wijten aan het feit dat de MSN transport die op de Jabber server gebruikt wordt geen ondersteuning biedt voor het zenden en ontvangen van berichten van of naar offline contactpersonen.
Deel III
Opzetten demo-opstelling
54
Hoofdstuk 16
Demo opstelling In dit hoofdstuk worden de technische aspecten van de demo opstelling besproken.
16.1
Opzet
Om onze werking van onze applicatie te tonen gebruiken wij een fictieve familie. Deze bestaat uit een vader David, moeder Vickey en een dochter Kim. David gaat nog regelmatig een pint drinken met zijn oude schoolkameraad Tim. Dochter Kim is goed bevriend met de dochter van Tim, Daisy. Dit wordt in Figuur 16.1 schematisch weergegeven. Voor elk van deze fictieve
Figuur 16.1: De test families
personages werd een gebruikersnaam gecre¨eerd.
16.2
Jabber server
Jammerlijk genoeg laten de meeste firewalls het niet toe om een publieke Jabber server te gebruiken. We zijn dus genoodzaakt er ´e´en lokaal uit te voeren. We gebruiken hiervoor Jive Messenger. Deze applicatie en meer informatie hierover kan gevonden worden op http: //www.jivesoftware.org/messenger/. Deze Jabber server is van dezelfde makers als de Smack programmabibliotheken. Het feit dat we enkel van een lokale server kunnen gebruik maken heeft ´e´en nadeel. Hierdoor kan het gebruik van andere IM-protocollen niet getoond worden.
55
HOOFDSTUK 16. DEMO OPSTELLING
16.3
56
iCalendar Server
We hebben voor de demonstratie gekozen om gebruik te maken van een gratis account op de publieke server: http://www.icalx.com. We cre¨eren een account met de volgende gegevens: gebruikersnaam: wachtwoord:
FrigoTV iamcool
Deze account staat het ons toe om gegevens op te staan in twee folders op de server. Een publieke folder en een priv´e folder. De test opstelling maakt gebruik van de priv´e folder, namelijk http://www.icalx.com/private/FrigoTV/. Zowel in de Constants klasse van de TV-GUI als van de IM-interface worden deze gegevens toegevoegd. Zodat beide applicaties van hetzelfde bestand gebruik maken.
16.4
TV-GUI
Om de situatie waarin de TV-GUI gebruikt zal worden zo realistisch mogelijk weer te geven zijn er enkele stappen noodzakelijk. Aangezien het voor de demonstratie niet mogelijk was om over een geschikte STB te beschikken, wordt de applicatie op een laptop uitgevoerd. De verschillende stappen die we ondernamen om met deze middelen het gebruikersgevoel te cre¨eren dat het gebruik van de applicatie moet oproepen, worden hieronder beschreven.
16.4.1
Uitvoer op een TV scherm
Een moderne laptop beschikt meestal over een composiet video of een S-video uitgang zodat de computerbeelden met behulp van de juiste kabels zeer eenvoudig op een TV scherm kunnen weergegeven worden.
16.4.2
De afstandsbediening
Aangezien het een hele opgave was om een interface te bedenken die op een logische en effici¨ente manier van het beperkte aantal toetsen op een afstandsbediening gebruik maakt, zou het ontzettend jammer zijn om de applicatie te demonstreren met behulp van een volledig PC toetsenbord. Een PC bedienen via een afstandsbediening is echter niet zo moeilijk te verwezenlijken. Er moet enkel de benodigde hardware en software ge¨ınstalleerd worden. Hardware Als afstandsbediening wordt de Thomson universal remote controle gebruikt. De keuze van afstandsbediening is echter volledig vrij omdat de ontvanger van de IR1 signalen volledig programmeerbaar is. Natuurlijk moet deze afstandsbediening wel over de juiste toetsen beschikken. Dit is bij een recente versie echter bijna altijd het geval. Als hardware om de IR signalen op te vangen wordt er gebruik gemaakt van de Tira2 -2 1 2
IR: Infra Rood Tira: Transmitting InfraRed Adapter
HOOFDSTUK 16. DEMO OPSTELLING
(a)
57
(b)
Figuur 16.2: (a) De Thomson afstandsbediening (b) De Tira infrarood ontvanger.
van home-electro. De Tira-2 kan eenvoudig op de USB-poort van de computer aangesloten worden. Verder moeten er dan enkel nog de vereiste drivers ge¨ınstalleerd worden. Deze kunnen gedownload worden van http://www.home-electro.com/tira support.php. Als eerste wordt de driver van Tira zelf ge¨ınstalleerd gevolgd via een virtuele seri¨ele poort. Het is via deze poort dat de communicatie met de hardware zal verlopen. Software De IR signalen worden op de computer door het programma Girder 3.3 verwerkt. Dit programma moet op de manier die op een Windows computer gebruikelijk is, ge¨ınstalleerd worden. Hierna moet de plugin van Tira (tira.dll) naar de plugins subdirectory van de Girder directory gekopieerd worden. Meer informatie over Girder evenals de benodigde plugins kunnen gevonden worden op http://www.promixis.com/. Met behulp van Girder moet er een
Figuur 16.3: Girder
bestand aangemaakt worden waarin er voor elk van de gebruikte toetsen een bijhorend commando gedefinieerd wordt. De door de afstandsbediening uitgezonden signalen moeten in dit bestand verbonden worden met de door de TV-GUI gebruikte keyboard toetsen. Elke toets op de afstandsbediening heeft twee staten. Afhankelijk van deze staat wordt er een verschillend signaal uitgezonden. Aangezien de applicatie geen gebruik maakt van deze staten wordt
HOOFDSTUK 16. DEMO OPSTELLING
58
er aan beide gebeurtenissen hetzelfde commando verbonden. Girder ontvangt vaak bij ´e´en druk op de knop verschillende malen dezelfde code. Omdat dit voor de TV-GUI maar ´e´en gebeurtenis zou zijn, moet in Girder een time-out ingesteld worden. Proefondervindelijk werd geconcludeerd dat deze time-out best op 1000 ms ingesteld word. Deze manier van werken heeft als nadeel dat de applicatie enkel invoer van de afstandsbediening kan verwerken indien ze in de focus heeft. Om dit probleem te omzeilen werkt de demo versie van Alcatel via een script dat een socket connectie opzet met de AmigoTV applicatie.
16.4.3
Overlay
De PC’s waarmee Alcatel de demo’s geeft van AmigoTV beschikken over een analoge TV ingang waardoor het mogelijk wordt om een daadwerkelijke overlay van de AmigoTV applicatie en de binnenkomende televisie beelden te bekomen. De computer die voor deze demonstratie zal gebruikt worden beschik jammergenoeg niet over deze mogelijkheden.
16.5
Mozilla Calendar
Als voorbeeld voor de toegang tot onze gegevens vanaf een PC gebruiken we Mozilla Calendar. Om deze applicatie toegang te geven tot onze gegevens is er enkel wat configuratiewerk noodzakelijk. De in Sectie 16.3 vermelde gegevens worden gebruikt om deze applicatie toegang te geven tot het iCal bestand.
16.6
Jabber
Uit de grootte verscheidenheid aan jabber clients hebben we voor deze demonstratie Psi gekozen. Alle informatie over Psi en het programma zelf kan gevonden worden op http: //psi.affinix.com/. Een overzicht van de verschillende jabber clients kan gevonden worden op http://www.jabber.org/.
Conclusie De applicaties die in dit werk beschreven werden, scheppen een mogelijk beeld van hoe bepaalde technologie¨en op een nieuwe manier kunnen samenwerken. Het is duidelijk dat deze applicaties niet klaar zijn voor gebruik. In de secties hieronder overlopen we nog enkele noodzakelijke uitbreidingen.
TV-GUI In de ontwikkeling van deze applicatie is veruit het meeste tijd ge¨ınvesteerd. Doordat het noodzakelijk was op een heel laag niveau te programmeren is hiervan misschien weinig merkbaar. De TV-GUI biedt voorlopig enkel de mogelijkheid om de gegevens uit een iCal bestand te lezen. Hoewel er voorzieningen zijn om iCal bestanden in te lezen van zowel lokale opslagmedia als vanaf een al dan niet beveiligde server kan de configuratie hiervan enkel rechtstreeks in de code gebeuren. Voor AmigoTV werkt men aan een systeem om de configuratie via een browservenster op PC te kunnen doen. Dit zou eventueel uitgebreid kunnen worden voor FrigoTV. Hierbij zou er bepaalde informatie gedeeld kunnen worden. De gegevens die bij het boodschappenlijstje en de notities horen zijn enkel weergaven van informatie die zich hardcoded in de programmatuur van de applicatie bevindt. De hoofdreden dat dit gebeurd is, is dat er hiervoor geen voorzieningen zijn in het iCal bestandsformaat. Deze informatie zou in aparte bestanden op de WebDAV server kunnen opgeslagen worden. Dit werd echter niet ondersteund door de in de testopstelling gebruikte server. Deze spitst zich toe op het hosten van kalenderbestanden. Nog een zeer belangrijk punt is het cre¨eren van een daadwerkelijk overzicht op het beginscherm van FrigoTV. Dit scherm zou op een voor de gebruiker zeer herkenbare manier grafisch de meest recente notities moeten weergeven, de afspraken van de huidige dag en het boodschappenlijstje. Op de verschillende schermen zou er met de pijltjestoetsen genavigeerd kunnen worden. Dit zou er voor moeten zorgen dat ook andere dagen, weken en maanden kunnen weergegeven worden. Op een dagoverzicht zou bijvoorbeeld met de rechts-links-pijltjes naar de volgende of vorige dag gegaan kunnen worden. De boven-onder-pijltjes zorgen ervoor dat een selectiebalk over de verschillende afspraken van de dag verplaatst kan worden. Indien men op de OK-knop drukt wordt een scherm getoond dat alle gegevens van deze afspraak toont. Dit scherm zou zelfs editeerbaar kunnen zijn. Voor de week- en maandschermen kan een gelijkaardig principe worden uitgedacht.
59
HOOFDSTUK 16. DEMO OPSTELLING
60
Voor het invoeren van tekst zouden de nummers op de afstandsbediening kunnen zorgen. Dit zou dan gebeuren zoals het typen van een SMS op een numeriek klavier Ook een animatie waarbij de deur van de ijskast dichtklapt over het TV-beeld behoord tot de mogelijkheden.
IM-Interface De IM-Interface toont aan dat een applicatie die het toelaat om kalendergegevens te bewerken via een IM-client mogelijk is. De ge¨ımplementeerde applicatie beschikt over veel te beperkte mogelijkheden om in de praktijk daadwerkelijk bruikbaar te zijn. Er moet bijvoorbeeld nog gezorgd worden dat het mogelijk wordt om afspraken, notities en boodschappen weer te verwijderen. Er moet de mogelijkheid gecre¨eerd worden om afspraken op andere dagen dan vandaag of morgen toe te voegen. Belangrijk hierbij is er steeds aan te denken dat er moet voor gezorgd worden dat de bediening intu¨ıtief kan gebeuren. Er wordt bijvoorbeeld gedacht aan invoer van nieuwe afspraken via commando’s zoals afspraak donderdag 12:00” om een ” afspraak voor de eerstvolgende donderdag toe te voegen. Dit zou de noodzaak om de exacte datum te kennen voor de gebruiker sterk moeten beperken en zodanig het gebruikersgemak verhogen. Verder wordt er gedacht aan een mogelijkheid om de laatst gedane wijziging ongedaan te maken. Dit om de gebruiker de mogelijkheid te geven de door schrijffouten gecre¨eerde fouten snel te kunnen corrigeren. Ook de mogelijkheid om de toepassing automatisch de gebruiker te laten begroeten indien die online komt is misschien interessant. Dit bericht zou de afspraken van de dag bevatten die nog niet gepasseerd zijn. In een nog latere fase kan er gedacht worden aan een mechanisme dat ervoor zorgt dat er op het gepaste tijdstip een alarmberichtje verstuurd wordt. Deze suggesties zijn uiteraard slechts enkele van de nagenoeg oneindige mogelijkheden.
SMS Voor dit deel werd er geen applicatie ontworpen. Onze studie van de bestaande tweerichtings Jabber-SMS-gateways leverde geen resultaat op dat bruikbaar was voor onze prototype applicatie. Dit niet zozeer door het ontbreken van de benodigde software maar door het ontbreken van ondersteuning voor een Jabber-SMS-gateway door de Belgische GSM-operatoren. Indien men deze dienst toch wil aanbieden is het waarschijnlijk het eenvoudigste om te werken via de diensten van MSN-Mobile. Het benodigde programmeerwerk blijft dan beperkt tot het herschrijven van de MSN-Jabber-gateway. Een meer duurzame oplossing ligt waarschijnlijk in het aanbieden van een SMS-Jabber-gateway. De meest geschikte partij om voor deze dienst te zorgen blijken de GSM-operatoren te zijn. Zo moet het technisch mogelijk zijn om een SMS dat verzonden wordt naar de GSM-nummer van iemand die zich op dat moment achter zijn PC bevind, op PC te ontvangen. Deze mogelijkheid zou de bruikbaarheid van deze dienst aanzienlijk verbeteren. MSN-Mobile werkt met twee verschillende nummers. Indien men via deze dienst wenst te SMS’en dient men een door MSN aangewezen nummer te gebruiken. Indien beide betrokke-
HOOFDSTUK 16. DEMO OPSTELLING
61
nen een MSN-Mobile account hebben, zal er dan een SMS verstuurd worden naar de MSNclient van de ontvanger indien hij online is. In het andere geval ontvangt hij een SMS. Indien de ontvanger niet over een MSN-mobile account beschikt zal het SMS bericht in de E-mail account terecht komen. Het gewone SMS’en is in dit geval, geheel vrijstaand van MSN, natuurlijk ook nog mogelijk. Deze twee laatste opmerkingen zijn echter van weinig belang voor de IM-Interface applicatie. Deze zou op een server steeds actief, dus online, moeten zijn. Dit om te garanderen dat de gegevens steeds bereikbaar zijn.
Lijst van figuren 1.1 1.2
. . . . . . . . . . . . . . . . bekijken. (b) Een Animatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3 1.4
Voice chat met AmigoTV . . . . . . . . (a) Weergeven welke TV programma’s je verzenden. . . . . . . . . . . . . . . . . . Benodigdheden AmigoTV . . . . . . . . Schema . . . . . . . . . . . . . . . . . .
2.1 2.2
Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lumbermill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8 9
3.1 3.2
iTV Middleware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De 3 grafische lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 13
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8
Het Het Het Het Het Het Het Het
9.1 9.2 9.3 9.4
ALabel en AMultilineLabel AShortLabel . . . . . . . . BoxLayout . . . . . . . . . . GridLayout . . . . . . . . .
AmigoTV-icoontje . . . . Overzichtsscherm . . . . Vandaag”-scherm . . . . ” Morgen”-scherm . . . . ” Deze Week”-scherm . . ” Deze Maand”-scherm . . ” Notitie”-scherm . . . . . ” Boodschappen”-scherm ”
. . . . . buddies . . . . . . . . . . . . . . .
2 3 4
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
26 27 27 28 28 29 29 30
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
32 33 34 34
11.1 Twee versies van de CommandBarUI klasse . . . . . . . . . . . . . . . . . . .
40
15.1 Netwerk infrasructuur voor verzenden SMS. . . . . . . . . . . . . . . . . . . . 15.2 Netwerk infrasructuur voor verzenden SMS via MSN. . . . . . . . . . . . . . .
52 53
16.1 De test families . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2 (a) De Thomson afstandsbediening (b) De Tira infrarood ontvanger. . . . . . 16.3 Girder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55 57 57
. . . .
62
Lijst van tabellen 3.1
Afstandsbedieningstoetsen MHP . . . . . . . . . . . . . . . . . . . . . . . . .
12
6.1
De WebDAV http extensies . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
11.1 Afstandsbedieningstoetsen TV-GUI . . . . . . . . . . . . . . . . . . . . . . . .
41
13.1 De constanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
63
Deel IV
Bijlagen
64
Bijlage A
Code Voorbeelden A.1
Uitlijning AMultilineLabel
FontMetrics fm = g.getFontMetrics(); int ruleCount = 0; int labelWidth = ((int)getSize().getWidth() - (2 * horizontalMargin)); int charCounter = 0; String remainingString = text.trim(); while (fm.stringWidth(remainingString) > 0) { String currentLine = ""; while ((fm.stringWidth(currentLine) < labelWidth) && (remainingString.length() > currentLine.length())) { charCounter++; currentLine = remainingString.substring(0, charCounter); } if (currentLine.startsWith(" ")) currentLine = currentLine.substring(1, currentLine.length()); boolean lineOK = false; if (currentLine.length() == remainingString.length()) { lineOK = true; } else { if (currentLine.endsWith(" ")) { lineOK = true; currentLine = currentLine.trim(); } if (remainingString.charAt(charCounter) == ’ ’) { charCounter = charCounter + 1; lineOK = true; } }
65
BIJLAGE A. CODE VOORBEELDEN
66
if (!lineOK) { int lastSpace = currentLine.lastIndexOf(’ ’); if (((lastSpace != -1) || (lastSpace != 0))) { currentLine = currentLine.substring(0, lastSpace); remainingString = remainingString.substring((lastSpace + 1), remainingString.length()); remainingString = remainingString.trim(); } } else { remainingString = remainingString.substring(charCounter, remainingString.length()); } // alignment int width = fm.stringWidth(currentLine); int x = (size.width - width)/2; if (align == LEFT_ALIGNMENT) { x = horizontalMargin; } else if (align == RIGHT_ALIGNMENT) { x = (((int)getSize().getWidth()) - (width + horizontalMargin)); } g.drawString(currentLine, x, fm.getAscent() + fm.getHeight() * ruleCount); ruleCount = ruleCount + 1; charCounter = 0; }
BIJLAGE A. CODE VOORBEELDEN
A.2
67
Uitlijnen elementen in GridLayout
AImage[] horIm = new AImage[cols]; AImage[] verIm = new AImage[rows]; int int int int
verticalSpace = (int)(container.getSize().getHeight() / rows); verticalSpaceRemainder = (int)(container.getSize().getHeight() % rows); horizontalSpace = (int)(container.getSize().getWidth() / cols); horizontalSpaceRemainder = (int)(container.getSize().getWidth() % cols);
// draw lines if (others.isEmpty() && showLines) { for (int i = 1; i< rows ;i++) { verIm[i] = (AImage)horizontalLine.clone(); verIm[i].setSize((int)container.getSize().getWidth(), 1); verIm[i].setLocation(0, verticalSpace * i); others.add(verIm[i]); } for (int i = 1; i < cols; i++) { horIm[i] = (AImage)verticalLine.clone(); horIm[i].setSize(1, (int)container.getSize().getHeight()); horIm[i].setLocation(horizontalSpace * i, 0); others.add(horIm[i]); } } // draw components int componentNumber = others.size(); if (showLines) componentNumber = componentNumber - ((rows - 1) + (cols - 1)); int x = (componentNumber % cols) * horizontalSpace; int y = (componentNumber / cols) * verticalSpace; component.setLocation(x, y); // add remaing space to last component in row/col if ((componentNumber % cols) == (cols - 1)) { horizontalSpace = horizontalSpace + horizontalSpaceRemainder - 1; } if ((componentNumber % rows) == (rows - 1)) { verticalSpace = verticalSpace + verticalSpaceRemainder - 1; } component.setSize(horizontalSpace, verticalSpace);
BIJLAGE A. CODE VOORBEELDEN
A.3
68
Invullen list in DayView
List eventList = new ArrayList(); if (2 == list.size()) { list.remove(1); } String secureRemoteFile = "http://www.icalx.com/private/FridgeTV/prive.ics"; String username = "FridgeTV"; String password = "iamcool"; //OpenLocalFile openLocalFile = new OpenLocalFile(file); //OpenRemoteFile openRemoteFile = new OpenRemoteFile("http://www.icalx.com/public/KoenDV/Koen.ics"); OpenSecureRemoteFile openSecureRemoteFile = new OpenSecureRemoteFile (secureRemoteFile, username, password); //ICalendar iCalendar = openLocalFile.getICalendar(); //ICalendar iCalendar = openRemoteFile.getICalendar(); ICalendar iCalendar = openSecureRemoteFile.getICalendar(); for (Iterator i = iCalendar.getComponents().iterator(); i.hasNext();) { Component component = (Component) i.next(); if (component.getName() == Component.VEVENT) { PropertyList pl = component.getProperties(); DtStart dt = (DtStart)pl.getProperty(Property.DTSTART); Calendar dtc = Calendar.getInstance(); dtc.setTime(dt.getTime()); if ((dtc.get(Calendar.DAY_OF_YEAR) == calendar.get(Calendar.DAY_OF_YEAR)) && (dtc.get(Calendar.YEAR) == calendar.get(Calendar.YEAR))) { Summary summary = (Summary)pl.getProperty(Property.SUMMARY); DtStart start = (DtStart)pl.getProperty(Property.DTSTART); DtEnd end = (DtEnd)pl.getProperty(Property.DTEND); String dummy; try { String startTime = start.getValue().substring(9, 11) + ":" + start.getValue().substring(11, 13); String endTime = end.getValue().substring(9, 11) + ":" + end.getValue().substring(11, 13); dummy = startTime + "-" + endTime + " " + summary.getValue(); } catch (StringIndexOutOfBoundsException sioobe) { dummy = "Whole day " + summary.getValue(); } catch (NullPointerException npe) { dummy = "Whole day " + summary.getValue(); } eventList.add(dummy); }
BIJLAGE A. CODE VOORBEELDEN } } list.add(eventList); triggerElementsChanged();
69
BIJLAGE A. CODE VOORBEELDEN
A.4
70
Opbouw scherm in DayViewUI
super(); log.debug("DayViewUI()"); setLayout(new BoxLayout(BoxLayout.Y_AXIS)); setBackground(Config.getInstance().getSkin().getImage(IMAGE_BACKGROUND)); title.setFont(Config.getInstance().getSkin().getFont(TEXT)); title.setColor(Config.getInstance().getSkin().getColor(TEXT)); title.setPreferredSize(100, 50); add(title); AImage line = Config.getInstance().getSkin().getImage(IMAGE_LINE); line.setPreferredSize(line.getSize()); add(line); scrollbox = new AList(); scrollbox.setArrows(Config.getInstance().getSkin().getImage(IMAGE_UP_ARROW), Config.getInstance().getSkin().getImage(IMAGE_UP_ARROW_SELECTED), Config.getInstance().getSkin().getImage(IMAGE_DOWN_ARROW), Config.getInstance().getSkin().getImage(IMAGE_DOWN_ARROW_SELECTED)); add(scrollbox);
BIJLAGE A. CODE VOORBEELDEN
A.5
Ophalen elementen uit list in DayViewUI
List stringList = new ArrayList(); List labelList = new ArrayList(); scrollbox.removeAll(); title.setText((String) modelItems.get(0)); stringList = (List) modelItems.get(1); Iterator iterator = stringList.iterator(); while(iterator.hasNext()) { ALabel label = new ALabel((String)iterator.next()); label.setFont(font); label.setColor(color); label.setPreferredSize(0, 40); label.setHorizontalMargin(30); label.setAlign(ALabel.LEFT_ALIGNMENT); labelList.add(label); } scrollbox.add(labelList);
71
Bijlage B
CD-ROM
72