50
Univerzitet u Novom Sadu Tehnički fakultet »Mihajlo Pupin« Zrenjanin Tehnologije distribucije podataka mobilnih aplikacija Mobile application data distribution technologies - Master rad - Mentor: Prof. dr Biljana Radulović Student: Nemanja Tešić MBI 1/15 Informacione tehnologije u e-upravi i poslovnim sistemima Zrenjanin, 2017

Tehnologije distribucije podataka mobilnih aplikacija

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tehnologije distribucije podataka mobilnih aplikacija

Univerzitet u Novom Sadu

Tehnički fakultet »Mihajlo Pupin«

Zrenjanin

Tehnologije distribucije podataka mobilnih aplikacija

Mobile application data distribution technologies

- Master rad -

Mentor:

Prof. dr Biljana Radulović

Student:

Nemanja Tešić MBI 1/15

Informacione tehnologije u

e-upravi i poslovnim sistemima

Zrenjanin, 2017

Page 2: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[1]

Sadržaj:

1. Opis Problema .......................................................................................................... 2

2. Specifikacija zahteva ............................................................................................... 3

3. Teorijski uvod .......................................................................................................... 4

3.1. Tehnologije distribucije podataka .................................................................. 4

3.1.1. Android Mobile Middleware Objects - AMMO .................................................... 4

3.1.2. Data Distribution Service - DDS ........................................................................... 6

3.2. Model servisa za distribuciju podataka .......................................................... 8

4. Tehnološke osnove .................................................................................................. 9

4.1. Android platforma (Android Studio) ............................................................. 9

4.1.1. Izvorne programske biblioteke ............................................................................ 11

4.1.2. Radno okruženje – Android Runtime .................................................................. 11

4.1.3. Application framework ........................................................................................ 12

4.1.4. Fajl AndroidManifest.xml ................................................................................... 13

4.1.5. Životni ciklus aktivnosti ...................................................................................... 13

4.1.6. Resursi u android aplikacijama ............................................................................ 17

4.2. Python (PyCharm) ........................................................................................ 18

4.3. SQL (Microsoft SQL server) ....................................................................... 19

5. Postojeća rešenja .................................................................................................... 24

6. Model softverskih funkcija .................................................................................... 27

7. Modeli podataka .................................................................................................... 28

8. Opis realizovanog rešenja ...................................................................................... 30

9. Korisničko uputstvo ............................................................................................... 31

10. Opis implementacije .............................................................................................. 38

11. Zaključak ............................................................................................................... 48

11.1. Mogućnosti korišćenja rešenja ..................................................................... 48

11.2. Dalji plan razvoja ......................................................................................... 48

12. Literatura ................................................................................................................ 49

Page 3: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[2]

1. Opis Problema

Potrebno je kreirati Android aplikaciju koja će služiti za evidenciju odsustava

zaposlenih i imenik zaposlenih.

Poslovni problem se sastoji u potrebi da se dokumentuju sva odsustva

zaposlenih, kao i to da zaposleni apliciraju za nova odsustva. Na osnovu tih podataka se

vidi koliko često zaposleni odsustvuje sa posla, koji su razlozi odsustava, kao i ko se od

zaposlenih nalazi na random mestu u određenom trenutnu, a ko je odsutan. Takođe

potrebna je mogućnost uvida u aplicirane godišnje odmore i organizacija godišnjih

odmora.

Druga potreba poslovnog problema jeste imenik u aplikaciji koji sadrži sve

zaposlene sa određenim detaljima kontakta, što bi omogućilo lakše i brže uspostavljanje

komunikacije između zaposlenih, kao i lakše pronalaženje zaposlenog na određenoj

poziciji.

Page 4: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[3]

2. Specifikacija zahteva

Potrebno je kreirati Android aplikaciju koja će služiti kao imenik, sa osnovnim

podacima, kao i dodatnim informacijama o zaposlenima, kako bi bila olakšana

komunikacija i saradnja među zaposlenima. Potrebno je omogućiti direktno pozivanje iz

aplikacije, slanje poruka i mejlova. Takođe, aplikacija treba da pruži zaposlenima

mogućnost da putem android uređaja lako mogu da zatraže odsustva sa posla (godisnji

odmori, bolovanja, slobodni dani...). Direktni nadređeni treba da imaju mogućnost da

odobre/odbiju zatraženo odsustvo, i da se taj odgovor nadređenog notifikuje kod

zaposlenog koji je zatražio odsustvo. Aplikaciju odlikuje tri profila korisnika:

administrator, team lead i zaposleni.

Potrebno je kreirati servis u Python programskom jeziku, koji će vršiti

komunikaciju sa bazom podataka. Prilikom svakog upita servisa ka bazi potrebno je da

se uradi verifikacija sa autentifikacijom na drugoj bazi podataka koja sadrži samo

username i password zaposlenih. Njoj je jedino moguće pristupiti ukoliko kredencijali

postoje u bazi, tacnije ukoliko se kredencijali prilikom autentifikacije poklapaju sa

kredencijalima nekog od zaposlenog u bazi. Aplikacija je moguće da se koristi samo u

online režimu.

Profil zaposleni treba da ima mogucnost uvida u imenik, sa funkcionalnostima

pretrage, pozivanja drugih zaposlenih, slanja poruka i mailova. Takodje, zaposleni

imaju mogućnost da zatraže odsustva sa posla, kao i uvid u svoja do sadašnja odsustva.

Profil team lead treba da ima sve mogućnosti kao i obican zaposleni, sa

proširenom funkcionalnošću za odobravanje/odbijanje zahteva za odsustva. Takođe, ima

mogućnost za pretragom i filtriranjem odsustava zaposlenih koji se nalaze u njegovom

timu, sa prikazanom statistikom o odsustvima za svakog zaposlenog posebno. Filtriranje

je moguće raditi po zaposlenom, datumu ili tipu odsustva, ili kombinacija prethodno

navedenog.

Profil administrator treba da ima mogućnosti kao i team lead, bez mogućnosti da

zatraži nova odsustva, ali ima mogućnost da zatražena odsustva od strane team lead-era

odobri ili odbije. Administrator ima mogućnost filtriranja i pretrage za sve zaposlene u

firmi. Ovaj profil je prvenstveno namenjej direktorima firme, ili pak vlasnicima firmi,

ukoliko žele da imaju uvid u odsustva svojih zaposlenih.

Page 5: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[4]

3. Teorijski uvod

3.1. Tehnologije distribucije podataka

Sa novim naglaskom na dinamičke mobilne aplikacije potreban je efikasan način

distribucije podataka između uređaja i usluga koje im pružaju informacije. Budući da

pametni telefoni imaju ograničen kapacitet baterije i obično rade na mrežama s relativno

niskim propusnim opsegom, takav sistem distribucije podataka bi trebalo fokusirati na

smanjenje potrošnje energije i propusnog opsega. Takođe, korisnici pametnih telefona

očekuju da će im odmah biti dostupne najnovije informacije kada otvaraju aplikaciju,

tako da takav okvir treba omogućiti aplikacijama da primaju potrebne podatke u bilo

koje vrijeme, čak i kada korisnik ne aktivno koristi aplikaciju. Ovaj rad opisuje takav

sistem distribucije podataka, koji se zove AMMO (Android Mobile Middleware

Objects), fokusirajući se specifično na njegovu stranu na strani servera, AMMO

Gateway.

3.1.1. Android Mobile Middleware Objects - AMMO

AMMO u suštini sakriva kompleksnost rada u mobilnim okruženjima,

omogućavajući lakšu interakciju između uređaja i uređaja, integraciju mobilnih računara

i razvoj mobilnih aplikacija. Kao i druge vrste middlevare, mobilni middlevare obično

pruža usluge razmene poruka kako bi omogućila komunikaciju između različitih

aplikacija. AMMO gateway trenutno podržava dva različita tipa komunikacije između

uređaja i gateway-a: komunikacija za objavljivanje-pretplatu i komunikaciju sa

povlačenjem.

Objava i prijava komunikacija primenjuje isti tip modela za objavljivanje /

pretplatu koji se primenjuje u sistemima kao što je DDS (Data Distribution Service). U

ovom modelu, broj klijenata "pretplaćuje se" da primi određenu vrstu podataka za koje

su zainteresovani, na koje se odnosi MIME1 tip. Zatim, kada drugi klijent "objavljuje"

podatke tog MIME tipa, gateway će ga automatski poslati svim klijentima koji su se

pretplatili na taj tip. Ovo je korisno za svaku situaciju u kojoj bi neki uređaji mogli biti

zainteresovani da prima sve podatke određene vrste ili na određenu temu, kao što se

može naći u aplikaciji kao što je chat u realnom vremenu.

U porukama za povlačenje / odazivanje, klijent pravi upit (ili "zahtev za

povlačenje") za određenu vrstu podataka koji odgovara parametrima koje je odredio

klijent. Usluge mogu da se registruju da bi se pokrilo zahtevima pojedinih tipova, a

kada se primi zahtev za povlačenje, zahtev se prosleđuje svim uslugama koje su

registrovane da bi se pokrile sa zahtevima tog tipa. Službe zatim pošalju odgovarajuće

podatke natrag na gateway, što prenosi rezultate natrag klijentu. Poruke za povlačenje /

1 MIME tip je “etiketa” koja se koristi za identifikaciju vrste podataka. Koristi se tako da softver

može znati kako da upravlja sa podacima. Ona služi istoj svrsi na Internetu da ekstenzije datoteka rade na

Microsoft Windows-u.

Page 6: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[5]

odazivanje su korisne kada uređaj treba da prima podatke na zahtev, ali ne zahteva

neprekidna ažuriranja poput objavljivanja / pretplaćivanja poruka.

Oba tipa poruka su dizajnirana da rade asinhrono. Na primer, klijent može

nastaviti da radi druge stvari, kao što je interakcija sa korisnikom ili objavljivanje više

podataka, dok čeka na objavljivanje podataka ili čekanje da se podaci vrate sa zahteva

za povlačenjem. Ovo je važno jer uređaj može imati prolaznu povezanost ili može biti u

ograničenom propusnom opsegu ili okruženju sa visokim latencijama. U ovim

okruženjima, operacije mogu potrajati puno vremena, pa je ključno da uređaji ostaju

upotrebljivi dok AMMO završava operaciju.

AMMO koristi TCP/IP za povezivanje Android uređaja sa gateway-om, kao i za

povezivanje mrežnih priključaka sa jezgrom gateway-a. U gateway -u, ovaj mrežni sloj

se implementira pomoću ACE2 (Adaptive Communication Environment) prihvatača /

konektora i reaktorskog okvira, koji apstrahuje većinu složenosti upravljanja više

klijenata i veza, i obezbeđuje jednostavan interfejs za upravljanje događajima za slanje i

primanje podatke od klijenata. Podaci koji su zapravo transmisani preko mreže su

enkapsulirani unutar Google’s Protocol Buffers3, lagan, višestruki format serijalizacije

podataka.

Google protocol Buffer je izabran za format serijalizacije podataka za AMMO,

jer omogućava jednostavnu i efikasnu serijalizaciju podataka koji ne zavise od

određenog programskog jezika, operativnog sistema ili arhitekture procesora. Ovo je

važno jer AMMO treba da komunicira između servera za gateway koji su kodirani u

C++ i pokreću Linux, kao i klijente koji pokreću Android operativni sistem. Kao i

gateway sistemi, Android je zasnovan na Linux-u, ali je programiran u Java-u i obično

koristi ARM procesore umesto x86 procesore koji se koriste u gateway-u). Buffers

