Elmetérkép generálása táblázatokból, és adatbázis lekérdezések eredményéből

Embed Size (px)

Citation preview

Szegedi Tudomnyegyetem Informatikai Tanszkcsoport

Elmetrkp generlsa tblzatokbl, s adatbzis lekrdezsek eredmnybl

Szakdolgozat

Ksztette:

Tmavezet:

Gellai Istvninformatika szakos hallgat

Tancs Attilaegyetemi adjunktus

Szeged 2011

Elmetrkp generlsa tblzatokbl, s adatbzis lekrdezsek eredmnybl

Az

elmetrkpek

gyors

s

egyszer

eszkzt

knlnak

hierarchikus

listk

ksztsre s eszttikus megjelentsre. Tbb ingyenes program is rendelkezsre ll elmetrkpek ksztsre, ilyen pldul a FreeMind. A hallgat feladata egy olyan program elksztse, amely egy CSV vagy Excel tblzatbl, vagy egy adatbzisbl trtn lekrdezsek eredmnyeibl a FreeMind program ltal rtelmezhet elmetrkpet kszt. A programban lehetsg legyen a tblzat oszlopainak a felhasznl ltali kombinlsra. Egy konkrt plda alkalmazsra: egy tblzatban tartom nyilvn a szakdolgozat tmkra jelentkezseket. Kln oszlopban van feltntetve a hallgat neve, szakja, a jelentkezs idpontja, a vds vrhat flve, a tma cme s kategria informcii. Egy ilyen tblzatbl kellene elmetrkpet generlni, amelyben kigyjtsre kerlnek a jelentkezsek, vek, szakok, tmk szerint. Az elksztend programnak termszetesen ms, hasonl tblzatbl is kpesnek kell lennie eredmnyt generlni. Elismeretek, felttelek: XML fjlokkal val munkra lesz szksg.

2

Tartalmi sszefoglal

A tma megnevezse:

A FreeMind nev, elmetrkpek elksztst clz program ltal definilt szerkezet XML fjlok ltrehozsa adatbzis lekrdezsek, illetve tblzatfjlok merevlemezen trolt tartalmbl. A megadott feladat megfogalmazsa:

A feladat megoldsaknt ltrejtt program kpes a trolt szveges fjlok megnyitsra, s a fjlokban tallhat tblzatinformcik feldolgozsra. Ezt kveten a felhasznlnak lekrdezsek felvtele segtsgvel lehetsg van az importlt adatok klnfle csoportostsra , s az gy elkszlt grf megfelel formtumban val mentsre. A megoldsi md:

A megolds folyamn Model-View-Controller (MVC) tervezsi mintt kvettem, s a JAVA 1.6os csomagja, valamint az Apache projekt POI alprojektje ltal biztostott osztlyknyvtr elemeit hasznltam fel. Alkalmazott eszkzk, mdszerek:

A feladat megoldshoz Microsoft Windows XP opercis rendszert, 1.6 verziszm JAVA csomagot Eclipse Galileo, illetve a felhasznli fellet megtervezshez NetBeans fejlesztkrnyezetet alkalmaztam. A munka kezdetekor a legfrissebb stabil kiads FreeMind program a 0.8.1.-es verziszmot viselte. Elrt eredmnyek: Office dokumentumok konvertlsval, a felhasznli fellet nyelvnek

A feladatkirsban megfogalmazott feladatok teljesltek, ezen fell a dolgozat kibvltek Microsoft vltoztatsval, a ltrehozott lekrdezsek elmentsvel, valamint formzsi belltsoknak a kimeneti XML fjlban val elhelyezsnek lehetsgvel, melyek elzetesen nem szerepeltek a dolgozat tematikjban. Ezen feladatok is sikerrel kerltek megoldsra. Kulcsszavak:

XML, elmetrkp, FreeMind, grfalgoritmus, konverzi, Microsoft Word, Microsoft PowerPoint

3

TartalomjegyzkTartalmi sszefoglal.....................................................................................................................................................3 Tartalomjegyzk.............................................................................................................................................................4

BEVEZETS.............................................................................................................. 6 1. AZ ELMETRKPEK............................................................................................81.1. Az elmetrkpek bemutatsa ................................................................................................................................8 1.2. Motivci (felhasznlsi lehetsgek)...................................................................................................................9 1.3. A FreeMind program rvid ismertetse...............................................................................................................9 1.4 A FreeMind program ltal hasznlt fjlformtum bemutatsa......................................................................10 1.5 Hasonl szoftverek, s webes alkalmazsok.......................................................................................................11 2.1. A JAVA Bean-ek, s fontosabb metdusaik......................................................................................................13 2.1.1. A Table bean.............................................................................................................................................13 2.1.2. A Selection s Formating bean-en, s konstruktoraik ..............................................................................15 2.1.3. A Graph, s Node beanek, s szerepk....................................................................................................18 2.2. A dialgusablakok ................................................................................................................................................19 2.2.1. A dialgusablakok ltalnos felptse ...................................................................................................19 2.2.2. Fjl importlsa belltsok.................................................................................................................20 2.2.3. Fejlcadatok mdostsa...........................................................................................................................22 2.3. A GUI, s mensv megvalstsa......................................................................................................................22 2.3.1. A MindMapperGUI osztly .....................................................................................................................22 2.3.2. A SelectionPanel, s elemei.....................................................................................................................23 2.3.3. A mensv, s kt fontosabb metdusa....................................................................................................26 2.4. A felhasznli fellet nyelvnek belltsa.........................................................................................................34 2.4.1. Cmkk dinamikus legenerlsa, s lekrdezse......................................................................................34

3. LEKRDEZSEK, CSOPORTOK, S CSOPORTOSTS ................................383.1. Lekrdezsek hozzadsa, s szerkesztse ....................................................................................38 3.1.1. Lekrdezs intzse a tblzathoz............................................................................................................38 3.1.2. Formzs hozzadsa...............................................................................................................................40 3.2. Csoportok ..........................................................................................................................................42 3.2.1. Csoportosts szksgessge, s belltsi lehetsgei............................................................................43 3.2.2. A Group bean s konstruktorai - az egy elemszm csoport...................................................................43 3.3. Lekrdezsek importlsa, s exportlsa ........................................................................................................45 3.3.1. A hasznlt fjltpus az .mms kiterjeszts.............................................................................................45 3.3.2. Az exportls folyamata...........................................................................................................................46 3.3.3. Az importls............................................................................................................................................47

4

4. OFFICE DOKUMENTUMOK FELDOLGOZSA .................................................484.1. Eltrsek, s hasonlsgok...................................................................................................................................48 4.2. Microsoft dokumentumok feldolgozsa.............................................................................................................50 4.2.1. Microsoft PowerPoint bemutatk feldolgozsa .......................................................................................50 4.2.2. Microsoft Word dokumentumok feldolgozsa.........................................................................................53

5. PLDK A PROGRAMOK FUTSRA .............................................................555.1. A programok futsa nagymret inputon ........................................................................................................55 5.1.1. A program futsa nagymret tblzatfjlokon.......................................................................................55 5.1.2. A program futsa nagymret Microsoft Word dokumentumon.............................................................57 5.2. A programok futsa kis s kzepes mret inputon.........................................................................................57 5.2.1. A program futsa kismret tblzatfjlon...............................................................................................57 5.3. A felhasznli fellet nyelvnek tesztelse ........................................................................................................58 Irodalomjegyzk...........................................................................................................................................................60

MELLKLETEK....................................................................................................... 62

5

BEVEZETSA trtnelem folyamn minden korszakban tallkozhatunk neves tudsokkal,

gondolkodkkal, akik maguk korban mind a tudomnyos elit krbe tartoztak. Ezen nagy tuds emberek krben idrl idre felbukkannak olyan technikk, melyek segtsgvel tudsukat rendszerezik, feladataikat, s tleteiket ttekinthet formba ntik. Ilyen technikk kz tartozik az elmetrkpezs [3,4,6,9] eszkze is, mellyel a dolgozat foglalkozik. Mai felgyorsult vilgunkban az informcik radatt szinte kptelensg nyomon kvetni. Erre kitn pldkkal szolglnak a gazdasgtudomnyok, melyek szakknyvei egyik hnaprl a msikra vlnak tlhaladott. Ennek megfelelen a gazdasgtudomnyok kzl kerltek ki azok a modern tudomnyterletek is, melyek elszr nyltak vissza az elmetrkpezs archaikus mdszereihez. A brainstorming elnevezs, korunkban. Termszetesen az elmetrkpezst sem kerlhette el az a folyamat, mely szmtgpes tmogatst igyekszik nyjtani a ma l ember szinte minden feladathoz. Ennek megfelelen a szoftverpiacon sorra jelennek meg az egyre kifinomultabb programok, melyek clja az elmetrkpezs folyamatnak leegyszerstse. Tbb mr nincs szksg paprra, s ceruzra, nem kell grafikusi vnval rendelkeznnk ahhoz, hogy zlses, mgis hasznos, s tlthat elmetrkpet alkossunk. Elkszlt elmetrkpeink pedig, melyek termszetktl fogva sokszor korntsem tkletesek, immr szabadon javthatak, szerkeszthetek, egyesthetek, vagy akr feldarabolhatak. Ezen programok megjelensvel, s a nagykznsg szmra elrhetv vlsukkal kezdte meg az elmetrkpezs trhdtst a gazdasgtudomnyok terletn tl. gy az elmetrkpezs felhasznlsa mra kikerlt a tudomnyos, s politikai elit hatskrbl, s elrhetv vlt a htkznapi emberek szmra, akik manapsg gyakran olyan technolgiai felszerelsekkel rendelkeznek, melyek birtoklsa nhny vtizedekkel korbban nagyvllalatok privilgiumai kz tartozott volna. gy ne lepdjnk meg azon, mikor egy eladson a szomszdos lhelyet elfoglal kollgnk elmetrkp alakjban jegyzi le az elads vzlatt. [6]1 kreatv tletek sszegyjtst megclz csoportos munkafolyamat eszkztrba bekerlve az elmetrkpezs mondhatni msodik renesznszt li

