RAZVOJ TELEKOMUNIKACIJSKIH PRIPOMOČKOV

Podobni dokumenti
Nameščanje Adopt Open Java Development Kit 8

Nameščanje Adopt Open Java Development Kit 8

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

Elektronska pošta

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Microsoft Word - CN-BTU4 Quick Guide_SI

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

DCS-2330L_A1_QIG_v1.00(EU).indd

Navodila za pripravo oglasov na strani Med.Over.Net v 2.2 Statistično najboljši odziv uporabnikov je na oglase, ki hitro in neposredno prenesejo osnov

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Diapozitiv 1

Protokoli v računalniškem komuniciranju TCP, IP, nivojski model, paket informacij.

Slide 1

Microsoft Exchange 2013

Microsoft Word - CNC obdelava kazalo vsebine.doc

PowerPoint Presentation

PowerPointova predstavitev

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC

PowerPointova predstavitev

Chapter 1

INFORMATOR BIROKRAT 1/2011

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

PowerPoint Presentation

Za vaše podjetje ModernBiz Glossary 2014 Microsoft Corporation. Vse pravice pridržane.

Microsoft PowerPoint - Objekti_gradnja.ppt

Slajd 1

ARRS-BI-FR-PROTEUS-JR-Prijava/2011 Stran 1 od 7 Oznaka prijave: Javni razpis za sofinanciranje znanstvenoraziskovalnega sodelovanja med Republiko Slov

PowerPointova predstavitev

PowerPointova predstavitev

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

PowerApps

NETGEAR R6100 WiFi Router Installation Guide

PowerPoint Presentation

(Microsoft Word - U\350enje telegrafije po Kochovi metodi.doc)

Vprašanja za 2. izpitno enoto poklicne mature Strokovni predmet NPA Vprašanja Visual C# (4. letnik) 1. Uporabniški vmesnik razvojnega okolja Visual C#

SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Id

CODEKS IP KAMERA

Macoma katalog copy

Microsoft Word - Navodila za uporabo 1.1.doc

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta

Oblikovanje in razvijanje spletnih strani

Arjan Topolovec PROFILIRANJE SPLETNIH APLIKACIJ Diplomsko delo Maribor, september 2010

Zadeva: Ponudba

Microsoft Word - CNR-MPV2 Quick Guide_SI

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

Linksys PLEK500 User Guide

Microsoft Word - NAVODILA ZA UPORABO.docx

Analiza in primerjava spletnih storitev SOAP in protokola gRPC v okolju mikrostoritev

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0

Strojna oprema

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Boris Špoljar Analiza spletnih tehnologij DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Ment

Navodila za uporabo Mini snemalnik

UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Nina Krmac IZBIRA ORODJA IN KNJIŽNIC ZA IMPLEMENTACIJO POROČIL V POSLOVNI APLIKACIJI Di

Microsoft Word - M docx

PowerPointova predstavitev

Vaja04_Ver02

Modem in krajevno omrežje Uporabniški priročnik

Spoznajmo PowerPoint 2013

VISOKOŠOLSKI STROKOVNI ŠTUDIJ Računalništvo in informatika informatika POROČILO PRAKTIČNEGA IZOBRAŽEVANJA V podjetju Oblikovanje.com d.o.o. Murska Sob

David Zakelšek SPLETNA PODPORA UČENJU MATEMATIKE Diplomsko delo Maribor, september 2013

Microsoft Word - M _mod..docx

Vzpostavitev več nivojske varnostne infrastrukture S pomočjo Elektro Maribor, McAfee SIEM, CISCO ISE, NGFW Zorna Varga, Sfera IT d.o.o in Klemen Bačak

Računalniški praktikum Projektna naloga - Izdelava spletne strani Avtor: Matej Tekavčič Skupina: Matej Tekavčič - koordinator Simon Vrhovnik Tine Kavč

Laboratorij za strojni vid, Fakulteta za elektrotehniko, Univerza v Ljubljani Komunikacije v Avtomatiki Vaje, Ura 8 Matej Kristan

Microsoft Word - M docx

Microsoft Word - Splosni pogoji za uporabnike storitve_ONA_ doc

TNUV Lab

Microsoft Word - Trust-CDsize-12052_12579_14070-al-cp_v5.0.doc

PowerPoint Presentation

innbox_f60_navodila.indd

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m

ISOFT , računalniški inženiring

Si.mobil Si.most Najkrajša pot do vaših strank. Ljubljana,

Vedno pod nadzorom, kjerkoli že ste

Nejc Rebernjak RAZVOJ MOBILNE APLIKACIJE SHOPLY Diplomsko delo Maribor, september 2018

Diapozitiv 1

Microsoft PowerPoint - seminar_ pptx

Izdelava spletnih aplikacij z ogrodjem Angular

Sistemi Daljinskega Vodenja Vaja 3 Matej Kristan Laboratorij za Strojni Vid Fakulteta za elektrotehniko, Univerza v Ljubl

Cenik ES_spremembe_marec2013_ČISTOPIS_Sprememba_

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Navodilo Telemach

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

NAVODILA ZA UPORABO Smart watch JW018 POZOR! Ura vsebuje magnetne sestavine. Osebe z vgrajenim srčnim spodbujevalnikom (pacemaker) ali kakršnimi drugi

SharePoint GRADNIKI ZA IZBOLJŠANE UPORABNIŠKE IZKUŠNJE

Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native

Slide 1

Analiza vpliva materiala, maziva in aktuatorja na dinamiko pnevmatičnega ventila

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI

Razvoj ve\unhbox \bgroup \let \unhbox \setbox \hbox {c\global \mathchardef \spacefactor }\accent 20 c

Okolje SupportAssist OS Recovery Navodila za uporabo

Transkripcija:

Grega Ramšak RAZVOJ TELEKOMUNIKACIJSKIH PRIPOMOČKOV Diplomsko delo Maribor, november 2011

I

II Diplomsko delo visokošolskega strokovnega študijskega programa Študent: Študijski program: Smer: Mentor: Somentor: Grega Ramšak VS ŠP Elektrotehnika Telekomunikacije doc. dr. Bojan Imperl izred. prof. dr. Andrej Ţgank Maribor, november 2011

III

IV

V

VI ZAHVALA Zahvaljujem se mentorju doc. dr. Bojanu Imperlu za strokovno vodenje in pomoč. Zahvaljujem se tudi podjetju Iskratel d.o.o., ki mi je omogočilo dostop do opreme, potrebne za izvedbo diplomskga dela, ter sodelavcem za pomoč pri izvedbi projekta. Posebna zahvala gre tudi staršema in stricu, ki so mi omogočili študij in ostalim članom druţine ter punci za podporo pri študiju.

VII

VIII Ključne besede: Telekomunikacijski pripomočki, Java, JavaFX, zagonska datoteka JNLP, grafični uporabniški vmesnik, telekomunikacijske storitve UDK: 004.42:621.395(043.2) Povzetek V diplomski nalogi opisujem izdelavo prototipov telekomunikacijskih pripomočkov in razvoj funkcionalnosti pripomočkov. Namen naloge je bil izdelati nabor pripomočkov za izdelavo naprednih funkcij telefonije s programskim jezikom JavaFX in predstaviti delujoč koncept prenosa in uporabe pripomočkov. Izdelava je vključevala tako razvoj programske logike kot izdelavo grafičnega vmesnika, za kar sem uporabil različne tehnologije za komunikacijo med pripomočki in storitvami ter za njihov grafičen prikaz. Pripomočki delujejo na operacijskih sistemih Windows in Linux. Delovanje znotraj brskalnika sem zaradi omejitev programskega jezika JavaFX implementiral in preveril le delno. Končni izdelek je nabor telekomunikacijskih pripomočkov, ki izpolnjujejo večino postavljenih zahtev. Pripomočki so namenjeni uporabnikom telekomunikacijskih storitev, ki lahko tako na enostaven način uporabljajo telekomunikacijske storitve (na primer klic na zahtevo ipd.) in njihove dopolnilne storitve, kot so zgodovina klicev, preusmeritev klica, določanje stanja Ne moti ipd.

IX

X Development of telecommunication widgets Key words: Telecommunication widgets, Java, JavaFX, JNLP file, graphical user interface, telecommunication services UDK: 004.42:621.395(043.2) Abstract In the thesis I describe the production of prototypes of telecommunication widgets and development of widgets' functionality. The aim of the thesis is to produce a set of widgets for the use of supplementary telecommunication services with the use of JavaFX programming language. The aim is also to present a working concept of transfering and using the widgets. Production involves both the development of the widgets' program logic and making graphical user interface tools (where I have used different technologies to communicate between widgets and services), and their graphic display. The widgets run on Windows operating systems and Linux. Due to the limitations of the JavaFX programming language I only partially developed and tested the widget functionality within the browser. The final product is a set of telecommunication widgets that meet most of the requirements set.the widgets are intended for users of telecommunication services, so they can simply use telecommunications services (for example, 'click to call', etc.) and their supplementary services such as call log, call forwarding, setting 'Do Not Disturb status and such.

XI

XII VSEBINA 1 UVOD...1 2 Naloga...2 3 WIDGETI...2 3.1 Kratka predstavitev tehnologij za izdelavo pripomočkov...4 3.2 Izbira tehnologije...5 4 JAVA IN JAVAFX...6 4.1 Java...6 4.2 JavaFX...6 5 VMESNIKI... 10 5.1 SOAP... 10 5.2 OpenMN... 10 5.3 REST... 10 6 OKOLJE... 12 6.1 Aplikativni streţnik - AS... 13 6.2 Klicni streţnik Call server CS... 13 6.3 OpenMN - MN... 13 6.4 Streţnik za zapis podatkov o klicih - CDR... 14 7 RAZVOJ PRIPOMOČKOV... 15 7.1 Zahteve za pripomočke... 15 7.2 Uporabljena orodja... 17 7.3 Uporabljene tehnologije... 19 7.4 Razvoj funkcionalnosti pripomočkov... 27 7.5 Razvoj grafičnega vmesnika... 48 7.6 Teţave pri realizaciji zahtev... 53 8 OPIS REŠITVE IN REZULTATI... 56 8.1 Končni izdelek... 56 8.2 Delne rešitve... 70 9 SKLEP... 72 10 VIRI... 74 11 PRILOGE... 77 11.1 Seznam slik... 77

XIII 11.2 Naslov študenta... 79 11.3 Kratek ţivljenjepis... 79

XIV UPORABLJENE KRATICE JSON REST HTML HTTP JNLP SOAP CSTA SIP RIA RPC DCOM AJAX JavaScript Object Notation Representational State Transfer Hypertext Markup Language Hypertext Transfer Protocol Java Network Launching Protocol Simple Object Access Protocol Computer-Supported Telecommunications Applications Session Initiation Protocol Rich Internet Application Remote Procedure Call Distributed Component Object Model Asynchronous JavaScript and XML PC AS CS CDR MN Personal Computer Applicaton Server Call Server Call Detail Record Managment Node SDK CSS SVG JAR XML SQL JVM Software Development Kit Cascading Style Sheets Scalable Vector Graphics Java Archive Extensible Markup Language Structured Query Language Java Virtual Machine C2D RCC DND CF CFU CFB CFNR PB Clik to (2) Call Remote Call Control Do Not Disturb Call Forwarding Call Forwarding Unconditional Call Forwarding Busy Call Forwarding No Reply Phone Book

1 UVOD Digitalizacija osnovnih telekomunikacijskih storitev, kot so telefonija in prenos video signala, omogoča nadgrajevanje storitev z novimi funkcionalnostmi in vgradnjo v druge sodobne telekomunikacijske sisteme. Skupaj s širjenjem uporabe interneta in povezljivosti naprav tako stacionarnih kot mobilnih - se funkcionalnosti in tehnologije med seboj prepletajo. Ponudniki storitev iščejo poti in moţnosti, kako nove funkcionalnosti ponuditi svojim uporabnikom. Ena od moţnosti je oblikovanje uporabniških vmesnikov, ki na enostaven način omogočijo upravljanje in uporabo funkcij, ki jih omogočajo sodobni telekomunikacijski sistemi. Za takšne uporabniške vmesnike so primerne tako imenovane bogate internetne aplikacije (Rich Internet Applications RIA). Zaradi različnih sistemov in boljše razširjenosti razvijalci razvijajo RIA aplikacije znotraj spletnega brskalnika z uporabo različnih vtičnikov, ki omogočajo delovanje RIA aplikacij. V večini primerov takšne aplikacije najdemo na spletnih straneh kot dodatek za popestritev vsebine. Tipičen primer je aplikacija za prikaz vremena, lahko pa so uporabljene za prikaz celotne vsebine spletne strani. V nekaterih primerih se je razvoj RIA aplikacij zbliţal s klasičnimi namiznimi aplikacijami. Delovanje RIA aplikacij se je tako iz brskalnika preselilo na namizje operacijskega sistema, kjer tečejo v namenskem izvajalnem okolju (Runtime environment). Tehnologij, ki se uporabljajo za izdelavo RIA aplikacij, je precej, saj v začetku razvoja RIA aplikacij ni bilo standarda, ki bi tako tehnologijo predpisoval. V ta namen se je začel pripravljati HTML5 standard, vendar se je njegov razvoj zavlekel in razvijalce posredno prisilil, da poiščejo nove pristope in tehnologije za izdelavo RIA aplikacij. Posledično največji problem pri razvoju RIA aplikacij predstavlja izbira tehnologije za njihov razvoj, vsaka pa ima svoje prednosti in pomanjkljivosti. Nekatere tehnologije so tako omejene le na določene operacijske sisteme oziroma so iz njih izključene, lahko pa zaradi zaprtosti sistema ne delujejo drugje. Kot ţe omenjeno se lahko RIA aplikacije kot uporabniški vmesniki uporabljajo v telekomunikacijskih sistemih za upravljanje in uporabo funkcij, ki jih omogočajo sodobni telekomunikacijski sistemi. Takšna uporaba je lahko upravljanje in nadzirane drugih - tretjih naprav, kot so telefoni, ali za uporabo drugih storitev telekomunikacijskih sistemov, kot na primer vklop preusmeritev klica. - 1 -