protocol obezbeđuje generator koda i jezičke veze za C++ i Java. To omogućava

protokolu da se navede u jednostavnom tekstualnom formatu koji ne zavisi od jezika;

Protokol Buffers sam vodi računa o serijalizaciji i dezerijalizaciji podataka na osnovu

protokola definisanog od strane programera.

Protokol Buffers takođe čini jednostavniji proces razvoja Gateway-a i Android

usluga. Generator koda protokola preuzima specifikaciju protokola koji ne zavisi od

jezika i generiše biblioteku za konstrukciju poruka i serijalizaciju koja je izvorna prema

ciljnom jeziku (bilo C++ ili Java). Ovaj generator koda takođe omogućava protokole da

se lako prošire: dodavanje novih poruka ili elemenata podataka u protokol je

2 ACE (adaptivno komunikaciono okruženje) je okvir open source koda koji se koristi za mrežno

programiranje. Omogućuje skup objekata C++ klasa dizajniranih da pomognu u rešavanju inherentnih

složenosti i izazova u mrežnom programiranju sprečavajući uobičajene greške

3 Protokolni baferi su Google-ovi jezički neutralni, platformski neutralni, proširivi mehanizmi za

serijalizaciju strukturnih podataka, brži i jednostavniji. Definiše se kako se podaci žele strukturirati, tada

se može koristiti specijalno generisan izvorni kod za jednostavno pisanje i čitanje strukturiranih podataka

u različitim tokovima podataka i koristeći različite jezike

Page 7: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[6]

jednostavno kao dodavanje nekoliko redova specifikaciji protokola. Takođe, Buffers

protokoli su dizajnirani tako da omogućavaju kompatibilnost između starijih verzija

protokola i novijih verzija: obezbeđuje mehanizam pomoću kojeg stariji elementi

protokola mogu biti stabilni, dok se dodani elementi u skorije vreme mogu ignorisati

ako ih nema.

3.1.2. Data Distribution Service - DDS

Primer komunikacionog modela objavljivanja / pretplaćivanja je Grupa za

upravljanje objektima (OMG - Object Management Group), Služba za distribuciju

podataka (DDS - Data Distribution Service). DDS je specifikacija za sisteme

distribucije podataka za objavljivanje / pretplatu i pruža zajednički, nezavisni interfejs

od platforme koji definiše uslugu distribucije podataka. Sama DDS specifikacija pruža

UML model koji specificira interfejs za uslugu distribucije podataka, koja se zatim

može mapirati na više platformi i programskih jezika. Postoji niz implementacija ovog

standarda, uključujući OpenSplice DDS, OpenDDS i RTI DDS.

DDS definiše ono što nazivaju interfejs "Data-Centric Publish-Subscribe", koji

učesnicima u sistemu (izdavačima ili pretplatnicima) obezbeđuje efikasan, otključan

interfejs za čitanje i pisanje podataka. DDS middleware zatim distribuira podatke tako

da svaki pretplatnik može pristupiti trenutnim vrednostima za bilo koji deo podataka.

Da bi programeru dala kontrolu nad ovim procesom distribucije, specifikacija DDS

definiše i set politika kvaliteta usluga servisa. Ove politike mogu biti povezane sa bilo

kojim izdavačem ili pretplatnikom i postaviti ograničenja u procesu distribucije

podataka, kao što je dozvoljena latencija distribucije podataka ili stopa po kojoj se

podaci moraju ažurirati.

Kao DDS, AMMO gateway pruža paradigmu za objavljivanje-pretplatu za

distribuciju podataka. AMMO, međutim, nije implementacija DDS specifikacije.

AMMO koristi mnogo jednostavniji API4 za objavljivanje podataka i pretplatu, kako na

gateway-u tako i na Android uređajima: to omogućava AMMO-u da radi u mobilnim

okruženjima gde je mrežni propusni opseg ograničen i mala potrošnja energije

neophodna. AMMO takođe trenutno ne nudi ekvivalent kvalitetu DDS-ovih uslužnih

politika, iako se planira podrška do krajnjih garancija za usluge u budućem radu.

Mnogi drugi pokušaji su napravljeni da ovu paradigmu objavljivanja

pretplatnika dovedu do mobilnih uređaja. Vredi pomenuti nekoliko od njih da obezbede

kontekst i upoređivanje sa AMMO:

STEAM je sistem za objavljivanje i pretplatu dizajniran specijalno za rad preko

802.11 WIFI ad hoc mreža. Zbog toga, za razliku od AMMO-a, STEAM je

4 Interfejs za programiranje aplikacija (API - application programming interface) je skup

definicija potprograma, protokola i alata za izgradnju aplikativnog softvera. Generalno gledano, to je skup

jasno definisanih metoda komunikacije između različitih softverskih komponenti.

Page 8: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[7]

dizajniran da radi bez gateway-a; Radi kao potpuno distribuirani sistem.

STEAM takođe nudi bogatiji ali komplikovaniji metod filtriranja i distribucije

podataka: umesto filtriranja po temama samim putem AMMO gateway-a,

STEAM filtrira objekte zasnovane na temi, blizini i sadržaju.

Pronto je sistem koji pruža komunikaciju za objavljivanje-pretplatu i

komunikaciju od tačke ka tački, na osnovu standarda Java Messaging Service.

Pronto može da radi u dva načina: centralizovan način gde gateway, poput

AMMO gateway-a, distribuira podatke i decentralizovan mod kada uređaji dele

podatke među sobom. Takođe, pored gateway-a koji se nalaze na udaljenim

serverima, klijenti iz Pronto-a mogu komunicirati sa gateway-ima koji se nalaze

na samim uređajima, pored klijenata. Ovo se razlikuje od trenutne iteracije

AMMO-a, gde se gateway ne može zadržati na uređajima. Pronto takođe daje

veliki naglasak na ono što nazivaju "SmartCaching" u gateway-u. Ovo je

direktno analogno onome što gateway pruža svojim pluginom za skladištenje

podataka, što osigurava da se podaci isporučuju čak i pod intermitentnom

povezivanjem.

Pervaho je takođe sistem za objavljivanje i pretplatu, ali se razlikuje od AMMO-

a i drugih sistema pomenutih fokusiranjem specifično na objavljivanje-subscribe

na osnovu lokacije, gde uređaji primaju podatke vezane za lokacije u kojima su

u fizičkoj blizini. Kao i AMMO, trenutna implementacija Pervaho koristi

centralizovanu mrežu za primanje ažuriranja lokacija i distribuciju podataka,

iako autori navode da su zainteresovani za modifikaciju Pervaho-a za korištenje

decentralizovanog modela.

Ovo su različiti pristupi za objavljivanje-pretplaćivanje komunikacije u

mobilnom okruženju, kao i nekoliko drugih koji se koriste u nekim sistemima, su:

Centralizovan: Centralni broker čuva sve pretplate u sistemu. Ovo je pristup koji

implementira AMMO gateway.

Centralizovan sa funkcijom gašenja: Centralni broker daje svakom izvoru

događaja filter baziran na sindikatu svih aktivnih pretplata, tako da ne šalju

predmete koji se ne podudaraju sa aktivnim pretplatama u centralnom brokeru.

Distribuirano emitovanje: koristi brojne brokere za događaje (umesto

pojedinačne centralizovane), pri čemu svaki broker odgovara za deo svih

pretplata. Izvor događaja se povezuje sa jednim od ovih brokera, koji zatim

emituje događaj svim ostalim brokersima u sistemu.

Distribuirani multicast: Događaji se selektivno prosleđuju između brokera u

zavisnosti od aktivnih pretplata u sistemu.

Replikacija: Pretplata svakog korisnika nadgleda više brokera istovremeno, zbog

čega je manje verovatno da će korisnik propustiti događaje. Ovo otežava

obezbeđivanje da se duplikati ne isporučuju, da događaji stignu u redu i da svi

događaji zapravo primaju svi pretplatnici.

AMMO gateway trenutno implementira centralizovani model: AMMO gateway

je centralizovana tačka u kojoj se moraju poslati sve pretplate i poruke. Međutim,

AMMO proširuje pristup čistog objavljivanja-pretplatu i pruža sredstva pomoću kojih

uređaji mogu eksplicitno tražiti (ili "povući") podatke iz izvora podataka. Takođe, ne

Page 9: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[8]

razmatra pitanje integracije postojećih servisa i izvora podataka: AMMO pruža

framewor za ovo.

3.2. Model servisa za distribuciju podataka

DDS je mrežni interfejs koji pojednostavljuje složeno mrežno programiranje.

Ona implementira obrazac za objavljivanje-pretplatu za slanje i prijem podataka,

događaja i komandi među čvorovima. Čvorovi koji proizvode informacije (publishers)

stvaraju "argumente" (npr. temperatura, lokacija, pritisak) i objavljuju "uzorke". DDS

isporučuje uzorke pretplatnicima koji izjavljuju interesovanje za tu temu.

DDS obrađuje uloge prenosa: adresiranje poruka, marshalling podataka i

demarširanje (tako da pretplatnici mogu biti na različitim platformama od izdavača),

isporuka, kontrola protoka, pokušaji ponavljanja itd. Svaki čvor može biti izdavač,

pretplatnik ili oboje istovremeno.

Model DDS publish-subscribe virtuelno eliminiše složeno mrežno programiranje

za distribuirane aplikacije.

DDS podržava mehanizme koji prevazilaze osnovni model objavljivanja-

pretplate. Ključna prednost je što aplikacije koje koriste DDS za svoje komunikacije su

razdvojene. Potrebno je malo vremena za dizajn da rukuju njihovim međusobnim

interakcijama. Naročito, aplikacijama nikada nisu potrebne informacije o drugim

aplikacijama koje učestvuju, uključujući njihovo postojanje ili lokacije. DDS

transparentno upravlja isporukom poruka bez potrebe za intervencijom od korisničkih

aplikacija, uključujući:

Određivanje ko treba da primi poruke;

Gde se nalaze korisnici;

Šta se dešava ako se poruke ne mogu dostaviti.

DDS omogućava korisniku da specifikuje parametre kvaliteta usluge da unapred

konfiguriše mehanizme otkrivanja i ponašanja. Razmenjivanjem poruka anonimno,

DDS pojednostavljuje distribuirane aplikacije i podstiče modularne, dobro strukturirane

programe. DDS takođe automatski rukuje redovnim izdavačima za hot-swapping5 ako

primarni ne uspe. Pretplatnici uvek dobijaju uzorak sa najvećim prioritetom čiji su

podaci i dalje važeći (tj. čiji period važenja izdavaoca nije istekao). On se automatski