1

Pldnak okn ma a kzoktatsban is hasznlnak egy mdszert, mely nagyon kevs elemben tr el a klasszikus elmetrkpezstl. Ezt a mdszert kognitv trkpnek nevezik.

6

Az elmetrkpezst segt programok kzl az egyik legelterjedtebb (ingyenes licence-nek, s nagy tudsnak ksznheten) a FreeMind nvre hallgat alkalmazs[13]. Ez az alkalmazs az elkszlt elmetrkpeket vltozatos formtumokban kpes a merevlemezre exportlni; kpes pdf, html, egyszer szveges, CSV, illetve a Microsoft Office programcsald ltal kezelt fjlformtumok ellltsra. Az ellenkez irnyba vezet t azonban mindezidig kiptetlen. A dolgozat clja egy olyan alkalmazscsald ltrehozsa JAVA nyelven [2,5,7], mely kpes a merevlemezen tallhat, megadott formtumot kvet szveges fjlformtumok, CSV fjlok, illet Microsoft Word, s PowerPoint dokumentumok elmetrkpp alaktsra. Ezen cl elrshez szksges els lpsben a FreeMind keretrendszer ismerete, ezt kveten pedig tanulmnyoznunk kell a FreeMind ltal ellltott .mm kiterjeszts, elmetrkpeket tartalmaz XML [1,8] alap szveges fjlok szerkezett. Ezt a clt szolglja az els fejezet. A msodik fejezetbe a program ltal hasznlt bonyolultabb adatszerkezeteket, s az ezeket tartalmaz osztlyokat mutatom be. Ezen adatszerkezetek esetben mindig felhvom a figyelmet az adatszerkezet alkalmazsnak okra, rvilgtva az egyszerbb megoldsok hinyossgaira. A harmadik fejezet a rendszer logikjval foglalkozik, bemutatja, hogyan kezeli a rendszer a cscspontokban trolt adatokat, s a felhasznl ltal felvett lekrdezseket. Termszetesen ezen kt fejezet elemeit nem lehet tkletesen elvlasztani egymstl. Hiszen akrcsak az emberi agy esetben, ahol a kt fltekt idegrostok szvevnyes hlja kti ssze, les hatrvonal a rendszer logikja, s felptse kztt sem hatrozhat meg. A negyedik fejezet Office dokumentumok feldolgozsval foglalkozik. A fejezetben bemutatott alkalmazs csak a Microsoft Word, s PowerPoint dokumentumok feldolgozsnak megvalstst tzi ki maga el, hiszen a Microsoft Excel, illetve Access programokban trolt adatok egyszeren CSV formtumba exportlhatk, s gy a fprogram ltal feldolgozhatk. A dolgozat zrsaknt az utols fejezetben a programok futst mutatom be klnbz inputfjlokon. Ezeket az inputfjlokat, s az elksztett lekrdezseket, illetve elmetrkpeket termszetesen a CD mellklet tartalmazza. A tesztesetek futtatsakor kszlt kpernykpek, a nagy terjedelemre val tekintetre, a legtbb esetben szintn a mellkletben kaptak helyet.

7

1. AZ ELMETRKPEKElmetrkpek (mind maps) hasznlatra elnys tulajdonsgai folytn sok terleten nylik lehetsg. Hasznlatval hatkonyabb a problmk megoldsa, jelents id sprolhat meg, az gy kszlt jegyzetek pedig ttekinthetbbek, s knnyebben memorizlhatak. Ebbl kifolylag hasznljk a gazdasgtudomnyokban, mint fontos szemlltet eszkz, az oktatsban kognitv trkp nven, az informatikban, s mg sok egyb terleten. Az egyik legnagyobb keresoldal, a Google.com pldul lehetsget nyjt, hogy a lefuttatott keress eredmnyt elmetrkpen brzoljuk. Ezt a lehetsget Wonder Wheel-nek, magyarul varzskerknek nevezi. gy tematikusan csoportostva jelennek meg a keressi eredmnyek, mellyel a kulcsszavas kerest tematikus keresknt hasznlhatjuk. Elmetrkpeket nagyon rgta hasznlnak mr a klnbz tudomnyokban. Porfiriosz (gr. ) neoplatonista filozfus az i.sz. 3. szzadban ilyen formban rendszerezte Ariszototelsz gondolatait. A mdszer alapja tbbszr felbukkant ezt kveten, hasznlata azonban igazbl csak a szemantikus hl kifejlesztse utn, az 1950-es vek vgn terjedt el. A legtbben Tony Buzan npszer brit pszicholgus-r nevhez ktik az elmetrkpezs mdszert, hiszen volt az, aki modern formjban kifejlesztette, s a nyilvnossg el trta[4]. Ma az elmetrkpek legfbb alkalmazsi terletei a kvetkezk: szervezs, dntshozatal, tanuls, jegyzetels, sszejvetelek, tletroham (brainstorming), feladatok tervezse, eladsvzlatok, stb... Manapsg, mikor a vilg legtvolabbi sarkrl is temrdek informci ll rendelkezsre, az adatok tblzatokban val trolsa mr elgsges. Szmtgpeink azonban csak ilyen formtumban kpesek nagy mennyisg adatot trolni. Ezrt szksges egy mdszer, mellyel az informcik vgelthatatlan, bonyolult halmaza ttekinthetbb, s knnyebben rtelmezhetv teszi. Erre nyjt elegns megoldst az elmetrkpezs, s a Freemind nev ingyenes szoftver. A dolgozat lnyege egy olyan szoftver kifejlesztse, mely a fent emltett tblzatos formtum adattrolsi struktrbl egy, a Freemind programmal kompatibilis kimenetet llt el.

1.1. Az elmetrkpek bemutatsaMikor elmetrkpeket emlegetnk ltalban egy specilis grfot rtnk a kifejezs alatt. Egy elmetrkp (legtbbszr) egy kzponti csccsal rendelkezik, mely a trkp tmjt

8

reprezentlja. Termszetesen tbb tmt is brzolhatunk egy trkpen, ilyenkor azonban rdemes megfontolnunk a tmk kln trkpen val brzolst, esetleg tmk, tmakrk gykrcscsnak bektst egy kzponti ftma al. A gykrelemnek szmtalan leszrmazottja lehet; ez igaz minden tovbbi cscspontra is. Az elmetrkpek legtbb felhasznlja a cscspontok, s a trkp gazdag, s egyni dekorcijt javasolja, mely elsegti az brzolt adatok megjegyzst, s nveli az ttekinthetsget. Ez a hierarchikus tagolsi md, s hozz rendelhet ltvnyos vizulis megjelentsi lehetsgek szles sklja teszi idelis formtumm adatok trolsra, s megjelentsre, legyen sz egy elads vzlatrl, egy vllalat termelsi adatairl, jvbeli, s jelenlegi projektjeirl, s megszmllhatatlan ms terletrl.

1.2. Motivci (felhasznlsi lehetsgek)Az informci kort ljk. Akrhova tekintnk a vilgban, mindenhol risrendszereket, s mgttk hatalmas adattrakat tallunk. Ezek az adatok azonban vgelthatatlan tblzatokba vannak foglalva, melyek rtelmezse (emberek szmra termszetesen) j esetben is nehzkes, s lass. rtelmes informci kinyersre tett ksrletnk azonban - kifejezetten nagy adatmennyisgben esetben - sokszor remnytelen. Nagyszer volna, ha az eddig tblzatokban trolt informciinkat pr kattintssal egy tlthatbb, rendszerezett formtumba tudnnk konvertlni, ha egyni szksgleteink szerint tudnnk lekrdezseket intzni tblzatfjlunkhoz, melynek eredmnye az ltalunk krt informci lenne az ltalunk meghatrozott formtumban. Erre prblunk egy megoldst biztostani dolgozat tmjul szolgl szoftver segtsgvel.