Če se posamezni aplikaciji določi le minimalno število funkcij, lahko takšno aplikacijo poimenujemo pripomoček - widget. Gre za aplikacijo, ki se uporablja kot pripomoček (orodje) pri uporabi različnih storitev. V tej nalogi bom predstavil izdelavo nabora prototipov telekomunikacijskih pripomočkov za izvajanje različnih funkcij. Predstavil bom koncept delovanja pripomočkov, uporabljene tehnologije in potek implementacije, kakor tudi vključevaje pripomočkov v okolje ter uporabo pripomočkov. 2 Naloga Cilj naloge je bil izdelati prototipe telekomunikacijskih pripomočkov in portal za prenos pripomočkov. Potrebno je bilo omogočiti delovanje pripomočkov tako znotraj brskalnika na portalu ponudnika storitev kot tudi na poljubni spletni strani. Prav tako je bilo potrebno omogočiti delovanje in namestitev pripomočka na namizju operacijskega sistema ter prenos in namestitev s funkcijo "drag and drop" oziroma "drag to install" povleci za namestitev ter samostojno delovanje na namizju (brez prisotnosti brskalnika). Namestitev pripomočka mora potekati tekoče, brez večjih posegov s strani uporabnika in brez uporabe datotečnega sistema. Pri uporabi pripomočka na namizju se mora ta zagnati ob zagonu operacijskega sistema, pri tem pa pripomoček shrani pozicijo in druge parametre potrebne za zagon. Za avtorizacijo na servisih se mora uporabnik avtorizirati le enkrat, to je ob obisku portala, ki ponuja pripomočke. Nadaljnja avtorizacija s strani uporabnika ni potrebna. Zahtevano je bilo delovanje na operacijskem sistemu Windows (WindowsXP, Windows 7) in Linux (Ubuntu). Pripomoček naj bi bil prilagojen delovanju v Iskratelovem okolju. 3 WIDGETI Program, ki implementira le majhno število funkcij, zaseda relativno malo pomnilniškega prostora in je v večini primerov povezan s procesi ali storitvami na tretjih streţnikih lahko imenujemo "widget" ali pripomoček. Sicer se uporabljajo še drugi izrazi kot so gadget, portlet, modul, itd. vendar je izraz pripomoček v zadnjem času najpogostejši. Tipična za pripomoček je relativno enostavna uporaba, majhna poraba procesorske moči, majhna površina, ki jo zaseda na delovnem okolju (npr. na namizju), in da podpira majhno - 2 -

število funkcij. Najbolj so pripomočki razširjeni na internetu oziroma na spletnih straneh. Slika 3.1 prikazuje nekaj pripomočkov na spletni strani igoogle [27]. Slika 3.1: Prikaz pripomočkov s strani igoogle (Datum in čas, Vreme, Opomba - beležka, Seznam opravil in Koledar) Pripomočki se uporabljajo za prikazovanje informacij, katerih vir je na tretji spletni strani ali streţniku. Prikazane informacije pripomoček pridobiva preko odprtih vmesnikov. Omogočajo uporabo različnih storitev, kot so izvajanje klicev in pošiljanje kratkih sporočil. Za pripomočke na namizju se štejejo samostojni lahki programi, ki prikazujejo podatke ali omogočajo interakcijo s različnimi storitvami, ali pa sami vključujejo določene funkcionalnosti (računalo, ura, preračunavanje valute, ipd.). Pripomočke najdemo tudi na mobilnih napravah. Lahko so prilagojeni mobilni napravi sami ali operacijskem sistemu tako, da uporabljajo funkcije naprave, kot je na primer pošiljanje kratkih sporočil, pregled imenika in klicanje. - 3 -

3.1 Kratka predstavitev tehnologij za izdelavo pripomočkov Tehnologij [26], s katerimi je moţno izdelati pripomočke, je veliko. Nedvomno najbolj razširjena tehnologija za izdelavo pripomočkov je Adobe Flash, ki je uporabljen za izgradnjo spletnih aplikacij, vgrajenih v spletne strani, predvsem pa se je uveljavil pri izdelavi spletnih iger. 3.1.1 Adobe Flash Prednost Adobe Falsh-a je odličen grafičen vmesnik za izdelavo grafičnih elementov. Z njim lahko hitro izdelamo grafičen vmesnik aplikacije. Adobe Flash je precej omejen na delovanje v brskalniku, vendar pa je moţna uporaba programa FlashPlayer za pogon aplikacij z namizja. 3.1.2 JavaScript Druga moţnost je uporaba Javascript v kombinaciji z AJAX-om [24] in različnimi knjiţnicami, na primer JQuery [17]. Teţave pri tej metodi se pojavijo pri izdelavi zahtevnejšega grafičnega vmesnika. Precejšnjo omejitev predstavlja tudi dejstvo, da je za izvajanje JavaScript programa nujno potreben brskalnik, kar precej oteţi oziroma lahko onemogoči avtonomno delovanje aplikacije na namizju. 3.1.3 Java in JavaFX Javanske aplikacije so sicer razširjene, vendar je njihova pomanjkljivost grafični vmesnik. Za izdelavo sodobnega grafičnega vmesnika je potrebno vloţiti precej dela in časa. Prednost pri uporabi Jave pa je delovanje v namenskem izvajalnem okolju in delovanje na vseh večjih operacijskih sistemih z uporabo iste kode programa. Nadgradnja Javinega grafičnega vmesnika predstavlja JavaFX. JavaFX omogoča hitrejšo in enostavnejšo izdelavo grafičnega vmesnika z vso podporo Jave. Slaba stran JavaFX je ta, da gre za relativno nov jezik in vsebuje še precej napak in pomanjkljivosti. Prav tako je pomanjkljiva dokumentacija jezika. 3.1.4 Silverlight Silverlight je Microsoftova rešitev za izdelavo RIA aplikacij. Za izvajalno okolje se na operacijskih sistemih uporablja predvsem.net. Tudi razširjenost na uporabniških sistemih v primerjavi z Adobe Falsh in Javo je manjša. - 4 -

3.1.5 HTML5 HTML5 je nadgradnja standardov HTML - 4.01, DOM, XHTML in delno JavaScript. Sicer je standard še v nastajanju, ampak ga podpira ţe večina brskalnikov. Predvsem je ta standard pomemben pri predvajanju video vsebin, ker je predvajalnik video vsebin ţe prisoten v brskalniku in ne potrebuje dodatnega programa. Tako lahko v prihodnosti izpodrine trenutno prevladujoči Adobe Flash za predvajanje video vsebin. Velika pomanjkljivost HTML 5 standarda je, da je še v fazi razvoja in mnogo elementov še ni podprtih s strani brskalnikov. 3.2 Izbira tehnologije Za izdelavo pripomočkov sem izbral programski jezik JavaFX in Java. Za izvedbo naloge je bila to najprimernejša rešitev, saj je delovanje znotraj brskalnika in na namizju ţe podprto. Zaradi razširjenosti Jave na uporabniških računalnikih je potencial širjenja pripomočkov velik. Poleg tega pa lahko JavaFX aplikacije poganjamo brez večjih teţav na vseh bolj razširjenih operacijskih sistemih. - 5 -

4 JAVA IN JAVAFX 4.1 Java Java programski jezik [2] je splošnonamenski, aktualen in objektno usmerjeni jezik, ki temelji na razredih. Programski jezik Java je podoben C in C + +, ampak je organiziran precej drugače - več značilnosti C in C + + izpusti ter nekaj idej povzame iz drugih jezikov. Namenjen je za jezik proizvajanja in ne za jezik, ki je namenjen raziskovanju. Java programski jezik je močno tipiziran. Ta specifikacija jasno razlikuje med napakami v času prevajanja - compile time, ki so lahko oziroma morajo biti odkrite v času prevajanja, in tistimi, ki se pojavijo v času izvajanja. Čas prevajanja je običajno sestavljen iz prevajanja programov v strojno neodvisno, byte-kodno (strojna koda za javanski navidezni stroj java virtual machine - JVM) predstavitev. Dejavnosti v času izvajanja vsebujejo nalaganje in povezovanje razredov, potrebnih za izvedbo programa, neobvezno generiranje strojne kode in dinamično optimizacijo programa ter dejansko izvajanje programa. Programski jezik Java je razmeroma visoko nivojski jezik, pri tem pa dostopanje do strojnih podrobnosti preko jezika ni na voljo. Java programski jezik se običajno prevede v byte-code nabor ukazov in v binarnem formatu, definiranem v [28]. 4.2 JavaFX JavaFX platforma [6] je evolucija platforme klienta Java. Sun Microsystems je leta 2007 predstavil platformo JavaFX kot pomoč razvijalcem vsebin in razvijalcem aplikacij za ustvarjanje vsebinsko bogatih aplikacij - content-rich applications za mobilne naprave, namizne računalnike, televizije in druge naprave za potrošnike. Prve različice so sestavljale platforme JavaFX Mobile in JavaFX Script jezik. Do danes je izšlo ţe nekaj različic, trenutna je JavaFX 2.0 beta, ki je izšla maja 2011. Izdaja končne različice JavaFX 2.0 je načrtovana v letu 2011. JavaFX je zasnovana tako, da omogoča razvijalcem aplikacij enostavno ustvarjanje in uvajanje bogatih internetnih aplikacij (RIA), ki se obnašajo enako na več platformah. - 6 -

Platforma JavaFX je zgrajena na Java tehnologiji in ponuja bogat nabor grafike in medijev API z visoko zmogljivo in strojno pospeševano grafiko. 4.2.1 Učenje jezika Ker je JavaFX relativno nov jezik, je bila dokumentacija v času učenja jezika in izdelave pripomočkov še nepopolna in tudi gradniki so vsebovali napake. Tako sem hitro naletel na teţave, ki jih uradna dokumentacija [5] ni ali pa jih je le slabo pokrivala. Nekaj rešitev sem našel na spletnih straneh in blogih JavaFX razvijalcev, ki so naleteli na podobne teţave. V največjo pomoč sta bila bloga avtorjev Stephen Chin [3] in Jim Weaver [4]. 4.2.2 Programski jezik Programski del jezika JavaFX je precej podoben Javi, vendar je nekoliko enostavnejši za laţje implementacije. Pri zahtevnejših programih pa je pisanje aplikacije nekoliko teţje predvsem zaradi pomanjkanja dokumentacije. Grafični del programa pa je precej podoben strukturi HTML-ja oziroma CSS predloge. Enostaven program ima naslednjo strukturo: Stage { title: "Enostaven program" scene: Scene { width: 250 height: 100 content: [ Rectangle { width: 150 height: 50 fill: Color.LIGHTGRAY translatex: 50 translatey: 25 }, Text { font: Font { size: 16 } content: "Besedilo programa" translatex: 60 translatey: 50 } ] } } - 7 -

Slika 4.1 prikazuje primer programa, kjer je osnovni element Stage oder, ki vsebuje parametre title naslov programa in scene sceno, ki vsebuje vse ostale elemente. Slika 4.1: JavaFX program Scena je široka 250 točk (width) in visoka 100 točk (height) ter vsebuje dva elementa Rectangle kvadrat in Text besedilo. Kvadrat ima določeno širino in višino ( 150 točk, 50 točk), barvo (fill) svetlo sivo in je od levega roba scene odmaknjen 50 točk ter od zgornjega roba 25 točk. Naslednji element v sceni je besedilo, ki ima določeno pisavo z velikostjo 16 točk, vsebino (content) z besedilom "Besedilo programa" in je od levega roba scene odmaknjeno za 60 točk ter 50 točk od zgornjega roba. Zaporedje elementov v sceni določa tudi grafično zaporedje. Tako je zadnji element v sceni na najvišji poziciji na grafičnem vmesniku. 4.2.3 Oblikovanje grafičnega vmesnika Grafične gradnike se lahko na sceno dodaja s pisanjem kode ali z uporabo urejevalnika, ki omogoča grafičen prikaz dodajanja gradnikov na sceno. Tako se lahko ţeljen gradnik iz nabora gradnikov z miško prenese na sceno in se ga nato oblikuje. Takšen urejevalnik se lahko kot vtičnik vključi v razvojno okolje Netbeans [7]. Vtičnik se imenuje JavaFXComposer [8] in je v precejšnjo pomoč pri razvijanju grafičnega vmesnika aplikacij. Slika 4.2 prikazuje Netbeans razvojno okolje z vključenim JavaFXComposer vtičnikom. - 8 -

Slika 4.2: Prikaz grafičnega oblikovanja programa s razvojnim okoljem Netbeans in vtičnikom JavaFXComposer Sam urejevalnika JavaFXComposer pri izdelavi nisem uporabljal zaradi lastnih komponent in uporabe JXtras knjiţnice [23]. Več o tem bom predstavil v poglavju 7.6.1. V večjo pomoč mi je bil JavaFX predogled, ki prikaţe oder - Stage programa z gradniki. Prednost uporabe predogleda je, da programa ni potrebno zagnati, ampak se prikaţe znotraj razvojnega okolja Netbeans (Slika 4.3). Sicer je prikaz programa s predogledom počasen, vendar še vedno hitrejši kot zagon programa. Uporaba predogleda je primerna le pri preverjanju statičnega pogleda grafičnega vmesnika. Predogled ne podpira premikanja elementov (animacije) in uporabe miške (klik na gumb). Slika 4.3: Predogled programa - 9 -