vraća na primarnu kada se oporavi.

5 Hot swapping zamenjuje komponente bez zaustavljanja ili isključivanja sistema. Preciznije, hot

swapping opisuje zamenu komponenti bez prekida u sistemu

Page 10: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[9]

4. Tehnološke osnove

4.1. Android platforma (Android Studio)

Android je mobilni operativni sistem prvobitno razvijen od strane Android

kompanije, koju je kupio Gugl 2005. godine. Nakon kupovine, Gugl je zatražio

stvaranje Open Handset Alliance (OHA) udruženja, koja je sada angažovano u pružanju

podrške i daljem razvoju sistema. Android je zasnovan na izmenjenoj verziji Linux

jezgra. Po broju prodatih pametnih telefona, zasnovanih na Android OS u SAD, u

drugom kvartalu 2010. godine, Android se nalazi na prvom mestu sa udelom od 33

procenata.

Android ima veliku zajednicu programera za pisanje aplikativnih programa koji

proširuju funkcionalnost uređaja. Trenutno postoji preko 450.000 aplikacija dostupnih

za Android, a po nekim procenama i više, što ga čini drugim najpopularnijim mobilnim

razvojnim okruženjem. Programeri pišu kontrolisani kod u Java jeziku, kontrolišući

uređaj preko Gugl razvojne Java biblioteke. Početak Android distribucije najavnjen je 5.

novembra 2007. godine zajedno sa osnivanjem Open Handset Alliance, udruženja 78

kompanija posvećene unapređenju otvorenih standard za mobilne uređaje. Gugl je veći

deo Android koda objavio pod Apache licencom, licencom slobodnog softvera i

licencom otvorenog koda.

Android OS se sastoji od 12 miliona linija koda, uključujući 3 miliona linija

XML koda, 2,8 miliona linija C koda, 2,1 miliona linija Java koda i 1,75 miliona linija

C++ koda. Android predstavlja softverski stek namenjen mobilnim telefonima koji u

sebi uključuje operativni sistem, posrednički softver kao i ključne aplikacije za

normalno funkcionisanje.

Android SDK obezbeđuje alatke i API koji su neophodni za dalji razvoj

aplikacija na Android platformi koristeći JAVA programski jezik. Shodno svojoj

politici OHA ističe sledeće karakteristike Android programskog okruženja:

otvorenost - programeru omogućava potpunu slobodu u razvoju novih i već

postojećih aplikacija, a proizvođaču uređaja slobodno korišćenje i

prilagođavanje platforme bez plaćanja autorskih prava;

sve aplikacije su ravnopravne - što znači da ne postoji razlika između osnovnih

jezgarnih aplikacija uređaja i dodatnih aplikacija. Svim aplikacijama omogućen

je ravnopravni pristup resursima pokretnog uređaja što daje mogućnost

prilagođavanja uređaja specifičnim potrebama individualnog korisnika;

automatsko upravljanje životnim ciklusom aplikacije - omogućava nadzor

pokretanja i izvršavanja aplikacija na sistemskom nivou optimizovanim

korišćenjem memorije i snage uređaja. Krajnji korisnik više ne brine o gašenju

određenih aplikacija pre pokretanja drugih;

uklanjanje granica "klasičnih" aplikacija - mogućnost razvoja novih i

inovativnih aplikacija zasnovanih na međusobnoj kolaboraciji tehnologija;

brz i jednostavan razvoj aplikacija - omogućen je bogatom bazom korisnih

programskih biblioteka (eng. libraries) i alata za izradu aplikacija;

Page 11: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[10]

visokokvalitetni grafički prikaz i zvuk - podržana 2D vektorska i 3D OpenGL

(engl. Open Graphics Librari) grafika, te ugrađeni kodeci svih često korišćenih

audio i video formata;

kompati ilnost sa većinom sadašnjeg i udućeg hardvera - uključuje prenosivost

Androidovih aplikacija na ARM, k86 i ostale arhitekture, te prilagodljivost

sistema ulaznim i izlaznim komponentama.

Arhitektura Android sistema bazira se na Linux-u 2,6 jezgru (eng. kernel) koja

se koristi kao sloj apstrakcije hardvera (HAL, eng. Hardvare Abstraction Laier). Razlog

za korišćenje jezgra operativnog sistema Linux je dokazana pogonska podrška (eng.

driver model), mogućnost upravljanja memorijom i procesima, sigurnosni model,

mrežni sistem, te dokazana robusnost, konstantni razvoj i unapređivanje sistema. Slika

1.1 prikazuje arhitekturu Android sistema.

Slika 1. Arhitektura Android platform

Page 12: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[11]

4.1.1. Izvorne programske biblioteke

Izvorne programske biblioteke (eng. native libraries) pisane su u programskim

jezicima C i C++ i čine sledeći sloj u arhitekturi sistema. Neke od značajnijih su:

UI - program za upravljanje grafičkim interfejsom (eng. Surface Manager) -

biblioteka odgovorna za pravilno iscrtavanje različitih aplikacionih komponenti

u vremenu i prostoru;

OpenGL ES (eng. OpenGL for Embedded Sistems) - biblioteke koje se koriste

za hardversku 3D akceleraciju (ukoliko je podržana) ili za 3D rasterizaciju;

SGL (eng. Scalable Graphics Librari) - predstavlja 2D biblioteke na kojima je

zasnovana većina aplikacija. Spomenimo još da se 2D i 3D elementi mogu

kombinovano prikazivati u jednom korisničkom interfejsu;

Media Framevork - grupa kodeka za snimanje i reprodukciju audio formata,

video formata i nepomičnih slika. Omogućena je od strane PacketVidea;

FreeType - biblioteka koja služi za vektorsku rasterizaciju oblika pisma (eng.

font);

SSL (eng. Secure Socket Laier) - omogućava rezervnu komunikaciju preko

Interneta;

SQLite - programska biblioteka koja implementira bazu podataka (eng. database

engine);

WebKit - Jezgro pretraživača koji podržava JavaScript i ostale standarde na

malom uređaju;

System C library - implementacija standardne C-ove sistemske biblioteke (libc)

izvedene iz operativnog sistema BSD.

4.1.2. Radno okruženje – Android Runtime

Idući sloj u arhitekturi Androida je radno okruženje (eng. Android runtime)

kojeg čine virtuelni mašina Dalvik (DVM, eng. Dalvik Virtual Machine) i jezgrene

biblioteke (eng. core librari).

DVM je registarski bazirana virtuelna mašina, dok je klasična Javina virtuelna

mašina (JVM, eng. Java Virtual Machine) baziran na steku. Bazne biblioteke pisane su

u programskom Jeziku Java i predstavljaju sve esencijalne klase kao što su klase za

manipulaciju kolekcijama, klase za komunikaciju sa okolinom i slično. Bitna novost je i

to što se Androidom jezgrene biblioteke razlikuju od biblioteka u Java Standard Edition

(J2SE) i Java 2 Micro Edition (J2ME).

Umesto upotrebe standardnog Java 2 Micro Edition (J2ME) kao mehanizma za

pokretanjejavinih aplikacija na mobilnim uređajima, Google je razvio sopstvenu

virtuelnu mašinu za Android. DVM je najverovatnije razvijen kako bi se zaobišla

problematika s dozvolama oko korišćenja Sunovog J2ME. Svaki mobilni uređaj koji u

sebi sadrži J2ME mora kod Suna licencirati bilo kakvu promenu izvornog koda J2ME-a.

Virtuelna mašina Dalvik dobila je ime po istoimenom Islandskom gradu u kojem

su živeli preci glavnog developera DVM-a Dan Bornstein. Osnovna razlika između Sun

Page 13: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[12]

Java virtuelnih mašina i DVM-a je u tome što su prvo spomenuti virtualni uredjaju

bazirani na steku, dok je DVM registarski baziran virtuelni mašina.

Međukod (eng. bytecode) Dalvik virtuelne mašine transformiše se pomoću alata

dk (koji je sastavni deo Android SDK-a) iz Javinih klasnih datoteka (eng. Java class

file) prevedenih Javinim revodiocem u novu klasu *.dex (eng. Dalvik Ekecutable)

formata. Međukod koji izvršava DVM nije Javin međukod, nego upravo spomenuti .dex

oblik. Transformacija formata omogućava bolju prilagođenost za rad na manjim

procesorima boljim iskorišćavanjem raspoložive memorije i procesorske snage. Rezultat

svega je mogućnost višestrukog instanciranja same virtuelne mašine što znači da se

svaka Android aplikacija pokreće kao zasebni proces, s vlastitom instancom virtuelne

mašine Dalvik

4.1.3. Application framework

Sloj aplikativnih okvira (eng. Application Framevork) napisan je u

programskom jeziku Java i sadrži proširiv skup programskih komponenti kojeg koriste

sve aplikacije uređaja. Framework podržava mnogobrojne open source jezike kao što su

openssl, sqlite i libc. Takođe podržava i jezik Android jezgra. Sa gledišta sigurnosti,

framework se bazira na UNIX file system ovlašćenjima koja osiguravaju da aplikacije

poseduju samo one mogućnosti koje im je vlasnik telefona dao pri instalaciji aplikacije.

Neki od važnijih elemenata su:

upravljanje aktivnostima (eng. Activiti Manager) - upravljanje životnim

ciklusom aplikacije,

upravljanje programskim paketima (eng. Package Manager) - sadrži informaciju

o aplikacijama instaliranim na sistemu

upravljanje prozorima (eng. Window Manager) - upravljanje aplikacionim

prozorima,

upravljanje pozivima (eng. Telephone Manager) - sadrži API-je koji se koriste

pri izradi aplikacija za upravljanje pozivima,

pružaoci sadržaja (eng. Content Providers) - omogućavaju zajedničko korišćenje

podataka od strane više aplikacija,

upravljanje resursima (eng. Resource Manager) - služi za skladištenje delova

aplikacije koji nisu kod (npr. slike),

sistem grafičkog prikaza (eng. Viev Sistem) - sadrži bazu gotovih grafičkih

prikaza i alata (eng. vidget),

upravljanje lokacijski zasnovanim uslugama (eng. Location Manager) i

upravljanje notifikacijama (eng. Notification Manager) - upravljanje

notifikacijama i događajima (npr. dospeće poruke, nadolazeći sastanak).

Aplikativni sloj je poslednji sloj u arhitekturi sistema Android i čine ga

korisničke aplikacije uređaja. Predstavlja sloj vidljiv krajnjem korisniku. UključuJe

neke od standardnih sistemskih aplikaciJa kao što su Veb pretraživač, lista kontakata,

telefon, itd.

Page 14: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[13]

4.1.4. Fajl AndroidManifest.xml

Svaka aplikacija mora da poseduje svoj AndroidManifest.xml fajl u korenom

folderu projekta. Naziv manifest fajla mora da bude AndroidManifest.xml. Manifest

sadrži neophodne informacije o aplikaciji i o Android sistemu. Ove informacije sistem

mora da poseduje pre početka izvršavanja aplikacije.

Neke od funkcija manifest fajla su:

Sadrži naziv Java paketa u okviru kojeg je napisan izvorni kod aplikacije. Naziv