1.3. A FreeMind program rvid ismertetseA piacon sok szoftveres megvalsts megtallhat elmetrkpek ellltsra, s kezelsre. Ezek kzl az egyik legjobb alternatva a FreeMind nev nylt forrskd rendszer, mely knny kezelhetsgvel, rengeteg beptett belltsi lehetsgvel, s nem utols sorban ingyenessgvel remek vlaszts [13]. A program az alapvet trkpezsi feladatokon tl (cscs beszrs, szerkeszts, trls) rengeteg lehetsget nyjt trkpeink egynisgnknek megfelel formzsra. Megvltoztathatjuk a hasznlt betmretet. Hasznlhatunk egyni sznt, s beptett stlusokat.

9

A cscsokhoz ikonokat rendelhetnk, vagy sznes buborkba foglalhatjuk, mely minden gyermekt tartalmazza. sszekthetjk kln fjlokban trolt trkpeinket, st akr az Interneten keresztl is elrhetjk korbbi munkinkat. rzkeny projektjeinket jelszval vdhetjk, de az elksztett trkpet exportlhatjuk is olyan npszer formtumokba, mint HTML, PDF, JPG, PNG, vagy akr OpenOffice dokumentumba. A szoftver JAVA nyelven van megvalstva [13], jelenleg a 0.9.0.-s verziszmnl tart, azonban a dolgozat rsnak kezdetn a legutols stabil verzi a 0.8.1.-es verziszm volt, ezrt minden implementcit ennek megfelelen hajtottunk vgre, s a tesztesetek is ebben a krnyezetben lettek lefuttatva.

1.4 A FreeMind program ltal hasznlt fjlformtum bemutatsaA FreeMind program egy specilis fjlformtumot hasznl a program segtsgvel elksztett elmetrkpek trolsra. Ez a fjlformtum egy jl definilt XML [1,8] alap adatformtum; lnyegben egy brki ltal olvashat, s rhat XML fjl, melynek kiterjesztse .mm [13]. A fjlban tallhat els elem egy tag, mely magban foglalja a teljes elmetrkpet, ezen tag s az ezt bezr tag kztt kell hogy elhelyezkedjen minden megjelentsre sznt csompont. Ezen tag egyetlen attribtuma version nvre hallgat, s arrl informlja a fjlt feldolgoz programot, hogy a fjl elksztse sorn mely verziszmmal rendelkez programot hasznltuk. Ezen attribtumhoz minden esetben a 0.8.1.-es rtket fogjuk hozzrendelni. Ez utn helyezkedik el egy sor, a fjl megnyitsra szoftver elrhetsgeirl informlja a fjl megtekintjt. Ezt a sort kvetik a trkp lnyegi elemei, maguk az adatokat trol csompontok. Minden csompontot egy tag jell, melynek attl fggen van zrtagja, hogy az elem res-e, vagyis a trkp struktrjban levlszinten helyezkedik-e el, esetleg tartalmaz-e olyan formzsi belltsokat, mely lehetetlenn teszi a csompont res elemknt val trolst. Egy csompontnak tbb attribtuma is lehet. A FOLDED attribtum rtke egy boolean rtk lehet, s a csompont kifejtst, illetve bezrst szablyozza. Amennyiben rtkt nem adjuk meg, alaprtelmezsknt false rtket vesz fel. A TEXT attribtum rtke a csompont megjelentsekor hasznlt szveget tartalmazza. Termszetesen amennyiben ebben a szvegben elfordulnak olyan specilis karakterek, mint a & , , stb. , megadsukkor hasznlnunk kell az XML ltal elrt helyettest szekvencikat. A COLOR attribtum segtsgvel a

10

csompont sznt llthatjuk be, rtke egy hatjegy hexadecimlis szm, melyet ktelezen a # karakter vezet be. A tag tartalmaz ezen fell egy CREATED, illetve egy MODIFIED long tpus attribtumot, melyek nevknek megfelelen az adott cscs ltrehozsnak, s utols mdostsnak idejt troljk. Minden csompont br mg egy egyedi azonost D attribtummal, mely segtsgvel a trkpen, illetve trkpek kztt sszekapcsolsokat valsthatunk meg. A csompontok utols hrom attribtumval nem fogunk foglalkozni; az elksztett trkp els beolvassakor (jobban mondva elvgzett mdostsok els mentsekor) a program automatikusan legenerlja ezeket az rtkeket. Amennyiben a cscs ltal megjelentett szvegben flkvr, vagy dlt formtum, esetleg az alaprtelmezstl eltr bettpust, vagy betmretet kvnunk hasznlni, a cscs nyittagja utn ezek rtkt ktelez megadni tagban a cscs gyermekeinek kifejtse eltt. A font tag szintn attribtumai segtsgvel trolja el a cscsra alkalmazott formzs rtkeit. A BOLD, s az ITALIC boolean rtk attribtumok a flkvr, s dlt jellemzt troljk (alaprtelmezs szerint mindkett rtke false), a NAME, s SIZE mezk pedig a hasznlt bettpus, illetve betmret magadst teszik lehetv. A szabvnyos .mm kiterjeszts fjlok felptst szablyoz xsld dokumentum a dolgozathoz mellkelt lemezen megtekinthet.

1.5 Hasonl szoftverek, s webes alkalmazsokA piacon ma meglehetsen nagy azon alkalmazsok szma, melyek szolgltalsai kztt megjelenik az elmetrkpezs. Ebben az alfejezetben nhny ilyen szoftvert fogok megemlteni, termszetesen a teljessg ignye nlkl. A ConceptDraw nvre hallgat alkalmazs a FreeMindhoz hasonlan nagy tuds, s igen ltvnyos megoldsok szlethetnek hasznlatval, azonban a program ingyenesen nem elrhet, csupn a 21 napos kiprblsi idszak folyamn. Egy msik, Gliffy nev program, br eredetileg folyamatbrk szerkesztsre terveztk, kpes elmetrkpek ksztsre, azonban ez a szoftver is csak kereskedelmi forgalomban elrhet. Egy jabb harminc napid ingyenesen kiprblhat elmetrkpez program a Mind Pad. A Mind42 egy, a FreeMindhoz hasonlan ingyenes szoftver, melynek funkcionalitsa nagyjbl a FreeMindval egyezik. Az elz konkurens szoftverekkel ellenttben ez az alkalmazs ingyenesen elrhet. 11

Vgl, de nem utols sorban meg kell hogy emltsek egy klnleges alkalmazst a GoldenMap [14] szemlyben. A GoldenMap egy webes alkalmazs, mely a felhasznl ltal bert keressi felttelek eredmnyt egy elmetrkpen jelenti meg, rvilgtva ezzel olyan sszefggsekre, melyekre a felhasznl csak a keressi eredmnyek mlyebb ttanulmnyozsa utn bukkanna r.

12

2. A HASZNLT ADATSZERKEZETEK, S ALGORITMUSOK

A most kvetkez fejezetben a rendszer nem trivilis adatszerkezeteit, s komplex algoritmusait prblom majd meg bemutatni, valamint rszletesen bemutatom majd a felhasznli fellet bizonyos elemeit, melyek trgyalsa elengedhetetlen azok metdusainak, illetve adattagjainak trgyalsa folyamn. Termszetesen egy ilyen sokrt, sok funkcival rendelkez program lersa nem bonthat ilyen lesen kt rszre. A fejezetben megjelennek olyan osztlyok, melyek rszletesebb trgyalsra csak a 3. fejezetben kerl sor, ahol sokkal inkbb a rendszer finom logikai elemeit szeretnm bemutatni. Ennek ellenre az adott osztly a tmakr bemutatshoz szksges legfontosabb tulajdonsgait be fogom mutatni, jelezve, hogy az adott tmakr rszletesebb trgyalsra a ksbbiekben kerl csak sor.

2.1. A JAVA Bean-ek, s fontosabb metdusaikA program fejlesztse sorn alkalmazkodtam a modell-view-control modellhez. A tovbbiakban bemutatom a program mkdse sorn ltfontossg JAVA Bean osztlyokat, klns tekintettel az ltaluk tartalmazott rdekes adatszerkezetekre, s megvalstott metdusokra.

2.1.1. A Table beanA table osztly egy tblzatot reprezentl. Tbb privt attribtuma mellett azonban tartalmaz nhny publikus egsz rtk osztlyvltozt is, melyek a tblzat fjlbl val beolvassnl hasznlt szepartorkaraktereket jelkpezik. Ezek sorrendben: COMA, SPACES, TABS, SEMICOLON, OTHER. Az osztly ezeken fell csakis privt attribtumot tartalmaz, a modell-view-controll tervezsi minta elrsainak megfelelen. A valid nev boolean attribtum jelzi, hogy a fjl beolvassa sorn trtnt-e valamilyen hiba, mely a program helyes futst veszlyezteti. Alaprtelmezett rtke true; ez csak akkor vltozik meg, ha a beolvass sorn valamelyik sorban a beolvassrt felels algoritmus tbb oszlop megltt szleli, mint ami a fejlcmezk szmossgbl kvetkezne. A firstRow boolean attribtum megmutatja, hogy beolvasskor a szvegfjl els sora tartalmazza-e a tblzat fejlc-informciit, vagy a program feladata a megfelel szm

13

