Snpe razvojni sistem

Mi smo kreirali vlastiti razvojni sistem za razvoj aplikacija orijentisanih pristupu i manipulaciji bazama podataka.

Razvojni sistem je sada kompatibilan sa eclipse rcp.
Pogledajte DbTable razvojni sistem demo (potreban flash, 20 mb)
ili manji demo koji demonstrira startanje aplikacije sa splash screen DbTable - startanje (flash, 600k)
i jos jedan koji prikazuje neke trikove sa JXTable klasom iz swingx paketa JXTable i DbTable (flash, 2 mb)

Zadnji razvoj jos nije lokalizovan na nas jezik.

Demonstracije su uradjene na Ubuntu linuxu koristenjem Wink-a.

Osnovne karakteristike sistema su :

Osnovni izgled aplikacije je kao na slici (podaci nisu stvarni nego su uneseni proizvoljno).Za normalnu veličinu slike kliknite na nju :

Snpe razvojni sistem - slika 1

Slika 1 - uobičajeni ekran aplikacije

Snpe razvojni sistem - slika 1

Slika 2 - lokalizacija na engleski

Snpe razvojni sistem - slika 1

Slika 3 - izgled ekrana na MS Windows XP

Na slici se vidi osnovni ekran aplikacije.Na levoj strani je meni za aplikaciju, koji mi nećemo ovde detaljno opisivati. Želimo samo ukazati na mogućnost definisanja menija za različite jezike (kao i ostalih delova aplikacije).Meni se može pretraživati po nekom kriteriju u okviru različitih jezika.Slika 2 predstavlja isti ekran lokalizovan na engleski jezik. Slika 3 prikazuje ekran na MS Windows operativnom sistemu.Ekran prikazuje lokalizaciju menija.Lokalizacija menija ne koristi standardni način lokalizacije za Javu, jer mi želimo da imamo mogućnost pretraživanja menija i zato su lokalizacijske poruke za menije smeštene u bazu.

Za definiciju ovakvog ekrana potrebni su sledeći koraci :