paketa predstavlja jedinstveni identifikator aplikacije.

Opisuje komponente aplikacije – aktivnosti, servise, primaoce poruka i

provajdere sadržaja. Dakle, manifest fajl sadrži nazive klasa u kojima su opisane

komponente aplikacije. Na primer, aplikacija se neće startovati ukoliko u

manifest fajlu nije navedena njena početna aktivnost, čak ni u slučaju da fajl sa

Java izvornim kodom te aktivnosti postoji.

Određuje koji procesi će biti domaćini komponentama aplikacije.

Definiše koje privilegije (permissions) aplikacija mora da poseduje da bi mogla

nesmetano da funkcioniše.

Takođe definiše koje privilegije moraju druge aplikacije da poseduju da bi

mogle da koriste komponente aplikacije.

Definiše minimalnu verziju Android API-a koji zahteva aplikacija.

Definiše listu biblioteka koje aplikacija koristi

4.1.5. Životni ciklus aktivnosti

Aktivnost (Activity)predstavlja komponentu aplikacije koja se uglavnom može

poistovetiti s jednim konkretnim prozorom aplikacije u kojem je korisnik u mogućnosti

da izvrši određenu radnju. Na primer, aktivnost služi da bi korisniku mobilnog telefona

omogućila pozivanje određenog broja, slikanje fotografije korišćenjem ugrađene

kamere, slanje e-mail poruke, pregled mape i dr. Aplikacija može da sadrži jednu ili

više definisanih aktivnosti, pri čemu je jedna od aktivnosti uvek definisana kao

primarna aktivnost. Prelaz između aktivnosti odvija se tako što aktuelna aktivnost

poziva novu. Iako više aktivnosti čini jedan kompaktan korisnički interfejs, treba imati

na umu da su one međusobno nezavisne. Svaka aktivnost implementira se kao zasebna

klasa koja nasleđuje klasu Activity, pa je sama odgovorna za čuvanje svog stanja u

životnom ciklusu aplikacije.

Klasa aktivnosti je glavni deo svake Android aplikacije. Programer veći deo

vremena provodi na definisanju i implementaciji aktivnosti za svaki ekran u aplikaciji.

Svakoj Android aplikaciji mora biti dodeljena aktivnost unutar Android manifest

fajla. Druge klase aktivnosti mogu biti označene u manifest fajlu da se pokrenu pri

određenim okolnostima. Ovim sekundarnim ulaznim tačkama se upravlja pomoću

Android manifest fajla sa određenim filterima.

Page 15: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[14]

Aplikacije mogu biti prekinute zbog raznih događaja višeg prioriteta, kao što je

telefonski poziv. U jednom trenutku može postojati samo jedna aktivna aplikacija.

Android aplikacije su odgovorne za upravljanje njihovim stanjem, kao i njihovom

memorijom, resursima i podacima. Android operativni sistem može isključiti aktivnost

koja je na pauzi, stopirana ili uništena kada je memorija slaba. Ovo znači da svaka

aktivnost koja nije u prvom planu mora biti isključena. Drugim rečima, Android

aplikacija mora održavati stanje i biti spremna da bude prekinuta ili čak isključena u

svakom trenutku.

Životnim ciklusom aktivnosti jedne Android aplikacije upravlja se

implementacijom odgovarajućih metoda. Svaka aktivnost ima tri osnovna stanja:

Resumed (Running) - Aktivnost je pokrenuta i fokusirana.

Paused - Druga aktivnost je pokrenuta i fokusirana (u prvom planu), ali je tekuća

aktivnost i dalje pokrenuta i vidljiva. Na primer, druga aktivnost je u prvom

planu, dok je tekuća aktivnost vidljiva, ali ne zauzima ceo ekran. Aktivnost čije

je stanje paused je potpuno aktivna (objekat klase Activity se nalazi u memoriji,

zadržava sva stanja i ostaje u window manager-u), međutim ova aktivnost može

da bude dispozovana u slučaju niske slobodne memorije.

Stopped - Aktivnost čije je stanje stopped je i dalje aktivna, radi u pozadini.

Objekat klase Activity i dalje se nalazi u memoriji, čuva sva stanja, ali se više ne

nalazi u okviru window manager-a. Ovu aktivnost više ne vidi korisnik i u

slučaju potrebe za memorijom sistem može da je zaustavi.

Životni ciklus aktivnosti započinje metodom onCreate(), a završava se zajedno

sa metodom onDestroy(). U okviru metode onCreate(), programer bi trebalo da definiše

izgled i globalno stanje aktivnosti, kao što je raspored elemenata korisničkog interfejsa.

Implementacijom metode onDestroy() trebalo bi osloboditi korišćene resurse. Na

primer, ukoliko vaša aktivnost koristi pozadinsku nit koja preuzima podatke sa

Interneta, nit bi trebalo kreirati u okviru metode onCreate(), a zaustaviti je u okviru

metode onDestroy().

Aktivnost je vidljiva (visible) između poziva metoda onStart() i onStop(). Dok je

aktivnost vidljiva, korisnik je vidi na ekranu i može da vrši interakciju sa njom (npr. da

unosi podatke). Metoda onStop() se poziva kada se startuje nova aktivnost, a tekuća

aktivnost više nije vidljiva.

Aktivnost je fokusirana (u prvom planu) između poziva metoda onResume() i

onPause(). Tada se ta aktivnost nalazi ispred svih ostalih aktivnosti. Aktivnost može

često da prelazi iz prvog plana u pozadinu i obrnuto. Na primer, metoda onPause() se

poziva kada uređaj pređe u stanje mirovanja (sleep).

Page 16: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[15]

Slika 2. Životni ciklus aktivnosti

U sledećoj tabeli su prikazane fundamentalne metode za upravljanje životnim

ciklusom i njihov opis.

Page 17: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[16]

Tabela 1. Metoda za upravljanje životnim ciklusom aktivnosti

Kolona „Može da se stopira posle?“ označava da li sistem sme da zaustavi

proces koji omogućava pokretanje aktivnosti bilo kada nakon završetka izvršavanja date

metode.

Page 18: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[17]

4.1.6. Resursi u android aplikacijama

Sve android aplikacije sastoje se od dve stvari:

funkcionalnost – predstavlja kod kako se aplikacija ponaša na neki zahtev. Ovde

spadaju svi algoritmi koji pokreću aplikaciju

resursi ili podaci – obuhvataju tekstove, slike, audio i video fajlove, datoteke,

ikone i druge podatke koje koristi aplikacija.

Resursi obuhvataju tekst u obliku stringa, slike i ikone, audio datoteke, video

zapise i drugepodatke koje koristi aplikacija. Resursi se dele na dva tipa: resurse

aplikacije i resurse sistema. Resurse aplikacije definiše developer unutar fajlova

Android projekta i tačno su određeni za neku aplikaciju. Resursi sistema su standardni

resursi koje definiše Android platforma i dostupni su svim aplikacijama kroz Android

SDK.

Resursi aplikacije se prave i čuvaju unutar Android projekta u /res

direktorijumu. Koristeći već definisanu ali fleksibilnu strukturu direktorijuma, resursi su

organizovani, definisani i upakovani sa paketom aplikacije. Resursi aplikacije se ne dele

sa ostatkom Anroid sistema. Svi resursi aplikacije se čuvaju u strukturi direktorijuma

/res i sastavljeni su u projekat u trenutku pravljenja aplikacije. Resursi aplikacije se

mogu koristiti programerski. Takođe na njih se mogu odnositi resursi drugih resursa

aplikacija.

Svaki put kad se sačuva fajl sa resursima u Eclipsu, R.java klasa fajl se ponovo

sastavlja kako bi se ubacile nove izmene. Ako nije korišćen pravi direktorijum ili

pravila o nazivu fajla, pojaviće se greška u kompajleru u prozoru Eclipse Problems.

Resursima aplikacije se može pristupiti programerski koristeći generisu klasu koja se

zove R.java. Kako bi se dodala referenca na resurs, mora se doći do objekta resursa

aplikacije koristeći klasu getResources() i tako napraviti odgovarajući poziv na

komandu, koji je zasnovan na tipu resursa koji želi da se doda.

Developeri mogu da pristupe resursima Android sistema (kao dodatak resursima

aplikacije). Mogu se deliti mnogi resursi sistema kroz više aplikacija zbog običnog

izgleda i osećaja.Na primer, klasa resursa Android sistema (android.R.string) sadrži

stringove za reči kao što su OK, Cancel, Yes, No, Cut, Copy i Paste.

Sistemski resursi se čuvaju u android paketu. Postoje klase za svaki od većih

tipova resursa. Na primer, klasa android.R.string sadrži string sistemskog resursa. Kako

bi se dobio string sistemskog resursa za OK prvo se mora koristiti statičkia komanda

klase Resursa getSystem() kako bi se doveo globalni sistemski objekat Resource. Onda

se poziva komanda getString() sa odgovarajućim string imenom resursa.

Page 19: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[18]

4.2. Python (PyCharm)

Python je platformski nezavisan objektno orijentisan, interpreterski i interaktivni

programski jezik. Nastao je 1990. a njegov razvoj je započeo Guido van Rossum.

Spada u grupu softvera otvorenog koda, sa dobrom podrškom, dokumentacijom i

pratećim bibliotekama.

Python je jedan od retkih jezika koji su nastali u akademskim uslovima, a

postigli su komercijalni uspeh. Dugo je važlo da akademske ustanove prave čiste jezike,

sa novinama i jakom filozofskom pozadinom, ali da takve jezike retko ko koristi van

samih univerziteta. Primer za to su: Pascal, Simula, Algol, Haskell, Modula itd. S druge

strane, prljavi, brzi, sa gledišta nauke slabi jezici za koje je zajedničko da imaju

pragmatičan pristup, jezici pravljeni od hakera za hakere, su bivali prihvaćenii među

profesionalcima. Tako je bilo jezicima: C, C++, Perl, PHP, Java itd. Python je

jedinstven spoj čistog jezika, jasno zamišjenog, dobro projektovanog i

implemenitranog, lakog za upotrebu, a opet dovoljno moćnog i brzog da bi bio

prihvaćen među programerima. Python nalazi primenu u biološkim naukama, npr. za

analizu gena, u matematičkim naukama za simulacije, za optimizaciju, kao

kompjuterski algebarski sistem, alat za numeričku analizu, veštačku inteligenciju, itd.

Python je odličan "lepak jezik", jezik kojim se povezuju postojeći programi, pa

im se preko Python-a daje zajednički interfejs. Često koristi kao script mašina u raznim

programima: Maya i Blender za 3D animacije, Gimp, Inkscape za grafiku, Civilization

IV za kontrolu igre itd.

Ipak Python pokazuje pravu snagu u projektima koji su u potpunosti zasnovani

na njemu. BitTorrent klijent je izvorno napisan u njemu. Prvi web robot za Google je

pisan u Pythonu, a ta kompanija i dalje koristi mnogo njegovog koda. Tako je i Guido

van Rossum već nekoliko godina zaposlen u toj kompaniji. Youtube je zasnovan na