5 VMESNIKI 5.1 SOAP SOAP - Simple Object Access Protocol (enostaven protokol za dostop do objektov) [20] je enostaven protokol, ki bazira na XML in je uporabljen za izmenjavo informacij preko HTTP. Današnje aplikacije za komunikacijo med objekti uporabljajo klice oddaljene procedure Remote Procedure Call RPC. Primeri takšnih objektov so DCOM [21] in CORBA [22] vendar HTTP ni bil zasnovan za komunikacijo z RPC klici. RPC predstavlja problem pri zdruţljivosti aplikacij z različnimi platformami ter pri varnosti. Poţarni zidovi in proxy streţniki običajno blokirajo takšno vrsto prometa. Primernejša izbira za komunikacijo med aplikacijami je preko HTTP, ker je ta podprt pri vseh brskalnikih in streţnikih. Za ta namen je bil zasnovan SOAP. SOAP omogoča enostavno komunikacijo med aplikacijami, ki tečejo na različnih operacijskih sistemih, uporabljajo različne tehnologije in programske jezike. W3C je leta 2003 izdal priporočilo za SOAP. Primer uporabe je razloţen v poglavju 7.3.1. 5.2 OpenMN Je odprt vmesnik, ki omogoča razvijalcem dostop do MNS sistema za upravljanje telekomunikacijskega omreţja. V nalogi ga uporabljam za nastavljanje dopolnilnih storitev, kot so preusmerjanje klica, nastavljanje stanja "ne moti", ipd. OpenMN je vmesnik, ki je specifičen za produkte podjetje Iskratel [36]. 5.3 REST REST arhitektura je sestavljena iz odjemalca in steţnika, pri čemer odjemalec pošlje zahtevo, katero streţnik obdela in vrne odgovor odjemalcu. Enoten vmesnik med odjemalcem in streţnikom omogoča ločeno razvijanje odjemalca in streţnika. Storitev, ki je zgrajena po načelih REST arhitekture je tako imenovana RESTful storitev. RESTful spletna storitev je enostavna spletna storitev, ki je zbirka sredstev (resources) določenih z naslednjimi načeli: določen je korenski URI naslov storitve (na primer - 10 -

http://example.com/resources), podpira različne predstavitve (formate) podatkov, ki so običajno JSON, XML, ipd., podpira nabor HTTP metod (POST, GET, PUT ali DELETE) in je zasnovana za hypertext. V praksi se za poimenovanje vmesnika, ki predstavlja RESTful storitev pogosto imenuje REST vmesnik, takšno poimenovanje sem uporabil tudi v tem delu. - 11 -

6 OKOLJE Razvojno okolje, katerega sem uporabljal za pridobivanje prikazanih podatkov in klicanje storitev na posameznih elementih razvojnega okolja prikazuje Slika 6.1. Osnovni element s katerim komunicirajo pripomočki je AS (Application server) aplikativni streţnik [34]. Komunikacija med aplikativnem streţnikom in pripomočkom je izvedena preko REST vmesnika. Aplikativni streţnik preko drugih vmesnikov komunicira z ostalimi elementi v razvojnem okolju. Izjema je CDR (Call Detail Record) streţnik [33], ki zapisuje detajlne zapise klicev. Pripomoček zaradi zgodovine razvoja vmesnika CDR streţnika s CDR streţnikom komunicira neposredno. MN streţnik skrbi za upravljanje s storitvami nad številkami uporabnika (nadziranje oddaljenega klica, posredovanje klica, ipd.). Z aplikativnim streţnikom komunicira preko SOAP protokola. Na niţjem nivoju se nahaja CS (Call Server) klicni streţnik [35], ki poskrbi za vzpostavljanje in nadziranje klicev. Klici in pošiljanje kratkih sporočil na mobilne naprave se izvedejo oziroma pošiljajo preko mobilnega prehoda (levo spodaj). Mobilni prehod uporabljata aplikativni streţnik za pošiljanje kratkih tekstovnih sporočil in klicni streţnik za izvajanje klicev v mobilno omreţje. Predstavljeno okolje je poenostavljeno in je dovolj za razumevanje poteka uporabe storitev. Slika 6.1: Shema razvojnega okolja - 12 -

6.1 Aplikativni strežnik - AS Aplikativni streţnik predstavlja vstopno točko za razvojno okolje. Pripomočki kličejo storitve na aplikativnem streţniku. Če se podatki ne nahajajo znotraj aplikativnega streţnika, aplikativni streţnik pridobi podatke preko različnih vmesnikov z drugih streţnikov (OpenMN, CDR,...) in podatke posreduje nazaj k pripomočku. Izjema je CDR streţnik iz ţe omenjenih razlogov. Storitve, ki jih kličejo pripomočki na aplikativnem streţniku, so pridobivanje seznama kontaktov, seznam imen pripomočkov, zagonske datoteke pripomočka, pošiljanje kratkih sporočil. Storitve ki se nahajajo na drugih streţnikih in jih pripomočki kličejo preko aplikativnega streţnika pa so uporaba dopolnilnih storitev na MN streţniku in izvajanje klica. Storitve na aplikativnem streţniku so dostopne preko REST vmesnika. 6.2 Klicni strežnik Call server CS Poenostavljeno klicni streţnik med drugim skrbi za izvajanje klicev in posredovanje podatkov o klicih na streţnik za arhiviranje podatkov o klicih - CDR streţnik. Preverja tudi nastavitve za številke v njegovem obsegu (lokalne številke) in na podlagi tega klic preusmeri, zavrne, pošlje signal "zaseden", ipd. 6.3 OpenMN - MN MN streţnik skrbi za upravljanje oziroma za uporabo dopolnilnih storitev, kot so nadziranje oddaljenega klica, funkcija "ne moti", preusmeritev klica, ipd. MN streţnik je dostopen preko odprtega vmesnika OpenMN. Za komunikacijo med aplikativnim streţnikom in OpenMN se uporablja SOAP protokol. - 13 -

6.4 Strežnik za zapis podatkov o klicih - CDR Call Detail Record - CDR streţnik se uporablja se za centralno shranjevanje podatkov o klicih. Iz teh podatkov se lahko generira seznam sprejetih, odhodnih in neodgovorjenih klicev, kar uporabljam pri pripomočku za prikaz seznama klicev. Podatki, ki se zapisujejo o klicu so številka kličočega in klicanega, začetek klica, konec klica, trajanje klica, stroški klica in tip klica. Odvisno od različice streţnika se lahko zapisujejo še drugi podatki o klicu. Dostop do zapisov na streţniku je omogočen preko SOAP vmesnika. - 14 -

7 RAZVOJ PRIPOMOČKOV V naslednjih poglavjih bom predstavil zahteve za pripomočke, programska orodja, ki sem jih uporabljal pri izdelavi pripomočkov in uporabljene tehnologije. Nato bom razloţil razvoj programske logike pripomočkov in portala za pridobivanje pripomočkov, razvoj grafičnega vmesnika in opisal teţave pri realizaciji zahtev. 7.1 Zahteve za pripomočke Zahtevana je bila izdelava naslednjih pripomočkov: Click to call oziroma Click to dial (klic na klik oziroma klik za klic) pripomoček omogoča funkcionalnost proţenja klica preko programa, ki teče na računalniku ali mobilni napravi. Pripomoček deluje enako za vse tipe terminalov- telefon (stacionarni ali mobilni) ali program za izvajanje klicev Softphone. Call log pripomoček prikazuje seznam klicev za eno telefonsko številko ali enega uporabnika (ima lahko več telefonskih številk). Klici so ločeni v tri kategorije: Missed calls zgrešeni klici, Placed calls sproţeni klici in Received calls sprejeti klici. Kategorije so lahko prikazane ločeno in zdruţeno All calls. Iz seznama je razvidna številka klicanega called number, številka kličočega calling number, čas in datum date zapisa klica in čas trajanja klica duration. Programu je dodana funkcionalnost "klik za klic" click to dial za klice na seznamu. Do not disturb ne moti (uporabnik je zaposlen) pripomoček omogoča uporabnikom spreminjanje stanja dosegljivosti. Če je stanje "ne moti" omogočeno, je uporabnik nedosegljiv za klice oziroma centrala vrne signal "uporabnik je zaseden" busy. Remote call control oddaljen nadzor klica pripomoček omogoča uporabniku izbiranje naprave, s katere ţeli sproţiti klic (stacionarni, mobilni telefon, programski telefon). Call forwarding preusmerjanje klicev vključuje tri metode preusmerjanja: call forwarding busy preusmerjanje klica, ko je uporabnik zaseden; call forwarding unconditional brezpogojno preusmerjanje klica, call forwarding no reply preusmerjanje klica, ko - 15 -

uporabnik ne odgovori. Nastavitve lahko uporabnik nastavi le za številke znotraj omreţja (okolja). Phonebook telefonski imenik, pripomoček prikazuje imenik z moţnostjo iskanja in prikaza statusa stika. Omogoča prikaz uporabnikov po skupinah: sluţbeni, priljubljeni, zasebni stiki. Pripomoček vsebuje funkcionalnost "klic na klik" in pošiljanja kratkih sporočil (SMS). Container zabojnik pripomoček, ki zdruţuje posamezne pripomočke in je v osnovi orodna vrstica toolbar, s katere je moţno zagnati pripomočke. 7.1.1 Druge zahteve Zagon pripomočka brez "namestitve" za hitrejšo uporabo pripomočka. Uporabniku ni potrebno namestiti pripomočka s pomočjo klasičnega postopka namestitve. Avtomatski zagon pripomočka ob zagonu računalnika oziroma operacijskega sistema za takojšen prikaz na zaslonu. Shranjevanje podatkov o uporabniku in nastavitev na uporabnikov sistem tako, da je nadaljnja avtorizacija uporabnika nepotrebna. Drag and drop to desktop oziroma drag to install - povleci in namesti funkcija omogoča uporabniku prenos pripomočka na namizje. Delovanje pripomočka se iz brskalnika prenese na namizje. Delovanje na operacijskem sistemu Windows (Windows XP in Windows 7) in Linux (Ubuntu). - 16 -

7.2 Uporabljena orodja 7.2.1 Netbeans Netbeans [7] je razvojno okolje za več programskih jezikov, kot so Java, JavaFX, JavaScript, C, C++, Python, Ruby, SQL, PHP, HTML, CSS, itd. Poleg tega vsebuje veliko orodij za testiranje in nadzorovanje delovanja programov. Vključuje streţnike, kot so Tomcat, GlassFish, ipd. Prva verzija programa je izšla 1998, ko je izšel kot komercialni program, leta 2000 pa je Sun izdal odprtokodno različico. Konec leta 2007 je izšla različica 6.0 in se nadgrajevala do verzije 6.9, ki je izšla junija 2010. V letu 2011 je izšla različica 7.0. NetBeans se nenehno nadgrajuje in izboljšuje in je dostopen za Windows, Linux, Mac OS X in Solaris operacijske sisteme. Ker ima Netbeans trenutno najboljšo podporo za delo z JavaFX sem izbral to programsko okolje. 7.2.2 SoapUI SoapUI [9] je program za testiranje in simuliranje spletnih storitev (Web Service). Dostopen je za večino operacijskih sistemov. Trenutna verzija SoapUI je 3.6, tako odprtokodna kot profesionalna. Program sem uporabljal za generiranje in testiranje SOAP zahtev za CDR streţnike in OpenMN servise. 7.2.3 Inkscape Je odprtokodni program za vektorsko risanje [10]. Večino grafičnega oblikovanja sem opravil s tem orodjem. Vsebuje vtičnik za pretvarjanje formata SVG v JavaFX format slike, vendar ima shranjen element po pretvarjanju določene pomanjkljivosti. Iz tega razloga sem ga uporabljal le za predhodno izdelavo vmesnika in postavitev elementov, te pa sem nato realiziral programsko. 7.2.4 Spletni brskalnik Za preverjanje delovanja v brskalniku sem uporabljal brskalnika Mozilla Firefox [11] in Google Chrome [12], saj imata vgrajen prikaz napak. Za podrobnejše nadziranje napak pa je mogoče vključiti vtičnik plugin Firebug [14] pri Mozilli Firefox oziroma vgrajeno orodje konzola JavaScript JavaScript Console pri Google Chrome. - 17 -

7.2.5 Apache HTTP Server Za preverjanje prenosa pripomočkov in simuliranje portala, ki ponuja pripomočke, sem uporabil dprtokodni Apache HTTP Server [13]. Njegove prednosti so majhna velikost in enostavna uporaba za namene testiranja. - 18 -

7.3 Uporabljene tehnologije V nalogi so uporabljene različne tehnologije za pridobivanje podatkov s streţnika. Nekateri pristopi imajo prednosti na določenih področjih ali pa so posledica neenotnega razvoja vmesnikov. 7.3.1 Uporaba SOAP SOAP zahteva je sestavljena iz ovojnice Envelope in telesa Body. V telesu so definirane metode servisa, ki jih ţelimo klicati. Če je potrebno metoda vsebuje argumente, ki so potrebni za izvedbo zahteve na servisu. V primeru ţelim od servisa pridobiti podatke o ceni (GetPrice) za jabolka Apples (Item element). Primer zahteve (povzeto po [25]): <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body> <m:getprice xmlns:m="http://www.w3schools.com/prices"> <m:item>apples</m:item> </m:getprice> </soap:body> </soap:envelope> Servis vrne odgovor z isto osnovno strukturo ovojnice in telesa z metodo GetPriceResponse (odziv na pridobi podatke o ceni), znotraj metode pa argument s ceno jabolk 1.90. Primer odgovora: <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body> <m:getpriceresponse xmlns:m="http://www.w3schools.com/prices"> <m:price>1.90</m:price> </m:getpriceresponse> </soap:body> </soap:envelope> - 19 -

SOAP zahteva se na streţnik pošilja preko HTTP: POST /service HTTP/1.1 Accept-Encoding: gzip,deflate Content-Type: text/xml;charset=utf-8 SOAPAction: "" User-Agent: Jakarta Commons-HttpClient/3.1 Host: <hostaddress> Content-Length: 1263 <soap:envelope... Primer HTTP glave odgovora: HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: 587 Server: Jetty(6.1.9) <soap:envelope... - 20 -

7.3.2 Uporaba REST vmesnika Metode, ki so na voljo po HTTP specifikaciji [15]: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT. Največkrat uporabljene so GET, POST, PUT, DELETE. GET (pridobi) metoda se uporablja za pridobivanje podatkov s streţnika. Primer zahteve: GET /sdpweb/rest/widget/widgetlist?limit=all HTTP/1.1 Host: <hostaddress> Connection: keep-alive Referer: <hostaddress>/sdpweb/ Authorization: <user-authorization-data> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: sl-si,sl;q=0.8,en-gb;q=0.6,en;q=0.4 Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.3 Zahteva je generirana za pridobitev seznama pripomočkov, ki jih ponuja aplikativni streţnik. Kliče se storitev widgetlist z metodo GET in parametrom limit (omejitev) z vrednostjo all (storitev vrne vse elemente). Storitev vrne kot odgovor seznam imen pripomočkov. Primer odgovora: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 01:00:00 CET X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Content-Type: application/json Transfer-Encoding: chunked Date: Thu, 08 Sep 2011 11:19:34 GMT ["PBWidget","CallLogWidget","C2DWidget","RCCWidget","DNDWidget","CFWidget","WidgetContai ner"] 7.3.3 Uporaba JSON formata JSON [18] je enostaven format za izmenjavo podatkov med različnimi programskimi jeziki. Sestavljajo ga trije elementi: objekt, polje in vrednost. Vrednosti so lahko niz, število, objekt, polje, resnično - true, neresnično - false ali nič - null. - 21 -

Objekt je sestavljen iz para: ključ (ime - poimenovanje vrednosti) in vrednost. Ta par je vključen v zavita oklepaja {}. Primer: {"ključ":"vrednost"} zapis niza {"ime":"miha"} zapis numerične vrednosti {"število": "3.14"} Polje je sestavljeno iz imena polja in vrednosti, ki so obdane z oglatimi oklepaji [] in ločene z vejico. Primer: "cifre":["1", "2", "3","4"] Vsi elementi lahko vsebujejo druge elemente. Tako dobimo polje z objekti, objekte z vrednostjo drugega objekta ali polja... { "ime": "Miha", "priimek": "Naš", "starost": 25, "naslov": { "ulica": "Mariborska 21", "mesto": "Maribor", "pošta": "2000" }, "telefon": [ { "tip": "doma", "številka": "111 111 111" }, { "tip": "mobilna", "številka": "041 111 111" } ] } Da je takšen zapis uporaben v programu, ga je potrebno pretvoriti v zapis primeren programskemu jeziku. Za pretvorbo se lahko izdela pretvornik znotraj programa ali pa se - 22 -

uporabi ţe izdelane pretvornike. Sam sem uporabil GSON knjiţnico [1]. Knjiţnica s pretvorjenimi podatki napolni vnaprej pripravljene razrede - class. Za zgornji primer je potrebno definirati razrede za vsak objekt. Razred telefon: class Telefon { private String tip; private String številka; public String gettip() { return tip; } public String getštevilka() { return številka; } public void settip(string tip) { this.tip = tip; } public void setštevilka(string številka) { this.številka = številka; } } Razred Naslov: class Naslov { private String ulica; private String mesto; private int pošta; public String getulica() { return ulica; } public String getmesto() { return mesto; } public int getpošta() { return pošta; } public void setulica(string ulica) { this.ulica = ulica; } public void setmesto(string mesto) { this.mesto = mesto; } public void setpošta(int pošta) { this.pošta = pošta; } } Razred Oseba: class Oseba { private String ime; private String priimek; private int starost; private Naslov naslov; private List<Telefon> telofoni; public String getulica() { return ime; } public String getmesto() { return priimek; } public int getpošta() { return starost; } public Naslov getnaslov() { return naslov; } public List<Telefon> gettelefoni() { return telefoni; } - 23 -

} public void setulica(string ime) { this.ime = ime; } public void setmesto(string priimek) { this.priimek = priimek; } public void setpošta(int starost) { this.starost = starost; } public void setnaslov(naslov naslov) { this.naslov = naslov; } public void settelefoni(list<telefon> telefoni) { this.telefoni = telefoni; } Uporaba knjiţnice za pretvorbo iz JSON formata (jsonstring) v objekt (osebamiha): Gson gson = new Gson(); Oseba osebamiha = gson.fromjson(jsonstring, Oseba.class); Uporaba knjiţnice za pretvorbo iz objekta (osebamiha) v JSON format (jsonstring): Gson gson = new Gson(); String jsonstring = gson.tojson(osebamiha); 7.3.4 Uporaba zagonskih datotek JNLP JNLP - Java Network Launching Protocol (Javanski zagonski protokol preko omreţja) [19] datoteka se uporablja za zagon javanskih aplikacij z Java web start tehnologijo. Za zagon aplikacije preko omreţja je dovolj, da se na uporabnikov sistem prenese zagonska datoteka. Ta vsebuje vse potrebne podatke za prenos potrebnih knjiţnic in zagon aplikacije. Primer JNLP datoteke: <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="http://localhost/widgets/dndwidget/" href="dndwidget.jnlp"> <information> <title>dndwidget</title> <vendor>ramsak</vendor> <homepage href="http://localhost"/> <description>dndwidget</description> <icon kind="splash" href="http://dl.javafx.com/1.3/splash.png"/> <offline-allowed/> </information> <resources> <j2se version="1.5+"/> <extension name="javafx Runtime" href="http://dl.javafx.com/1.3/javafx-rt.jnlp"/> <jar href="dndwidget_as13.jar" main="true" size="335211"/> </resources> <application-desc main-class="com.sun.javafx.runtime.main.main" progressclass="com.javafx.progressbar.progressmanager"> <argument>mainjavafxscript=si.iskratel.widget.dnd.main</argument> </application-desc> - 24 -

<update check="always"/> </jnlp> Ključni podatki v JNLP datoteki so lokacije korenske mape za dostop do.jar datoteke, imena.jar datoteke in imena razreda z zagonsko kodo. Ostali argumenti vsebujejo naslov programa, ime avtorja, spletno stran in poljubne dodatne argumente. Te sem uporabil za prenos podatkov s spleta in shranjevanje na uporabniškem računalniku. Tako ni potreben dodaten zapis v ločeno datoteko ali na katero drugo mesto v sistemu. Podatki, ki so specifični za uporabnika, za omreţje ali postavitev, se tako nahajajo v skupni datoteki. Primer datoteke z argumenti: <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="http://localhost/widgets/dndwidget/" href="dndwidget.jnlp"> <information> <title>dndwidget</title> <vendor>ramsak</vendor> <homepage href="http://localhost"/> <description>dndwidget</description> <icon kind="splash" href="http://dl.javafx.com/1.3/splash.png"/> <offline-allowed/> </information> <resources> <j2se version="1.5+"/> <extension name="javafx Runtime" href="http://dl.javafx.com/1.3/javafx-rt.jnlp"/> <jar href="dndwidget_as13.jar" main="true" size="335211"/> </resources> <application-desc main-class="com.sun.javafx.runtime.main.main" progressclass="com.javafx.progressbar.progressmanager"> <argument>mainjavafxscript=si.iskratel.widget.dnd.main</argument> <argument> user-data->userdata& numbers->1111;2222& area-code->040& prefix->0& widget-source->http://localhost/widgets/dndwidget/& on-screen-position->100.0;100.0& logging-level->log& as-host->127.0.0.1 </argument> </application-desc> - 25 -

<update check="always"/> </jnlp> Za prekrivanje podatkov pri prenosu sem argumente zakodiral:... <argument> dxnlci1kyxrhlt51c2vyzgf0yszudw1izxjzlt4xmtexoziymjimyxjlys1jb2rllt4wndamchjlzml4lt4wjndp ZGdldC1zb3VyY2UtPmh0dHA6Ly9sb2NhbGhvc3Qvd2lkZ2V0cy9ETkRXaWRnZXQvJm9uLXNjcmVlbi1wb3NpdGlv bi0+mtawlja7mtawljambg9nz2luzy1szxzlbc0+te9hjmfzlwhvc3qtpjeyny4wljaumq&& </argument>... - 26 -

7.4 Razvoj funkcionalnosti pripomočkov V tem poglavju bom opisal programsko logiko uporabljeno v pripomočkih, v naslednjem pa razvoj grafičnega vmesnika pripomočka. Ločeno jih bom opisal zato, ker se lahko programska logika pripomočka uporabi na drugih grafičnih vmesnikih. 7.4.1 Osnovne funkcionalnosti pripomočka 7.4.1.1 Zagon pripomočka brez "namestitve" Ker so pripomočki "lahki" programi in običajno ne potrebujejo klasične namestitve, sem za namestitev izkoristil obstoječ princip, ki ga uporablja Java. V zagonski JNLP datoteki ali JavaScript kodi za zagon applet-a 1 je naveden naslov, kjer se nahaja JAR datoteka s kodo programa. Ob zagonu se prenese JAR datoteka na uporabnikov računalnik v java cache Javin začasni pomnilnik. Tako se ob naslednjem zagonu programa zaţene program z JAR datoteko, ki je ţe na napravi. Če uporabnik iz pomnilnika izbriše JAR datoteko, se ob novem zagonu programa zopet prenese z navedenega naslova. Tako je za zagon programa potrebno shraniti le zagonsko datoteko. 7.4.1.2 Avtomatski zagon ob zagonu računalnika Za pripomoček je običajno, da se prikaţe na zaslonu ţe ob zagonu operacijskega sistema. Tako za ta namen zagonske datoteke shranim v mapo zagon - startup, ki je v operacijskem sistemu Windows običajno na naslovu : Za Windows 7: [C:\Users\Username\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup] Za Windows XP: [C:\Documents and Settings\Username\Start Menu\Programs\Startup] Datoteke, shranjene v tej mapi, se ob zagonu operacijskega sistema same zaţenejo. 7.4.1.3 Shranjevanje podatkov o uporabniku in nastavitev Da se uporabniku ni potrebno ob vsakem zagonu pripomočka prijaviti oziroma avtorizirati, sem podatke shranil v zagonsko datoteko. Ti podatki se napolnijo ob generiranju datoteke na portalu. Poleg podatkov za avtorizacijo se shranijo še drugi podatki: uporabnikove telefonske številke, številka omreţne skupine, naslov aplikativnega streţnika, naslov lokacije datotek, potrebnih za zagon pripomočka, pozicija na zaslonu, zadnje klicane številke, ipd. 1 Applet je program napisan v programskem jeziku Java in je lahko vključen v spletno stran [32]. - 27 -

Za prepoznavanje vrednosti argumentov sem uporabil sistem ključa in njegove vrednosti (skupaj predstavljata spremenljivko). Podoben sistem se uporablja pri JSON formatu. Za nek ključ spremenljivke, ki je sestavljen iz niza znakov, je določena neka vrednost spremenljivke. Za ključ "uporabniškoime" določim vrednost "Uporabnik". Oblika takšnega zapisa v zagonski datoteki bi bila: uporabniškoime=uporabnik Spremenljivke se med sabo ločijo z znakom "&", na primer: uporabniškoime=uporabnik&geslo=mojegeslo Za spremenljivke, ki vsebujejo polje vrednosti, sem vrednosti znotraj polja ločil z znakom ";", na primer: telefonskeštevilke=02111101;02111102. Ker JavaFX ni pravilno brala takšnega formata sem moral prilagoditi ločila. Namesto znaka "=" sem se odločil za "->". Prav tako sem moral iz niza izločiti presledke, ki sem jih nadomestil z znakom"-". Ker gre pri zagonski JNLP datoteki za tekstovno oziroma XML datoteko in jo lahko odpremo in pregledamo z vsakim urejevalnikom besedila in ker se podatki pošiljajo po omreţju, sem vse podatke zakodiral z BASE64 metodo. Tako sem nekoliko povišal varnost podatkov in preprečil običajnemu uporabniku spreminjanje teh podatkov. 7.4.1.4 "Drag and drop to desktop" ali "drag to install" JavaFX omogoča, da pripomoček povlečemo iz brskalnika na namizje, delovanje pripomočka pa se pri tem ne prekine in naprej teče na namizju. Tako dobimo pripomoček, ki deluje na spletni strani v brskalniku (web widget) in namizju (desktop widget), kar je precejšnja prednost v delovanju pred ostalimi pripomočki. Ti običajno tečejo le na spletni strani znotraj brskalnika ali na namizju, za kar potrebujejo namestitev. Na podlagi lokacije pripomočka (namizje ali brskalnik) se lahko spremeni obnašanje oziroma delovanje pripomočka. Ker je JavaFX še nedovršen jezik, je zaradi nekaterih pomanjkljivosti te funkcije nisem mogel najbolje uporabiti. Zaradi tega sem se odločil, da izdelam pripomočke, ki delujejo na namizju in kasneje prilagodim delovanje znotraj brskalnika. Več o tem v poglavju 7.6.1. 7.4.1.5 Pridobitev zagonske JNLP datoteke Storitev za pridobivanje zagonske JNLP datoteke se nahaja na aplikativnem streţniku. Aplikativni streţnik avtorizira uporabnika in na podlagi njegovih podatkov napolni predlogo zagonske datoteka za posamezen pripomoček. - 28 -

Zahteve za pridobitev zagonske datoteke se generirajo ob kliku na ikono pripomočka znotraj pripomočka zabojnik in na portalu za pridobivanje pripomočkov. Ob kliku se zahteva se pošlje na aplikativni streţnik, ki vrne zagonsko datoteko za pripomoček. Zahteva za zagonsko datoteko vsebuje ime pripomočka (WidgetContainer) in uporabniško ime (ramsak) : GET /sdpweb/rest/widget?widgetname=widgetcontainer&username=ramsak HTTP/1.1 Content-Type: text/xml;charset=utf-8 Authorization: <user-authorization-data> User-Agent: Java/1.6.0_24 Host: <hostaddress> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Kot odgovor se vrne napolnjena zagonska datoteka, s katero je mogoče zagnati pripomoček: HTTP/1.1 201 Created Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 01:00:00 CET X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Set-Cookie: JSESSIONID=3566ECF4199066F204126AA631125E08; Path=/sdpweb Content-Disposition: attachment; filename=cfwidget.jnlp Content-Type: application/x-java-jnlp-file Transfer-Encoding: chunked Date: Fri, 12 Aug 2011 13:14:53 GMT <?xml version='1.0' encoding='utf-8'?> <jnlp spec='1.0+' codebase='./cfwidget.jnlp'> <information> <title>cfwidget</title> <vendor>iskratel</vendor> <homepage href='www.iskratel.si'/> <description>cfwidget</description> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version='1.5+'/> <extension name='javafx Runtime' href='http://dl.javafx.com/1.3/javafx-rt.jnlp'/> <extension name='lib' href='http://openapi.iskratel.si:8080/itwidgets/cfwidget/lib/lib.jnlp'/> - 29 -

<jar href='http://openapi.iskratel.si:8080/itwidgets/cfwidget/cfwidget.jar' main='true'/> </resources> <application-desc main-class='com.sun.javafx.runtime.main.main'> <argument>mainjavafxscript=si.iskratel.widget.cf.main</argument> <argument> dxnlci1kyxrhlt51c2vyzgf0yszudw1izxjzlt4xmtexoziymjimyxjlys1jb2rllt4wndamchjlzml4lt4wjndp ZGdldC1zb3VyY2UtPmh0dHA6Ly9sb2NhbGhvc3Qvd2lkZ2V0cy9ETkRXaWRnZXQvJm9uLXNjcmVlbi1wb3NpdGlv bi0+mtawlja7mtawljambg9nz2luzy1szxzlbc0+te9hjmfzlwhvc3qtpjeyny4wljaumq&& </argument> </application-desc> <update check='always'/> </jnlp> 7.4.2 Poenotenje pripomočkov, skupno ogrodje Parametri za nastavitve pripomočkov se med seboj razlikujejo, nekateri so tudi specifični za posamezen pripomoček, vendar pa je večina parametrov enakih. Za enake parametre je smiselno, da so poimenovani enako, saj je del kode, ki upravlja s temi parametri, lahko enak pri vseh pripomočkih. Tudi deli kode, ki so potrebni za osnovno delovanje pripomočkov, so enaki. Tako sem pripravil ogrodje, ki predstavlja osnovno strukturo pripomočka in podpira osnovne funkcije pripomočka. V praksi je to pripomoček s praznim ozadjem, delujočim menijem in podprtimi osnovnimi funkcijami pripomočka (prenos, zagon, shranjevanje, ), na katerega sem kasneje dodajal elemente in implementiral funkcionalnosti pripomočka. 7.4.3 Prikaz seznama klicev CallLog Widget Za prikaz seznama klicev sem moral pridobiti podatke o klicih uporabnika, ki se hranijo na CDR streţniku (Call Detail Records zapisi podrobnosti klicev). Podatke generira telefonska centrala, ti pa se beleţijo na CDR streţniku. Podatki, ki se beleţijo, so čas in datum začetka klica, trajanje klica, telefonska številka klicatelja in klicanega, tip klica ipd. Do teh podatkov sem dostopal preko SOAP vmesnika. V SOAP zahtevi sem definiral podatke uporabnika ter koliko in kakšne tipe klicev ţelim v odgovoru. Zaradi omejene velikosti končne datoteke pripomočka (hitrejši prenos prek spleta) za generiranje SOAP zahtev nisem uporabil knjiţnic, kot so Axis [29] in CXF [30]. Zahteve sem generiral ročno in jih pošiljal s HTTP zahtevami HTTP request. Prav tako sem ročno prebral odgovore in jih pretvoril v seznam, primeren za prikaz v programu. - 30 -

Primer zahteve: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cdr="http://<cdr-server-url>/"> <soapenv:header> <wsse:security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:usernametoken wsu:id="usernametoken-1" xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:username><cdr-username></wsse:username> <wsse:password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401- wss-username-token-profile-1.0#passwordtext"><cdr-password></wsse:password> <wsse:nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis- 200401-wss-soap-message-security-1.0#Base64Binary"><nonce></wsse:Nonce> <wsu:created>2011-04-14t13:06:12.276z</wsu:created> </wsse:usernametoken> </wsse:security> </soapenv:header> <soapenv:body> <cdr:retrievecalls> <!-- From Date --> <arg0>2011-03-30t00:00:00+02:00</arg0> <!-- To Date --> <arg1>2011-05-12t14:20:16+02:00</arg1> <!-- Phone number --> <arg2>042077122</arg2> <!-- Type of call --> <arg3>3</arg3> <!-- Limit --> <arg4>2</arg4> <!-- Order --> <arg5>0</arg5> </cdr:retrievecalls> </soapenv:body> </soapenv:envelope> Zahteva vsebuje element s parametri za avtorizacijo (<wsse:security>) in element s telesom zahteve, v katerem so podatki za prikaz rezultatov. Posamezni parametri zahteve so: interval datuma - začetni in končni datum (<arg0>, <arg1>), določena telefonska številka, tip klica (3 - vsi klici), število prikazov (2) in zaporedje razvrščanja (0). - 31 -

Za zgornjo zahtevo sem dobil odgovor: <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:body> <ns2:retrievecallsresponse xmlns:ns2="http://cdrmanager.ccs.iskratel.si/"> <return> <callduration>32960</callduration> <callreleasecause>16</callreleasecause> <callednumber>42077122</callednumber> <enddatetime>2011-05-10t15:36:59+02:00</enddatetime> <id>57356</id> <numberofchargingunits>0</numberofchargingunits> <ownernumber>42077222</ownernumber> <price>0.0</price> <startdatetime>2011-05-10t15:36:26+02:00</startdatetime> <typeofcall>2</typeofcall> </return> <return> <callduration>4260</callduration> <callreleasecause>16</callreleasecause> <callednumber>42077222</callednumber> <enddatetime>2011-05-10t13:33:30+02:00</enddatetime> <id>55677</id> <numberofchargingunits>0</numberofchargingunits> <ownernumber>42077122</ownernumber> <price>0.0</price> <startdatetime>2011-05-10t13:33:26+02:00</startdatetime> <typeofcall>0</typeofcall> </return> </ns2:retrievecallsresponse> </soap:body> </soap:envelope> V odgovoru sta zapisa dveh klicev: prvi je bil proţen iz številke 42077222 (owner number) na 42077122 (called number), tip klica (type of call) je sprejeti klic s pričetkom ob 2011-05- 10T15:36:26+02:00 (start date time; format zapisa: <datum>t<ura><časovna cona>) in zaključkom ob 2011-05-10T15:36:59+02:00 (end date time). Klic je trajal 32960 milisekund (call duration). Ker je šlo za interni klic, sta število obračunanih enot (number of charging units) in cena (price) enaki nič. Drugi zapis klica beleţi klic v nasprotni smeri odhodni klic na isti številki. - 32 -

Pridobljene podatke glede na nastavitve uporabnika prikazujem v seznamu klicev. Ločeno se prikazujejo zgrešeni, sprejeti in sproţeni klici. Te skupine se lahko prikazujejo za posamezne ali vse številke. Uporabnik lahko nastavlja interval osveţevanja ali izklopi avtomatsko osveţevanje in ročno sproţi zahtevo za podatke s CDR streţnika, kadar to ţeli. 7.4.4 Klic na zahtevo C2D Widget Proţenje klica je izvedeno s pošiljanjem zahteve za vzpostavitev third party call na vmesnik Parlay X. Za vzpostavitev klica so potrebni klicna številka, klicana številka in tako imenovan api-key (application key) ključ programa. Ključ je potreben za preverjanje uporabnika in je unikaten ključ, sestavljen iz uporabniškega imena in gesla uporabnika. Ti podatki se pošljejo preko HTTP protokola z GET metodo na REST vmesnik aplikativnega streţnika. Primer zahteve: Klic, ki se sproţi preko Parlay X vmesnika, se izvede s pomočjo CSTA - Computer- Supported Telecommunications Applications - računalniško podprtega telekomunikacijskega programa: Zahteva: https://<hostaddress>/pxgw/thirdpartycall3/makecall?callingparty=042077122&calledparty=0 40000000&apikey=smFsc2trO3oDMjAAMGVnZWU2zjBj6DVAOTc5Y2L25zE4OmY4MWSxZAE= Streţnik kot odgovor v primeru uspešno rešene zahteve vrne identifikacijsko številko klica, v primeru neuspeha pa opis napake. Odgovor je v JSON formatu. Primer odgovora: {"result":"1001"} Med razvojem pripomočka se je na streţniku za proţenje klicev uporabljal drug servis, ki je za izvajanje klicev uporabljal SIP protokol, spremenil pa se je tudi vmesnik. Tako sem prilagodil zahtevo in branje odgovora na spremenjen vmesnik. Zahteva: POST /sdpweb/rest/thirdpartycall/callsessions HTTP/1.1 Accept-Charset: UTF-8 authorization: <user-authorization-data> - 33 -

User-Agent: Java/1.6.0_24 Host: <hostaddress> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Content-type: application/x-www-form-urlencoded Content-Length: 190 { "callsessioninformation": { "clientcorrelator":"511357", "participant":[ { "participantaddress":"<phonenumber>", "participantname":"ramsak" },{ "participantaddress":"<phonenumber>", "participantname":"" } ] } } Odgovor: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Set-Cookie: JSESSIONID=<session-id>; Path=/sdpweb Content-Type: application/json Transfer-Encoding: chunked Date: Fri, 12 Aug 2011 08:20:55 GMT { "resourceurl":"http://<hostaddress>/sdpweb/rest/thirdpartycall/callsessions/(d09095c4- ee72-4a85-a976-087d842cc159:<hostaddress>.clicktocallsip)", "participant":[ { "starttime":"2011-08-12t10:20:55", "resourceurl": "http://<hostaddress>/sdpweb/rest/thirdpartycall/callsessions/(d09095c4-ee72-4a85-a976-087d842cc159:<hostaddress>.clicktocallsip)/participants/pt001", "participantaddress":"042077122", - 34 -

"participantstatus":"callparticipantconnected", "participantname":"ramsak" }, { "starttime":null, "resourceurl": "http://<hostaddress>/sdpweb/rest/thirdpartycall/callsessions/(d09095c4-ee72-4a85-a976-087d842cc159:<hostaddress>.clicktocallsip)/participants/pt002", "participantaddress":"<phonenumber>", "participantstatus":"callparticipantinitial", "participantname":"" } ], "terminated":"false", "clientcorrelator":"511357" } Opis in izvedba klica je opisana v poglavju 8.1.1.1.1. Grafični vmesnik uporabniku ponuja vnosno polje za številko, gumb za izvršitev klica in gumb, ki zaţene pripomoček z imenikom. Program shrani zadnjih deset unikatnih klicanih številk. Prvotna različica je vsebovala grafično številčno tipkovnico za vnos številke, vendar se je izkazala za manj uporabno. 7.4.5 Oddaljeno nadziranje (upravljanje) klica - RCC Widget Z oddaljenim nadzorom klica nastavljamo, s katere številke (naprave) ţelimo klicati. Glede na nastavitve centrale ta preveri RCC nastavitve in najprej pokliče številko, ki je nastavljena. Ko odgovorimo na ta klic centrale, centrala pokliče številko, ki smo jo klicali. Slika 7.1: Shema uporabe oddaljenega nadzora klica - 35 -

Slika 7.1 prikazuje potek klica ob aktiviranem servisu za oddaljeno nadziranje (upravljanje) klica. Servis je aktiviran za A številko na primarnem uporabnikovem telefonu in je nastavljen na B številko (na primer mobilni telefon). Ko uporabnik proţi klic s telefona (če to telefon dopušča) ali preko pripomočka (na primer "klic na zahtevo"), se pošlje centrali zahteva za proţenje klica (1). Ker je servis aktiviran, se klic ne bo pričel na A številki ampak bo posredovan na nastavljeno B številko (2). Telefon uporabnika z B številko zazvoni in prikaţe klicano številko C. Ko uporabnik odgovori na klic centrale, se proţi klic proti telefonu s številko C (3). Metoda se uporablja z namenom, da uporabnik preko programskega klienta poišče klicno številko iz imenika. Ker pa ne ţeli uporabljati programskega klienta za izvajanje klica (na primer uporaba slušalk na računalniku) ali ročno odtipkati številko v stacionarni telefon, ima na številki klienta (A številka) aktiviran servis na stacionarni telefon (številka B). Ko s klienta proţi klic se namesto preko klienta ta izvede preko stacionarnega telefona. Način spreminjanja RCC nastavitev, ki sem ga uporabil, se izvaja preko odprtega vmesnika OpenMN. Komunikacija med pripomočkom in odprtim vmesnikom OpenMN poteka preko storitve na aplikativnem streţniku. RCC servis se nastavlja preko metode 'modifysupplementaryservices'. Ta metoda omogoča spremembo telefonske številke, vključitev in izključitev servisa. Z metodo 'getsupplementaryservices' pa se preveri stanje servisa. Pri začetni različici pripomočka je uporabnik lahko nastavljal številko za svojo stacionarno številko. Zaradi nastavitev na aplikativnem streţniku je uporabnik lahko nastavljal le svoje številke. Kasneje sem funkcionalnost razširil tako, da je lahko uporabnik nastavil servis še za svojo številko, ki je namenjena za PC SIP klienta. Ker SIP klient deluje preko aplikativnega streţnika, uporabnik lahko nastavi katerokoli številko, s katere ţeli klicati. 7.4.5.1 Upoštevanje zankanja Med razvojem je bilo nastavljanje storitve dovoljeno le na uporabnikove telefonske številke, zahteve za nastavljanje servisa pa so bile razširjene na uporabnikove številke (npr. Mobilni telefon, namizni telefon, Softphone,...). Zaradi omejenega števila uporabnikovih številk je tako lahko prišlo do zankanja med številkami. - 36 -

Slika 7.2: Shema zankanja pri proženju klica Slika 7.2 prikazuje princip zankanja ob nepravilni nastavitvi servisa za oddaljeno nadziranje klica. Primer, kako pride do zankanja, je sledeč: Uporabnik A preko pripomočka (ali AS-a) sproţi klic proti uporabniku C (1). Ker je na A nastavljeno (2-3) oddaljeno nadziranje klica na številko B poskuša centrala poklicati B številko (4). Na B številki je prav tako nastavljen servis vendar na A številko (5). Centrala zopet poskuša poklicati številko A (6). Tako se klic na C številko nikoli ne sproţi. Centrala po nekaj obhodih preneha s poskušanjem klica. Iz tega razloga sem dodal preverjanje številk ob nastavitvi servisa. Ko uporabnik nastavi servis za A številko na B, program preveri če je za B ţe nastavljen servis in na katero številko. Če je za B nastavljen servis na A številko in bi prišlo do zankanja, zato onemogočim servis na B številki in nastavim servis na A številki (kar uporabnik trenutno nastavlja). Zahteva za preverjanje stanja: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:iskratel-si:itnbsp-1-0"> <soapenv:header/> <soapenv:body> <urn:getsupplementaryservicesrequest> <subscriber node="" countrycode="0" areacode="4207" dn="4852" mndomainid=""> <service oid="rcc"/> </subscriber> </urn:getsupplementaryservicesrequest> </soapenv:body> </soapenv:envelope> - 37 -

Odgovor: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:body> <getsupplementaryservicesresponse xmlns="urn:iskratel-si:itnbsp-1-0"> <subscriber node="6111" areacode="4207" dn="4852" xmlns=""> <service oid="rcc"> <param value="yes" key="authorization"/> <param value="no" key="activation"/> </service> </subscriber> </getsupplementaryservicesresponse> </soapenv:body> </soapenv:envelope> Zahteva za aktiviranje:... <subscriber node="" countrycode="0" areacode="4207" dn="7122" mndomainid=""> <service oid="rcc"> <param key="authorization" value="yes"/> <param key="activation" value="no"/> <param key="rccdn" value="7222" unit=""/> </service> </subscriber>... Odgovor: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:body> <modifysupplementaryservicesresponse xmlns="urn:iskratel-si:itnbsp-1-0"/> </soapenv:body> </soapenv:envelope> Zahteva za deaktiviranje:... <subscriber node="" countrycode="0" areacode="4207" dn="7122" mndomainid=""> <service oid="rcc"> <param key="authorization" value="yes"/> <param key="activation" value="no"/> </service> </subscriber>... - 38 -

Odgovor: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:body> <modifysupplementaryservicesresponse xmlns="urn:iskratel-si:itnbsp-1-0"/> </soapenv:body> </soapenv:envelope> 7.4.6 'Ne moti' pripomoček - DND Widget 'Ne moti' pripomoček ima samo eno funkcionalnost - aktiviranje ali deaktiviranje storitve 'Ne moti'. Aktivirana storitev "Ne moti" pomeni, da uporabnik ne ţeli sprejemati klicev, deaktiviranje te storitve pa pomeni, da uporabnik spet ţeli prejemati klice. Tako se preko OpenMN vmesnika vklopi oziroma izklopi stanje za določeno številko. Slika 7.3: Shema uporabe "ne moti" funkcije Slika 7.3 prikazuje potek klica ob aktivnem servisu. Uporabnik s številko A ţeli poklicati številko B (1). Ker je na B številki aktiviran servis "Ne moti", centrala pošlje znak "zasedeno" na številko A. Servis se aktivira preko aplikativnega streţnika. Pripomoček generira zahtevo za aktiviranje servisa s pomočjo shranjenih podatkov in jo pošlje na aplikativni streţnik, ki vrne potrditev spremembe ali napako. Primer zahteve za aktiviranje servisa: PUT /sdpweb/rest/sp/modifysupplementaryservices?dn=7122&areacode=4207&oid=dnd HTTP/1.1 Authorization: <user-authorization-data> User-Agent: Java/1.6.0_24 Host: <hostaddress> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Content-Length: 166 { "subscriber": - 39 -

} { } "areacode":"4207", "dn":"7122", "oid":"dnd", "parameters":[ { "key":"authorization", "value":"yes" }, { "key":"activation", "value":"yes" } ], "parameterlists":[] Odgovor streţnika je HTTP statusna koda "200 OK" v primeru, da je bila zahteva uspešno izvedena. Primer odgovora aplikativnega streţnika: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 01:00:00 CET X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Set-Cookie: JSESSIONID=<session-id>; Path=/sdpweb Content-Type: application/json Content-Length: 0 Date: Fri, 12 Aug 2011 08:50:34 GMT Zahteva za izklop servisa je generirana na enak način in z istimi podatki, razlika je le v parametru za aktivacijo activation = "no", na primer: PUT /sdpweb/rest/sp/modifysupplementaryservices?dn=7122&areacode=4207&oid=dnd... {"subscriber":{"areacode":"4207","dn":"7122","oid":"dnd","parameters":[{"key":"authoriza tion","value":"yes"},{"key":"activation","value":"no"}],"parameterlists":[]}} - 40 -

Za preverjanje stanja servisa se s pomočjo GET metode pošlje zahteva, ki od streţnika pridobi stanje servisa. Podatki, potrebni za generiranje zahteve, so isti kot pri prejšnjih zahtevah. GET /sdpweb/rest/sp/getsupplementaryservices?dn=7122&areacode=4207&oid=dnd HTTP/1.1 Authorization: <user-authorization-data> User-Agent: Java/1.6.0_24 Host: <hostaddress> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Odgovor v tem primeru vsebuje podatke o servisu, ki jih preberem in ustrezno prikaţem na grafičnem vmesniku pripomočka. HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 01:00:00 CET X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Set-Cookie: JSESSIONID=<session-id>; Path=/sdpweb Content-Type: application/json Transfer-Encoding: chunked Date: Fri, 12 Aug 2011 08:53:58 GMT {"error":null,"subscriber":{"parameters":[{"value":"yes","key":"authorization"},{"value" :"no","key":"activation"}],"node":6111,"oid":"dnd","areacode":"4207","dn":"7122","mndoma inid":null,"countrycode":null,"parameterlists":[]}} 7.4.7 Preusmerjanje klica CF Widget Pripomoček za preusmerjanje klicev zdruţuje ţe omenjene funkcionalnosti opisane v poglavju 7.1. Za vsako funkcionalnost sem moral dodati prikazovalnik stanja. Ta prikazuje samo stanje servisa, ne pa tudi njegovih nastavitev. Nastavitve oziroma številka, na katero je klic preusmerjen, je prikazana ob preletu kazalca miške. Pošiljanje zahtev je enako kot pri pripomočku za oddaljeno nadziranje klica in nastavljanje stanja "ne moti", vendar z drugimi oziroma dodatnimi parametri. - 41 -

V zahtevi se spremeni parameter oid na CFB, CFU ali CFNR... { "subscriber":{ "areacode":"4207", "dn":"7122", "oid":"cfb", "parameters": [ {"key":"authorization","value":"yes"}, {"key":"activation","value":"yes"} ], "parameterlists":[] } } Pri zahtevi za aktiviranje preusmerjanja klica, ko uporabnik ne odgovori, je potreben dodaten parameter, ki določa čas zakasnitve pred preusmeritvijo klica. {"key":"destinationdn","value":"7222"} {"key":"delaytime","value":"32"} http://<hostaddress>/sdpweb/rest/sp/modifysupplementaryservices?dn=7122&areacode=4207&oi d=cfb { "subscriber":{ "areacode":"4207", "dn":"7122", "oid":"cfb", "parameters": [ {"key":"authorization","value":"yes"}, {"key":"activation","value":"yes"}, {"key":"destinationdn","value":"7222"} ], "parameterlists":[] } } http://<hostaddress>/sdpweb/rest/sp/modifysupplementaryservices?dn=7122&areacode=4207&oi d=cfnr { "subscriber":{ "areacode":"4207", "dn":"7122", - 42 -

} } "oid":"cfnr", "parameters": [ {"key":"authorization","value":"yes"}, {"key":"activation","value":"yes"}, {"key":"destinationdn","value":"7222"}, {"key":"delaytime","value":"34"} ], "parameterlists":[] 7.4.8 Imenik PB Widget 7.4.8.1 Prenos imenika Za prikazovanje imenika je potreben prenos podatkov s streţnika. Preko HTTP protokola pošljem zahtevo na servis, nameščen na aplikacijskem streţniku - AS. Od servisa dobim odgovor v obliki XML zapisa in v JSON formatu. Potek pridobivanja podatkov prikazuje Slika 7.4.: 1. S pripomočka se pošlje zahteva za imenik kontaktov na AS 2. AS poišče vse skupine in kontakte v bazi 3. AS generira odgovor in ga pošlje pripomočku Slika 7.4: Potek pošiljanja zahteve za imenik kontaktov Dobljene podatke je potrebno prebrati in jih pretvoriti v primerno obliko. Pretvarjanje iz JSON formata sem ţe opisal v poglavju 7.3.3. Preverjanje iz XML formata je podobno pretvorbi iz JSON formata. V tem primeru sem se odločil za JSON format. Primer zahteve za pridobitev imenika: GET /sdpweb/rest/phonebook/users/ramsak/contactlists HTTP/1.1 Accept-Charset: UTF-8 Authorization: <user-authorization-data> User-Agent: Java/1.6.0_24 Host: <hostaddress> Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive Kot odgovor servis pošlje seznam kontaktov v JSON in XML formatu: [ { "contacts": [ - 43 -

{ "address": null, "description": null, "firstname": "Gregor", "lastname": "Ramšak", "email": "ramsak@iskratel.si", "businessnumber": "042077122", "mobilenumber": "<mobilenumber>", "contactid": null, "contacttype": null, "middlename": null }, { "address": null, "description": null, "firstname": "3", "lastname": "Barcelona", "email": "barcelona3@iskratel.si", "businessnumber": "042074793", "mobilenumber": null, "contactid": null, "contacttype": null, "middlename": null } ], "contactlistname": "log_c2c_mail_perm", "contactlistid": 4, "contactlistversion": "XNqhc+TB5HhaoBQ4FG1beg==", "contactlisttype": 2, "xmlcontacts": " <?xml version=\"1.0\" encoding=\"utf-8\"?> <resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp="counterpath:properties"> <list name=\"contact List\"> <entry> <display-name>ramšak Gregor</display-name> <cp:prop name=\"contactid\" value=\"0\" /> <cp:prop name=\"given_name\" value=\"gregor\" /> <cp:prop name=\"surname\" value=\"ramšak\" /> <cp:prop name=\"business_number\" value=\"042077122\" /> <cp:prop name=\"mobile_number\" value=\"<mobilenumber>\" /> <cp:prop name=\"email_address\" value=\"ramsak@iskratel.si\" /> <cp:prop name=\"category\" value=\"work\" /> <cp:prop name=\"ispresencesubscribed\" value=\"true\" /> - 44 -

] } </entry> <entry> <display-name>barcelona 3</display-name> <cp:prop name=\"contactid\" value=\"0\" /> <cp:prop name=\"given_name\" value=\"3\" /> <cp:prop name=\"surname\" value=\"barcelona\" /> <cp:prop name=\"business_number\" value=\"042074793\" /> <cp:prop name=\"email_address\" value=\"barcelona3@iskratel.si\" /> <cp:prop name=\"category\" value=\"work\" /> <cp:prop name=\"ispresencesubscribed\" value=\"true\" /> </entry> <cp:prop name=\"category\" value=\"work\" /> </list> </resource-lists>" 7.4.8.2 Iskanje po kontaktih Prikazovanje na pripomočku je izvedeno z uporabo posebne komponente seznama, opisane v poglavju 7.5.2.5. Za iskanje kontaktov je pripomočku dodana funkcija za sprotno iskanje 2 po kontaktih. Prva različica je po kontaktih iskala za vsako spremenljivko posebej (ime, priimek, elektronski naslov, telefonska številka,...). Takšno iskanje je bilo prepočasno, zato sem uvedel novo spremenljivko v razredu Contact, SearchData podatki za iskanje. Ta vrne vse podatke, ki so predvideni za iskanje. Tako je iskanje hitrejše, med tem pa ne prihaja do podvajanja kontaktov. 7.4.8.3 Pošiljanje SMS sporočil Pripomoček s telefonskim imenikom vsebuje funkcijo pošiljanja SMS sporočil. Vnos besedila je omogočen z vnosnim poljem. Ob potrditvi pošiljanja pripomoček generira zahtevo za pošiljanje sporočil. Podatki, potrebni za uspešno razrešitev zahteve, so telefonska številka pošiljatelja (uporabnik pripomočka), številka prejemnika, uporabniško ime pošiljatelja in besedilo sporočila. Zahteva se pošlje servisu za pošiljanje SMS sporočil, ki je nameščen na aplikativnem streţniku. Primer zahteve za pošiljanje SMS sporočila: POST /sdpweb/1/smsmessaging/outbound/tel:%2b042077122/requests HTTP/1.1 Content-Type: application/xml Authorization: <user-authorization-data> 2 Iskanje med tipkanjem iskalnega niza - 45 -