tblzatfejlc legenerlsa. Tallhat az osztlyban ezen fell egy szveges fileName vltoz, mely a beolvasand fjl fjlnevt trolja, egy karakterlncokat trol columnNames tmb, mely az oszlopok fejlceit tartalmazza, valamint egy egsz vltoz, mely az oszlopok szmt trolja. Ezen vltoz a beolvass elejn kap rtket, s az ettl val eltrs alapjn llapthatjuk meg, hogy a tblzatfjl tagolsa megfelel volt-e. A tblzatban trolt tnyleges rtkeket egy HashMap-ben troljuk. Ennek adatokkal val feltltse a fjlbl val beolvass keretben trtnik meg. Az elements Map egy rtkei szintn Map-ek, kulcsai azonban integer rtkek. Az elements Map minden egyes eleme a beolvasott tblzat egy oszlopnak feleltethet meg, ezen oszlop minden tovbbi eleme pedig a tblzat egy celljnak. Joggal merl fel a krds, hogy mi szksgnk lehet egy ilyen bonyolult konstrukci alkalmazsra pusztn szveges adatok trolsra. A vlasz a lehetsges inputok nagy mretben, a tblzat mretnek dinamikus vltoztathatsgban, illetve a beptett metdusok nyjtotta nagy elnykben gykerezik. Ezen kvl nagy hasznt ltjuk ennek a konstrukcinak egy ksbb trgyalt metdus mkdse kzben is. A JAVA Bean-ek fel tmasztott kvetelmnyeknek megfelelen minden privt adattag rendelkezik publikus getter, s setter metdussal, s az osztly is rendelkezik egy res konstruktorral. Ezeken fell tallkozhatunk mg egy getElements, s egy setElements metdussal is, mely a trolt tblzat egy celljnak rtkt adja vissza, illetve lltja be. Termszetesen lekrhetjk a tblzat oszlopainak, s sorainak szmt is. Az osztly tartalmaz egy kls forrsbl [12] szrmaz mintailleszt algoritmust, mely a megadott String vltozban a megadott minta minden elfordulst egy helyettest rtkre cserli. Az osztly mkdsnek lnyegi rszt igencsak komplex konstruktora hordozza. Ez a konstruktor ht paramtert vr. Ezek sorrendben: File inputFile: int format: boolean firstRow: boolean isIganoeChar: String otherSeparator.: String ignoreChar: boolean utf8: a beolvasand fjl a fenti publikus osztlyvltozk egyike a fjl tartalmzza a fejlc-informcikat amennyiben meg van adva, szmolnunk kell az ignoreChar vltoz rtkvel egy, a felhasznl ltal megadott, egyni szveghatrol ezen karakterek kztt a beolvass sorn nem vesszk figyelembe az elvlasztkarakterek jelenltt amennyiben a tblzatfjl utf8 karakterkdolst hasznl, rtke true 14

A beolvass sorn els lpsben inicializljuk az osztly vltozit, ezutn megnyitjuk a bemeneti fjlt a megfelel karakterkdolssal. Vgigmegynk a fjl minden sorn, s a fent emltett mintailleszt algoritmus hasznlatval minden, az XML ltal foglalt karaktert lecserlnk a neki megfelel escape szekvencira. Ezt kveten java.io.StringTokenizer eszkzzel feldaraboljuk a beolvasott sorokat a belltott elvlasztkarakterek mentn. Amennyiben van belltott ignoreCharacter vltoz, megnzzk, hogy az egyes tokenek ezzel a karakterrel kezddnek-e. Ha a vlasz igen, addig konkatenljuk a soron kvetkez tokeneket, mg az eredmny nem vgzdik ugyan erre a karakterre. Ha a vlasz nem, akkor egyszeren tovbblpnk a kvetkez tokenre, s elmentjk a beolvasott rtket az elements Map-be. Fontos megjegyezni, hogy a beolvasott cellk trolsi mdja klnbz a fejlcinformciknak megfelelen. Amennyiben a fejlc-informcikat a fjl tartalmazza, az els sor adatai az elements Map rtkeiknt szolgl oszlopok -1 kulccsal hivatkozott mezjbe kerlnek, ellenkez esetben az indexels hagyomnyosan 0 rtkkel kezddik. A beolvass befejezdtvel mg sort kell kertennk az oszlopfejlcek ltrehozsra/kinyersre. Ekkor kerl feltltsre egy ciklusban a columnNames tmb. A tmb - a firstRow attribtum rtktl fggen - az elements Map (x,-1) kulcs elemeibl nyeri rtkeit, vagy pedig "Column No. x" alak szvegkonstansokkal kerl feltltsre, ahol x a tblzat oszlopnak sorszma. Az osztly ezen kvl tartalmaz mg egy metdust, mely a tblzat egy rsztbljt generlja le. Ez egy Table osztlyba tartoz objektumot ad vissza, melyet a metdus hoz ltre. A metdus paramtere egy Group objektumokat trol tmb, egy minta, mely alapjn ltrejn a Table objektum. A Group objektum - mint azt a ksbbiekben ltni fogjuk - egsz szmokat, vagy azok halmazt trolja. A metdus a paramterben megadott tmb elemeibl legenerl egy tblzatot, melynek oszlopai az eredeti tblzat a paramtertmb ltal tartalmazott Group objektumok ltal trolt szmmal/szmokkal sorszmozott oszlopai. Erre a metdusra ksbb mg visszatrek a SelectionPanel objektum trgyalsnl.

2.1.2. A Selection s Formating bean-en, s konstruktoraikMint nevk is mutatjk a Selection osztly egy lekrdezs, a Formating osztly pedig egy csompont lehetsges formzsnak reprezentlsrt felels. Ezen osztlyokat, annak ellenre, hogy funkcijukat tekintve sok mindenben klnbznek, egy alfejezetben mutatom be, mivel egy klnleges szempontbl hasonlak: specilis konstruktorral rendelkeznek. A Selection osztly szmos privt adattagot tartalmaz.

15

A columns tmb lnyegben a lekrdezett oszlopok sorszmt, s sorrendjt trolja. Hogy milyrt csoportknt kezeljk ket, arrl mg bvebben lesz sz, egy ksbbi fejezetben. A formats tmb, melynek elemszma meg kell egyezzen a columns tmb elemszmval, a lekrdezett oszlopokra a felhasznl ltal belltott formzsi adatokat trolja. Minden lekrdezs rendelkezik egy nvvel, amelyet szintn a felhasznl ad meg, s amely nv a ksbbiekben legenerlt elmetrkpen mint egy fgknt jelenik meg. Ezen nv egyedisgt a program nem vizsglja. Az osztly tartalmaz mg egy clusterized nev boolean vltozt, mely amennyiben a lekrdezs feldolgozsa kzben egy tetszleges cscspont gyermekeinek szma elrn, vagy meghaladn a felhasznl ltal belltott clusterSize vltoz rtkt - automatikus klasszifikcit hajt vgre, s a gyerekelemeket egy szinttel lejjebb, csoportost gak al rendezi. Ezen egsz vltoz alaprtelmezett rtke tz. Az osztly felldefinilja az Object osztlytl rklt toString metdust. Ezen metdus visszatrsi rtke egy string, melynek felptse a kvetkez: selectionName> columns[i]* | clusterized: {true, false} | clustersize: x ahol columns[i] a columns tmb elemit jelli, x pedig tetszleges pozitv szm lehet, a generland rszgrfban elfordul legnagyobb gyermekszmot jelli. Ennek, s a lent lert konstruktornak nagy szerepe lesz a ksbbiekben exportlsnl. Az addColumn metdus, mint neve is mutatja, egy oszlopot ad hozz mr ltez lekrdezsnkhz. Ennek leginkbb lekrdezsek szerkesztsnl vesszk hasznt, amikor is oszlopok hozzadsa, illetve trlse gyakori feladat. A metdus kezdetben ltrehoz egy-egy Group, illetve Formating tmbt, melynek nagysga egyel nagyobb a columns tmb korbbi mretnl. Ezutn a columns, s a formats tmb minden elemt tmenti a tmb megfelel pozcij pontjra, az n+1-edik elem helyre pedig a paramterknt kapott Group g objektum kerl. Ezen csoport csupn alaprtelmezett formzst kap, hiszen a formzs ltrehozsa, lvn felhasznli feladat, csak az oszlop beillesztse utn trtnhet meg. Ennek ellenre a ksbbi formzsi adatok trolsnak helyet kell biztostani. Termszetesen itt is - ahogy a modell-view-controll modell elrja - minden privt vltoz rendelkezik publikus getter, illetve setter metdussal, s az osztlyban megtallhat egy "res" konstruktor. Tallhat ezen kvl mg az osztlyban egy olyan konstruktor is, melynek paramtere egy Group tmb (valamint tovbbi informcik a lekrdezsre nzve), azonban ezek felptse trivilis. lekrdezsek importlsnl s

16

