Sistemul de Gestiune a Bazei de Date

Cuprins

1. Introducere

1.1 Scopul lucrării și obiective

2. Tehnologii folosite

2.1 Baza de date

2.1.1 Noțiuni generale

2.1.2 Sistemul de gestiune a bazei de date (SGBD)

2.1.3 Modele ale bazei de date

2.1.4 Independența datelor

2.1.5 MongoDB

2.2 Programarea orientate – obiect

2.2.1 Noțiuni generale

2.2.2 Proprietăți ale programării orientate – obiect

2.2.3 Niveluri de acces

2.2.4 Crearea și distrugerea obiectelor

2.2.5 Java

2.3 Servicii REST

2.3.2 Metode HTTP

2.3.3 Java și Servicii REST Web

2.3.4 Anotări JAX-RS

2.4 AngularJS

2.4.1 Model View Controller (MVC)

2.4.2 Noțiuni teoretice

2.5 Structura aplicației

2.5.1 Componenta client

2.5.2 Componenta server

3. Prezentarea aplicației

3.1 Tipuri de utilizatori

3.2 Înregistrare și autentificare

3.3 Secțiunea News

3.4 Secțiunea Catalogue

3.5 Secțiunea Timetables

3.6 Secțiunea Homework

3.7 Secțiunea Exams

3.8 Secțiunea Courses

4. Instalarea aplicației

1. Introducere

În anul 1970, acum 45 de ani, lua naștere una din invențiile ce avea să schimbe pentru totdeauna civilizația și cultura umană. Era vorba de computerul personal. O invenție ce avea nu doar să schimbe societatea în multe moduri pe care nimeni nu și le putea închipui la acea vreme, ci să și influențeze viața omului.

Calculatoarele aveau să devină ușor, ușor o parte esențială a lumii, dar totodată un lucru firesc al vieții de zi cu zi. La început era un lucru privit cu reticiență pentru că nu era un lucru ce putea fi accesibil oricărei persoane, dar nici capacitatea de funcționare a calculatorului nu era atât de dezvoltată. Cu toții, ne amintim cu nostalgie, când în perioada copilăriei, doream să avem acces la un calculator pentru a ne putea juca, neștiind de fapt câte funcții poate îndeplini și cât de mult ne poate ușura munca de zi cu zi. Ușor, ușor, dar cu pași siguri, calcultorul a evoluat, făcând astfel parte din rutina zilnică a fiecăruia din noi. Progresul a fost atât de mare și rapid, încât este greu ca în zilele de astăzi să îți imaginezi lumea fără computere. Cu toate că ocupă un rol aparte, special chiar în viața omenirii, mulți dintre noi încă nu percepem impactul calculatoarelor asupra vieții. Și asta se datorează faptului că ele încep să acapareze tot mai mult, fără a ne da seama, contolul asupra vieții noastre de zi cu zi. Sunt mulți care pot denumi acest lucru ca ”frica de calculatoare”, crezând astfel că pot avea tot odată, cu ușurință un impact negativ pentru omenire. La început, multora le-a fost teamă de a învăța să acceseze calculatorul și să înțeleagă sistemul de funcționare, considerăndu-se inapți pentru un lucru atât de complex. Sunt încă multe taine care așteaptă a fi deslușite de calculatoare, dar știința evoluează cu pași repezi și, cu siguranță, calculatorul va deveni un lucru la fel de important, poate, ca și omul. Pentru unii, calculatorul nu este un lucru atât e complex și asta pentru că fie nu sunt interesați de componentele sau informațiile tehnice ce stau în spatele calculatorului , preferând să se limiteze doar la jocuri, filme, media, acces la internet sau lucruri minore. Pentru alții însă, calculatorul înseamnă pasiune, devotament și talent. O lume fascinată pe care doresc să o exploreze și să o aducă la o perfecțiune de neegalat. Așa au luat naștere proprietățile ce caracterizează calculatorul drep o mașină a viitorului. Revenind în zilele noastre, calculatorul reprezintă foarte mult pentru omenire. Aproape că nu există lucru în spatele căruia să nu stea la bază un calculator. Omenirea a primit cu brațele deschise această oportunitate a viitorului încât mulți nu percep viața fără calculator.

Cei care îmbrățișează cel mai mult acestă ramură a calculatoarelor sunt tinerii, în special cei care sunt încă pe băncile facultății. Studenții privesc cu cel mai mare entuziasm oportunitățile ce le sunt oferite de calculator și încearcă să îl exploreze la capacitate maximă.

În lucrarea de față va fi prezentată atât din punct de vedere tehnic, cât și funcțional aplicația destinată studenților și anume un portal pentru studenți.

1.1 Scopul lucrării și obiective

Scopul lucrării de față este de a descrie atăt modul funcțional, cât și modul structural al unei aplicații destinate studenților, respectiv un portal pentru studenți. Sunt detaliate tehnologiile folosite din perspectiva proiectantului și cea a utilizatorului, scopul fiind de a evidenția necesitatea și utilitatea acestor tipuri de aplicații pentru studenți.

Obiectivele lucrării sunt:

Descrierea tehnologiilor folosite pentru crearea portalului pentru studenți

Crearea și prezentarea aplicației, descriind funcționalitatea

2. Tehnologii folosite

2.1 Baza de date

2.1.1 Noțiuni generale

O bază de date reprezintă o mulțime de fișiere interconectate ce cuprind principalele date necesare unui sistem, o mulțime de legături ce contribuie la descrierea unei realități. O bază de date este salvată într-unul sau mai multe fișiere, fiind gestionată pe baza sistemelor de prelucrare a bazelor de date.

În baza de date, informațiile sunt organizate pe mai multe nivele:

nivelul intern

nivelul extern

nivelul conceptual

Nivelul intern se referă la modul în care sunt salvate toate datele în cadrul unui sistem și se află situat cel mai aproape de mediul de stocare fizic. Descrierea de la acest nivel a bazei de date este dată de schema fizică, iar sistemul de gestiune oferă condițiile necesare înregistrării și modificării bazei de date.

Nivelul extern se referă la modul în care informațiile sunt privite de utilizatori. Fiecare bază de date are la bază o unică schemă fizică și o unică schemă conceptuală, dar are mai multe scheme externe. Pentru utlizatorii privilegiați schema externă este aceași cu schema conceptuală, în timp ce utilizatorii neprivilegiați accesează baza de date doar cu ajutorul schemelor externe specifice.

Nivelul conceptual reprezintă o cale de comunicare între nivelul intern si cel extern. Acesta oferă o descriere abstractă a structurii bazei de date, ignorând detaliile fizice de implementare. Schema conceptuală cuprinde:

tabele ce ajută la definirea bazei de date