Accept: application/json User-Agent: Java/1.6.0_24 Host: <hostaddress> Connection: keep-alive Content-Length: 88 address=tel:%2b38641111111&senderaddress=tel:%2b042077122&message=test&sendername=ramsak Iz odgovora servisa je razvidno, ali je bila zahteva uspešno posredovana in sporočilo poslano. Ob uspešni razrešitvi je statusna koda 201 (Created). V primeru napake pa se pošlje temu ustrezna koda (na primer 400 Bad Request) in opis napake. Primer uspešnega odgovora: HTTP/1.1 201 Created Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 Set-Cookie: JSESSIONID=<session-id>; Path=/sdpweb Location: http://<hostaddress>/sdpweb/1/smsmessaging/outbound/tel:%2b042077122/requests/sdpweb/1/s msmsmsmessa/outbound/tel:%2b042077122/requests/1313143874683 Content-Type: application/json Transfer-Encoding: chunked Date: Fri, 12 Aug 2011 10:11:14 GMT {"resourcereference":{"resourceurl":"/sdpweb/1/smsmessaging/outbound/tel:%2b042077122/re quests/1313143874683"}} 7.4.9 Container Widget - zabojnik Funkcionalnost container-ja je, da generira oziroma kliče servis za generiranje zagonske datoteke izbranega pripomočka. Ob izbiri pripomočka s seznama container preveri, ali je zagonska datoteka za izbran pripomoček ţe shranjena na računalniku in jo zaţene, ali pa jo prenese s streţnika oziroma kliče servis, ki generira zagonsko datoteko za pripomoček. Ker container zdruţuje vse pripomočke sem mu dodal funkcionalnost remove all. Ta poišče vse nameščene pripomočke na uporabnikovem sistemu in jih pobriše. 7.4.10 Portal 7.4.10.1 Struktura portala Portal je sestavljen iz programske logike in repozitorija s programskim paketom pripomočkov. V programski logiki je koda za pridobivanje podatkov z aplikativnega streţnika in koda za generiranje spletne strani portala. Repozitorij je razdeljen na posamezne pripomočke določene z imenom pripomočka. Znotraj dela posameznega pripomočka je JAR datoteka s programom pripomočka, predloga zagonske - 46 -