A Formating osztly szintn tartalmaz privt vltozkat, azonban publikus osztlyvltozk is jelen vannak benne, melyek a megfelel sznezs kivlasztst teszik lehetv. Ezek sorrendben: tartalmazza: boolean italic: boolean bold: int fontSize: String color: dlt bettpus (alaprtelmezetten false) flkvr bettpus (alaprtelmezetten false) betmret (alaprtelmezett rtke 12pt) betszn (alaprtelmezetten DEFAULT_COLOR, azaz DEFAULT_COLOR, LIGHT_GREEN, DARK_RED, RED, GREY, DARK_BLUE, LIGHT_BLUE s DARK_GREEN. Az osztly az albbi privt vltozkat

nincs sznezs) Minden vltozhoz tartozik megfelel getter, s setter metdus, s az osztly tartalmaz "res" konstruktort, a szabvnynak megfelelen. Ez az osztly szintn felldefinilja az Object sosztlybl rklt toString metdust. A metdus egy karakterlncot ad vissza, mely az albbi formtummal br: bold: {true, false}; italic: {ture, false}; color: x; size y; ahol x a belltott betszn, y pedig a belltott betmret nagysga. Szmos klnbzsgk ellenre egyvalami kzs a kt osztlyban. Mindekett tartalmaz konstruktort, mely paramterl az ltaluk megvalstott toString metdus ltal visszaadott szveget vrjk. Ez a folyamat viszonylag egyszer Formating objektum esetben. Amennyiben a metdus null rtk stringet kap paramterknt, nem csinl semmit, minden ms esetben pedig a fent lert formtumbl kinyert adatok alapjn sszellt egy Formating objektumot, melyet ezutn a metdus visszaad. Lnyegesen bonyolultabb a helyzet egy Selection objektum esetn. Ebben az esetben a konstruktor elszr a StringTokenizer eszkzzel feldarabolja a paramtersztringet, majd a tokenekbl kinyeri az oszlopokat tartalmaz rszsztringet, hogy van-e rvnyes csoportosts, s hogy mekkora a csoportmret. Ezutn egy jabb StringTokenizer segtsgvel az oszlopok adatait beolvassa, s ltrehoz bellk egy Group[] tmbt. Az algoritmus komplexitst nveli, hogy minden Group objektumot ktfle kppen lehet rtelmezni. Tekinthetnk r egy egyszer egsz szmknt, s egy halmazknt egyarnt, amelytl fggen ms s ms kiratsi mdok vonatkoznak r, ami igaz beolvassra is. Errl bvebben a csoportokrl szl alfejezetben lesz sz.

17

Ezen konstruktoroknak nagy hasznt vesszk majd, amikor a felhasznl ltal ltrehozott lekrdezseket szeretnnk elmenteni, illetve a mr korbban elmentett lekrdezseket szeretnnk beolvasni.

2.1.3. A Graph, s Node beanek, s szerepkA Graph osztly taln a legegyszerbb osztlyok egyike a program sszes sszetevje kzl, m minden bizonnyal a legfontosabbak egyike is egyben. Az eddig emltett Bean-ek kzl taln ez ll a legkzelebb a szabvnyhoz. Nincs publikus adattagja, m minden (egyetlen) privt vltozhoz definil getter, s setter metdust, valamint tartalmaz res konstruktort. Ezen kvl pedig csupn egyetlen metdussal rendelkezik. A Graph osztly egy egyszer osztly, mely egy matematikai grfot reprezentl. Egyetlen vltozja egy Node osztlyba tartoz objektum, mely a grf gykert reprezentlja. Az osztly tartalmaz mg egy metdust, melynek neve writeGraphToFile. Ez egy rakurzv algoritmus, mely a mr korbban elksztett grf fjlba val kiratst vgzi el. Ezen metdus rszletesebb lersval egy kln alfejezet foglalkozik. A Node osztly azonban mr korntsem ilyen egyszer felpts. Minden csompont tartalmaz egy HashMap-et gyermekei, s egy HashSet-et gyermekei nevnek trolsra. Tartalmaz tovbb egy String vltozt, mely a sajt nevt, egy color vltozt, mely sznt, egy italic, s egy bolt vltozt, mely dlt, illetve flkvr formzst trolja, tovbb egy fontSize vltozt, mely betmrett tartalmazza. Minden fent lert vltozhoz tartozik getter, s setter metdus, s lteznek megfelel konstruktorok is. Lnyegesen rdekesebbek azonban azok az aprbb metdusok, melyeket az osztly ezeken fell megvalst. Az isLeave metdus true vagy false rtket ad vissza attl fggen, hogy az adott pontnak van-e gyermeke. Az addChild metdus beszr egy Node objektumot az aktulis cscs gyermekei kz. A getNumberOfChildren metdus visszaadja a cscs gyermekeinek szmt. A getChild metdus egy Node objektumot, mgpedig a paramterben megadott nev gyermeket adja vissza. A hasSuchChild visszatrsi rtke true, amennyiben az aktulis cscsnak van olyan gyermeke, melynek neve a paramterben megadott String rtkvel egyezik meg. A removeChild metdus eltvoltja a paramterknt megkapott nev gyermekt. Az osztly tartalmaz mg kt, a fent lertaknl komplexebb metdust. A recursiveFormating nvre hallgat egy Formating tpus formats tmbt, s egy depth egsz rtk vltozt vr paramterl. Ha depth rtke nagyobb a formats tmb nagysgnl, vagy formats tmb helyett null rtket kapunk a metdus terminl. A metdus meghvsa utn az aktulis cscs felveszi a

18

formats tmb depth sorszm elemnek formzsi adatait. Miutn ezzel vgzett megnveli a depth vltoz rtkt, s meghvja sajt magt az aktulis cscs minden gyermekre az eredeti tmbbel, egyel nagyobb mlysgben. A msodik, lnyegesen bonyolultabb clusterize fggvnnyel, s a hozz tartoz sortArray metdussal egy ksbbi alfejezet keretben foglalkozunk majd.

2.2. A dialgusablakokEgy program mkdsben mindig alapveten fontos elemek a program ltal hasznlt esemnykezelk felptse. Ezek azok a pontok, ahol a felhasznl kommuniklhat a rendszerrel, s amelyeken keresztl a legnagyobb a felhasznl beleszlsa a program futsba. A kvetkez alfejezetben bemutatom a rendszer ltal alkalmazott dialgusablakok ltalnos felptst, s a rendszer legfontosabb dialgusablakt, melynek feladata egy tblzatfjl beolvassa. Azon dialgusablakok trgyalsra azonban, melyek bemutatsa a dolgozat egy msik pontjn kulcsfontossg, termszetesen csak azon a ponton kertek majd sort.

2.2.1. A dialgusablakok ltalnos felptseA programban minden, a felhasznli interfszt alkot elem implementlja a java.awt.events.ActionListener interfszt. Ilyenformn nem szksges helyben definilt esemnykezelket hasznlnunk, melyek terjengs, s kevss elegns megoldsok. E helyett minden komponens esetn (ahol ezt a rendszer logikja megkvnja), egyszer addActionListener(this); parancsok kiadsval rendelhetnk esemnykezel objektumot az adott komponenshez. gy elkerlhetjk hossz, s nehezen rtelmezhet kdok rst, mgis egyedi, az osztlyra jellemz esemnykezel objektumot hozunk ltre, mely kpes elltni a r kiszabott funkcikat. Ahhoz, hogy a dialgusablakot esemnykezel objektumknt hasznlni lehessen mindenkppen, implementlni kell az ActionListener interfsz megfelel actionPerformed(ActionEvent e) fejlccel rendelkez absztrakt metdust. Ezen metdus mkdst tekintve - a rendszer minden dialgusablaknak esetben egy jl meghatrozott mintt kvet. Elszr a paramterben szerepl ActionEvent objektumtl annak getSource() metdusa segtsgvel elkrjk az esemnyt kivlt objektum nevt, majd az gy megkapott rtk alapjn szekvencilisan egyms utn helyezett if utastsokkal a vezrlst rszekre osztjuk.

19

Minden, az esemnyt kivlthat elem a program folysnak egy j gt jelenti, melyben az algoritmus a kivlt elemnek megfelel mkdst vgzi. A legtbb dialgusablak rzkeny bizonyos billentyk letsre. Az escape billenty letsnek hatsa ekvivalens a Cancel gomba val kattintssal, s ugyan ez igaz az enter billenty, s az OK gomb esetben is. Szmos ksbbiekben trgyalt dialgusablak rzkeny mg ezen fell tbb ms billenty letsre is, ezek trgyalsa viszont szintn az adott dialgusablak trgyalsakor esedkes. Ahhoz, hogy ezen funkcikat hasznlni tudjuk, el kell krnnk a hasznlni kvnt nyomgomb InputMap objektumt a JButton objektum beptett KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);

metdusnak segtsgvel. Ezutn a lekrdezett objektumnak az albbi metdushvs eredmnyt rtkl adva a helyes futshoz jutunk. getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW)