elementele cu ajutorul cărora se crează legăturile

constrângerile de integritate

Fig 1.Organizarea datelor într-o bază de date

O entitate cuprinde datele de același tip ale unui obiect și este descrisă de o mulțime de caracteristici numite atribute. Un atribut pentru care valorile corespunzătoare determină unic orice element al unei entități reprezintă cheia. Relația dintre entitați este orice submulțime a produsului cartezian al mulțimilor elementelor entitaților, reprezentând asocierile dintre tabele.

O înregistrare este alcătuită din mai multe atribute ce descriu anumite aspecte ale realității. O restricție este o regulă corespunzătoare unui obiect având rolul de a limita mulțimea de valori destinată obiectului respectiv.

Există mai multe tipuri de restricții:

Restricția NOT NULL: interzice folosirea de valori nule pe o coloană

Restricția de cheie primară: asigură faptul că valorile de chei primare sunt unice

Restricția de unicitate: se definește pe o coloană / set de coloane indicând faptul că trebuie să existe valori unice pe coloana / coloanele respective

Restricția referențială: specifică o relație între tabele aflate în cadrul unei baze relaționale

Restricția CHECK: folosită pentru validarea a unei valori din cadrul unei coloane

Tipuri de relații în bazele de date:

unu la unu (1:1): unei înregistrări din tabela părinte îi corespunde o înregistrare din tabela fiu și reciproc

unu la mai multi (1:n): unei înregistrări din tabela părinte îi corespund mai multe înregistrari din tabela fiu, dar unei înregistrări din tabela fiu îi corespunde o singura înregistrare din tabela părinte

mai multi la mai multi (m:n): unei înregistrări părinte îi corespund mai multe înregistrări din tabela fiu și reciproc

2.1.2 Sistemul de gestiune a bazei de date (SGBD)

Sistemul de gestiune a bazei de date reprezintă legătura dintre principalii utilizatori și baza de date, reprezentând totalitatea programelor folosite pentru crearea, interogarea și menținerea unei baze de date. Acesta cuprinde două module principale: module ce sunt comune cu cele ale calculatoarelor și module cu funcții corespunzătoare bazei de date.

Principalele funcții ale SGBD sunt:

definirea informaților, reprezentând modul de creare a bazei de date

utilizarea informaților

integritatea datelor

confidențialitatea datelor

asigură accesul concurent la date

Arhitectura unui sistem de gestiune a bazei de date este compusă din:

baza de date unde sunt salvate informațiile

sistemul de gestiune ce se ocupă cu prelucrarea informațiilor

un dicționar specific bazei de date ce descrie tipul și structura informațiilor

utilizatorii implicați

Fig 2. Sistemul de gestiune a bazei de date

SGDB-ul asigură independența datelor, redundanțe minime a datelor, integritatea datelor prin procese de validare, partajabilitatea datelor și nu în ultimul rând un nivel de securitate mărit contra accesului neautorizat.

2.1.3 Modele ale bazei de date

Există trei tipuri de modele corespunzătoare organizării datelor într-o bază de date: relațional, rețea și ierarhic.

Modelul relațional se bazează pe noțiunea matematică de relație. Acesta permite împărțirea informațiilor în mai multe segmente ce sunt legate între ele alcătuind astfel înregistrări individuale, fiind stocate în fișiere diferite. Un model relațional este alcătuit din trei componente esențiale:

integrarea datelor prin intermediul unor restricții

structura datelor prin crearea unor relații și a unor domenii

prelucrarea datelor prin diferite operații de gestionare

În cadrul acestui model, majoritatea cererilor utilizatorilor urmăresc determinarea unor date cu anumite caracteristici, răspunsul fiind o relație care cuprinde toate elementele având aceste caracteristici.

Modelul rețea se bazează pe reprezentarea datelor sub forma diagramelor entitate-relație, unde relațiile pot fi doar binare. Aceasta condiție permite reprezentarea grafică a bazei de date sub forma unui graf directionat – rețea. Într-o astfel de rețea, nodurile corespund entităților, iar relațiile sunt reprezentate prin săgeti între noduri.

Modul ierarhic folosește structura arborescentă pentru salvarea datelor, constând într-un fișier alcătuit din mai multe înregistrări ce au fost la rândul lor alcătuite pe baza altor câmpuri de date.

2.1.4 Independența datelor

Modul în care datele sunt structurate și modul în care acestea sunt accesate depind de cerințele aplicației, dar și de tehnicile de acces. Astfel, imunitatea aplicației la modificările de memorare și acces constituie independența datelor.

Independența logică este dată de posibilitatea de schimbare a schemei conceptuale fară necesitatea de a modifica și schemele externe, permițand astfel adăugarea de noi tabele, de modificarea tabelelor existente, de adăugare de noi constrângeri de integritate, dar și de restructurare a bazei de date prin translatarea unor coloane existente în alte tabele sau prin fragmentarea sau reunirea mai multor tabele.

Independența fizică este dată de posibilitatea de reorganizare fizică fară a dăuna celorlalte aplicații ce o folosesc, permițând asfel schimbarea materialelor fizice pe care este salvată baza de date, schimbarea directoarelor unde este plasata baza de date, adăugarea de noi structuri ce conduce la creșterea vitezei de execuție.

Caracteristicile unei baze de date:

oferă o imagine ideală a realității cu ajutorul datelor corecte si actualizate

asigură independența datelor față de diverse prelucrări

asigură unicitatea datelor

asigură securitatea datelor prin diverse proceduri fizice

asigură confidențialitatea datelor prin metode ce fac imposibil accesul utilizatorilor neautorizați

2.1.5 MongoDB

MongoDB poate deține un număr mare de baze de date, fiecare bază de date putând deține la rândul ei un set de colecții ce conțin date mapate pe bază de cheie-valoare, având o schemă dinamică (datele din cadrul aceleiași colecție nu trebuie să aibe aceași structură). Prin urmare, asigură performanțe mari, scalarea datelor și oferă posibilitatea de a manipula datele prin operații avansate.

MongoDB este un server ce poate rula pe Linux, Windows si OS X ce ascultă implicit pe portul

27017. Datele sunt salvate în fișiere și foloșeste maparea memoriei pentru eficiența.

Caracteristici:

flexibilitate: MongoDB salvează datele în format JSON

puterere de gestionare a datelor: oferă implementări pentru interogări dinamice cum ar fi sortări, modificări rapide, indexare, iteratori

scalare a datelor: ținând împreună datele ce au legături, interogările pot fi realizate mult mai rapid față de o tabelă relațională unde datele ce au legături sunt fragmentate in mai multe tabele ce trebuie combinate

ușor de folosit: ușor de instalat, de configurat

portabilitate