datoteke, ikona pripomočka, JNLP datoteka za vključitev dodatnh knjiţnic za delovanje pripomočka in dodatne knjiţnice (na primer gson-1.6.jar). Widgets - D2DWidget C2DWidget.jar icon.png template.jnlp lib lib.jnlp gson-1.6.jar - CallLogWidget -... 7.4.10.2 REST vmesnik za upravljanje pripomočkov Na aplikativnem streţniku je nameščena storitev, ki je dostopna preko REST vmesnika, in skrbi za upravljanje pripomočkov. Metodi, ki ju nudi storitev, sta metoda za pridobivanje seznama pripomočkov in metoda za pridobivanje zagonske datoteke pripomočka. Sama storitev za generiranje kliče druge storitve na aplikativnem streţniku, od katerih pridobi podatke, potrebne za delovanje pripomočka. Postopek generiranja zagonske datoteke je sledeč. Uporabnik se je avtoriziral ob prihodu na portal. Tako lahko servis preveri uporabnika preko druge storitve na aplikativnem streţniku. Prav tako od ostalih storitev pridobi podatke potrebne za delovanje pripomočka. Iz repozitorija prebere predlogo zagonske datoteke in jo napolni s pridobljenimi podatki. To datoteko nato pošlje uporabniku na naslov, s katerega je prišla zahteva. 7.4.10.3 Postavitev portala na spletni strežnik Uporabljata se lahko dve vrsti portala. Prvi je portal z neposredno povezavo na repozitorij s pripomočki. Takšen portal mora biti z naslovom vnesen v konfiguracijo aplikativnega streţnika, kar je potrebno za pravilno generiranje zagonske datoteke. Običajno se portal nahaja na istem streţniku kot aplikativni streţnik. Druga vrsta portala je portal s posrednim dostopom. Portal se generira s pomočjo servisa na aplikativnem streţniku pridobi seznam pripomočkov in generira povezave, ki kličejo metode za generiranje zagonske datoteke. Pri teh se uporabnik avtorizira ob kliku na povezavo, ki kliče metodo servisa. Portal se lahko postavi na kateri koli streţnik, vendar ob pogoju, da je s streţnika dostopen aplikativni streţnik. - 47 -