Sada imamo spreman ekran/izveštaj koji ima sledeće opcije :

  1. Osnovne operacije

    • Novi red - kreira novi red za unos
    • Mod pretraživanja - prelazi u mod za pretraživanje (biće opisan kasnije)
    • izlaz iz moda za pretraživanje
    • čisti ekran
    • ponavlja upit - regneriše stanje ako je promenjeno od zadnjeg upita sa nekim drugim
    • sprema izmenjene podatke u bazu
    • poništava trenutno izmenjene podatke koji nisu sačuvani u bazu (rollback)
    • briše trenutno izabrani red
    • navigacija : korisnik može da ide na sledeći red, sledeću stranu (veličinu strane definiše programer i podrazumeva se 10, tj. ide 10 redova unapred), zadnji red, prethodni red,prethodna strana i prvi red.U modu pretraživanaj korisnik može da pronalazi bilo koji red ili da se kreće kako želi i da se pozicionira na dati red
    • Pozivanje ekrana za detalje/stavke - koristi se kod ekrana tipa master/detail
    • grupiranje/analitika.Kao što ćemo videti kasnije, krajnji korisnik može da kreira moćne analitičke izveštaje (grupira kolone) - kada to uradi poziva ovu opciju da prikaže tabelu grupiranja
    • kreiranje, pregled i štampa izveštaja u raznim formatima
    • Podešavanje karakteristika sistema
    • Opcije koje nisu dostupne u nekom modu su onemogućene, tako da je mogućnost greške operatera minimalna.Na primer opcija za spremanje u bazu je onemogućena ako korisnik nije napravio nikakvu izmenu ili ako nije sva validacija uredno urađena.

  2. Unos podataka
  3. Snpe razvojni sistem omogućava moćan sistem za unos, validaciju i pomoć kod unosa podataka.Na slici je ekran za unos novog reda sa validacijom

    Pogled/view 'Problemi' prikazuje greške.U ovom slučaju su greške tipa 'polje mora biti uneseno' ili problemi sa primarnim i stranim ključevima koje je sistem automatski našao iz dizajna baze.

    Sistem će odmah obavestiti korisnika ako unese nalog koji već postoji ili recimo tip naloga koji ne postoji (strani ključ) i neće dozvoliti spremanje takvog naloga (neće čak ni ponuditi mogućnost - opcija za spremanje je onemogućena)

    Korisnik dobija pomoć kod unosa.Naprimer, kada unosi 'tip naloga' korisnik ne zna šifre tipova, ali zna opis tipa.Jednostavno pređe na polje opis.Ukuca šta zna i pritisne CTRL BLANK (CTRL BLANK nije obavezno ako je korisnik izabrao da sistem daje pomoć kod liste vrednosti dok kuca; sistem će automatski da mu daje listu mogućnosti - izbor 'pretražuj dok kucam' je objašnjen u sledećem pasusu - pretraživanje).Ako ne zna ništa može ukucati CTRL BLANK u prazna polja (samo je bitno da je pozicioniran ili na tip ili naziv tipa).Dobiće sve stavke, koje može pregledati u tabeli, sortirati i prebaciti na ekran.Slika

    Korisnik je ukucao P, sistem mu je dao sve tipove naloga koji počinju sa P (može se izabrati da li se razlikuju velika i mala slova) Korisnik sada može da ukuca šifru do kraja ili klikne na kolonu u tabeli desnim mišem i 'prenese listu vrednosti' na ekran za unos.Mi smo preneli stavku sa šifrom 08.Ekran je sada potpuno validan i opcija za spremanje je omogućena.

    Pomoć je potpuno ista kod izmene reda.Kod izmene treba napomenuti samo da sistem automatski zabranjuje izmenu primarnog ključa (hibernate idenitifikatora).Za nas je to željeno ponašanje, jer izmena primarnog ključa može napraviti haos u integritetu podataka.Naš sistem to automatski zabranjuje, ali vi možete proširiti osnovnu klasu za ovo ponašanje i izmeniti ga.

    Primetimo ovde da smo mi vršili pretragu lista vrednosti prema imenu tipa naloga.Kolona 'naziv tipa' uopšte se ne nalazi u tabeli naloga (dobar relacioni dizajn zahteva da ovo bude u sasvim drugoj tabeli tipova), ali smo mi izvršili pretragu po njoj.Moguće je ubaciti bilo koju kolonu iz tabele koja ima strani ključ (u stvari samo je tako definisana u fajlu za mapiranje za hibernate - ne mora stvarno imati strani ključ) i vršiti sve operacije koje smo mi definisali (pretraživanje, sortiranje, pa čak i unos direktno u polja iz druge tabele).Naprimer, ako imate šifru radnika negde na nekom ekranu (recimo radnika koji kreira nalog kod naloga za knjiženje) vi možete samo dodati na ekran ime, prezime i šta god hoćete od osnovnih podataka o radniku i sve operacije radite sa ovim kolonama kao da su sve definisane u tabeli naloga (a ne bi trebale da su u njoj, ako je baza dobro dizajnirana).Ili čak još više : kolona 'Saldo' čak i ne postoji u bazi.Ona je samo izvedeno polje u ORM mapiranju (jednostavna formula : saldo = duguje - potražuje), ali je moguće pretraživanje, sortiranje, analitičke funkcije, izveštaji i po ovoj koloni.Moguće su praktično sve operacije i za ovu kolonu osim unosa.Mi ne možemo iz salda dobiti dugovno i potražno stanje, ali ako bi ovo bilo moguće (za neku drugu izvedenu kolonu možda jeste) onda je i unos moguć.Ovo nismo našli ni u jednom postojećem sistemu za razvoj sa bazama podataka (kao uostalom ni mnoge druge osobine ovog sistema koje ćemo objasniti u nastavku).Ova osobina je postignuta zahvaljujući fenomenalnim mogućnostima hibernate ORM alata.

    Liste vrednosti je bilo moguće napraviti kao ComboBox (specijalni vizuelni element), ali mi nismo izabrali ovu mogućnost, jer bi kompletnu listu morali puniti iz baze u memoriju, a lista može da bude velika (recimo lista kupaca u fakturi može da se kreće u više hiljada) i mnogo takvih lista u memoriji bi zagušilo sistem.Međutim, kao i za ostale funkcije, moguće je vrlo lako izmeniti ovo ponašanje.

    Sistem automatski vrši mnoge vrste validacija - zahtevana polja, maksimalna dužina polja iz baze, strane ključeve, uredan tip promenljivih (datum,broj itd), a postoji i veoma bogat skup gotovih klasa/metoda za definisanje validacije od strane programera.Jednom definisana validacija za neko polje neke klase/tabele koristi se u celom sistemu.

  4. Pretraživanje
  5. Kada izaberete opciju za pretraživanje prelazite u poseban mod sistema.Podaci koji se unose koriste se tada za pretragu i ne spremaju se u bazu.U ovom modu ne postoje validacije.Pre svega potrebno je definisati karakteristike (zadnja opcija u paleti koju smo naveli prethodno). Postoje sledeće karakteristike :

    Možete definisati da li će sistem pretraživati dok kucate.Ovo je zgodna opcija, ali može biti naporna kada je upit sporiji i tada se može onemogućiti.Napominjemo da korisnik bira pretragu, ne programer i korisnik može zadati sporiji upit, pogotovu ako se uzme u obzir da može zadavati uslov OR i razne uslove sortiranja.Kada je onemogućena upit se izvršava ili pozivanjem opcije ili sa tastature sa CTRL SPACE.Ista stvar je i kod pretraživanja liste vrednosti.Liste vrednosti su, naprimer, kontni plan dok korisnik kuca konto u stavke naloga.Znači može da dobije listu i da iz liste prenese stavku koju želi.Ovo je objašnjeno u prethodnom primeru sa nalozima i tipovima naloga.

    Opcija za velika i mala slova govori da li će sistem da ih razlikuje u pretrazi (naprimer je li Petrović, PETROVIĆ ili PeTrOvIć isto ili ne)

    Sledeći tip karakteristika je za pretraživanje po uslovu LIKE (slično).Podrazumevano ponašanje je da se slovne promenljive (varchar, char,text u bazi ili String objekti u Javi) pretražuju po uslovu LIKE.Naprimer, ako korisnik traži nekog radnika sa prezimenom Petrović kada ukuca 'Pet' sistem će tražiti sve radnike koji počinju sa Pet.Ovo je podrazumevano i može se, kao što ćemo videti kasnije promeniti za svako polje na ekranu.Međutim, podrazumevano ponašanje se najviše koristi.

    Ako su u pitanju brojne i datumske promenljive moguće je ovakvo pretraživanje ako baza može da to uradi (Oracle i Postgresql recimo mogu), ali je ovo isključeno kao podrazumevano ponašanje.

    Uključi sve uslove u principu znači AND upit, tj. kada su svi zadani kriteriji tačni.Ako se ovo isključi koristi se OR i to je dosta sporo

    Uključi da/ne se koristi kod JCheckBox - promenljive tipa tačno/netačno (bez obzira kako su definisane u bazi).Mogu se uključiti ili isključiti.Ove promenljive imaju i posebne kriterije za pretraživanje (u stvari manje kriterija, jer je većina za njih besmislena).

    Poslednja opcija je samo za master/detail ekrane.Vi sami određujete da li će se detail automatski prikazivati kada se red u master promeni (recimo kod navigacije na mster ekranu).I ovo je samo zbog performansi.

    Svaki ekran ima status liniju oblika

    Korisnik vidi mod operacije (na slici pretraga, a može biti novi red ili izmena/normal), trenutno izabrani red (0 ako još nije izabran nijedan), ukupan broj redova trenutnog upita,da li je ekran ispravan (validacija) i da li je ekran menjan (ne koristi se u modu pretrage)

    Za svako polje na ekranu korisnik može da postavi upit po sledećim kriterijima (kriteriji za pojedina polja se dobiju kada se pritisne desni taster miša na tom polju).

    Primer kriterija za obične promenljive (string,datum broj i slično)

    Mislimo da su kriteriji iz dosadašnjeg izalaganja jasni.Dodatak je samo kriterij 'od-do', koje predstavlja kriterij tipa BETWEEN.Kada korisnik izabere ovaj kriterij, tada svaki put kada se pozicionira na komponentu sa ovim kriterijem dobije još jedno polje na ekranu kao na sledećoj slici

    Izabran je uslov od naloga 0 do naloga 3.Podešeno je sortiranje po rednom broju naloga (nelogično) da vidite da su izabrani samo nalozi od 0 do 3.

    Za boolean (da/ne) promenljive postoji samo ovaj izbor

  6. Sortiranje
  7. Sortiranje stavki u tabelarnom pregledu nekog ekrana je moguće po bilo kojem polju na ekranu (bez obzira da li je polje u baznoj tabeli za ekran ili ne; uostalom naš sistem i ne poznaje termin bazna tabela, ali ovo je iz nekih poznatih alata) Na sledećoj slici izabrane su stavke konta klase 5, od datuma 01.07.2003 do 31.12.2003 sortirane po kontu u opadajućem rasporedu, zatim po datumu u rastućem redu i na kraju po rednom broju stavke u nalogu u opadajućem rasporedu.Ovo je izabrano bez nekog rezona samo da prikažemo mogućnosti.Korisnik ima vizulenu indikaciju za redni broj kolone u sortiranju i za rastući ili opadajući redosled.

    Korisnik sortiranje bira tako što klikne na zaglavlje kolone u tabeli (prvi put za rastući raspored, ponovo za opadajući) Prva kolona na koju klikne uzima se prva kod sortiranja (u primeru je to konto), pa druga itd.Kada klikne na kolonu prvu kolonu (redni broj u tabeli) brišu se sva sortiranja.Sortiranje i pretraživanje, koje je ovako definisano važi za izveštaje. Pretraživanje važi za analitičke funkcije, ali analitičke funkcije imaju tabelu u kojoj se posebno definiše sortiranje (lako i jednostavno kao i ovde).

    Na kraju da dodamo da korisnik u tabeli može da prikazuje i sakriva kolone kako želi (klikom na kolonu RBR, koja se ne može sakriti).Korisnik takođe može da menja raspored i dimenzije kolona po želji u tabeli, ali ovo je standardna mogućnost swing tabela.

  8. Master-detail
  9. Klasični master-detail je nepotreban kod ovakvog sistema.Developer može jednostavno da definiše polja koja želi na ekranu (bilo da pripadaju master ili detail tabeli) i da ih koristi kao da su prirodno povezani.Međutim, ako želite klasični izgled možete u okviru modela podataka za neki master da definišete detail pogled (ovo je samo deklaracija), a korisnik bira da li će dobijati detail tabelu automatski ili kada pozove ikonu 'prikaži detalje'

    kao primer mi smo definisali da ekran naloga ima detail stavke naloga i kada se aktivira opcija dobije se nešto slično ovom

    Vrlo je teško opisati sve mogućnosti sistema.Na prethodnom ekranu smo pokazali kako izgleda zaključana stavka (nalog). Svaka tabela/klasa može biti zaključana (korisnik ne može vršiti izmene) i ovo ponašanje definiše developer kada definiše mapiranje za hibernate.Podrazumevano ponašanje za sve klase je da nisu zaključane.Korisnik, međutim, može da kopira sadržaj nekog polja u neki drugi dio sistema (klasičnim ctrl c, ctrl v) čak i kada je red zaključan.

    Ovo je samo primer, a daleko je prirodnije da kreirate stavke i na njima normalno prikažete sve što želite o nalogu i ažurirate kao da se radi o jednom objektu (u stvari u terminima objekata to i jeste jedan objekat - nalog.On ima stavke, ali je to i dalje jedan objekat i najbolje je tretirati ga tako).Sistem (hibernate) će rasporediti sve u relacione tabele gde šta treba.

  10. Analitičke funkcije - kreiranje grupnih izveštaja
  11. Kada korisnik prikaže tabelu za neki ekran on može da sebi kreira analitičku tabelu.Najbolje je videti iz slike.Recimo da korisnik želi da vidi bilans za poslednji kvartal u godini, tj. konto,duguje potražuje i saldo sumirano po kontu. Prvo izvrši pretraživanje po uslovima koje želi kao na slici

    Sada desnim mišem klikne na zaglavlje kolone 'Konto' i izabere 'Grupiši po ovoj koloni' kao

    Kada se neka kolona izabere da se grupiše po njoj ostale opcije za tu kolonu su onemogućene (kao na slici). Zatim izabere kolone 'Duguje','Potražuje' i 'Saldo' i kaže da želi da sumira ove kolone

    Sada je onemogućena opcija grupisanja.Opcije sumiranja i proseka su uvek onemogućene za kolone koje nisu brojne.

    Kada definiše sumiranje (ili prosek ili neku od opcija iz prikazanog menija) za sve kolone koje želi korisnik pozove opciju grupiranje iz glavnog menija

    Dobije se sledeća tabela

    Napominjemo ponovo da su sve ove mogućnosti : validacija, pretraživanje, sortiranje i grupne tabele urađene bez ikakve posebne intervencije programera.

  12. Izveštaji
  13. Na kraju da pokažemo da je na osnovu ekrana moguće kreirati i izveštaje.U izveštaju se uzima u obzir pretraživanje i sortiranje, odnosno izveštaj će sadržavati samo redove koje korisnik izabere i biće sortiran kako je korisnik postavio sortiranje.Slika

    Snpe razvojni sistem - slika 4

    Slika 4 - kliknite na sliku za normalnu veličinu

    Izveštaj prikazuje podatke o nalogu,kontu,duguje i potražuje (izabrane kolone) za konto klase 4 (pretraživanje) sortiran po nalogu pa po kontu (sortiranje).Prikazana je četvrta od osam strana izveštaja (od rednog broja 136 i vidi se da su podaci (pretraživanje i sortiranje) isti na izveštaju i na ekranu.Takođe se vidi da se izveštaj može štampati i prebaciti u formatu pdf,excel,html,CSV i obični tekst.

    Moguće je definisati pogled (view u relacionim bazama podataka) isto kao tabelu (možda bez mogućnosti ažuriranja, ali ako baza dopušta ažuriranje pogleda na neki način onda i sa ažuriranjem).Na ovim ekranima korisnik ima sve opcije kao i kod normalnih tabela : pretraživanje, sortiranje, grupiranje i izveštaji.

    Na nekom od ekrana možete da vidite pogled/view Upit i Konzola.Oni su za developere i prikazuje hibernate upite u bazu (to su HQL upiti.HQL je sličan SQL, ali je orijentisan objektima umesto tabelama).Pogled konzola prikazuje log sistema koristan kod otklanjanja grešaka.Sistem, inače, koristi standardni apache log4j log sistem.

    Mi smatramo da se 80% ekrana može ostaviti u podrazumevanom ponašanju, odnosno, da samo treba definisati dizajn baze i/ili mapiranje za hibernate.Takođe će kreirani izveštaji zadovoljiti 80% potreba s tim da korisnik (ne programer) može sam da kreira poglede na bazu, sortira, pravi izveštaje itd.Naprimer ekran (stavke naloga) koji smo koristili za primere, sadrži par desetaka linija koda i to je samo kod za vizuelni dio (dodavanje polja i uređenje ekrana).Vizuelni dio se može uraditi sa nekim Java alatom za GUI razvoj i samo dobijene vizuelne komponente povezati (binding) sa hibernate objektima (tabelama) u sistemu.Povezivanje je jednostavno pozivanje add metode u osnovnoj klasi forme.Mi smatramo da su GUI alati zgodni samo za početak (za prvih par ekrana dok se ne stekne rutina) i obično prave mnogo nepotrebnog koda koji je kasnije teško održavati.Izgled ekrana se može napraviti korištenjem JGoodies Forms layouta mnogo efektnije i brže kucanjem običnog Java teksta u dobrom Java editoru/IDE (eclipse ili netbeans su besplatni i odlični).

    I najvažnije, kada promenite/dodate neku funkciju za ekran ili izveštaj funkcija je na raspolaganju celom sistemu, odnosno u svim ekranima i izveštajima.Ove funkcije može da doda/izmeni SnPe, ali možete i vi sami.

    Snpe nastavlja da razvija navedeni sistemu. U planu je dodavanje mnogih funkcija korištenjem anotacija u Java 5.0 pre svega kod validacije i izveštaja, odnosno sistem će sam da radi više validacija i kreirani izveštaji će biti sofisticiraniji.Takođe ćemo napraviti kompletno uputstvo za korištenje i razvoj sa sistemom.Sistem ima ugrađen pogled(view) za help, ali su tu moguća mnoga poboljšanja.Vizuelni dio je, takođe, moguće poboljšati, ali mi smatramo da je logika i funkcionalnost važnija, tako da je vizuelni dio ostavljen za budući razvoj.U planu je takođe prenos kompletnog sistema na eclipse RCP (eclipse rich client platform - više o ovoj platformi na stranicam za eclipse).

    Korišteni alati (imena korištenih alata su zaštitni znak kompanija ili organizacija koje su proizvele alate)

Kompletan razvoj je urađen na operativnom sistemu Linux.Ova stranica je urađena korištenjem Quanta Plus (dio KDE grafičkog okruženja za Linux/Unix) i Gimpa (alat sličan Photoshopu, samo bolji).

Sistem, verovatno radi na FreeBSD Unixu (ukoliko postoji JDK >= 1.4 za FreeBSD), ali mi smo koristili samo logo FreeBSD-a koji možete videti na nekim snimcima ekrana.

Javite nam se za dodatne informacije.