2.2.2. Fjl importlsa belltsokA program futtatsakor a dialgusablakok kzl a felhasznl elszr a fjl importlsra szolgl dialgusablakkal tallja szemben magt. Ezen osztly feladata egy tblzatfjl importlsa, s a szksges belltsok megadsnak lehetv ttele a felhasznl szmra. A felhasznl fjlimportlsi szndkt a Fjl men importls menpontjra kattintva jelezheti. Ezen menpontot a program futsa alatt a felhasznlnak legalbb egy alkalommal ki kell vlasztania. Amg a felhasznl egy hasznlhat tblzatfjl megnyitsra nem kert sort, addig a program tovbbi funkcii (exportls, lekrdezsek ltrehozsa, megnyitsa, s mentse) zroltak eltte. A megfelel funkci kivlasztsakor a felhasznl elszr egy JFileChooser ablakot lt, melyben tetszs szerint vlaszthat ki egy csv, illetve txt kiterjeszts, vagy akr (amennyiben ezt az ablak als rszben belltja) ms kiterjesztssel br szveges fjlt. Egy megfelelen paramterezett javax.swing.filechooser.FileFilter objektum segtsgvel gondoskodtam a megfelel kiterjeszts fjlok szrsrl. Termszetesen a fjlvlaszt ablak lehetv teszi az aktulis mappban egy megadott karaktersorozattal kezdd fjlnv alapjn a fjl automatikus kivlasztst is. Ez kivltkpp

20

hasznos, ha nagy mennyisg fjl kzl kell kivlasztanunk az importlni kvnt tblzatfjlt. Ezen funkci sikeres elltsa rdekben a megjelentett JFileChooser osztly leszrmaztatsra knyszerlnk a VinFC osztly formjban. Ezen osztly kidolgozsa nem sajt munka, az osztly az irodalomjegyzk [11] pontjban lert elrhetsggel kerlt megosztsra a vilghln. Felptst tekintve a dialgusablak meglehetsen sok komponensbl ll ssze. Az ablak bal fels rszben tekintlyes helyet foglal el egy tblzat, mely a kivlasztott tblzatfjl tagolst hivatott bemutatni a felhasznl ltal belltott szempontok alapjn. Ez alatt tallhat egy figyelmeztet szveg (alaprtelmezett esetben szrke sznnel), melynek kiemelsre akkor kerl sor, amennyiben a felhasznl utols belltsa a tblzat egy ksbbi sorban a korbban kiolvasott fejlc-informcikkal nem konzisztens (nagyobb szm) oszlop ltezst felttelezi. E mellett a szveg mellett tallhat egy nyomgomb, mellyel az elnzeti kp, s a figyelmeztetszveg azonnali manulis frisstst vlthatjuk ki. Ezen elemek alatt tallhatk a felhasznli adatbevitelt szolgl elemek. Itt tallhatk rdigombok a cellahatrolk belltshoz (vessz, pontosvessz, szkz, tabultor, egyb), valamint egy jellngyzet, mellyel bellthat, hogy a fejlc-informcikat a fjlbl kvnja kinyerni a felhasznl, avagy automatikusan szeretn legenerltatni azokat a programmal. Tallhatunk itt mg egy msik jellngyzetet is, mellyel bellthatjuk, hogy szeretnnk-e, ha a program bizonyos karakterek kztt ne vegye figyelembe a cellahatrol karakterek jelenltt. Ennek tbb szbl ll szkzzel hatrolt cellk esetn, esetleg vesszvel hatrolt, vagy pontosvesszt tartalmaz cellk esetn van jelentssge. Bellthatjuk mg ezen fell, hogy a fjl rtelmezse Unicode, vagy utf8 karakterkdolssal trtnjen. Ezen funkci programba trtn integrlsra a kezelhet inputfjlok szmnak nvelse cljbl volt szksg. Pldnak okn a Google cg internetes tblzatkezelje ltal exportlt csv fjlok utf8 karakterkdolst kvetnek. gy ezen forrsbl szrmaz fjlok Unicode kdolssal val hasznlata az kezetes betk kezelse szempontjbl lehetetlen. Miutn a felhasznl minden szksgesnek tlt belltst megtett, elrkezett a tnyleges importls ideje. Ekkor az OK gombra kattintva az algoritmus az elnzeti kpknt szolgl JTable objektumtl elkri annak TableModel objektumt, s ezen objektum segtsgvel a felhasznli fellet gykereknt funkcionl MindMapperGUI objektumnak adja t a beolvasott adatokat, mely megjelenti azokat. Ezzel a lpssel a felhasznl ell korbban zrolt menpontok is felolddnak, s a felhasznl megkezdheti az adatok rdemi feldolgozst. Az ablak megjelense egy generlt bemeneten az 1.sz. mellkletben megtekinthet.

21

2.2.3. Fejlcadatok mdostsaBizonyos esetekben a fejlcadatok mdostsa indokolt. Erre okot adhat a megnyitott fjlban lv helyesrsi, vagy logikai hiba, de fontos lehet a program ltal elzetesen automatikusan legenerlt fejlc mdostsa is. Ezen funkci kielgtst szolglja a ChangeHaderDialog nvre hallgat osztly. Trsaihoz hasonlan ez az osztly is implementlja az ActionListener interfszt, megknnytve ezzel az esemnykezelst. Az elzekben trgyal dialgusablakhoz kpest ezen osztly sokkalta egyszerbb felpts. Az ablakot a felhasznl a fablak un. SelectionPanel objektumn (lsd lentebb) tallhat ngy gomb kzl a legalsra kattintva rheti el. Ekkor egy apr dialgusablak jelenik meg melyen egy legrdl lista, egy beviteli mez, s hrom nyomgomb tallhat. A legrdl mezben talljuk a tblzat jelenlegi fejlcelemeit; ebbl kell kivlasztanunk az ltalunk mdostani kvnt mezt; az ettl az elemtl jobbra tallhat beviteli mezbe kell bernunk a kvnt fejlcelemet. Amennyiben a fenti mezknek mr rtket adtunk az als sor hrom gombjbl kell kivlasztanunk egyet. Az OK, s a Cancel gomb szabvnyosan mkdik; a vltoztatsok elmentsvel, vagy anlkl az ablak kilp. Ezzel szemben a bal oldali nyomgomb segtsgvel ttrhetnk ms mdostani kvnt cellkra is. Ekkor a dialgusablak elmenti a vltoztatsainkat, s tovbblp a legrdl lista kvetkez elemre, a felhasznlnak pedig nincs ms dolga, mint a kvetkez fejlcelemet megadni. Ilyen mdon a tblzat minden oszlopnak fejlce mdosthat felesleges kattintsok nlkl, jelents id megtakartst eredmnyezve. Az ablak megjelense egy generlt bemeneten az 1.sz. mellkletben megtekinthet.

2.3. A GUI, s mensv megvalstsaA kvetkez alfejezetben a felhasznli fellet felptst fogom bemutatni. Ennek sorn sort kertek a felhasznli fellet gykernek bemutatsra, a MindMapperGUI osztly, s elemeinek rszletes jellemzsre

2.3.1. A MindMapperGUI osztlyA felhasznli fellet szempontjbl, ahogy mondani szoks ezen osztly jelenti az alft, s az omegt. Ez az az osztly, mely felels a mensv, a beolvasott tblzat, s a ltrehozott lekrdezseket tartalmaz panel megjelentsrt. A felhasznli fellet legfels szint 22

tartjaknt ez az osztly felel a controll rtegbe tartoz MindMapperController osztllyal, s kzvetetten a JAVA Bean-ekben trolt informcik ellsrt. Ezen kvl tartalmaz mg egy egsz rtk language nev vltozt, ennek funkcijt azonban csak a kvetkez alfejezetben trgyalom majd. Az osztly vltozi kztt mindezek alapjn szerepelnie kell egy MindMapperController, s egy java.swing.JFrame tpus objektumnak. Ez utbbi jelkpezi a program futtatsakor megjelen fablakot. A fablak legfels szinten egy JSplitPane objektumot tartalmaz. Ennek rendeltetse a felhasznli fellet fggleges irny rszekre bontsa. A fels rsz a program indulsakor res, azonban tblzat importlsa utn itt jelenik meg egy JScrollPane objektuma gyazva az importlt tblzat tartalma. Az als rsz a program mkdse szempontjbl sokkal lnyegesebb. Ebben a mezben egy SelectionPanel objektum lthat, mely az elksztett lekrdezsek trolsra, s megjelentsre hivatott. Ez az objektum olyannyira fontos, hogy kln alfejezetben val kifejtst ltom clszernek. Ezen elemek inicializlsrt, s kirajzolsrt az osztly createAndShowGUI() nev metdusa a felels. Ez lltja be az ablak mrett, s tartalmt, adja hozz a megfelel MindMapperMenuBar objektumot, s teszi lthatv a fablakot. Ez a metdus az osztly startGUI() metdusban kerl meghvsra, mely a fent lert metdust egy j szlon hvja meg, meggyorstva ezzel a program futst, s biztostva ezzel a program stabilabb mkdst a felhasznli fellet leterheltsge esetn is. A startGUI metdust pedig a program indulsakor a controller osztly hvja meg, miutn ltrehozta a MindMapperGUI objektumot. A fent lertakon tl az osztly kritikus fontossg, mde rvidke metdusokkal is rendelkezik. Az addTable() metdus a beimportlt tblzat tvtelt hivatott lebonyoltani, a getControll() metdus pedig szmos ms osztly szmtalan metdusban kulcsfontossg. A dropTable() metdus, mint azt neve is mutatja, bezrja a megnyitott tblzatot, s a controller objektum grfjt jrainicializlja. Ezen fggvnynek a kilps nlkli bezrs funkci megvalstsnl van klns jelentssge.