7.5 Razvoj grafičnega vmesnika Za testiranje osnovnih funkcionalnosti sem uporabil ţe izdelane komponente vključene v JavaFX SDK. Večina teh komponent je velikih in izdelanih s pomočjo CSS-a. Predelava je moţna, vendar dokumentacija še ni popolna, zato bi bila predelava zamudna, nekaj komponent pa SDK niti ni vključeval. Tako sem nekaj komponent izdelal po grafični predlogi, kasneje pa sem jih zaradi izboljšanja videza oblikoval sam. Glavni cilj pri oblikovanju mi je bil razvoj enostavnega vmesnika z minimalnim številom gumbov na osnovnem pogledu pripomočka, prikaz najosnovnejših informacij o stanju funkcije in prikaz drugih informacij. 7.5.1 Razvoj grafičnega vmesnika pripomočkov Kot prvi pripomoček sem izdelal seznam klicev po grafični predlogi. Zaradi večjega nabora nastavitev sem moral dodati dve okni za urejanje nastavitev (prikazano na Slika 8.5 in Slika 8.6). Slika 7.5: Prva različica seznama klicev Prva različica "Klic na zahtevo" pripomočka je vsebovala numerično tipkovnico za vnos telefonske številke in gumbe za brisanje ter proţenje klica, vendar se je izkazala za motečo in je zavzemala večino velikosti pripomočka (Slika 7.6). Slika 7.6: Prva različica "Klic na zahtevo" pripomočka Naslednja različica je vsebovala le vnosno polje in gumb za proţenje klica (Slika 7.7). - 48 -