2.2 Programarea orientate – obiect

2.2.1 Noțiuni generale

Programarea orientată obiect (POO) se bazează pe cuvântul cheie ”obiect”. În programarea orientată obiect obiectele descriu obiecte din lumea reală ce sunt caracterizate prin intermediul atributelor. Așa cum obiectele din realitate sunt descrise cu ajutorul atributelor, în POO entitățile sunt descrise prin variabile, comportamentul lor fiind descrise prin intermediul metodelor.

O variabilă reprezintă o locație de memorie și conține o valoare având același tip cu cel al tipului variabilei. Modificatorii de acces corespunzători variabilelor sunt: public, protected, private, implicit, final, abstract, static.

Tipurile de variabile existente în Java sunt:

Variabilă de clasă: reprezentată de un atribut ce este definit într-o clasă având modificatorul de acces static. Aceste variabile sunt create în momentul încărcării clasei fiind inițializate cu valori implicite

Variabilă instanță: reprezentată de un atribut ce este definit într-o declarație de clasă fară a avea modificatorul de acces static. Această variabilă va fi distrusă în momentul în care obiectul corespunzător atributului nu va mai fi referențiat

Variabilă locală: este definită de o instrucțiune. Așa cum un obiect își salvează starea în câmpuri, o metodă își salvează starea în variabile locale.

Variabilă parametru a unei metode: reprezintă valorile trimise către o metodă și va fi distrusă în momentul în care metoda își va încheia execuția

Programarea procedurală, spre deosebire de programarea orientată obiect, presupune separarea operațiilor de datele asupra cărora se acționează, conducând la un control greu asupra modificărilor ce pot apărea atât în cazul datelor, cât și în cazul operațiilor. Astel, programarea orientată obiect poate fi văzută ca un avantaj întrucât oferă un control mult mai ușor asupra schimbărilor ce pot apărea asupra datelor, prin faptul că atât datele, cât și operațiile sunt grupate în obiecte. Obiectele sunt manipulate prin intermediul variabilelor și a metodelor, putând fi interpretate ca mulțimi de variabile și metode. Protecția datelor este dată prin restricționarea accesului la ele doar a metodelor obiectului de care aparțin, proprietate numită încapsulare.

De obicei, un obiect contribuie la dezvoltarea unui program, a unei aplicații alături de alte obiecte,acestea interacționând între ele prin intermediul mesajelor. Un astfel de mesaj este alcătuit din denumirea metodei și a obiectului ce conține metoda, dar și din diverse valori ai parametrilor metodei.

Clasa este entitatea principală a programării orientate-obiect.O clasă reprezintă modelul după care este construit obiectul. Clasa cuprinde denumirile și tipurile atributelor,dar și metodele ce descriu comportamentul obiectului. Odată ce o clasă este definită, se poate crea un obiect prin instanțierea clasei, obiectul creat fiind o instanță a modelului definit. Pentru a crea un obiect este necesară declarerea clasei după care a fost instanțiat.

În POO trebuie respectată ordinea pentru creare:

Crearea claselor

Declararea denumirii, a tipurilor și a domeniului de vizibilitate al variabilelor.

Declararea denumirii, a parametrilor de intrare / ieșire, a corpului și a domeniul de vizibilitate al metodelor.

Crearea obiectelor

Caracteristicile oferite de programarea orientată-obiect sunt:

Abstractizarea datelor: toate detaliile se află în compoziția obiectelor, obținându-se astfel o viziune de ansamblu ce urmărește interacțiunile dintre acestea

Siguranța și confidențialitatea datelor: obiectele pot fi folosite fară a știi structura lor, putând fi considerate ”black-boxes”

– Abilitatea de a refolosii codul și ușurința proiectării: majoritatea problemelor complexe pot fi separate în subprobleme simple ce pot fi manipulate prin obiecte, astfel încât atributele vor evidenția proprietățile obiectelor, iar metodele vor defini comportamentul lor

2.2.2 Proprietăți ale programării orientate – obiect

Principalele proprietăți ale programării orientate-obiect sunt:

Abstractizarea

Încapsularea

Modularizarea

Moștenirea

Polimorfismul

Abstractizarea reprezintă proprietatea prin care datele și metodele de prelucrare specifice unor anumite probleme pot fi grupate, prin identificarea tuturor aspectelor comune între diverse entități. Cu ajutorul acestei proprietăți pot fi identificare principalele caracteristici ale unui obiect care îl diferențiază de restul obiectelor.

Încapsularea reprezintă proprietatea obiectelor de a își ascunde o parte din atribute și metode. Accesul la acestea se realizează doar prin apelarea metodelor puse la dispoziție de obiectul respectiv, doar metodele proprii ale obiectului putându-le accesa direct. Astfel, fiecare tip de obiect dispune de o interfață pe care restul obiectelor o pot folosi pentru a putea afla modul în care pot interacționa cu obiectul respectiv.

Modularizarea reprezintă proprietatea prin care un program poate fi împărțit în module ce au legături cu alte module ale programului, dar sunt compilate separat. Un modul este folosit precum un container în care sunt declarate clasele și obiectele unui program.

Moștenirea reprezintă proprietatea unei clase de a putea fi obținută prin derivarea unei clase sau a mai multor clase definite anterior, cuprinzând astfel toate variabilele și metodele clasei părinte. O clasă derivată pe lângă faptul că are acces la variabilele și metodele clasei moștenite, le și poate modifica. Drept urmare, în POO corpul unor metode poate fi vid, urmând a fi modificat de clasele derivate. Conceptul de moștenire reprezintă un punct forte în programarea orietată-obiect, aspect dat de posibilitatea de a putea crea clase de la cele mai generale la cele mai specifice ce conduce la un control mai bun al programelor.

Polimorfismul reprezintă capacitatea unui obiect de a se comporta diferit la aceleași mesaje. Această proprietate nu trebuie confundată cu moștenirea. Spre deosebire de moștenire care permite redefinirea metodelor moștenite de la clasa părinte, păstrând însă semnătura metodei părinte, polimorfismul face referire la metodele ce au aceeași denumire, dar diferă prin parametrii de intrare, respectiv de ieșire. Un aspect esențial dat de polimorfism îl constituie faptul că o parte din cod poate fi reutilizat.

În cadrul polimorfismului întălnim:

Supraîncărcarea

Supradefinirea

Supraîncărcarea metodelor permite definirea mai multor metode ce au aceeași denumire, dar diferă prin numărul și tipul parametrilor de intrare, respectiv de ieșire. Supraîncărcarea este permisă în cazul în care unele dintre metode sunt definite în clasa părinte, iar altele sunt definire în clasele ce moștenesc clasa părinte. În cazul în care se realizează un apel al unei metode supraîncărcate, compilatorul va examina parametrii de intrare ai metodei si va alege metoda corespunzătoare.