Pythonu, a koristi ga i NASA. Installer za Red Hat Linux je napisan u Pythonu .

Trenutno aktuelna verzija je 3.0, ali je u velikoj primeni i prethodna verzija 2.6.

Ime jezika potiče od britanske televizijske komedije Monty Python's Flying Circus,

čime je van Rossum želeo da naglasi svoj osnovni cilj pri pravljenju novog jezika, da

programiranje postane zabavno kao i pomenuta serija.

Poput Jave i Ruby-ja, ukoliko se ne koriste neke platformske specifičnosti, isti

programski kod može se interpretirati jednako pod Linuxom, Windowsom, ili MACom.

Python ima bogate biblioteke:

matematički proračuni

crtanje graka funkcija

obrada Telekomunikacionih signala

simulacija

upravljanje laboratorijskim instrumentima

Page 20: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[19]

programiranje mrežnih aplikacija (Google, Youtube)

Glavna implementacija Python-a napisana je u jeziku C i zove se CPython.

Pored ove, postoji implemetacija i u Javi Jython. Ona omogućava kompilaciju koda u

Java bajtkod i upotrebu Java klasa unutar Python modula (fajlova koji sadrži Python

programski kod). Implementacija Python web framework-a pod imenom Pylons

omogućava visoku funkcionalnost Python-a do nivoa Jave.

Implementacija pod imenom IronPython projekat je Microsoft-a za .NET

okruženje. Možda najinteresantnija implementacija Python-a je u samom Python-u, tzv.

Py Py gde je interpreter pisan u Python-u. Ova implementacija je znatno sporija od

CPython -a, a prednost joj je u mogućnosti izmene ponašanja interpretera u toku

izvršenja programa.

Za programski jezik Pajton razvijen je veliki broj standardnih modula koji

omogućavaju efikasan rad u mnogim oblastima. Većina ovih modula prenosiva je na

različite platforme što omogućava da često kompletni programi bez prilagođavanja rade

na različitim mašinama i pod različitim operativnim sistemima.

Standardna biblioteka modula omogućava pisanje programa vezanih za Internet

podržavajući veliki broj standardnih formata i protokola. Postoje moduli za kreiranje

grafičkog korisničkog interfejsa, vezu ka relacionim bazama podataka, za aritmetiku sa

proizvoljnim željenim brojem decimala, za rad na leksičkoj analizi primenom regularnih

izraza, kao i standardni moduli za mnoge druge poslove.

Ukoliko je potrebno razviti novi modul, to je moguće izvesti u Pajtonu ili u

nekom drugom podržanom jeziku. Obično je to C jezik, kada je potrebno sistemsko

programiranje ili kada je brzina izvršavanja kritična. Primeri drugih programskih jezika,

koji se koriste u ove svrhe, su Java ili Pyrex jezik koji predstavlja mešavinu

programskog jezika Pajton i C jezika.

Pajton je dizajniran da bude veoma čitljiv jezik. Ima relativno neopterećen

vizuelni dezen i često koristi engleske reči tamo gde drugi jezici koriste znakove

interpunkcije. Pajton cilja ka jednostavnosti i opštost u dezenu njegovih sintaksi,

osvrćujući se na "Treba biti jedan - i samo jedan - očigledan način da se to uradi", iz

"Zen Pajtona".

4.3. SQL (Microsoft SQL server)

SQL (Structured Query Language) je standardni relacioni upitni jezik (ANSI i

ISO standard). Njegov tvorac je Čemberlin (Chamberlin), a nastao je u IBM-ovoj

istraživačkoj Iaboratoriji (IBM Research Laboratory) u San Hoseu, Kalifornija 1974.

godine, dakle na istom mestu gde je Kod 1970. definisao osnovne koncepte relacionog

modela podataka.

Page 21: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[20]

Jezik se u početku zvao SEQUEL (Structured English Query Language) i

predstavljao je programski interfejs (API) za System R, prototipski sistem za

upravljanje bazom podataka (SU8P) koji se razvijao kao deo istraživačkog projekta pod

istim nazivom. Krajem sedamdesetih i početkom osamdesetih godina prošlog veka

javljaju se i prve komercijalne verzije relacionih sistema, sa SQL-om kao upitnim

jezikom. Među njima su najznačajniji Oracle i dva IBM-ova proizvoda: SQL/DS i DB2.

Pojava komercijalnih relacionih sistema uvećala je značaj i ubrzala proces

standardizacije relacionog upitnog jezika. Prva etapa tog procesa završila se 1986.

godine usvajanjem SQL-a kao standardnog relacionog upitnog jezika. Ta prva verzija

SQL standarda poznata je pod nazivom SQL-86. Njom su standardizovane osnovne

karakteristike SQL-a kao deklarativnog relacionog upitnog jezika.

Međutim, mnoge bitne karakteristike jezika ostale su nestandardizovane. To je

dovelo do revizije standarda koja je usvojena 1989. godine i kojom su standardizovane

karakteristike koje se odnose na očuvanje integriteta baze podataka i povezivanje sa

klasičnim programskim jezicima. Ta verzija SQL standarda poznata je pod nazivom

SQL-89. 1992. godine usvojena je sledeća bitna revizija standarda, poznata pod

nazivom SQL-92 ili SQL2, kojom je SQL zaokružen kao programski jezik, a obim

standarda uvećan šest puta u odnosu na polaznu verziju.

Poslednja revizija SQL standarda usvojena je 1999. godine. Ta verzija SQL

standarda poznata je pod nazivom SQL: 1999. U nju su uključeni koncepti objektne

tehnologije, mehanizam trigera, rekurzija i proceduralna proširenja.

SQL je u stalnom razvoju. Na početku je bio prilično jednostavan, blizak

korisniku i u velikoj meri deklarativan (neproceduralan). Danas se za SQL može reći da

je kompleksan, proceduralno/deklarativan jezik. SQL radi sa tabelama. Tabela se kreira

jednom izvršnom naredbom. Odmah po kreiranju tabela je raspoloživa za korišćenje.

Svi podaci memorisani su u tabelama i rezultat bilo koje operacije se Iogički prikazuje u

obliku tabele.

Neproceduralnost SQL-a se ogledala u činjenici da se njime definisalo ŠTA se

želi, a ne KAKO se dobija: koji podaci se žele, koje tabele se referenciraju i koji uslovi

treba da budu ispunjeni, bez specifikacije procedure za dobijanje željenih podataka. Da

bi se povećala funkcionalnost jezika, u SQL: 1999 standardu, uvedena je proceduralna

nadgradnja SQL-a, koju uglavnom čine upravljačke strukture slične upavljačkim

strukturama klasičnih programskih jezika.

Zaključno sa SQL-92 standardom SQL naredbe svrstavane su u tri kategorije:

naredbe za definisanje podataka (Data Definition Statements)

naredbe za manipulisanje (rukovanje) podacima (Data Manipulation Statements)

naredbe kontrolne (upravljačke) funkcije (Data Control Statements)

Zaključno sa SQL-92 standardom SQL naredbe su svrstavane u jednu od sledeće

tri kategorije: naredbe za definisanje podataka (Data Definition Statements), naredbe za

Page 22: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[21]

manipulisanje (rukovanje) podacima (Data Manipulation Statements) i naredbe za

kontrolne (upravljačke) funkcije (Data Control Statements).

Naredbe za definisanje podataka omogućuju definisanje objekata baze. Primeri

naredbi ove kategorije su:

CREATE TABLE (kreiranje tabele baze podataka)

CREATE VIEW (kreiranje virtuelne tabele – “pogleda”)

CREATE INDEX (kreiranje indeksa nad kombinacijom kolona tabele)

ALTER TABLE (izmena definicije tabele)

DROP TABLE (izbacivanje tabele iz baze podataka)

Naredbe za manipulisanje (rukovanje) podacima omogućuju ažuriranje i prikaz

podataka baze:

SELECT (prikaz sadržaja relacione baze podataka)

UPDATE (izmena vrednosti kolona tabele)

DELETE (izbacivanje redova tabele)

INSERT (dodavanje redova postojecoj tabeli)

Naredbe za kontrolne (upravljačke) funkcije omogućuju oporavak,

konkurentnost, sigurnost i integritet relacione baze podataka:

GRANT (dodela prava korišcenja sopstvene tabele drugim korisnicima)

REVOKE (oduzimanje prava korišćenja sopstvene tabele od drugih korisnika)

COMMIT (prenos dejstava transakcije na bazu podataka)

ROLLBACK (poništavanje dejstava transakcije)

SQL:1999 standard razvrstava SQL naredbe u 7 kategorija. Osnovni razlog za

drugačije razvrstavanje naredbi je uvođenje novih koncepata u SQL u skladu sa

razvojem informatičke tehnologije i potreba da se postojeće naredbe preciznije grupišu.

Definisane su sledeće kategorije SQL naredbi:

naredbe za šemu baze podataka (SQL-Schema Statements), koje se koriste za

kreiranje, izmenu i izbacivanje šema i objekata šema (CREATE, ALTER,

DROP),

naredbe za podatke (SQL-Data Statements) koje se koriste za prikaz i ažuriranje

podataka baze (SELECT, INSERT, UPDATE, DELETE),

naredbe za transakcije (SQL-Transaction Statements) koje se koriste za

startovanje, završavanje i postavljanje parametara za transakcije (COMMIT,

ROLLBACK),

naredbe za kontrolu (SQL-Control Statements) koje se koriste za kontrolu

izvršavanja sekvence SQL naredbi (CALL, RETURN),

naredbe za konekcije (SQL-Connection Statements) koje se koriste za

uspostavljanje i prekidanje SQL konekcije (CONNECT, DISCONNECT),

Page 23: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[22]

naredbe za sesije (SQL-Session Statements) koje se koriste za postavljanje

Default vrednosti i drugih parametara SQL sesije (SET),

naredbe za dijagnostiku (SQL-Diagnostic Statements) koje koriste dijagnostičke

podatke i signaliziraju izuzetke u SQL rutinama (GET DIAGNOSTICS).

SQL:1999 standard definiše više načina korišćenja SQL-a. Dva osnovna načina

su direktno (interaktivno) korišćenje SQL-a i povezivanje SQL-a sa klasičnim

programskim jezicima („ugrađeni” SQL).Bazna tabela, koja je objekat šeme baze

podataka, naziva se kreirana bazna tabela i može biti perzistentna ili privremena. Bazna

tabela, koja je objekat modula, može biti samo privremena i naziva se deklarisana

privremena tabela.

Perzistentna bazna tabela je imenovana tabela definisana CREATE TABLE

naredbom bez ključne reči TEMPORARY.Globalna privremena tabela je imenovana

tabela definisana CREATE TABLE naredbom koja uključuje odrednicu GLOBAL

TEMPORARY. Kreirana lokalna privremena tabela je imenovana tabela definisana

CREATE TABLE naredbom koja uključuje odrednicu LOCAL TEMPORARY.

Deklarisana lokalna privremena tabela je imenovana tabela koja se deklariše kao

komponenta modula.

Globalne privremene tabele i kreirane lokalne privremene tabele su slične