2.3.2. A SelectionPanel, s elemeiA kvetkez alfejezetben a fent mr tbb zben SelectionPanel osztly bemutatsa kvetkezik. Ezen osztly kiemelt jelentssggel br mind a rendszer felhasznli felletnek megjelensnek, mind pedig a program mkdsnek szempontjbl. Az alfejezet tmjul szolgl osztly a java.swing.JPanel osztly leszrmaztatsval kpzdik, gy rkl minden

23

olyan tulajdonsgot, s metdust, mellyek egy JPanel objektum rendelkezsre llnak. Ez teszi lehetve, hogy egy SelectionPanel objektumot megjelenthetnk a felhasznli felletet jelkpez MindMapperGUI objektumot kt rszre oszt JSplitPane objektum als mezjben. Az osztly feladata a felhasznl ltal ltrehozott lekrdezsek trolsa, megjelentse, szerkesztse, s a trolt lekrdezsek alapjn egy Graph objektum legenerlsa. Vegyk sorba elszr a panel ltal tartalmazott komponenseket, ezt kveten pedig a megvalstott metdusokat!. Termszetesen ez az osztly is implementlja a megfelel esemnykezel osztlyt, biztostva ezzel JButton komponensei funkcionalitst. Az osztly tartalmaz ngy JButton objektumot a ngy f funkci irnytsra. Ezek feladata sorrendben: j lekrdezs hozzadsa, lekrdezs eltvoltsa, lekrdezs szerkesztse, tblzatfejlc mdostsa. Tartalmaz mg az osztly egy referencit, mely az aktulis MindMapperGUI objektumra mutat. Ezeken fell tartalmaz mg egy JTable objektumot egy JScrollPane objektuma gyazva, mely a mr elkszlt lekrdezsek adatait szemllteti. Ezen JTable objektum ltrehozshoz a rendszer egy SelectionTableModel objektumot hasznl, mely definilja a tblzat struktrjt. Ez a SelectionTableModel osztlyt az AbstractTableModel osztly leszrmaztatsval kpeztem. Az osztly trtalmazza az sosztlya ltal definilt metdusokat, s tulajdonsgokat, melyek lehetv teszik szmra, hogy belle egy kpzett objektum JTable objektum konstruktorban szerepelhessen. Az osztly definilja a megjelentend tblzat struktrjt; a tblzatban 4 oszlop szerepel, melyek kzl az els a lekrdezs sorszmt, a msodik a lekrdezs nevt, a harmadik a lekrdezett oszlopokat, a negyedik pedig azt mutatja meg, hogy kvnjuk-e a sok gyermekkel rendelkez cscspontokat csoportostani a kimeneti elmetrkpben. Ebben az oszlopban egy-egy JCheckBox objektum jelenik meg, mely attl fggen van bepiplva, illetve resen hagyva, hogy kvnjuk-e a cscspontokat csoportostani. Az osztly egy korbban mr hasznlt HashMap objektumban trolja a tblzat adatait, melynek kulcsai egsz szmok, rtkei pedig Selection objektumok. Ezen objektumok felptst ksbb bvebben tervezem bemutatni. Az osztly kt konstruktorral br, ezek kzl csupn paramtereik szmban trnek el. Az els paramtert, a MindMapperGUI objektumot mindenkppen meg kell adni, res konstruktorral az osztlyt nem lehet pldnyostani. Attl fggen pedig, hogy adunk-e meg msodik paramtert az osztly engedlyezi, vagy letiltja gombjai hasznlatt. Amennyiben mg tblzatfjl importlsra nem kerlt sor, gy ezen vltoznak true rtket kell adnunk (a vltoz neve is boolean tableDoesntExixt), hiszen egy tblzatfjl nlkl kiadott lekrdezs rtelmezhetetlen.

24

Tallhat mg itt kt metdus egy-egy mely Selection objektum tblzathoz val hozzadst, illetve szerkesztst vgzi el, valamint egy harmadik, mely a paramterben szerepl sorszm lekrdezst jelkpez Selection objektumot kri el a SelectionTableModel objektumtl. A tblzat kijellt oszlopban trolt lekrdezst trlhetjk, s lekrhetjk a trolt lekrdezsek szmt is a getNumberOfSelections metdus segtsgvel. Ezen metdusok ktsget kizran fontosak a program mkdsben, mgsem nevezhetjk ket olyannyira kritikus fontossgnak, mint az osztly generateAll nev metdust. Ez a csupn huszonhrom programsorbl ll metdus hivatott a trolt lekrdezsek alapjn elkszteni egy Table objektumot, melyet a MindMapController objektum generateGrap metdusa Graph komponlsra hasznl majd fel a ksbbiekben. Ennek a grfnak XML formtum lemezre rsval kpezi a rendszer a tnyleges elmetrkpeket, gy ezen metdus trgyalst kivltkpp fontosnak tartom. A metdus egy ciklusba szerveze egyenknt megvizsglja a ltrehozott lekrdezseket. Elszr lekri a Selection objektum ltal tartalmazott Group[] tmbt (lsd 3. fejezet), majd ltrehoz egy j Table objektumot, s ciklusban vgigmegy a tmb minden elemn. A ciklusban a tmb aktulis elemt megvizsglva eldnti, hogy csoportrl, vagy magnyos elemrl van-e sz (szintn a 3. fejezetben kerl trgyalsra), s ez alapjn ltrehoz egy Map objektumot. Ez az objektum egy oszlopot hivatott reprezentlni a Table objektumban. Amennyiben magnyos cscspontrl van sz, a tblzat egyszeren a beolvasott tblzatfjl a cscspontnak megfelel oszlopt tartalmazza. Amennyiben azonban a cscspont oszlopok egy halmazt reprezentlja, a beolvasott Table objektumban tallhat korbban mr emltett generateColumn metdus segtsgvel egy Group[] tmb alapjn legenerlja a tblzatfjl megfelel oszlopaibl sszeolvasott oszlopot. Ezt gy teszi, hogy soronknt a paramterben megkapott Group objektum ltal reprezentlt halmazzal indexelt oszlopok megfelel cellit konkatenlja, s kzjk kerektereket helyez el. gy lnyegben oszlopok egyestst vgzi. Ezen funkci rszletesebb trgyalst a 3. fejezetben teszem meg. Amint ez az oszlop kszen van, beszrjuk a Table objektumba annak addColumn metdusnak segtsgvel. Ezutn elkrjk a Controller objektum mr emltett metdusa segtsgvel legenerlunk egy grfot a frissen elksztett tblzatbl, s elkrjk a lekrdezs ltal tartalmazott Formating formats[] tmbt, s a Node bean recursiveFormating metdusa segtsgvel megformzzuk az egsz ft. Amennyiben pedig olt belltott csoportosts a lekrdezsen bell, meghvjuk a Node objektum clusterize metdust a Selection objektumban belltott rtkkel. Ha mindez sikerrel lezajlott, a metdus a MindMapperController osztly ltal tartalmazott mainGraph objektum gyermekei kz bekti

25

az aktulis ft, ezzel rszfv tve azt a fgrfban. Ezt kveten az algoritmus tovbblp a kvetkez feldolgozand lekrdezsre, melyet ugyan ezen lpsek mentn dolgoz fel.