Suprascrierea metodelor permite existența mai multor metode având aceeași denumire, tip și parametrii de intrare, respectiv de ieșire din clasa părinte în cadrul claselor derivate din aceasta. În cazul în care se realizează un apel al unei metode suprascrise, compilatorul va folosi definiția primei metode ce este găsită (va căuta începând cu partea de jos a ierarhiei de clase).

2.2.3 Niveluri de acces

Modificatorii de acces reprezintă cuvinte cheie ce gestionează accesul la membrii unei clase de către alte clase. Există patru tipuri de modificatori de acces: public, protected, private și implicit.

Fig 3. Nivelurile de acces date de modifcatori

Modificatorul de acces public limitează cel mai puțin accesul la membrii unei clase, întrucât face membrii clasei vizibili în orice altă clasă indiferent de pachetul în care clasa este definită. Acest modifcator permite accesarea membrilor în:

Clase din același pachet

Subclase ale clasei părinte din același pachet

Subclase ale clasei părinte din alte pachete

Clase din alte pachete

Un membru protected al unei clase poate fi accesat din exteriorul pachetului unde este definit doar de elementele clasei unde a fost definit. Modificatorul de acces protected prezintă un avantaj pentru clasele moștenite pentru care face ca atributele și metodele să poată fi accesate doar pentru subclase. Atributele protected sunt vizibile în:

Clase din același pachet

Subclase din același pachet

Subclase din alte pachete (doar prin moștenire)

Subclase din ale pachete

Modificatoul de acces private limitează cel mai mult accesul la membrii unei clase, blocând accesul din afara clasei părinte, accesul fiind permis din exterior doar prin metode definite în clasa părinte.

Modificatorul de acces implicit impune reguli între modificatorii public și private prin blocarea accesului la membrii din clase care sunt definiți în alt pachet decât clasa în care aceștia au fost definiți. Membrii declarați impliciți sunt accesibili din:

Aceeași clasă

Alte clase ce fac parte din cadrul aceluiași pachet

Alte subclase ce fac parte din cadrul aceluiași pachet

2.2.4 Crearea și distrugerea obiectelor

Crearea unui obiect presupune existența unui model după care este structurat, respectiv o clasă. Pentru crearea unui obiect trebuie urmăriții pașii: declarararea, instanțierea și inițializarea obiectului. Responsabil cu atribuirea unor valori variabilelor obiectului în momentul creerii este constructorul. Constructorul este folosit la crearea unui obiect. Un constructor este resposabil cu alocarea de resurse obiectului creat. Declarația sa arată precum cea a unei metode, însă nu are parametrii de ieșire. Pentru fiecare clasă definită, sistemul definește în mod automat un constructor implicit fără niciun parametru. O clasă poate conține mai mulți constructori, la crearea obiectului alegându-se contructorul ce corespunde parametrilor ceruți la instanțiere. O clasă poate bloca instanțierea prin definirea a cel puțin unui constructor având modificatorul de acces private.

Pentru distrugerea obiectelor create resursele alocate trebuie eliberate, acțiune îndeplinită de destructori. Distrugerea obiectelor este necesară pentru a împiedica apariția ”memory leak-urilor” din lipsă de resurse. Pentru a evita astfel de situații, este folosit garbage collector cu ajutorul căruia este eliberată memoria folosită de obiectele distruse. Un obiect este distrus, urmând ca spațiul de memorie folosit de acesta să fie eliberat de garbage collector, prin atribuirea obiectului cu null, pierzând astfel referința spre obiectului respectiv.

2.2.5 Java

Java este un limbaj de programare orientat-obiect. De la apariția sa și până în prezent, acestui limbaj i-au fost aduse din ce în ce mai multe îmbunătațiri, reușind să devină un mediu de dezvoltare pentru o varietate de aplicații. Principala deosebire față de alte limbaje de programare o constituie existența mașinii virtuale Java, care se crează odată cu instalarea Java.

Rolul mașinii virtuale Java (JVM) este de a traduce instrucțiunile unui byte code în intrcțiuni mașină, făcându-le să poată fi mutate și executate pe orice platformă, fapt ce face ca limbajul Java să fie unul independent de platformă. Fiind un limbaj compilat și interpretat, programele Java sunt compilate urmând ca apoi să fie interpretate de mediul de execuție Java în intrucțiuni-mașină specifice platformei.

Principala caracteristică a limbajului Java este orientarea obiect, beneficiind astfel de toate aspectele corespunzătoare programării orientate-obiect: clase, obiecte, încapsulare, moștenire, abstractizare, polimorfism, modularizare,modificatori de acces etc. Fiind un limbaj dinamic și robust, Java alocă resurse obiectelor create doar în momentul execuției, având un sistem automat de alocare / dealocare a memoriei.

2.3 Servicii REST

2.3.1 Noțiuni generale

Un serviciu REST este un stil arhitectural bazat pe standardele Web și protocoalele HTTP, în care totul reprezintă resurse. Este o arhitectură client – server bazată pe folosirea resurselor. O resursă este accesată prin intermediul metodelor puse la dispoziție de standardul HTTP. Fiecare resursă trebuie să suporte operațiile esențiale din HTTP și este identificată în mod unic printr-un ID. Serviciile REST permite ca resursele să poată avea diverse reprezentări precum: text, XML, JSON etc. Prin faptul că atât clientul, cât și serverul au responsabilități diferite fac ca arhitectura să fie una scalabilă. Clientul REST cere o anumită resursă într-o anumită reprezentare prin protocolul HTTP, putând folosi tehnici de caching pentru creșterea performanței și a scalabilitații. Partea de server poate cuprinde numeroase nivele, făra a afecta clienții în cazul schimbării acestora.

2.3.2 Metode HTTP

Protocolul HTTP reprezintă una dintre metodele cele mai folosite pentru preluarea informațiilor din Internet.

Metodele folosite pentru accesarea serviciilor REST sunt:

GET: metodă ce presupune doar citirea resurselor fără a modifica compoziția lor

POST: metodă folosită pentru a crea o nouă resursă sau doar pentru a modifica o resursă deja existentă

PUT: metodă folosită petru a crea o nouă resursă

DELETE: metodă folosită pentru a șterge o resursă deja existentă

2.3.3 Java și Servicii REST Web