perzistentnim baznim tabelama u smislu da su njihove definicije u šemi i ostaju u njoj

dok se eksplicitno ne uklone. Međutim, za razliku od perzistentnih baznih tabela,

njihova fizička egzistencija se efektivno materijalizuje samo kada se referenciraju u

SQL sesiji.

SQL sesija je kontekst u kome jedan korisnik (osoba ili aplikacija) izvršava

sekvencu SQL naredbi u toku jedne SQL konekcije. SQL konekcija je asocijacija (veza)

izmedu SQL klijenta i SQL servera.

SQL klijent je procesor koji uspostavlja vezu sa SQL serverom i koji je

prvenstveno okrenut korisniku, odnosno aplikaciji. On predstavlja interfejs preko koga

se prosleđuju zahtevi SQL serveru i prihvataju rezultati obrade zahteva. SQL server je

procesor koji upravlja SQL sesijom. On prihvata zahteve od SQL klijenta. izvršava ih i

rezultate prosleđuje klijentu.

Svaki modul ili „ugrađeni” SQL program, koji referencira kreiranu lokalnu

privremenu tabelu, prouzrokuje materijalizaciju različitog pojavljivanja (instance) te

tabele u svakoj SQL sesiji. To znači da se sadržaj kreirane lokalne privremene tabele,

kao ni globalne privremene tabele, za razliku od perzistentnih baznih tabela, ne može

deliti izmedu SQL sesija. Prema tome, privremena tabela je prazna na početku SQL

sesije i prazni sa na njenom kraju ili na kraju SQL transakcije. Sadržaj kreirane lokalne

privremene tabele ne može se deliti ni izmedu modula ili „ugrađenih” SQL programa

jedne SQL sesije.

Page 24: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[23]

Da zaključimo, sadržaj globalne privremene tabele jedinstven je u SQL sesiji,

sadržaj kreirane lokalne privremene tabele jedinstven je unutar modula ili „ugrađenog”

SQL programa jedne SQL sesije, a sadržaj deklarisane lokalne privremene tabele

jedinstven je unutar procedure jednog modula ili „ugradenog” SQL programa jedne

SQL sesije.

Page 25: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[24]

5. Postojeća rešenja

Android aplikacija Human Resources6

, ima mogućnost prikaza i pretrage

zaposlenih, kao i vođenje evidencije o odsustvima. Takođe, ova aplikacija ima

mogućnost prikupljanja podataka, računanje i alate za intervjue. Ova aplikacija pruža

mogućnosti stvaranja nedeljnih planera, izveštaje o nezgodama koje su se desile u

prostorijama korporacije ili na terenu, izračunavanje plata, slanje i primanje

obaveštenja, rad u ofline i online režimu, eleminisanje papirologije, ima pristup svim

izveštajima u svakom trenutku i na svakom mestu. Aplikacija omogućava olakšani rad

službama za upravljanje ljudskim resursima. Svi prikupljeni podaci se čuvaju na

android uređajima, ali se mogu eksportovati u pdf ili xlsx ukoliko je to potrebno.

Aplikacija omogućava održavanje intervjua, organizaciju i lako zakazivanje intervjua.

Intervju se drži na uređaju, ali se može i proslediti putem mail-a. Takođe, postoji

mogućnost upload-a pdf fajlova sa lokalnog diska ili cloud-a. Postoji mogućnost

popunjavanja pdf obrazaca, stavljanja potpisa, podela formi putem sms poruka ili mejla.

Izgled ove aplikacije prikazan je na slici 3.

Slika 3. Android aplikaciju Human Resources

Jedna od aplikacija koje imaju sličnu primenu jeste Zoho People7

. Ova

aplikacija ima mogućnost pregleda i pretrage zaposlenih, ali i dodavanja novih

6 Izvor https://www.bamboohr.com/mobile.php

7 Izvor https://www.zoho.com/people/

Page 26: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[25]

zaposlenih. Takođe postoji organizacija godišnjih odmora, ali i mogućnosti zakazivanja

i pohađanja seminara, obuka... Ima mogućnost vođenja beležaka, tj sadrži planere za

poslovnu primenu, sa mogućnošću podsetnika. Osim android aplikacije, Zoho People je

razvijen i za desktop uređaje. Izgled aplikacije Zoho People prikazan je na sledećoj

slici.

Slika 4. Android aplikaciju Zoho People

Easy HR 8je jednostavna aplikacija koja pruža mogućnost vođenja evidencije o

odsustvima, odobravanje i odbijanje odsustava zaposlenima. Takođe ima mogućnost

organizacije putovanja i obuka, i lako upravljanje troškovima. Easy HR je prikazana na

slici 5.

8 https://play.google.com/store/apps/details?id=com.streetlightsoftware.easyhr

Page 27: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[26]

Slika 5. Android aplikaciju Easy HR

Page 28: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[27]

6. Model softverskih funkcija

Na slici 6. Prikazan je use case dijagram. Na njemu su detaljnije prikazani

procesi koji treba da se izvrše. Npr. zaposleni šalje zahtev za novo odsustvo, njegov

TeamLeader dobija notifikaciju da je zatraženo novo odsustvo, koje odobrava ili odbija,

zaposleni dobija notifikaciju, odgovor na zatraženo odsustvo.

Modeli podataka su rađeni pomoću alata Power Designer 15.

Slika 6. Use case dijagram HRA android aplikacije

Page 29: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[28]

7. Modeli podataka

Slika 7. Conceptual data model HRA android aplikacije

Iz konceptualnog modela izveden je PDM – Physical Data Model, na kojem su

prikazani i strani ključevi. PDM je prikazan na slici 8.

Page 30: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[29]

Slika 8. Physical Data Model HRA android aplikacije

Page 31: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[30]

8. Opis realizovanog rešenja

Servis za potrebe HRA (Human Resouces Android) aplikacije pisan je u Python

programskom jeziku, u ravojnom okruženju PyCharm. Za testiranje funkcionalnosti

servisa korišćen je Postman. Svi get endpointi kao povratnu vrednost imaju JSON type.

Servis ima endpointe za autentifikaciju, login, dobijanje spiska zaposlenih, detalji za

svakog zaposlenog, slike zaposlenih u Base64 formatu (koje se u aplikaciji keširaju, da

bi se smanjio protok internet saobraćaja i ubrzala aplikacija), dobijanje spiska

odsustava, kreiranje notifikacije, slanje mail-a, dobijanje tipova odsustava, kreiranje

novog odsustva, dobijanje notifikacija, pregledane notifikacije, odobravanje odsustva,

kao i nekoliko endpointa vezane za validacije, validnost podataka.

Aplikacija je napisana u Java programskom jeziku, koristeći Android studio kao

razvojno okruženje. Zasniva se na listingu i pretrazi zaposlenih u korporaciji, dobijanje

detalja o zaposlenima, pozivanje i slanje poruka zaposlenima direktno iz aplikacije, kao

i mogućnost da se pošalje e-mail zaposlenima. Takođe, prikaz fotografije zaposlenog

preko celog ekrana mobilnog uređaja, u cilju lakšeg prepoznavanja i međusobnog

upoznavanja zaposlenih u velikim korporacijama.

Druga ključna funkcionalnost ove aplikacije jeste olakšavanje zaposlenima

apliciranje za odsustva. Naime, kada je zaposlenom potrebno odsustvo, pomoću

aplikacije ga jednostavno može zatražiti. Na nadređenom zaposlenog koji je zatražio

odsustvo je da li će to odsustvo odobriti ili odbiti. U aplikaciji postoje tri profila

korisnika: administrator, team leader i employee.

Administrator, kao profil korisnika sa najvišim ovlašćenima, ima mogućnost da

team leader-u odobrava ili odbija aplicirana odsustva. Administrator ima uvid u

odsustva svih zaposlenih u korporaciji, da pretražuje odsustva po datumima, kao i po

svim zaposlenima. Team leader ima ovlašćenje da odobrava odsustva zaposlenih u

svom sektoru, i ima uvid u odsustva zaposlenim samo u njegovom sektoru, timu.

Zaposleni ima pravo da zatraži odsustvo, i ima uvid u svoja odsustva.

Page 32: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[31]

9. Korisničko uputstvo

Prilikom pokretanja HRA aplikacije prikazuje se logo firme, dok pozadinski

process (Async task) proverava da li je prilikom prethodkog korišćenja aplikacije

korisnik čekirao polje remember me. Ukoliko polje nije bilo čekirano, ili je ovo prvo

pokretanje aplikacije, prikazaće se fragment za logovanje koji izgleda kao na sledećoj

slici.

Slika 9. Stranica za logovanje korisnika

Ukoliko je polje remember me bilo čekirano prilikom prethodne upotrebe

aplikacije, pokreće se aplikacija sa početnim izgledom kao na slici 10.

Slika 10. Početna stranica aplikacije

Page 33: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[32]

Na početnom ekranu nalazi se kratki pregled statistike za ulogovanog user-a,

koliko mu je dana preostalo za odsustvovanje sa posla, koliko je odsustava zatražio do

sada, koliko je odobreno, odbijeno, i na koliko još uvek čeka odobrenje.

Sledeća stavka jeste drawer ili bočni menu. U njemu se nalaze sve putanje kroz

aplikaciju. Izgled aplikacije (tema aplikacije) se može podesiti da bude svetao ili taman,

u zavisnosti koji izgled korisnik odabere. Izgledi tema se vide na sledećoj slici.

Slika 11. Glavni meni sa prikazom obe teme aplikacije

Jedna od funkcionalnosti jeste lista zaposlenih, kao i pretraga po imenu ili

prezimenu. Pretraga je urađena po principu auto complete search, što označava da će se

lista automatski menjati, i izlistavati samo one rezultate koji odgovaraju unetim

karakterima iz search box-a. Izgled ekrana za pretragu liste zaposlenih prikazan je na

slici 12.

Page 34: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[33]

Slika 12. Prikaz stranice za pretragu zaposlenih

Takođe jedna od funkcionalnosti jeste i dobijanja detalja o zaposlenima,

mogućnost pozivanja zaposlenog direktno iz aplikacije, kao i slanje poruka i mogućnost

da se pošalje e-mail zaposlenom, jednostavnim klikom na email zaposlenog. Jedna od

funkcionalnosti jeste i prikaz fotografije zaposlenog preko celog ekrana mobilnog

uređaja, u cilju lakšeg prepoznavanja i međusobnog upoznavanja zaposlenih u velikim

korporacijama.

Page 35: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[34]

Slika 13. Prikaz detalja o zaposlenom

Druga ključna funkcionalnost ove aplikacije jeste olakšavanje zaposlenima

apliciranje za odsustvima. Naime, kada je zaposlenom potrebno odsustvo, pomoću

aplikacije ga jednostavno može zatražiti, i to kao na slici 14 i 15.

Page 36: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[35]

Slika 14. Stranica za apliciranje odsustva

Page 37: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[36]

Slika 15. Stranica za apliciranje odsustva

Team leader dobija notifikaciju da je jedan od njegovih zaposlenih (zaposleni u

istom sektoru, timu) zatražio odsustvo i team leader kroz aplikaciju ima mogućnost da