2.3.3. A mensv, s kt fontosabb metdusaKln figyelmet s ezrt kln alfejezetet rdemel a rendszer ltal hasznlt mensv, ezen bell pedig ngy nagyobb komplexits metdusra szeretnm felhvni a figyelmet. Ezekkzll azonban csupn kett rszletezst szeretnm a dolgozat ezen pontjn megejteni, a msik kt metdut a kvetkez, legrdezseket, s csoportokat bemutat tmakr keretben szeretnm trgyalni. Az osztly a java.swing.JMenuBar osztly leszrmaztatottja, ami lehetv teszi szmra, hogy a mensvknt funkcionlhasson. A tartalmazott GUI komponensek rszletezsvel nem bajldnk, az osztly tartalmaz egy-egy JMenuItem objektumot minden funkci kivlasztshoz, melyek sorban: tblzatfjl mportlsa, lekrdezsek exportlsa, s importlsa, elmetrkp legenerlsa, s exportlsa, megnyitott tblzatfjl bezrsa (reinicializci), kilps, illetve egy kln JMenu objektum tartalmaz egy-egy JMenuItem objektumot, mely segtsgvel a felhasznli fellet nyelvnek belltsa trtnhet meg. Ennek mikntjrl rszletesebben rok majd a kvetkez alfejezetben. Ezen osztly szintn tartalmaz egy referencit a f MindMapperGUI objektumra. Tartalmaz mg egy String vltozt, mely a megnyitott tblzatfjl elrsi tvonalt hivatott eltrolni (mivel tbb metdusnak is szksge van ezen informcira), s egy boolean vltozt mely hibakezelst segti el, s amely azt mutatja meg, hogy trtnt-e mr tblzatfjl beolvassa. Tallhat mg itt egy ImportFileDialog objektum is, melynek a kivlasztott fjl importlsakor lesz klnsebb szerepe. Az osztly a tbbi GUI komponenshez hasonlan implementlja az ActionListener osztlyt. Az gy implementlt ActionPerformed metdus trzsben a kezelend esemnyt kivlt objektum szerinti lebontsban kerlnek meghvsra a lejjebb rszletezett komplex metdusok, mely ltal az esmnykezel felptse tlthatbb vlik. A fent emltett ngy komplex metdus kzl elsknt az importDatas nev fggvnyt szeretnm bemutatni. Ez a metdus vgzi az adatok beolvasst mint neve is mutatja. Mkdsnek elejn a metdus ltrehoz egy objektumot, mely a JFileChooser osztlyt leszrmaztat VinFC osztlybl [11] szrmazik. Az osztly annyit tesz hozz az alaprtelmezett JFileChooser osztlyhoz, hogy a fjlnv begpelt rszlete alapjn prbl megfelel fjlt tallni az aktulis knyvtrban. A fjlvlaszt objektum alaprtelmezetten csak csv s txt kiterjeszts fjlok kivlasztst engedlyezi, amennyiben azonban a felhasznl a minden fjl listaelemet

26

vlasztja az ablak als rszn tallhat listbl, brmilye szveges dokumentum feldolgozsra lehetsge nylik. Amennyiben a felhasznl kivlaszt egy fjlt, s az Open gombra kattint a metdus belltja az importlt fjl elrsi tvonalt tartalmaz vltoz rtkt, s a fent emltett boolean vltoz rtkt is true-ra mdostja. Ezt kveten lthatv teszi az ImportFileDialog objektumot, melyen a felhasznl megejtheti az importlshoz szksges belltsokat. Ezt kveten a metdus lthatv teszi a GUI objektum Table komponenst. Ezt a komponenst a dialgusablak adta t a GUI objektumnak, lthatv ttelrl viszont ezen metdusnak kell gondoskodnia. Ezt kveten a MindMapperController objektum mainGraph komponenst is inicializlnunk kell; ez kezdetben egyetlen cscs, melynek cmkje a new szveg, majd pedig a felhasznl eltt tblzatfjl hinyban elzetesen letiltott menpontok tiltsnak feloldsrl kell gondoskodnunk.

27

28

private void importDatas() { JFileChooser chooseOpenFile = new VinFC(); String[] extingtions = {"txt", "csv"}; // ismert kiterjesztsek FileFilter openFileFilter = new myFileFilter(extingtions, labelFactory.getLabel(Labels.knownExtingtion, language)); chooseOpenFile.setFileFilter(openFileFilter); int returnVal = chooseOpenFile.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { File chosenFile = chooseOpenFile.getSelectedFile(); path = chooseOpenFile.getSelectedFile().getAbsolutePath(); fileName = chooseOpenFile.getSelectedFile().getName(); chosenInput = true; setImportDialog(new ImportFileDialog(gui, true, chosenFile)); if(gui.getControl().getTableModel()!=null){ table = new JTable(gui.getControl().getTableModel()); *A tablazatot rarakjuk egy scrollpanere, * igy ha az tul nagy lenne az alk. meretehez * kepest akkor is gorgetheto lesz */ gui.addTable(table); gui.getSelectionPanel().tableAdded(); gui.getControl().setMainGraph(new Graph(new Node("new"))); gui.getWindow().setVisible(true); } JMenu fileMenu = (JMenu) this.getMenu(0); for(int i = 0; i< fileMenu.getItemCount();i++) fileMenu.getItem(i).setEnabled(true); } } }

2.3.3.1. bra: Az importDatas metdus

Vgre hagytam a legkomplexebb metdust, mely az elmetrkpnek megfelel XML fjl elksztsnek s lemezre rsnak lelke. Ezt a metdust fogom rszletesn bemutatni az alfejezet htra lv rszben. Ez a metdus az igazat megvallva nem is nmaga okn oly kritikus fontossg, hogy kln alfejezetet rdemeljen, azonban itt tallhat a belpsi pontja annak a rekurzv algoritmusnak, mely a Graph osztlyban tallhat, s amely a grf XML adatszerkezetben trtn kiratsrt felels.

29

private void exportMindMap(){ if(chosenInput){//ha mr importltuk a megfelel tblzatot JFileChooser chooseSaveFile = new JFileChooser("Save as..."); //jelenjen meg egy fjlkezelablak, //mely az .mm kiterjeszts elemeket mutatja String[] extingtion = {"mm"}; FileFilter ff = new myFileFilter(extingtion, labelFactory.getLabel(Labels.freeMinfOutputFile, language)); chooseSaveFile.setFileFilter(ff); chooseSaveFile.setCurrentDirectory(new File(path)); //default mappa int returnVal = chooseSaveFile.showSaveDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION){ try { gui.getSelectionPanel().generateAll(); // generltassuk le a tblzatnak megfelel grfot Graph generated = gui.getControl().getMainGraph(); Node p = generated.getRoot(); p.setName(fileName); String outputFile = chooseSaveFile.getSelectedFile().getAbsolutePath(); if(!outputFile.endsWith(".mm")) outputFile += ".mm"; BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile)); bw.write(""); bw.newLine(); bw.write(""); bw.newLine(); generated.writeGraphToFile(bw, p, 0); bw.write("");bw.newLine(); bw.close(); JOptionPane.showMessageDialog(null, labelFactory.getLabel(Labels.mindMapExportSuccesfull, language) + outputFile, labelFactory.getLabel(Labels.importError, language), JOptionPane.INFORMATION_MESSAGE); }catch(IOException e) { e.printStackTrace(); } } }else{ JOptionPane.showMessageDialog(null, labelFactory.getLabel(Labels.youMustOpenATableFrist, language), labelFactory.getLabel(Labels.importError, language), JOptionPane.ERROR_MESSAGE); } } 2.3.3.2. bra: az ExportMindMap metdus

Az elz alfejezet vgn trgyalt metdusokhoz hasonlan ez a metdus is egy JFileChooser objektum megjelentsvel indul. Itt vlaszthatja ki a felhasznl, hogy hov, milyen fjlnven szeretn importlt tblzathoz intzett lekrdezseinek eredmnyt kiexportlni. Miutn a felhasznl kivlasztotta a clterletet itt is elkezdik a lnyegi munka. Els lpsben a metdus kiadja a f MindMapperGUI objektum SelectionPanel komponensnek a fent trgyalt generateAll parancsot, mely hatsra a MindMapperController

30

objektum mainGraph komponensben elkszl a bevitt lekrdezseknek megfelel grf. Ezt kveten a metdus lekri ezt a mainGraph objektumot, s eltrolja ennek gykert egy p nevet visel Node tpus referenciban. Majd egy BufferedWriter, s egy FileWriter objektum segtsgvel ltrehozza a kvnt fjlt, s annak els kt sort feltlti a FreeMind ltal ktelezen megkvetelt kt sorral, mely a megnyitsra kijellt program elrhetsgt, s az ajnlott verziszmot tartalmazza. A program szerkesztsnek kezdetn a legfrissebb verzi a 0.8.1. verziszmot viselte, gy ennek megfelelen alakul az els kt sor minden esetben. Itt talljuk a szabvnyos FreeMind elmetrkpek struktrjra jellemz legfels szint gykrelem nyittagjt, melyen bell kerl rgztsre minden tovbbi cscs is. Ezen kt sor kiratst kveten kerl sor a MindMapperController osztly mainGraph komponensnek writeGraphToFile metdusnak meghvsval a tnyleges adatok kirsra, vagyis az elmetrkp adatokkal val feltltsre. Ezt a gykrelem lezrsa kveti, majd megjelenik egy tjkoztatszveg, mely kzli a felhasznlval, hogy sikeresen kiexportlta az elmetrkpet. A metdus mkdsben az egyetlen fekete folt mr csak a writeGraphToFile metdus mkdse maradt. Az alfejezet htra lv rszben ezen algoritmus mkdst trgyalom. "2.3.3. bra: A feldolgoz program definilsa

Ez a metdus hrom paramtert vr. Ezek kzl az els egy BufferedWriter osztlyba tartoz objektum, mely a kiratsrt felels, a msodik egy Node osztlyba tartoz objektum, a harmadik pedig egy egsz szm, mely az XML fjl helyes formzsrt felels. Br a FreeMind program nem kveteli meg a beolvasott elmetrkp helyes tabullst, ennek biztostsval a kiexportlt fjl tlthatsga jelents mrtkben nvelhet.

31

public void writeGraphToFile(BufferedWriter bw, Node p, int t){ try{ int tabs = t; tabs++; for(int i = 1;i