JAX-RS (Java API for Restful Web Services) reprezintă suportul pentru serviciile REST în Java. Acesta se bazează pe anotări pentru intecțiunea cu resursele puse la dispoziție de serviciile REST. Jersey este suportul open-source oferit de JAX-RS. Framework-ul Jersey dispune de propriul său API ce extinde toolkit-ul JAX-RS cu proprietăți și utilități adiționale venite în sprijinul dezvoltării serviciilor REST. Astfel, implementarea Jerjey dispune de o librărie pentru a putea crea servicii REST Web într-un servlet container Java. Pe partea de server, Jersey oferă o implementare a unui servlet ce scanează clasele pentru a putea identifica resursele REST necesare. De asemenea, Jersey oferă și o librărie pentru partea de client pentru a putea comunica cu serviciile REST Web. URL-ul principal al acestui servlet este:

http://domeniu:port/nume_de_afisat/url-pattern/calea_din_clasa_rest

Acest servlet analizează cererea HTTP primită și selectează, pe baza anotărilor existente, clasa corectă și metoda corespunzătoare pentru a putea răspunde cererii.

2.3.4 Anotări JAX-RS

Servletul Jersey trebuie înregistrat ca fiind distribuitorul de servicii REST. Pentru a îl seta, trebuie modificat fișierul web.xml din cadrul proiectului.

În cadrul aplicației portal pentru stundenți definirea acestuia este realizată astfel:

<servlet>

<servlet-name>jersey-serlvet</servlet-name>

<servlet-class>

com.sun.jersey.spi.container.servlet.ServletContainer

</servlet-class>

<init-param>

<param-name>jersey.config.provider.packages</param-name>

<param-value>wwwer</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>jersey-serlvet</servlet-name>

