‘tábla import’ címkével ellátott bejegyzések

Május – Base tábla import

Zolnai Tamás, 2013. június 5. szerda

    Májusban a LibreOffice adatbázis-kezelőjének egy új funkciójának a fejlesztésébe kezdtem. Ez a funkció a strukturált szöveges (*.csv kiterjesztés) állományokból és az LO táblázatkezelője által támogatott más formátumokból való közvetlen táblaimportálás. Egy közvetlen importálási lehetőség szintén az érettségizők dolgát könnyítené meg – ahogy a csúcsérték/limit megadására használt beviteli mező is – mely az elsődleges szempont, de ez a funkció általában is sok felhasználót érint. Mi sem mutatja ezt jobban, mint az Apache OpenOffice Bugzilla-ján található megfelelő bug jelentés, amely a szavazatok számát tekintve az első 19 között szerepel. (Limitált számú szavazat áll rendelkezésére minden Bugzilla felhasználónak, és ezekkel a szavazatokkal lehet szavazni azokra a bugokra/funkciókra, melyek kiemelten fontosak az adott felhasználó számára.)

Bug jelentés az Apache OpenOffice Bugzilla-ján:
https://issues.apache.org/ooo/show_bug.cgi?id=51904
Megfelelő LibreOffice bug jelentés:
https://bugs.freedesktop.org/show_bug.cgi?id=51872

   Valójában a táblaimportálás nem egy teljesen új funkció. Két különböző módja is van a probléma megoldásának. Egyrészről a táblázatkezelőt megnyitva és abba importálva bármilyen általa támogatott fájlt (ide tartozik a *.csv kiterjesztés is) és onnan kijelölve a táblázat felhasználni kívánt részét, másolás+beillesztéssel létrehozható egy új tábla az éppen megnyitott adatbázisban.

   Másik hasonló megoldási út az adatbázis-kezelő „Kapcsolódás létező adatbázishoz” opciójának használata az „Adatbázistündér” ablakban. Ezzel a opcióval rá lehet kapcsolódni tényleges adatbázisokra, de akár a táblázatkezelő által használt fájlokra és szöveges állományok egy csoportjára is, úgy értelmezve őket, mint egy adatbázis. A kapcsolódás után kapunk egy új adatbázisfájlt, mely táblaként tartalmazza az összes munkalapot az adott Calc fájlból, illetve az összes *.csv/*.txt fájl tartalmát az adott mappából. Ez a kapcsolat azonban „csak olvasható” hozzáférést biztosít a fájlokhoz, módosítási lehetőséget nem. Éppen ezért ebből az adatbázisból szintén másolás+beillesztéssel át kell másolni a táblákat abba az adatbázisba, amelybe ténylegesen importálni szeretnénk.

   Mindkettő megoldásnak megvannak az előnyei és a hátrányai a másikhoz képest, de ami közös bennük, hogy mindkettő esetben meg kell nyitni egy másik ablakot (1 → Calc, 2 → Base) és másolás+beillesztéssel átmásolni az adott táblát. Ehelyett az új, ténylegesen az importálást célzó funkció közvetlenül elérhető lesz abban az adatbázisablakban, amelyikbe importálni szeretnénk és a vágólap műveleteket sem szükséges alkalmazni.

   Mivel a „Kapcsolódás létező adatbázishoz” funkció már létezik, és minden támogatott adatbázis (ide tartoznak a táblakezelő által támogatott formátumok is) tábláihoz hozzáférést nyújt, ezért a tervezett import varázslóban is ugyanazon felületen lehet majd kapcsolódni egy adott adatbázishoz. A különbség annyi, hogy a kapcsolódás után ki lehet választani az importálni kívánt táblákat és a táblák beszúrása az aktuális adatbázisba a „Tábla másolása” nevű párbeszédablak felhasználásával történik majd.

   Ahogy említettem a hónapban a funkció megvalósításába csak belekezdtem. Valójában egy részletes terv elkészítéséig jutottam, mely megvalósítva úgy fog kinézni, ahogy fent leírtam. Három jól elkülöníthető része van ennek a tervnek, illetve magának a megvalósításnak.

   Az első rész az „Adatbázistündér” adatbázis-kapcsolódáshoz tartozó részének kiemelése a jelenlegi osztályából egy újba, ezzel lehetővé téve annak felhasználását a tervezett „Importtündér” megvalósításában. A két varázsló csak két oldalban fog különbözni. Egyrészről az első oldalon az „Importtündér” esetén csak egy lista lesz azon adatbázis típusának kiválasztásához, amelyből importálni szeretnénk, míg az „Adatbázistündérnél” ugyanezen a kezdőoldalon három funkció érhető el, köztük a „Kapcsolódás létező adatbázishoz” egy ugyanolyan listával. Másrészről az utolsó oldalon, ami az „Adatbázistündérnél” a „Mentés és végrehajtás” nevet kapta, ott az „Importtündérnél” az importálni kívánt táblák kiválasztására alkalmas felület lesz elérhető. Az itt leírtak a tervezett felülettel kapcsolatosak, tehát a megvalósítás nézet részét tartalmazzák (lásd modell-nézet-vezérlő).

   A megvalósítás második része a nézet mögött meghúzódó adatbázis-kapcsolat felhasználása az adott adatbázis (illetve munkafüzet) tábláinak a lekérdezésére. Ez a kapcsolat a már említett „Kapcsolódás létező adatbázishoz” opciónak köszönhetően adott és ennek felhasználására a létező API-nak köszönhetően elég jó eszközök állnak rendelkezésre. Így a lekérdezett táblaneveket egyszerűen lekérdezhetjük és megjeleníthetjük az „Importtündér” utolsó „Tábla kiválasztása” oldalán, majd hasonló módon felhasználhatjuk őket a tényleges importálásnál. (Ez a rész a modell)

   A harmadik lépés a kiválasztott táblák átalakítása olyan struktúrává, amilyen formába a vágólapra másolás során kerülnek. Ezt az alakot felhasználva be lehet járni ugyanazt az utat, amit a másolás+beillesztés esetén jár be a program, így elérve a „Tábla másolása” ablak felhasználását. Ennek az ablaknak és a hozzá kapcsolódó opcióknak nagy előnye, hogy az adott adatbázisban használatos adattípusoknak megfelelően lehet beállítani a mezők típusát, ami különböző típusú adatbázisok közötti tábla mozgatás esetén lehet lényeges. A munkafüzetek és szöveges állományok importjánál ez még inkább fontos tényező, hiszen szöveges állomány esetén még kevésbé egyértelmű az adattípus. A tábla átalakítása vágólapra helyezhető formátumba szintén könnyen elérhető adott osztályok felhasználásával, továbbá a vágólap tényleges felhasználásának mellőzésével is el lehet érni azt, hogy lefusson a beszúráskor lefutó kódrészlet. (Ez pedig a vezérlő)

   Tehát a terv így néz ki általában. A tényleges tervtől csak annyiban tér el, hogy nem tartalmazza a megvalósító osztályok és a mintául használt kódrészletek megjelölését. Ahogy említettem elég nagy része a funkciónak már adott, a legtöbb munka a felhasználói felület kialakításával lesz. A háttérben dolgozó mechanizmusokat a már létező osztályok egyszerű felhasználásával meg lehet valósítani. Ez a megvalósítás a következő hetekben várható.

   Végül elérkeztem az ösztöndíjas napjaim végéhez és egyben az utolsó beszámolom befejezéséhez, úgyhogy köszönöm a figyelmet, remélem elég érthető és érdekes írásokat sikerült közzétennem. Köszönöm az Alapítványnak a lehetőséget és a támogatást. Kelemen Gábornak is köszönet jár a beszámolók alapvető nyelvtani hibáinak korrigálásáért és a szakzsargon kifejezéseinek érthetőbbé tételéért. Ami engem illett, továbbra is folytatom LibreOffice-os fejlesztői tevékenységemet. A jelen beszámolómban leírt terv megvalósítása után a GSoC keretében fogok – ezúttal a Writer-hez – hozzáadni egy új funkciót (karakterszegély). A későbbi terveim még nem rajzolódtak ki előttem teljes valójukban, de bizonyára azok között is ott lesz a LibreOffice.