aplicirano odsustvo dozvoli, ili odbije. Zaposleni dobija notifikaciju nakon što je njegov

team leader odgovorio na aplicirano odsustvo.

Slika 16. Stranica notifikacija zatraženih odsustava

Page 38: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[37]

Ove notifikacije nisu push notifikacije koje se plaćaju, već je to servis koji se

“vrti” na svakom mobilnom uređaju posebno, i koji proverava da li se status odsustva

promenio. Frekvenciju ažuriranja zaposleni sami mogu odrediti.

Slika 17. Podešavanje tajmera za notifikacije

Page 39: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[38]

10. Opis implementacije

U daljem tekstu nalazi se SQL script baze podataka. Baza je rađena u MSSQL

programu za upravljanje bazama podataka. Napraviljena je baza gde imamo 5 tabela.

Script baze izgleda ovako:

CREATE DATABASE NewHRA CREATE TABLE [dbo].[tblSectors]( [SectorID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Description] [nvarchar](50) NULL, CONSTRAINT [PK_tblSectors] PRIMARY KEY CLUSTERED ( [SectorID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[tblOccupations]( [OccupationID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Descriptions] [nvarchar](100) NULL, CONSTRAINT [PK_tblAvocations] PRIMARY KEY CLUSTERED ( [OccupationID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[tblEmployees]( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [SectorID] [int] NOT NULL, [OccupationID] [int] NOT NULL, [Role] [int] NOT NULL, [CardNo] [int] NOT NULL, [IDNumber] [nvarchar](50) NOT NULL, [JMBG] [nvarchar](50) NOT NULL, [PlaceOfIDIssue] [nvarchar](50) NOT NULL, [AddressFromID] [nvarchar](50) NOT NULL, [LivingAddress] [nvarchar](50) NULL, [Username] [nvarchar](50) NOT NULL, [Password] [nvarchar](50) NULL, [Email] [nvarchar](50) NOT NULL, [Skype] [nvarchar](50) NULL, [Mobile] [nvarchar](50) NOT NULL, [WorkPhone] [nvarchar](50) NULL, [ExtensionNum] [nvarchar](50) NULL, [WorkStart] [smalldatetime] NOT NULL, [OfficialWorkStart] [smalldatetime] NULL, [OfficeNumber] [nvarchar](50) NULL, [SecondarySchool] [nvarchar](50) NULL, [HighSchools] [nvarchar](50) NULL, [IsActive] [bit] NOT NULL CONSTRAINT [DF_tblEmployees_IsActive] DEFAULT ((1)), [CV] [varbinary](max) NULL,

Page 40: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[39]

CONSTRAINT [PK_tblEmployees] PRIMARY KEY CLUSTERED ( [EmployeeID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] SET ANSI_PADDING ON ALTER TABLE [dbo].[tblEmployees] WITH CHECK ADD CONSTRAINT [FK_tblEmployees_tblEmployees] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[tblEmployees] ([EmployeeID]) ALTER TABLE [dbo].[tblEmployees] CHECK CONSTRAINT [FK_tblEmployees_tblEmployees] ALTER TABLE [dbo].[tblEmployees] WITH CHECK ADD CONSTRAINT [FK_tblEmployees_tblOccupations] FOREIGN KEY([OccupationID]) REFERENCES [dbo].[tblOccupations] ([OccupationID]) ALTER TABLE [dbo].[tblEmployees] CHECK CONSTRAINT [FK_tblEmployees_tblOccupations] ALTER TABLE [dbo].[tblEmployees] WITH CHECK ADD CONSTRAINT [FK_tblEmployees_tblSectors] FOREIGN KEY([SectorID]) REFERENCES [dbo].[tblSectors] ([SectorID]) ALTER TABLE [dbo].[tblEmployees] CHECK CONSTRAINT [FK_tblEmployees_tblSectors] CREATE TABLE [dbo].[tblAbsenceTypes]( [AbsenceTypeID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](100) NOT NULL, [AbsenceCode] [nvarchar](10) NOT NULL, [IncludeHours] [decimal](18, 2) NOT NULL, CONSTRAINT [PK_tblAbsenceTypes] PRIMARY KEY CLUSTERED ( [AbsenceTypeID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[tblAbsences]( [AbsenceID] [int] IDENTITY(1,1) NOT NULL, [EmployeeID] [int] NOT NULL, [AbsenceTypeID] [int] NOT NULL, [Status] [int] NOT NULL, [DayFrom] [smalldatetime] NOT NULL, [DayTo] [smalldatetime] NOT NULL, [AbsenceYear] [int] NULL, [Description] [nvarchar](50) NOT NULL, [Response] [nvarchar](150) NULL, CONSTRAINT [PK_tblAbsences] PRIMARY KEY CLUSTERED ( [AbsenceID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Page 41: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[40]

ALTER TABLE [dbo].[tblAbsences] WITH NOCHECK ADD CONSTRAINT [FK_tblAbsences_tblAbsenceTypes] FOREIGN KEY([AbsenceTypeID]) REFERENCES [dbo].[tblAbsenceTypes] ([AbsenceTypeID]) ALTER TABLE [dbo].[tblAbsences] CHECK CONSTRAINT [FK_tblAbsences_tblAbsenceTypes] ALTER TABLE [dbo].[tblAbsences] WITH NOCHECK ADD CONSTRAINT [FK_tblAbsences_tblEmployees] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[tblEmployees] ([EmployeeID]) ALTER TABLE [dbo].[tblAbsences] CHECK CONSTRAINT [FK_tblAbsences_tblEmployees]

Implementacija Python servisa za komunikaciju android aplikacije sa bazom

biće prikazana u delovima koda, konekcija ka bazi, provera autorizacije, koja se

izvršava prilikom svakog poziva endpointa, kao i login endpoint i endpoint za novo

odsustvo.

Konekcija ka bazi / DB connection:

MSSQL_serverName = 'DESKTOP-8974R6J\SQLEXPRESS' #server name

connectionString = 'DRIVER={SQL Server};SERVER=' + MSSQL_serverName +

';DATABASE=NewHRA;Trusted_Connection=yes;'

if __name__ == '__main__':

app.run(host='xxx.xxx.x.xxx', port=xxxx) # server configuration

Provera autorizacije / Check authorisation:

def check_auth(username, password):

global LDAPtarget #Another database for authorization(IP address)

if not '.' in username:

return False

ldapUsername = username.replace('.', ' ').title()

l=ldap.initialize(LDAPtarget)

l.protocol_version = ldap.VERSION3

l.set_option(ldap.OPT_REFERRALS, 0)

user_dn = "CN="+ldapUsername+",CN=Users,DC=panonit,DC=lan"

try:

# verification = l.simple_bind_s(user_dn, password)

# if verification is None:

# return False

connection = pyodbc.connect(connectionString)

cursor = connection.cursor()

sql = "select e.username from tblEmployees e where e.username = '" +

username + "'"

cursor.execute(sql)

results = cursor.fetchall()

if not results or not username in results[0]:

return False

return True

except Exception, error:

print error

return False

finally:

Page 42: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[41]

cursor.close()

connection.close()

Metoda za logovanje / Login endpoint:

@app.route('/api/login')

@requires_auth

def login():

try:

connection = pyodbc.connect(connectionString)

cursor = connection.cursor()

sql = "select e.EmployeeID, e.Name, e.SectorID, e.Email, e.Mobile,

e.WorkPhone, e.OfficeNumber, e.Role, " \

"i.Image, e.OccupationID, e.CardNo, e.IDNumber, e.JMBG,

e.PlaceOfIDIssue, e.AddressFromID, " \

"e.LivingAddress, e.Skype, e.ExtensionNum, e.WorkStart,

e.OfficialWorkStart, e.SecondarySchool, " \

"e.HighSchools, e.IsActive, e.Username, e.Password " \

"from tblEmployees e left join tblImages i on i.EmployeeID =

e.EmployeeID and i.ImageSize = 'm' " \

"where e.Username = '" + str(request.authorization.username)+"'"

cursor.execute(sql)

data = cursor.fetchall()[0]

if data[8] is not None:

image = base64.standard_b64encode(data[8])

else:

image = None

user = ({'EmployeeID': data[0], 'Name': data[1], 'SectorID': data[2],

'Email': data[3], 'Mobile': data[4],

'WorkPhone': data[5], 'OfficeNumber': data[6], 'Role':

data[7], 'Image': image, 'OccupationID': data[9],

'CardNo': data[10], 'IDNumber': data[11], 'JMBG': data[12],

'PlaceOfIDIssue': data[13],

'AddressFromID': data[14], 'LivingAddress': data[15],

'Skype': data[16], 'ExtensionNum': data[17],

'WorkStart': str(data[18]), 'OfficialWorkStart':

str(data[19]), 'SecondarySchool': data[20],

'HighSchools': data[21], 'IsActive': data[22], 'Username':

data[23], 'Password': data[24]})

response = json.dumps(user)

return response

except Exception, error:

print error

return internal_server_error()

finally:

cursor.close()

connection.close()

Zahtev za odsustvo / New absece endpoint:

@app.route('/api/absences/create', methods=['POST'])

@requires_auth

def create_new_absence():

try:

connection = pyodbc.connect(connectionString)

cursor = connection.cursor()

if not request.data:

return bad_request()

if not validate_new_absence_json(request.data):

Page 43: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[42]

return bad_request()

sql = "Select at.Name from tblAbsenceTypes at where at.AbsenceTypeID =

'" + \

str(json.loads(request.data)['AbsenceTypeID']) + "'"

cursor.execute(sql)

data = cursor.fetchall()

if not data:

return bad_request()

absenceData = json.loads(request.data)

absenceData['AbsenceType'] = data[0][0]

employeeDetails =

get_employee_details_by_username(str(request.authorization.username))

sql = "INSERT INTO tblAbsences (Status, AbsenceTypeID, DayFrom, DayTo,

AbsenceYear, Description, EmployeeID) " \

"OUTPUT INSERTED.AbsenceID, INSERTED.DayFrom, INSERTED.DayTo " \

"VALUES (0, {0}, '{1}', '{2}', {3}, '{4}', {5});"\

.format(absenceData['AbsenceTypeID'], absenceData['DayFrom'],

absenceData['DayTo'],

absenceData['AbsenceYear'],

absenceData['Description'], employeeDetails['EmployeeID'])

cursor.execute(sql)

try:

data = cursor.fetchall()[0]

except Exception, error:

print error

return bad_request()

absenceData['AbsenceID'] = data[0]

absenceData['DayFrom'] = str(data[1])

absenceData['DayTo'] = str(data[2])

absenceData['EmployeeID'] = employeeDetails['EmployeeID']

absenceData['Status'] = 0

absenceData['Response'] = None

sql = "select e.EmployeeID, e.Email from tblEmployees e where e.Role =

0"

cursor.execute(sql)

data = cursor.fetchall()

for admin in data:

message = 'Employee ' + employeeDetails['Name'] + ' has requested

an absence from ' + \

str(adjust_date_for_notification(absenceData['DayFrom'])) + \

' to ' +

str(adjust_date_for_notification(absenceData['DayTo']))

create_notification(employeeDetails['EmployeeID'], admin[0],

"Absences", message)

send_email(admin[1], 'Absence request', message)

response = json.dumps(absenceData)

connection.commit()

return response

except Exception, error:

print error

return internal_server_error()

finally:

Page 44: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[43]

cursor.close()

connection.close()

Implementacija Android aplikacije biće prikazana u delovima koda koji

obuhvataju neke od ključnih delove aplikacije.

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permission android:name="android.permission.CALL_PHONE" />

LoginActivity.java

Metoda za proveru SharedPreferences:

private void CheckSharedPreferences() {

try {

loggedUserSharedPreferences = getSharedPreferences("USER DETAILS",

MODE_PRIVATE);

if (!(loggedUserSharedPreferences.getString("username", "").equals("")

&& loggedUserSharedPreferences.getString("password", "").equals(""))) {

loggedUser = new User();

loggedUser.setUsername(loggedUserSharedPreferences.getString("username", ""));

loggedUser.setPassword(loggedUserSharedPreferences.getString("password", ""));

username = loggedUser.getUsername();

password = loggedUser.getPassword();

login();

} else {

SharedPreferences.Editor editor =

loggedUserSharedPreferences.edit();

editor.putString("username", "");

editor.putString("password", "");

editor.apply();

Const.isRequiredLogin = true;

if(!isRequiredLogin) {

Intent intent = getIntent();

finish();

startActivity(intent);

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

Metoda za logovanje:

Page 45: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[44]

public void login() {

if (loggedUserSharedPreferences.getString("username", "").equals("") &&

loggedUserSharedPreferences.getString("password", "").equals("")) {

if (!validate()) {

onLoginFailed();

return;

}

}

if(isRequiredLogin) {

btnLogin.setEnabled(false);

progressDialog = new ProgressDialog(LoginActivity.this,

R.style.AppTheme_Login_Dialog);

progressDialog.setIndeterminate(true);

progressDialog.setMessage(getString(R.string.message_authenticating));

progressDialog.show();

}

if (username.equals("") && password.equals("")) {

username = txtUsername.getText().toString();

password = txtPassword.getText().toString();

}

new loginRequest().execute(username, password);

new android.os.Handler().postDelayed(

new Runnable() {

public void run() {

if (isLoggedFailed) {

onLoginFailed();

if (isRequiredLogin) progressDialog.dismiss();

}

}

}, 7000);

}

loginRequest je AsyncTask koji, kao pozadinski proces, gađa metodu za

logovanje na servisu. Njegova implementacija je sledeća:

private class loginRequest extends AsyncTask<String, Void, String> {

@Override

protected void onPreExecute() {

...

}

@Override

protected String doInBackground(String... params) {

String returner;

try {

URL service = new URL(Const.SERVICE_URL_LOGIN);

HttpURLConnection connection = (HttpURLConnection)

service.openConnection();

String authentication = params[0] + ":" + params[1];

String encodedAuth =

Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP);

connection.setRequestProperty("Authorization", "basic " +

encodedAuth);

int responseCode = connection.getResponseCode();

BufferedReader bufferedReader = new BufferedReader(new

InputStreamReader(connection.getInputStream()));

StringBuilder total = new StringBuilder();

String line;

while ((line = bufferedReader.readLine()) != null) {

Page 46: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[45]

total.append(line);

}

JSONObject temp = new JSONObject(total.toString());

if (responseCode == HttpURLConnection.HTTP_OK) {

returner = temp.toString();

} else {

returner = ("" + responseCode);

}

return returner;

} catch (Exception e) {

returner = ("Exception: " + e.getMessage());

return returner;

}

}

@Override

protected void onPostExecute(String result) {

...

}

Nakon uspešnog logovanja, kreira se MainActivity.java, koji se provlači kroz

celu aplikaciju. MainActivity predstavlja kontejner za sve fragmente koji se smenjuju u

toku izvršavanja aplikacije. Jedan od tih fragmenata jeste NewAbsenceFragment.

Fragment_new_absence.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="hra.panonit.com.hra.fragment.NewAbsenceFragment">

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:weightSum="1"

android:baselineAligned="false">

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:orientation="horizontal"

>

<TextView

android:text="@string/type"

android:layout_width="match_parent"

android:layout_weight="0.7"

android:layout_height="wrap_content"

/>

<Spinner

android:id="@+id/absenceType"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="0.3">

</Spinner>

</LinearLayout>

<LinearLayout

android:layout_width="match_parent"

Page 47: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[46]

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:orientation="horizontal">

<TextView

android:text="@string/date_from"

android:layout_width="match_parent"

android:layout_weight="0.6"

android:layout_height="wrap_content"

/>

<TextView

android:clickable="true"

android:id="@+id/pickedDateFromID"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="0.315"/>

<ImageView

android:clickable="true"

android:id="@+id/dateFromImageID"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="?attr/imgBtnCalendar"

/>

</LinearLayout>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_margin="10dp"

android:orientation="horizontal">

<TextView

android:text="@string/date_to"

android:layout_width="match_parent"

android:layout_weight="0.6"

android:layout_height="wrap_content"

/>

<TextView

android:clickable="true"

android:id="@+id/pickedDateToID"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="0.315"/>

<ImageView

android:clickable="true"

android:id="@+id/dateToImageID"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="?attr/imgBtnCalendar"/>

</LinearLayout>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginLeft="10dp"

android:layout_marginRight="10dp"

android:orientation="horizontal"

>

<TextView

android:text="@string/description"

android:layout_marginTop="5dp"

android:layout_width="match_parent"

android:layout_weight="0.7"

Page 48: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[47]

android:layout_height="wrap_content"

/>

<EditText

android:gravity="start"

android:id="@+id/descriptionID"

android:text=""

android:layout_margin="5dp"

android:layout_width="match_parent"

android:layout_weight="0.3"

android:layout_height="wrap_content"

android:maxLength="50"

/>

</LinearLayout>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="fill_parent"

android:gravity="bottom|center"

android:layout_gravity="bottom"

>

<Button

android:text="@string/reset"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/resetID"

android:layout_marginBottom="20dp"/>

<Button

android:id="@+id/submitID"

android:text="@string/submit"

android:layout_width="wrap_content"

android:layout_marginLeft="50dp"

android:layout_height="wrap_content"

android:layout_marginBottom="20dp"/>

</LinearLayout>

</LinearLayout>

</FrameLayout>

Page 49: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[48]

11. Zaključak

11.1. Mogućnosti korišćenja rešenja

Rešenje je u potpunosti ispravno, i spremno, i može se koristiti kao rezultat

problema opisanog u prvom poglavlju. Ovu aplikaciju mogu koristiti sve organizacije,

preduzeća i ustanove koje imaju veći broj zaposlenih, kako bi se, pre svega, olakšala

komunikacija između zaposlenih.

Takođe, ključna uloga aplikacije je mogućnost lake komunikacije između

zaposlenih i njihovih nadređenih, za potrebe odsustva, vođenje evidencije o

iskorišćenim slobodnim danima, bolovanjima, organizacija godišnjih odmora…

11.2. Dalji plan razvoja

U narednom periodu planirano je da se aplikacija proširi mogućnošću

eksportovanja izveštaja o odsustvima zaposlenih pojedinačno, eksportovanju izveštaja

odsustva po godinama, datumima, sektorima.

Dodavanje mogućnosti pretrage po fotografijama, što bi rezultiralo lakšem i

bržem upoznavanju zaposlenih u velikim korporacijama.

Implementiranje push notifikacija, što bi zamenilo servis koji se “vrti” na

svakom mobilnom uređaju. To bi rezultiralo smanjenju potrošnje internet saobraćaja, i

oslobodilo deo resursa uredjaja, pre svega RAM memorije mobilnog uređaja.

Mogućnost za dodavanjem novih zaposlenih, i brisanje zaposlenih koji se više

ne nalaze u korporaciji. Tu mogućnost bi imao administrator. Zatim, mogućnost da

ulogovani korisnik može izmeniti svoje lične podatke, podesiti novu lozinku.

Proširiti upotrebu (implementirati rešenje) na platformu Windows Mobile kao i

IOS platform.

Page 50: Tehnologije distribucije podataka mobilnih aplikacija

Tehnologije distribucije podataka mobilnih aplikacija

_____________________________________________________

_____________________________________________________

[49]

12. Literatura

[1] Zapata B., Android Studio Application Development, 2013

[2] Neil S., Android Studio 2 Development Essentials, 2016

[3] Yener M., Dundar O., Expert Android Studio, 2016

[4] Reto M., Professional Android 4 Application Development, Wiley Publishing,

2012

[5] Schwarz R., Dutson P., Steele J., To N., The Android Developer's Cookbook:

Building Applications with the Android SDK, Addison-Wesley, 2013

[6] Felker D., Android Application Development for Dummies, 2011

[7] Burnette E., Hello, Android - Introducing Google’s Mobile Development

Platform, 2010

[8] DiMarzio J., Android - A Programmer’s Guide, 2008

[9] Lee J., Mills J., Exploring Tourist Satisfaction with Mobile Experience

Technology, 2010

[10] Darcey L., Shane Conder, Sams Teach Yourself Android Application

Development in 24 Hours, 2010

[11] Corigliano M., Baggio R., Mobile Technologies Diffusion in Tourism: Modelling

a Critical Mass of Adopters in Italy, 2004

[12] Zechner M., Beginning Android Games, 2011

[13] Murphy M., Beginning Android 2, 2010

[14] Smyth N., Android 4 App Development Essentials ,Payload media, 2014

[15] Murphy M., Busy Coders Guide To Android Development, CommonsWare, 2015

[16] Nayak R., Wireless Technologies to Enable Electronic Business, Brisbane, 2010

[17] Detmold H., Scalable Surveillance Software Architecture, Proceedings of the

IEEE International Conference on Advanced Video and Signal-based

Surveillance, 2006

[18] Douglish F., As i Emerge from the Mobile Phone Dark Ages, i Look Around in

Fear and Wonder, IEEE Internet Computing, 2010

[19] Frickengel L., Wireless Networking in the Developing World, 2nd ed., 2007

[20] Hengel E., Dick A., Hill R., Activity topology estimation for large networks of

cameras. Proceedings of the IEEE International Conference on Advanced Video

and Signal-based Surveillance, 2006

[21] Miner R., Android - Building a Mobile Platform to Change the Industry, Stanford

EE Computer Systems Colloquium, 2007

[22] D. Pavlešić, Razvoj mobilnih aplikacija, Mreža, 2010

[23] Rossum G., Drake F., The Python Library Reference Release 2.6.4 Python

Software Fondation, 2010

[24] Miller B., Ranum D., The Python Programming Language, 2007

[25] Joyner J., Python Programming For Beginners: Python Programming Language

Tutorial, 2014

[26] Beazley D, Python Essential Reference, 2009

[27] Lester A., The Python (Programming Language) Handbook - Everything You

Need to Know about Python (Programming Language), 2016