Slika 7.7: Zmanjšana različica "Klic na zahtevo" pripomočka Ti pripomočki so imeli klasično obliko okna. Naslednja stopnja je bila opustitev grafične predloge in uvedba modernejšega videza, ki sem ga dosegel z uporabo zaobljenih oken, senčenjem in prosojnostjo elementov. Ker je imel pripomoček "Klic na zahtevo" precej manj elementov za prikaz, sem ga preoblikoval prvega. Za ozadje sem dodal prosojen zaobljen kvadrat s senco. Vnosno polje za številko sem nadgradil v vnosno polje s spustnim seznamom za prikazovanje ţe klicanih številk, gumb z napisom pa preoblikoval v gumb z animirano ikono. Za prikazovanje opisa orodij sem izdelal in dodal novo komponento, prikazano na Slika 7.8 b. kvadrat z besedilom "Call", ki se pojavi na vrhu pripomočka. a. b. Slika 7.8: Preoblikovana različica "Klic na zahtevo" pripomočka Z manjšimi popravki videza komponent sem prišel do končne oblike pripomočka in osnove za nadaljnje pripomočke. Slika 7.9: Zaključena oblika komponent "Klic na zahtevo" pripomočka - 49 -

7.5.2 Komponente gradniki grafičnega uporabniškega vmesnika 7.5.2.1 Meni Vsi pripomočki vsebujejo spustni meni popup menu, proţen na desni klik miške. Meni ponuja osnovne funkcije izhod - exit, odstrani - remove in postavi v ospredje - bring to front / postavi v ozadje - send to back. a. b. Slika 7.10: Primer menija Meni je sestavljen iz komponente za vertikalno postavitev in iz gumbov, ki predstavljajo posamezne funkcije. Za večjo preglednost menija je dodan še ločevalnik separator. Izdelani meniji podpirajo le en nivo (gumb ne odpre svojega podmenija). 7.5.2.2 Kombinirani seznam Combo box Za izbiranje s seznama sem izdelal spustni seznam. Vidni del je sestavljen iz vnosnega polja in gumba, ki odpre in zapre seznam. Za prikaz seznama sem uporabil isto komponento kot za meni. a. b. Slika 7.11: Primer spustnega seznama Seznamu je potrebno določiti širino in višino vidnega seznama oziroma število prikazanih elementov. Če je seznam večji kot vidno območje, se na strani prikaţe drsnik, s katerim se premika seznam. 7.5.2.3 Potrditveno polje Check box Komponenta je sestavljena iz oznake label in polja za potrditev. Slika 7.12: Primer potrditvenega polja Običajno se polje za potrditev nahaja pred oznako. Zaradi enotnosti videza pa sem ga postavil na desno stran oznake, kot prikazuje Slika 8.25. - 50 -

7.5.2.4 Tabela Ta komponenta je nujna, če je potrebno prikazati več podatkov v obliki seznama. Za prikaz seznama klicev sem izdelal tabelo, ki podpira le fiksne širine stolpcev. To pa je povzročalo teţave pri predolgih nizih znakov, saj se nizi prekrivajo oziroma so premaknjeni. Pri omenjeni tabeli sem poznal največje število znakov in s tem dolţino niza, tako da teh teţav nisem imel. Slika 7.13: Primer tabele Za prikaz imenika sem moral iz tega razloga izdelati drugo tabelo, ki je podpirala poljubno širino niza. Zaradi prevelikega števila podatkov je bila takšna oblika prikaza nepregledna. Tako sem se omejil le na prikaz indikatorja in imena kontakta. 7.5.2.5 Seznam - list Slika 7.14: Primer seznama kontaktov - 51 -

7.5.2.6 Gumbi Namesto gumbov z besedilom sem pri večini gumbov zaradi bolj preglednega videza uporabil gumbe z ikonami. Slika 7.15: Primeri gumbov Zaradi boljše uporabnosti vsi gumbi spremenijo ozadje ob preletu kazalca miške. 7.5.2.7 Vnosno polje Je uporabljeno za vnašanje številk oziroma iskalih gesel in ga uporabljam kot sestavni del pri kombiniranem seznamu. Izdelan je na podlagi JavaFX komponente, kateri sem spremenil oziroma dodal obrobo in ozadje. Slika 7.16: Primeri vnosnih polj 7.5.2.8 Prikaz opisa orodja Za boljšo preglednost programa je nujno gumbe in polja opremiti s kratkim opisom - tako imenovan tooltip text. Običajni opisi se pojavijo, če dlje časa s kazalcem miške stojimo nad orodjem (gumb, polje, ). Opis se izriše pod kazalcem in izgine čez nekaj časa. Ker v takratni različici SDK te komponente še ni bilo na voljo, sem opis orodja izdelal sam. Pri opisanih pripomočkih sem opis postavil na zgornji rob pripomočka. Tudi delovanje opisa se razlikuje od običajnega. Opisi se prikazujejo ţe ob preletu s kazalcem in počasi izginejo, ko se kazalec premakne izven območja komponente. a. b. c. Slika 7.17: Opis orodja: a. Kazalec je izven območja pripomočka; b. Kazalec je nad pripomočkom; c. Kazalec je nad gumbom za aktiviranje servisa Ista komponenta je uporabljena za obveščanje uporabnika o napaki pripomočka. V večini primerov je pri napakah šlo za nedostopnost streţnika (napačen naslov streţnika ali nedosegljivost). Programsko je izklopljen prikaz napake z opisom v stanju mirovanja (Slika 7.17 a). Tako opisom orodja dodam le ikono, ki opozarja na napako. Opis napake in odprava napake sta napisana v navodilih pripomočka. - 52 -

Slika 7.18: Prikaz napake z opisom orodja - tooltip text 7.5.3 Grafični vmesnik portala Ţe prej opisane pridobljene podatke o pripomočkih sem na spletni strani prikazal s pomočjo ikon pripomočkov in njihovega imena. Število in vrsta pripomočkov je lahko različna glede na uporabnikova dovoljenja. Slika 7.19: Prikaz portala za prenos pripomočkov Slika 7.19 prikazuje portal namenjen za testiranje pravilnega generiranja zagonskih datotek in njihovega prenosa. 7.5.4 Delovanje pripomočkov znotraj brskalnika Pripomoček se lahko poţene znotraj brskalnika, vendar se pojavi teţava pri grafičnem prikazu pripomočka znotraj brskalnika. Problem bom opisal v poglavju 7.6.2. Programska logika pripomočka, ki deluje znotraj brskalnika, deluje enako kot pri pripomočku, zagnanem na namizju operacijskega sistema. Neuporabne postanejo le nekatere funkcije pripomočka, kot so izhod, postavi v ospredje (ozadje), premikanje pripomočka, ipd. Delna rešitev za delovanje in prikazovanje pripomočka je opisana v poglavju 8.2.2. 7.6 Težave pri realizaciji zahtev 7.6.1 Težave pri prikazu pripomočkov na namizju Prikazovanje pripomočka v brskalniku in namizju je različno. Ker je brskalnik ţe omejen z okvirjem je pripomoček brez okvirja (Slika 7.20, desno). Na namizju pa se pripomoček prikazuje kot samostojen program in je tako omejen z okvirjem (Slika 7.20, levo). - 53 -

Slika 7.20: Prikaz programa - pripomočka z okvirjem (levo) in brez okvirja (desno) To ne predstavlja večjega problema za pripomočke pravokotne oblike. Bolj problematično je bilo prikazati pripomoček z zaobljenimi robovi. Pri razliki med oblino in kotom okna se je vedno prikazalo črno ozadje, kot kaţe Slika 7.21. Slika 7.21: Prikaz pripomočka brez okvirja Tako sem prve pripomočke izdelal v pravokotni obliki in se tako izognil teţavi. Takšno obliko pripomočka prikazuje Slika 7.22. Rešitev pa je bila le začasna, saj je takšen prikaz imel tudi druge pomanjkljivosti, opisane v poglavju 7.6.3. Slika 7.22: Prikaz pripomočka pravokotne oblike brez standardnega okvirja Za rešitev tega problema sem uporabil knjiţnico, uporabljeno pri WidgetFX projektu [31]. Ta omogoča postavitev JavaFX komponente na prosojno okno. Tako sem lahko prikazal pripomoček poljubne oblike in s prosojnim ozadjem. 7.6.2 Težave pri prikazovanju pripomočka znotraj brskalnika Z vključitvijo knjiţnice iz WidgetFX projekta sem dodal pripomočku funkcionalnost, ki je ni mogoče uporabiti v brskalniku. Problem pri brskalniku je, da JavaFX prikaz prosojnosti onemogočen. Grafični prikaz deluje tako, da se ob osveţitvi elementa element ponovno izriše. Ker pa se obstoječ element ne izbriše in se nov (osveţen) element izriše nad obstoječega, se elementi izrisujejo eden čez drugega, kar se pri prosojnih elementih pozna kot vedno temnejša barva. Slika 7.23 prikazuje pripomoček pred in po osveţitvi. - 54 -

Slika 7.23: Prikaz pripomočka pred osveževanjem (levo) prikaz pripomočka po nekajkratnem osveževanju(desno) Tako sem se osredotočil na razvoj pripomočkov, ki bodo prikazani primarno na namizju. Delna rešitev prikazovanja pripomočka v brskalniku in namizju operacijskega sistema je opisana v poglavju 8.2.2. 7.6.3 Prikazovanje programa kot pripomoček na namizju. Za prikazovanje programa s poljubnim videzom in/ali obliko se uporabljajo različne metode in tehnologije. Sama Java lahko prikaţe okno brez okvirja, vendar le pravokotne oblike. Posledica in rešitev tega problema sta ţe opisana v poglavju 7.6.1. Poleg tega sem naletel na teţavo pri prikazovanju pripomočka v opravilni vrstici - taskbar operacijskega sistema Windows. Za pripomoček je običajno, da se oznaka, ki predstavlja program, ne pojavi v opravilni vrstici. Prav tako je neobičajno da se ikona pojavi v tako imenovani notification area - območje za obvestila (v opravilni vrstici poleg ure). Oba problema sem rešil z uporabo WidgetFX knjiţnice, ki pripomoček postavi na prosojno okno oziroma dialog window pogovorno okno, ki je gradnik Jave. 7.6.4 Realiziranje funkcionalnosti "drag to install" povleci za namestitev Povleci za namestitev- drag to install funkcionalnost omogoča, da se applet z miško (Shift + drag) povleče iz brskalnika na namizje. Ob tem je delovanje neprekinjeno. Po prikazu okna na namizju se lahko brskalnik zapre in javanski proces bo še naprej deloval. Slabost pri tej metodi je, da se ob oknu pojavi gumb za zaprtje programa. Tega programsko ni mogoče odstraniti. Problem nastane, če okno ni pravokotne oblike ali če je med vidnim delom okna in desnim robom dejanskega okna prazen prostor (namenjen za meni, opis orodja,...). Tako je gumb prikazan predaleč od vidnega okna, kar moti pri uporabi pripomočka. Tudi premikanje pripomočka po namizju na klasičen način (premik z miško), pri čemer je potrebno programsko določiti območje na katerem deluje klik za premik, je oteţeno, saj se gumb ne premakne s pripomočkom, ampak ostane na mestu. Za premikanje applet-a po namizju se drugače uporablja shift + drag. Delna rešitev problema je opisana v poglavju 8.2.1. - 55 -

8 OPIS REŠITVE IN REZULTATI Za dostop do pripomočkov sem izdelal testno okolje za prenos pripomočkov. Na Apache Tomcat streţnik sem namestil stran, s katere se prenesejo JNLP datoteke za zagon pripomočkov s podatki uporabnika. Nastavitve, potrebne za delovanje posameznega pripomočka, sem prvotno dodal iz statičnega zapisa, kasneje pa jih pridobil z aplikacijskega streţnika. Uporabnik se za prenos pripomočka identificira-avtorizira z uporabniškim imenom in geslom. To je prav tako nujno za avtoriziranje na servisih, ki jih kliče pripomoček za izvajanje funkcij. 8.1 Končni izdelek V naslednjih poglavjih bom predstavil delovanje pripomočkov z vidika uporabnika, način uporabe in razloţil delovanje posameznih funkcij. 8.1.1 Delovanje posameznih pripomočkov 8.1.1.1 Klic na zahtevo Pripomoček omogoča proţenje klicev iz uporabnikove številke na ţelene številke. Uporabnikova številka je uporabljena prva (A številka). Ob kliku na desni gumb s slušalko se proţi klic na vneseno številko. Številko lahko uporabnik vnese ali izbere iz seznama zadnjih klicanih številk. Slika 8.1: Pripomoček Klic na zahtevo Ob kliku na gumb s knjigo se odpre pripomoček z imenikom. - 56 -