<url-pattern>/users/*</url-pattern>

</servlet-mapping>

Parametrul ”jersey.config.provider.packages” definește în ce pachet se va uita Jersey pentru clasele serviciilor web și trebuie să mapeze către clasele ce sunt folosite drept resursele ce trebuie folosite în cadrul aplicației. Pattern-ul URL definește partea din URL principal către care va fi mapată aplicația.

2.4 AngularJS

2.4.1 Model View Controller (MVC)

MVC este un design pattern software folosit în crearea aplicațiilor web ce are la bază trei părți:

Model-ul care se ocupă cu reținerea datelor

View-ul responsabil cu afișarea datelor utilzatorului

Controller-ul prin intermediul căruia Modelul interacționează cu View-ul

MVC-ul este un concept ce are la bază separarea părții corespunzătoare utlizatorului de partea principală, de calcul a aplicației.

AngularJS folosește pattern-ul MVC:

Modelul este reprezentat de datele provenite din serviciie REST

View-ul este reprezentat de HTML și directivele folosite pentru manipularea DOM-ului

Controller-ul cuprinde interogările către serviciile REST

Controller-ul primește toate cererile pentru aplicație, contribuind apoi împreună cu Model-ul la pregătirea datelor necesare View-ului. Imediat ce View-ul obține datele necesare, folosește datele venite de la Controller pentru a putea genera răspunsul.

Fig 4. Funcționare AngularJS pe baza MVC

2.4.2 Noțiuni teoretice

AngularJS este un framework client JavaScript, o librărie scrisă în JavaScript ce poate fi adăugată unei pagini HTML folosing tag-ul <script>. AngularJS este ușor de înțeles, este bine documentat și gândit pentru folosirea serviciilor REST. Data binding-ul și injectarea dependințelor din Angular reduce cu mult codul ce trebuie scris. Câteva din caracteristicile esențiale ce definesc Angular-ul sunt:

Suportă data binding

Oferă suport pentru repetarea structurilor din DOM

Oferă suport pentru formulare și validarea lor

Poate controla vizibilitatea anumitor fragmente din DOM

Poate adăuga noi acțiuni asupra elementelor din DOM

Poate grupa elemente HTML în componente ce pot fi reutilizate, introduce conceptul de directivă

Scopul este o sursă de stocare de informații ce permite folosirea datelor de controlere, directive. Scopurile pot ”urmări” expresii și pot genera evenimente, ducând la modificarea în timp real al obiectelor ce le folosesc. Scopul este partea principală ce face legătura dintre controller și view. Fiecare aplicație are doar un singur root scope, dar poate avea o mulțime de copii – scope. O aplicație poate avea o mulțime de scope-uri, ca o consecință a faptului că unele directive pot crea noi copii – scope. În momentul în care noi scope-uri sunt create, acestea sunt adăugate ca și copii scope-ului părinte.

O directivă reprezintă un nou tag ce extinde HTML, putând fi considerat un atribut sau un tag definit propriu. Toate directivele din Angular încep cu cuvântul cheie ”ng” (ng-bind, ng-model, ng-click, etc).

Modulele pot fi interpretate precum diverse părți independente ale uni aplicații. Un modul este astfel însăși aplicația părinte declarată în ng-app.

Data binding-ul ajută la sincronizarea datelor dintre View și Controller. De cele mai multe ori, Model-ul infulențează datele View-ului implicând ca datele să fie trimise de la Model la View. În Angular, datele dintre View și Model sunt sincronizate datorită existenței conceptului de ”two-way binding” ce presupune că orice modificare a Modelului va afecta și View-ul și vice-versa.

2.5 Structura aplicației

Aplicația de față este alcătuită din două componente:

Componenta client, GUI, care prezintă interacțiunea utilizatorului cu aplicația

Componenta server, de servicii REST, care permite stocarea și modificarea datelor necesare componentei client

2.5.1 Componenta client

Componenta responsabilă pentru interacțiunea cu utilizatorul folosește framework-ul MVC AngularJS. Aplicația este structurată în pachete diferite corespunzătoare fiecărui tip de resursă necesară. Separarea view-urilor și a controller-elor este necesară pentru diferitele secțiuni ale paginilor web având serviciile necesare injectate în controllere. Fiecărei pagini îi corespunde un template, care descrie modul de afișare a datelor, un controller ce trimite cereri de preluare a datelor către servicii, preia datele furnizate de servicii și modifică datele într-o formă necesară template-ului și un serviciu responsabil cu legătura către serviciile REST. Așa cum se poate observa în figura de mai jos, controller-ele și serviciile sunt definite în folderele controllers, respectiv services din cadrul folderului scripts, în timp ce template-urile sunt definie în folderul templates.

Fig 5. Structura folderelor în componenta client

2.5.2 Componenta server

Componenta reprezentând partea de servicii REST este o componentă ce expune REST API care permite stocarea de infomații privind entitățile necesare aplicației (stundenți, materii, știri, topice etc) dar și interacțiunea cu acestea.

Această componentă este compusă din nivele ce facilitează stocarea și interacțiunea cu datele, toate împreuna menținând mentenanța aplicației.

Fig 6. Structura aplicației

Nivelul bazei de date îl constituie baza de date MongoDB care conține toate entitățile definite în interiorul acesteia. Aceste entități vor fi salvate și vor fi modificate corespunzător datelor provenite din partea de client, respectiv din GUI.

Fig 7. Entitățile folosite în aplicație și dependințele lor

Nivelul de persistență reprezintă baza pentru nivelul bazei de date. Acesta descrie modul în care entitățile vor fi create și caracteristicile fiecăreia, fiind strâns legat de tehnologiile folosite. Astfel, în cazul în care nivelul bazei de date trebuie schimbat (înlocuit cu altă bază de date), nivelul de persistență va fi singurul afectat, fără a afecta restul nivelelor.

Nivelul logic de control va râmăne nemodificat în cazul modificărilor făcute la nivelul tehnologiilor folosite. Fiind un client al nivelului de persistență, acesta folosește metodele puse la dispoziție de nivelul de pesistență. Nivelul logic de control realizează legătura dintre partea de client și cea de server, de servicii REST, pe baza metodelor definite în nivelul de persistență. Pentru maparea funcțiilor ce trebuie folosite pentru a răspunde cererilor http venite din partea de client, se folosesc anotările JAX-RS.

De exemplu, o cerere venită de pe partea client pentru salvarea unui student

function saveStudent(data) {

var url = 'http://localhost:8080/StudentPortal/users/newUser';

return $http.post(url, data);

}

va fi mapată pe partea de server astfel:

@POST

@Consumes(MediaType.APPLICATION_JSON)

public void saveStudent(Student student) {

studentService.saveStudentToDB(student);

}

Nivelul REST API reprezintă ”nivelul de vârf” al componentei server, expunând serviciile care vor fi utilizate de nivelul de servicii corespunzător componentei client.

Fig 8. Organizarea folderelelor în componenta server

3. Prezentarea aplicației

Entuziasmul fiecărui student de a obține cu ușurință sursele informării de care are nevoie în activitățile pe care le desfășoară în cadrul facultății, într-un mod rapid și simplu, a condus la crearea unei aplicații destinate acestora, respectiv un portal pentru studenți. Aplicația este alcătuită din doua componente:

Componenta client, GUI, care prezintă interacțiunea utilizatorului cu aplicația

Componenta server, de servicii REST, care permite stocarea și modificarea datelor necesare componentei client

Interacțiunea cu utilizatorul se realizează prin componenta GUI care comunică pentru preluarea sau salvarea datelor în baza de date prin componenta server.

Fig 9. Schema bloc a aplicației

Principalele funcționalități ale portalului sunt:

încărcarea, descărcarea și vizualizarea unor fișiere

forumuri

posibilitatea vizualizării situației școlare

posibilitatea vizualizării și adăugării de noutăți

posibilitatea gestionării utilizatorilor

posibilitatea vizualzării și descărcării orarelor

Interfața portalului oferă utilizatorului acces rapid și ușor la toate secțiunile.

Partea de sus a aplicației este formată dintr-un ”navbar-default” . Până când utilizatorul nu se autentifică header-ul aplicației va avea atașate butoanele ”Sign in” și ”Login”. Odată ce un utilizator se autentifică, meniul header-ului va cuprinde următoarele secțiuni:

Courses – oferă suport pentru cursuri / laboratoare

Homework – curpinde un forum destinat întrebărilor legate de teme

Exams – cuprinde un forum destinat întrebărilor legate de examene și suport pentru încărcarea subiectelor de examen

Timetables – oferă studenților posibilitatea de a vizualiza / descărca orarele

Catalogue – oferă studenților posibilitatea de a își vedea situația școlară

New – conține știri destinate studenților

3.1 Tipuri de utilizatori

Aplicația are la bază două tipuri de utilizatori: admin și student.

Spre deosebire de utilizatorul student, adminul poate avea mai multe atribuții. În funcție de pagina pe care se află, utilizatorul poate avea diverse activități. Astfel, dacă utilizatorul admin se află pe pagina:

Courses

Poate adăuga o nouă materie în funcție de anul universitar selectat

Poate încarca materiale pentru cursuri / laboratore în funcție de materia și anul selectat

Poate șterge anumite materii adăugate

Poate șterge anumite fișiere încarcate

Homework

Poate șterge anumite întrebări de pe forumul destinat temelor

Exams

Poate șterge din documentele adăugate pentru subiectele de examen

Poate șterge din întrebările de pe forumul destinat examenelor

Catalogue

Poate adăuga o notă, specifică unei materii introduce, unui student pe baza username-ului

Poate edita o notă a unui student

Poate șterge o notă a unui student

[anonimizat] adăuga o știre

Poate edita o știre existentă

Poate șterge o știre

De asemenea, admin-ul poate șterge utilizatori și poate schimba rolul unui utilizator student în admin. Implicit există un utilizator admin, ce nu poate fi șters.

Utilizatorii având rolul student, în funcție de pagina pe care se află, pot avea următoarele activități:

Courses

Poate vizualiza și descărca materiale pentru cursuri / laboratoare în funcție de materia selectată

Poate filtra materialele existente în funcție de materie, an universitar, tipul de material dorit (curs / laborator) și tipul atașărilor (doc, pdf, txt, ppt)

Homework

Poate adăuga întrebări pe forum

Poate răspunde la diverse întrebări deja existente

Poate vizualiza și filtra întrebările în funcție de materia / anul dorit

Exams

Poate adăuga întrebări pe forum

Poate răspunde la întrebări deja existente

Poate vizualiza și filtra întrebările în funcție de material / anul dorit

Poate încărca subiecte de examen pentru o anumită materie

Poate filtra subiectele de examen deja existente

Timetables

Poate descărca sau vizualiza orarele în funcție de anul de studiu dorit

Catalogue

Poate vizualiza situația sa școlară

News

Poate vizualiza ultimile știri

Fiecare student își poate edita contul, putând modifica:

Username-ul

Parola

Numele

Prenumele

3.2 Înregistrare și autentificare

În cazul în care un utilizator nu are un cont cu care să se poată autentifica, portalul oferă posibilitatea de a crea un nou cont. Această utilitate este dată de butonul aflat în partea de sus ”Sign up”. Odată accesat, acesta va deschide un modal ce presupune introducerea următoarelor date: username, firstname, lastname și parolă. Pentru ca înregistrarea să fie validă, username-ul introdus trebuie să fie unic, iar parola aleasă să coincidă cu parola de confirmare. În caz contrar, un mesaj de eroare va fi afișat, înregistrarea noului utilizator eșuând.

Dacă datele introduse sunt valide, un nou utilizator având rolul student va fi creat. Acesta va fi salvat în baza de date și va corespunde entității Student.

Entitatea Student este caracterizată de următoarele atribute:

Firstname: prenumele utilizatorului

Lastname: numele utilizatorului

Username: username-ul cu care utilzatorul se va înregistra în mod unic

HashPassword: hash-ul parolei utilizatorului după care se face validarea

Salt: saltul concatenate parolei pentru a aplica funcția de hash

Parolei introdusă de utilizator îi este concatenate un salt, iar ”noua” parolă obținută este trecută printr-o funcție de criptare hash . Astfel, în baza de date va fi salvat hash-ul parolei obținut împreună cu salt-ul ce a fost adăugat.

Imediat ce noul utilizator va fi salvat în baza de date, formularul de înregistrare nu va mai fi disponibil, redirecționând utilizatorul către pagina de News.

Pentru utilizatorii ce au deja cont, se pot autentifica folosind butonul ”Login” ce va deschide formularul de autentificare.

Utilizatorul va introduce username-ul și parola, acestea urmând să fie verificare pentru validare. Validarea este realizată prin căutarea în baza de date, pe baza username-ului, a utilizatorului ce dorește să se autentifice. Parolei introduse i se va concatena saltul din baza de date, iar noua parolă obținută este trecută prin funcția de hash. Odată găsit utilizatorul în baza de date se va verifica dacă și hash-ul obținut coincide cu cel deja existent. Dacă ambele validări se încheie cu success, utilizatorul va fi autentificat și redirecționat către pagina News. În caz contrar, un mesaj de eroare va fi afișat.

Acțiunea de ieșire din aplicație se realizează prin apăsarea butonului din partea dreaptă a meniului ”Logout”. Odată accest, utilizatorul nu mai este logat, fiind redirecționat către pagina principal principală a portalului de unde se poate autentifica din nou.

3.3 Secțiunea News

Pagina News, către care este redirecționat utilizatorul imediat ce autentificarea a reușit, conține ultimele știri afișate în ordine descrescătoare, de la cele mai recente la cele mai vechi , adăugate de utilizatorii admin.

Utilizatorii având rolul student pot doar vizualiza aceste știri, spre deosebire de utilzatorii având rolul admin care pot adăuga, edita sau șterge o știre.

Pentru a adăuga o știre, utlizatorul admin trebuie să acceseze butonul ”Add news”, să aleagă tipul știrii și să completeze câmpul destinat subiectului. O știre poate fi de două tipuri: implicit sau alertă. Tipul alertă are prioritate în fața tipului implicit, știrile de acest tip fiind afișate primele.

Apăsând butonul ”Save”, noua știre va fi salvată în baza de date și va corespunde entității News. Entitatea News este caracterizată de atributele de mai jos :

Identifier: id-ul pe baza căruia o știre este identificată țn mod unic. Este generat pe baza tipului (type) și a momentului când a fost create (created)

Type: tipul știrei. Poate fi implicit sau alert

Description: subiectul știrei

Created: data la care a fost create știrea

O știre poate fi ștearsă . Înainte de această operație, un mesaj de confirmare este necesar. Dacă răspunsul este pozitiv știrea va fi ștearsă astfel: pe baza identificatorului este căutată în baza de date, iar în momentul găsirii aceasta este ștearsă. Dacă răspunsul este negativ, știrea va fi afișată în continuare.

Pentru editarea știrei, este necesă doar completarea cămpului specific subiectului. Prin apăsarea butonului ”Save” noile modificări sunt salvate în baza de date pe baza identificatorului.

3.4 Secțiunea Catalogue

Navigând spre secțiunea Catalogue utilizatorul student își poate vedea situația școlară. Un tabel cu notele obținute de el pe parcurs la diferite materii poate fi vizualizat.

Spre deosebire de utilizatorul având rolul student, admin-ul poate adăuga note unui student. Butonul ”Add note” deschide un modal în care trebuie completate următoarele câmpuri: anul universitar, materia pentru care se adaugă nota, username-ul studentului căruia i se adaugă nota și nota.

În urma salvării se adaugă o nouă înregistrare privind situația studentului în baza de date ce va corespunde entității StudentSituation. Entitatea StudentSituation este caracterizată de atributele:

Identifier: id-ul pe baza căruia este identificat în mod unic în baza de date

Username: o referință către studentul căruia i se adaugă notele

Note: listă de identificatori ai entității Note

Entitatea Note este structurată astfel:

Identifier: id-ul pe baza căruia este identificat în mod unic în baza de date

Area: material pentru care se adaugă nota

Note: nota corespunzătoare materiei

3.5 Secțiunea Timetables

Această secțiune oferă posibilitatea fiecărui utilizator de a descărca sau de a vizualiza orare în funcție de anul de studiu și seria din care face parte.

3.6 Secțiunea Homework

Fiecare student dorește să i se poată răspundă la neclaritățile pe care le are referitor la cerințele temelor, dificultăților pe care le întâmpină în implementarea cerințelor etc. Portalul le oferă această posibilitate prin forumul destinat discuțiilor pe baza temelor. Pagina Homework se deschide cu vizualizarea celor mai recente întrebări puse. Întrebările pot fi filtrate pe baza materiei. Fiecare întrebare este afișată sub forma: titlul întrebării, numele studentului ce a adresat întrebarea, data când a fost creată, materia de care aparține și numărul de răspunsuri ce au fost date.

Studenții pot posta noi întrebări prin accesarea butonului ”Add a question” ce deschide un modal ce conține câmpurile care trebuie completate: titlu – reprezintă o scurtă descriere a întrebării, material – reprezintă material în cadrul căreia se dorește a fi pusă întrebarea, și subiectul – reprezintă conținutul întrebării.

Întrebarea este salvată în baza de date și va corespunde entității Topic.

Entitatea Topic este caracterizată de atributele:

Identifier: id-ul pe baza căruia este identificat în mod unic în baza de date

studentUsername: username-ul studentului care postează întrebarea

topicTitle: titlul întrebării

subject: conținutul întrebării

topicParent: ”părintele” întrebării. Dacă este ”Root” este întrebare postată, altfel este un răspuns la întrebare

idAreaSubject: identifier-ul materiei în cadrul căreia este postată întrebarea

nbOfAnswers: numărul de răspunsuri date

created: data când a fost postată întrebarea

Titlul întrebării este de tipul tag-ului <a> ce conține un link către pagina ce conține întrebarea respectivă și răspunsurile aferente. Pe pagina destinată întrebării, studenți pot adăuga răspunsuri, imediat sub întrebare fiind mereu așezate cele mai recente răspunsuri. La fiecare răspuns adăugat, numărul de răspunsuri pentru întrebarea postată este incrementat.

Pentru fiecare întrebare sau răspuns este afișat numele celui ce a postat, data creării și subiectul.

3.7 Secțiunea Exams

Secțiunea exams își propune să centralizeze subiectele de la examene pe parcursul sesiunilor pentru a le fi de folos studenților. Astfel, aceștia se pot pregăti pentru examene mult mai bine, folosind modelele puse la dispoziție de ceilalți stundeți care le-au susținut deja. De asemenea, oferă posbilitatea stundeților de își clarifica nelămuririle pe care le au cu privire la anumite subiecte ce au fost date și postate. Pagina este împățită în două secțiuni: una pentru forum și alta pentru încărcarea sau vizualizarea subiectelor date.

Întrebările postate sunt afișate în ordine descrescătoare a adăugării lor, de la cele mai recente la cele mai vechi. Utilizatorul are posibilitatea de a le filtra în funcție de materie.

Pentru a adăuga o nouă întrebare, se va apăsa butonul ”Add topic” ce va deschide un modal cu câmpurile ce trebuie completate: titlul – reprezintă titlul întrebării, material – reprezintă materia pentru care este adresată întrebarea și subiectul – reprezintă continținutul întrebării. Prin apăsarea butonului ”Save” o nouă întrebare va fi postată și salvată în baza de date sub forma entității prezentate mai sus, Topic . Utilizatorul cu rolul ”admin” este singurul care poate șterge întrebările din această secțiune. Dacă utilizatorul dorește să vadă toate întrebările sau să le filtreze trebuie să acceseze butonul ”View all”. Filtrarea întrebărilor se realizeză pe baza materiei.

Subiectele de la examene încărcate sunt afișate și ele în ordinea descrescătoare a adăugării lor, de la cele mai recente la cele mai puțin recente. Acestea pot fi de tipul: pdf, doc sau txt. Fiecare utilizator, indifferent de rolul său ”admin” sau ”student”, poate încărca noi subiecte prin accesarea butonului ”Upload File”. Se va deschide un modal destinat încărcării fișierelor. Va trebui ales anul universitar. Imediat ce anul este ales, vor fi afișate toate materile corespunzătoare acestuia. Materiile nu vor fi disponibile, doar după alegerea anului universitar. Dacă anul universitar nu este selectat, un mesaj de eroare corepunzător va fi afișat. Pentru încărcarea fișierului și salvarea sa în baza de date, se folosește un formular în care se selectează anul universitar, material și calea către fișierul ce trebuie încărcat. Fișierul selectat este salvat sub forma entității Attachment.

Entitatea Attachment este caracterizată de atributele:

path: calea către locația fișierului

filename: numele fișierului

type: tipul fișierului

idAreaSubject: id-ul materiei pentru care este încărcat fișierul

sourceType: tipul sursei pentru care este încărcat fișierul. Poate fi cursuri / examene

created: data cănd a fost salvat fișierul

În cazul în care utilizatorul dorește să vizualizeze anumite subiecte încărcate, trebuie să navigheze către pagina ”view all”. Astfel, poate selecta vizualizarea sau descărcarea unei materii dorite. Filtrarea se poate realiza pe baza materiei, sau pe baza tipului de fișier ce se dorește: pdf, doc sau txt.

3.8 Secțiunea Courses

Un avantaj important oferit de portal studenților îl constituie faptul că aceștia pot accesa într-un mod rapid și ușor materiale necesare desfășurării activităților impuse de facultate.

Astfel, secțiunea Courses pune la dispoziție cursuri și materiale pentru laboratoare.

Utilizatorii pot filtra materialele în funcție de:

Anul universitar

Materie

Tipul de material: pentru cursuri / laboratoare

Tipul fișierelor: doc, pdf, txt sau ppt

Utilizatorul admin este singurul care poate adăuga sau șterge fișiere în cadrul acestei secțiuni.

Un fișier este încărcat pe baza materiei și a anului universitar din care face parte. Pentru a adăuga o nouă materie, se folosește modalul ”Add new area subject”.

În cadrul modalului de adăugare a unei noi materii trebuie selectat anul universitar și numele materiei ce trebuie creată. În cazul în care unul din câmpuri nu este selectat, un mesaj de eroare va fi afișat. Prin salvare, se trimit datele către baza de date unde va fi create o nouă intrare pentru entitatea AreaSubject.

Entitatea AreaSubject este descrisă de atributele:

Identifier: identifier-ul pe baza căruia o materie este identificată în mod unic

yearOfAreaSubject: anul universitar în cadrul căruia se află material

name: numele materiei

Fiecare fișier încărcat va apărea într-un mod corespunzător anului universitar din care fac parte. Astfel, pentru fiecare an în partea dreaptă va aparea un span de culori diferite. Tile-urile corespunzătoare fișierelor vor fi compuse din span-ul corespunzător anului universitar, numele materiei pentru care a fost încărcat fișierul, numele fișierului, tipul și data creării.

Pentru încărcarea materialelor pentru cursuri / laboratoare și salvarea lor în baza de date, se folosește un formular Pentru încărcarea fișierului și salvarea sa în baza de date, se folosește un formular în care se selectează anul universitar, material și calea către fișierul ce trebuie încărcat. Fișierul selectat este salvat sub forma entității Attachment.

###directiva file model######

#### pentru alerte directive ###

#######3 tipul de ecription type din File Service####

4. Instalarea aplicației

Portalul pentru studenți vine in ajutorul studenților punându-le la dispoziție materialele necesare pentru cursuri, laboratoare sau teme, posibilittea de a vedea situția școlară, dar și forumuri unde pot discuta pe baza unor diverse topice. Aplicația este alcătuită din două componente:

Componenta de servicii REST care permite stocarea datelor privind studenții, materiile si topicele pe baza cărora se discută

Componenta GUI care prezinta interacțiunea utilizatorului cu aplicația

Instalarea aplicației presupune instalarea serverelor Tomcat, Node.js și a bazei de date MondoDB.

Pentru a instala Bower trebuie executată comanda:

npm install –g bower

Portalul pentru studenți se bazează pe câteva dependințe de Node.js și AngularJS care trebuie descărcate înainte ca aplicația să fie pornită. Următoarele comenzi trebuie executate în cadrul directorului unde este instalată aplicația:

npm install

Această comandă va descărca și va instala toate dependințele Node.js necesare

bower install

Această comandă va descărca și va instala toate dependințele AngularJS necesare

Pentru a putea porni si interacționa cu aplicația trebuie parcurși următorii pași:

se pornește serverul MongoDB indicându-i calea către directorul unde trebuie salvate datele

se pornește serverul Tomcat pentru a putea accesa serviciile REST

se pornește serverul local pe care va rula aplicația executând comanda:

grunt server

După executarea acestei comenzi, se va afișa portul pe care aplicația va rula.Portalul pentru studenți poate fi accesat prin folosirea IP-ului mașinii locale sau localhost urmat de portul menționat

Similar Posts