Funkcije menija pripomočka omogočajo postavitev pripomočka v ospredje zaslona (vedno na vrhu) bring to front in obratno funkcijo Send to back, ki postavi pripomoček v ozadje oziroma v običajno postavitev. Funkcija Click to Call via SIP in obratna funkcija Click to Call via CSTA omogoča isto funkcionalnost in je bila vgrajena iz istih razlogov, kot pri pripomočku za prikaz seznama klicev. Prav tako imata isto funkcijo Remove odstrani in Exit izhod, le da klik na Exit izhod zapre pripomoček brez nadaljnje potrditve. 8.1.1.1.1 Proţenje klica Proţenje klica se izvaja pri večih pripomočkih (pripomoček za prikaz klicev, klic na zahtevo, telefonski imenik), princip proţenja klica pa je pri vseh enak. Na Slika 8.2 je prikazana shema poteka proţenja klica. Slika 8.2: Potek proženja klica 1. Uporabnik proţi klic preko pripomočka. Pripomoček pošlje zahtevo za proţenje klica na AS. AS preveri uporabnika tako, da preveri avtorizacijo za proţenje klica in avtorizacijo za uporabo klicne številke. Če se uporabnik uspešno avtorizira, se postopek proţenja nadaljuje. 2. AS pošlje zahtevo za klic na CS 3. CS pošlje invite povabilo na A številko (uporabnikovo). Uporabnikov telefon zazvoni s prikazom B številke (klicana številka) 4. Uporabnik sprejme klic 5. Pošlje še povabilo B številki. Telefon klicanega zazvoni s prikazom A številke (klicne številke) 6. Klicani (B) sprejme klic 7. Zveza se vzpostavi - 57 -

8.1.1.2 Prikaz seznama klicev Osnovni zaslon pripomočka prikazuje seznam klicev za nastavljeno kategorijo klicev. V spodnjem desnem kotu je prikazana številka uporabnika, za katero je prikazan seznam klicev. Iz seznama klicev lahko izberemo številko, ki jo ţelimo klicati. S klikom na vrstico z ţeleno številko sproţimo klic. Slika 8.3: Pripomoček za prikaz seznama klicev Z desnim klikom na okvir (ozadje) pripomočka se odpre meni, s katerega lahko izberemo različne zaslone pripomočka ali funkcije. Slika 8.4: Prikaz menija Za prikaz klicev v časovnem obdobju lahko uporabnik izbere Archive arhiv. Odpre se okno, v katerem določi začetni in končni datum prikazanih klicev. Število prikazanih klicev je omejeno in se ga trenutno lahko določi le programsko. Datum lahko uporabnik vnese preko tipkovnice ali izbere s koledarja. S klikom na gumb Apply omogoči se prikaţe seznam klicev v ţelenem obdobju. S klikom na gumb Cancel prekliči se prikaţe privzeto okno. - 58 -

Slika 8.5: Prikaz izbire časovnega intervala arhiva Za spreminjanje nastavitev pripomočka mora uporabnik iz menija izbrati Settings nastavitve. Odpre se okno za nastavljanje številke, za katero je prikazan seznam klicev. Lahko se izbere tudi moţnost All vse številke, kjer se na seznamu prikaţejo klici za vse uporabnikove številke. Naslednje polje (Call type) omogoča nastavljanje privzetega tipa klicev. Ta se prikaţe ob zagonu oziroma ob kliku na Default view privzet pogled v meniju. Polje Refresh interval interval osveţevanja nastavlja časovni zamik osveţevanja seznama klicev. Izbrati je moţno intervale od 1 s do 300 s. Zadnja nastavitev (Click to Call via SIP) omogoča nastavitev, preko katerega servisa se bodo proţili klici. Vgradil sem jo med menjavo servisa za preverjanje funkcionalnosti servisa. Kot pri prejšnjem oknu se spremembe potrdi ali pa zavrţe. - 59 -

Slika 8.6: Prikaz nastavitev Funkcija menija Remove (odstrani) odstrani pripomoček s sistema izbriše se zagonska datoteka pripomočka. Funkcija Save (shrani) shrani nastavitve pripomočka v zagonsko datoteko. Z funkcijo Exit (izhod) se odpre izhodno okno, kjer od uporabnika zahteva potrditev izhoda. Podane so še moţnosti za odstranitev pripomočka Remove widget in Save shrani. Slika 8.7: Izhodno okno - 60 -

8.1.1.3 Oddaljeno upravljanje klica Pripomoček uporabniku omogoča, da določi, katera številka bo klicana ob proţenju klica z njegove A (ali softphone) številke. To pomeni, da takrat, ko je njegova A številka 1 in ţeli, da bo ob proţenju klica namesto 1 zvonila 2, mora za številko 1 nastaviti RCC servis na 2. Tako bo ob proţenju klica preko pripomočka Klic na zahtevo zvonila številka 2. Uporabnik lahko načeloma vnese poljubno številko, vendar je običajno omejen z avtorizacijo na njegove številke. Slika 8.8: Pripomoček za oddaljen nadzor klica Servis se aktivira s klikom na potrditveno polje na desni. Če je aktivacija uspešna, se na polju pojavi kljukica. Vnos številke je onemogočen do izklopa servisa klik na potrditveno polje. Slika 8.9: Prikaz aktivnega stanja Pripomoček omogoča nastavljanje servisa za A številko uporabnika in njegovo softphone številko. Preklapljanje med številkami je omogočeno z funkcijo v meniju Set for SIP PC Client (Bria) - softphone številka oziroma Set for Click to Call widget A številka. Slika 8.10: Prikaz menija Ostale funkcije menija so iste kot pri prejšnjem pripomočku. - 61 -

8.1.1.4 'Ne moti' Pripomoček omogoča upravljanje in prikaz statusa "ne moti". Uporabnik s klikom na gumb vklopi oziroma izklopi status "ne moti" Do not Disturb. Trenutno stanje je prikazano na gumbu. Polovično prečrtana slušalka predstavlja stanje "dosegljiv" (Slika 8.11) - servis ni omogočen (Slušalka je delno prečrtana zaradi vizualne predstavitve delovanja pripomočka). Prečrtana slušalka pa predstavlja stanje "ne moti" in servis je omogočen, takšno stanje prikazuje Slika 8.12. V primeru, ko uporabnik kliče drugega uporabnika, ki ima aktiviran servis, bo prvem uporabniku poslan signal "zasedeno". Slika 8.11: Prikaz stanja "dosegljiv" Slika 8.12: Prikaz stanja "ne moti" Ker uporabnik sam nastavlja stanje, je samodejno osveţevanje stanja programsko onemogočeno. Za ročno osveţitev stanja sem v meni dodal funkcijo Refresh osveţi. Ostale funkcije v meniju so iste kot v prejšnjih pripomočkih. Slika 8.13: Prikaz menija 8.1.1.5 Preusmerjanje klica Pripomoček omogoča upravljanje nastavitev za preusmerjanje klicev. Podprti so trije tipi preusmeritev: Call Forwarding Busy preusmerjanje klica, ko je uporabnik zaseden Call Forwarding Unconditional brezpogojno preusmerjanje klica (preusmeri se vsak klic) Call Forwarding No Reply preusmerjanje klica, ko uporabnik ne odgovori (klic se preusmeri, ko se uporabnik ne javi v določenem času) - 62 -

Slika 8.14: Pripomoček za preusmerjanje klicev Za aktiviranje posameznega servisa uporabnik klikne na ţelen tip preusmeritve. Na sliki je prikaz za aktiviranje preusmeritve klica, ko je uporabnik zaseden. V vnosno polje vpiše številko, na katero se klic preusmeri, in potrdi oziroma prekliče aktivacijo. Slika 8.15: Pripomoček za preusmerjanje klicev - prikaz nastavitev Če je bila aktivacija uspešna, se v polju pokaţe kljukica, ki prikazuje, da je servis omogočen. Slika 8.16: Pripomoček za preusmerjanje klicev - prikaz aktiviranega servisa Uporabnik lahko servis onemogoči s klikom na polje, ki predstavlja posamezen servis. Aktivacija brezpogojnega preusmerjanja klica je enaka kot pri prej opisanem postopku. Pri aktiviranju servisa preusmerjanje klica, ko uporabnik ne odgovori, je postopek podoben. Nastaviti je potrebno še dodaten parameter. Ta določa čas, po katerem se klic preusmeri (na Slika 8.17 je nastavljen na 32 s). Slika 8.17: Pripomoček za preusmerjanje klicev - prikaz nastavitev - 63 -

Slika 8.18: Pripomoček za preusmerjanje klicev - prikaz aktiviranega servisa Funkcije menija so enake kot pri prejšnjem pripomočku. Slika 8.19: Pripomoček za preusmerjanje klicev - prikaz menija - 64 -

8.1.1.6 Imenik Pripomoček s telefonskim imenikom prikazuje kontakte, ki so v isti skupini kot uporabnik. Uporabnik lahko med kontakti išče ročno ali s pomočjo iskalnika. Vnosno polje za iskanje je na spodnjem robu pripomočka. Iskalnik deluje sprotno med tipkanjem prikaţe rezultate. Med različnimi skupinami se uporabnik premika s klikom na zavihke tab skupine, ki so postavljeni na spodnjem robu polja z imenikom. Indikator pred imenom kontakta je pripravljen za prikazovanje stanja kontakta, ki pa v začetni fazi še ni delujoč. Manjka streţniški del servisa, ki posodablja in posreduje stanja kontaktov. a. b. Slika 8.20: Pripomoček s telefonskim imenikom Za delo s posameznim kontaktom uporabnik izbere kontakt in z desnim klikom odpre orodno vrstico kontakta - Slika 8.20 b. Funkcije, ki jih ponuja, so: Edit contact uredi kontakt Show contact prikaţi kontakt Call contact pokliči kontakt Send SMS to contact pošlji SMS kontaktu Delete contact izbriši kontakt Funkciji Edit contact uredi kontakt in Delete contact izbriši kontakt v tej fazi še nista bili podprti in sta zato onemogočeni. - 65 -

Funkcija Show contact prikaţi kontakt odpre okni s prikazom podatkov kontakta. V zgornjem delu okna je indikator stanja, ime kontakta in gumb za zaprtje okna, v spodnjem pa podatki kontakta: Name ime, Last name priimek, Business number sluţbena številka, Mobile number mobilna številka in Email elektronski naslov. Ob poljih s telefonskimi številkami je gumb za klic na to številko, pri mobilni številki pa še gumb za pošiljanje SMS sporočila. Slika 8.21: Okno s prikazom podatkov kontakta Funkcija Call contact pokliči kontakt izvede klic na telefonsko številko kontakta. Za klic iz orodne vrstice kontakta se uporabi sluţbena številka kontakta. Za klic na druge številke mora uporabnik odpreti okno s podatki o kontaktu (Show contact prikaţi kontakt). Funkcija Send SMS to contact pošlji SMS kontaktu odpre okno za pošiljanje SMS sporočil. V primeru, da kontakt nima zapisane mobilne številke, je gumb onemogočen. a. b. Slika 8.22: Okno za pošiljanje SMS sporočil V oknu je prikazano ime kontakta, kateremu pošiljamo sporočilo, vnosno polje za besedilo sporočila, števec znakov sporočila in gumb za pošiljanje. Za pošiljanje sporočil na poljubno mobilno številko je na osnovnem oknu v spodnjem levem kotu gumb, ki odpre okno za pošiljanje SMS sporočil, kot prikazuje Slika 8.22 b. V zgornjem delu je namesto imena kontakta vnosno polje za mobilno številko. Klik na gumb Send Pošlji pošlje podatke servisu za pošiljanje SMS sporočil. - 66 -

8.1.1.6.1 Potek pošiljanja SMS sporočila Pošiljanje zahteve za SMS sporočilo sproţi pripomoček takrat, ko uporabnik potrdi vnos sporočila. Potek pošiljanja zahteve in sporočila prikazuje Slika 8.23. Slika 8.23: Potek pošiljanja SMS sporočila 1. Uporabnik pošlje sporočilo s pripomočka. Pripomoček pošlje zahtevo na aplikativni streţnik. Ta preveri, če je uporabniku dovoljeno pošiljanje sporočil (1/2 potrditev zahteve) 2. Aplikativni streţnik pošlje zahtevo na servis za pošiljanje sporočil v mobilno omreţje 3. Sporočilo se pošlje na mobilno napravo. 8.1.1.6.2 Funkcije menija Funkcije menija so enake kot pri ostalih pripomočkih. Dodana je funkcija Settings nastavitve, ta odpre okno z nastavitvami. - 67 -

Slika 8.24: Pripomoček s telefonskim imenikom - prikaz menija Okno z nastavitvami prikaţe nastavitve pripomočka. V zgornjem oknu sta gumb za zapiranje okna in gumb za prikaz pomoči o pripomočku. Za pomoč se odpre spletna stran v brskalniku. Nastavitve so iste kot v zagonski datoteki in njihov pomen je bil ţe razloţen. Nekatere je dovoljeno spreminjati, drugih ne. Ključavnica ob vnosnem polju označuje, da je spreminjanje nastavitve onemogočeno. Klik na gumb Refresh osveţi sproţi osveţitev imenika, prikazanega v pripomočku. Slika 8.25: Okno z nastavitvami - 68 -

8.1.1.7 Container - Zabojnik Ta pripomoček omogoča zagon posameznih pripomočkov. S klikom na gumb, ki predstavlja pripomoček, uporabnik zaţene pripomoček. Če je pripomoček ţe nameščen na uporabnikovem sistemu, se uporabi ţe prenesena zagonska datoteka. V nasprotnem primeru se pripomoček prenese s streţnika. Slika 8.26: Orodna vrstica s pripomočki Pripomoček ima v meniju poleg ţe naštetih še funkcijo Remove all odstrani vse. Ta odstrani vse pripomočke z uporabnikovega sistema. Slika 8.27: Orodna vrstica s pripomočki. Prikaz menija - 69 -