Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.

Slides:



Advertisements
Hasonló előadás
Tamás Kincső, OSZK, Analitikus Feldolgozó Osztály, osztályvezető A részdokumentumok szolgáltatása az ELDORADO-ban ELDORADO konferencia a partnerkönyvtárakkal.
Advertisements


Kamarai prezentáció sablon
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Készítette: Boros Erzsi
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
Erőállóképesség mérése Találjanak teszteket az irodalomban
MATEMATIKA Év eleji felmérés 3. évfolyam
Humánkineziológia szak
Mellár János 5. óra Március 12. v
6) 7) 8) 9) 10) Mennyi az x, y és z értéke? 11) 12) 13) 14) 15)
Műveletek logaritmussal
Elektromos mennyiségek mérése
Koordináta transzformációk
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Graphical Editing Framework.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling.
Az IBM SPSS Statistics programrendszer Gazdaságinformatikus MsC.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
A tételek eljuttatása az iskolákba
Elektronikai Áramkörök Tervezése és Megvalósítása
Elektronikai Áramkörök Tervezése és Megvalósítása
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
Védőgázas hegesztések
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Szerkezeti elemek teherbírásvizsgálata összetett terhelés esetén:
Darupályák tervezésének alapjai
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
NOVÁK TAMÁS Nemzetközi Gazdaságtan
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
PHP II. Tömbök, sztringek
Lineáris egyenletrendszerek (Az evolúciótól a megoldáshalmaz szerkezetéig) dr. Szalkai István Pannon Egyetem, Veszprém /' /
„MICROSOFT IT ÜZLETI INTELLIGENCIA MEGOLDÁS BEMUTATÓ” Avagy az IT adat vizualizációs lehetőségi egyéb szervezeti egységek felé („ablak” a nagyvilágra)
„MICROSOFT SYSTEM CENTER 2012 OPERATIONS MANAGER” Intelligens mérési megoldások gyorsan Benkovics Viktor Vezető tanácsadó Microsoft Magyarország – Services.
szakmérnök hallgatók számára
A évi demográfiai adatok értékelése
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Logikai szita Izsó Tímea 9.B.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
4. Feladat (1) Foci VB 2006 Különböző országok taktikái.
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
Matematika - 5. évfolyam © Kačmárová Fordította: Balogh Szilveszter.
var q = ( from c in dc.Customers where c.City == "London" where c.City == "London" select c).Including( c => c.Orders ); select c).Including(
7. Házi feladat megoldása
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
A pneumatika alapjai A pneumatikában alkalmazott építőelemek és működésük vezérlő elemek (szelepek)
HÍDÉPÍTÉS Acélszerkezetek
Csurik Magda Országos Tisztifőorvosi Hivatal
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
2006. május 15P2P hálózatok 1 Fóliák a vizsgára: 1. előadás  Bevezető: 11-16, 21,  Usenet: előadás:  Bevezető: 3-8  Napster: 
2006. Peer-to-Peer (P2P) hálózatok Távközlési és Médiainformatikai Tanszék.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
Nyitott Kapuk 2010 Beiskolázási kérdőívek értékelése.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
Virtuális Méréstechnika Sub-VI és grafikonok 1 Makan Gergely, Vadai Gergely v
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
Előadás másolata:

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 SWT vs. JFace  SWT −natív −Alacsony szintű elemkészlet −Jól kézben tartható működés −Sok kódolás  JFace −Magas szintű komponensek (SWT-re épít) −Jobban automatizált −Strukturáltabb szerkezet −Könnyebb újrafelhasználás −Kevésbé kézben tartható

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 SWT Hello World 1 import org.eclipse.swt.*; 2 import org.eclipse.swt.graphics.*; 3 import org.eclipse.swt.widgets.*; 4 public class HelloWorld{ 5 public static void main(String[] args) { 6 Display display = new Display(); 7 Shell shell = new Shell(display); 8 shell.setText("Hello, World!"); 9 shell.setSize(200, 100); 10 shell.open (); 11 while (!shell.isDisposed()) { 12 if (!display.readAndDispatch()) 13 display.sleep (); 14 } 15 display.dispose (); 16 } 17}

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 JFace Hello World public class MyApp extends ApplicationWindow { public MyApp(){ super(null); } protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello JFace world!"); parent.pack(); return parent; } public static void main(String[] args){ MyApp p = new MyApp(); p.setBlockOnOpen(true); p.open(); Display.getCurrent().dispose(); }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 JFace Hello World public class MyApp extends ApplicationWindow { public MyApp(){ super(null); } protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello JFace world!"); parent.pack(); return parent; } public static void main(String[] args){ MyApp p = new MyApp(); p.setBlockOnOpen(true); p.open(); Display.getCurrent().dispose(); } ApplicationWindow Alkalmazás-ablak objektum Menu, tooolbar, … kezelése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 JFace Hello World public class MyApp extends ApplicationWindow { public MyApp(){ super(null); } protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello JFace world!"); parent.pack(); return parent; } public static void main(String[] args){ MyApp p = new MyApp(); p.setBlockOnOpen(true); p.open(); Display.getCurrent().dispose(); } Elemek létrehozása (override)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 JFace Hello World public class MyApp extends ApplicationWindow { public MyApp(){ super(null); } protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello JFace world!"); parent.pack(); return parent; } public static void main(String[] args){ MyApp p = new MyApp(); p.setBlockOnOpen(true); p.open(); Display.getCurrent().dispose(); } Blokkoló open()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 JFace Hello World public class MyApp extends ApplicationWindow { public MyApp(){ super(null); } protected Control createContents(Composite parent) { Text helloText = new Text(parent, SWT.CENTER); helloText.setText("Hello JFace world!"); parent.pack(); return parent; } public static void main(String[] args){ MyApp p = new MyApp(); p.setBlockOnOpen(true); p.open(); Display.getCurrent().dispose(); } Mindenki a Display gyereke, elég ezt törölni

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 Eseménykezelés  Event-Listener modell helyett −Action-contribution modell −Absztraktabb modell −Több eseményforrás egységes, központi feldolgozása (pl. ablak bezárása több helyről) −3 alapvetés ●A felhasználói akciók gombokat, menüket, toolbarokat érintenek ●Minden komponenshez egy eseményt rendelünk ●Minden eseményhez egy kezelő lesz

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 Eseménykezelés  Event-Listener modell helyett −Action-contribution modell −Absztraktabb modell −Több eseményforrás egységes, központi feldolgozása (pl. ablak bezárása több helyről) −3 alapvetés ●A felhasználói akciók gombokat, menüket, toolbarokat érintenek ●Minden komponenshez egy eseményt rendelünk ●Minden eseményhez egy kezelő lesz

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 Akciók  Hasonló az event-ekhez  A Display elkapja az OS eseményt, a window Action-né alakítja  A Contribution-hoz kerül, mely meghívja az akció run() metódusát

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 Contribution  ContributionItem −Akciót eredményező GUI elem −ActionContributionItem ●Nincs konkrét megjelenés, a fill() kitöltésétől függ ●Ezt használjuk a leggyakrabban

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 Contribution  ContributionManager −Item-eket fogadó konténer elem ●Menu menedzser ●Toolbar menedzser

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 Példa: Action public class MyAction extends Action { StatusLineManager smanager; int trigger = 0; public MyAction(StatusLineManager sm){ super("&Click",AS_PUSH_BUTTON); smanager= sm; setToolTipText("Klikk ide!"); } public void run(){ trigger++; smanager.setMessage(trigger+" alkalommal kattintottál."); }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 Példa: Action public class MyAction extends Action { StatusLineManager smanager; int trigger = 0; public MyAction(StatusLineManager sm){ super("&Click",AS_PUSH_BUTTON); smanager= sm; setToolTipText("Klikk ide!"); } public void run(){ trigger++; smanager.setMessage(trigger+" alkalommal kattintottál."); } Az Action osztályból örököltetjük

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 Példa: Action public class MyAction extends Action { StatusLineManager smanager; int trigger = 0; public MyAction(StatusLineManager sm){ super("&Click",AS_PUSH_BUTTON); smanager= sm; setToolTipText("Klikk ide!"); } public void run(){ trigger++; smanager.setMessage(trigger+" alkalommal kattintottál."); } Megadjuk a szöveget és a kontroll stílusát

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 Példa: Action public class MyAction extends Action { StatusLineManager smanager; int trigger = 0; public MyAction(StatusLineManager sm){ super("&Click",AS_PUSH_BUTTON); smanager= sm; setToolTipText("Klikk ide!"); } public void run(){ trigger++; smanager.setMessage(trigger+" alkalommal kattintottál."); } Tooltip is megadható (mindenhol érv.)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 Példa: Action public class MyAction extends Action { StatusLineManager smanager; int trigger = 0; public MyAction(StatusLineManager sm){ super("&Click",AS_PUSH_BUTTON); smanager= sm; setToolTipText("Klikk ide!"); } public void run(){ trigger++; smanager.setMessage(trigger+" alkalommal kattintottál."); } Az akció végrehajtása

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 Példa: Action felhasználása public class MyApp extends ApplicationWindow { public MyApp(){ super(null); addStatusLine(); addMenuBar(); addToolBar(SWT.FLAT | SWT.WRAP); } StatusLineManager sline = new StatusLineManager(); MyAction act = new MyAction(sline); ActionContributionItem aci = new ActionContributionItem(act); protected Control createContents(Composite parent) { getShell().setText("Action example"); aci.fill(parent); parent.pack(); return parent;}

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Példa: Action felhasználása public class MyApp extends ApplicationWindow { public MyApp(){ super(null); addStatusLine(); addMenuBar(); addToolBar(SWT.FLAT | SWT.WRAP); } StatusLineManager sline = new StatusLineManager(); MyAction act = new MyAction(sline); ActionContributionItem aci = new ActionContributionItem(act); protected Control createContents(Composite parent) { getShell().setText("Action example"); aci.fill(parent); parent.pack(); return parent;} Létrehozunk egy Action példányt

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 Példa: Action felhasználása public class MyApp extends ApplicationWindow { public MyApp(){ super(null); addStatusLine(); addMenuBar(); addToolBar(SWT.FLAT | SWT.WRAP); } StatusLineManager sline = new StatusLineManager(); MyAction act = new MyAction(sline); ActionContributionItem aci = new ActionContributionItem(act); protected Control createContents(Composite parent) { getShell().setText("Action example"); aci.fill(parent); parent.pack(); return parent;} Az ablakra dobjuk az akciót

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 Példa: Action felhasználása folyt. protected MenuManager createMenuManager() { MenuManager main_menu = new MenuManager(null); MenuManager action_menu = new MenuManager("Menu"); main_menu.add(action_menu); action_menu.add(act); return main_menu; } protected ToolBarManager createToolBarManager(int style) { ToolBarManager tool_bar_manager = new ToolBarManager(style); tool_bar_manager.add(act); return tool_bar_manager; } protected StatusLineManager createStatusLineManager() { return sline; }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 Példa: Action felhasználása folyt. protected MenuManager createMenuManager() { MenuManager main_menu = new MenuManager(null); MenuManager action_menu = new MenuManager("Menu"); main_menu.add(action_menu); action_menu.add(act); return main_menu; } protected ToolBarManager createToolBarManager(int style) { ToolBarManager tool_bar_manager = new ToolBarManager(style); tool_bar_manager.add(act); return tool_bar_manager; } protected StatusLineManager createStatusLineManager() { return sline; } Egy menüt hozunk létre, amibe szintén beledobjuk az Action-t

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 Példa: Action felhasználása folyt. protected MenuManager createMenuManager() { MenuManager main_menu = new MenuManager(null); MenuManager action_menu = new MenuManager("Menu"); main_menu.add(action_menu); action_menu.add(act); return main_menu; } protected ToolBarManager createToolBarManager(int style) { ToolBarManager tool_bar_manager = new ToolBarManager(style); tool_bar_manager.add(act); return tool_bar_manager; } protected StatusLineManager createStatusLineManager() { return sline; } Hozzáadjuk egy toolbar-hoz is

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 Action-Contribution  Az akciók és contribution-ök összekötése −A contrib. Manager add() függvénye ●add(ActionContributionItem) – explicit item-ként való hozzáadás - csak egyszer! ●add(Action) – akció implicit hozzáadása – többször is lehet! −Az Action fill() függvénye segíségével ●fill(Composite) – dialógus elem lesz ●fill(MenuManager, int) – menü elem lesz (adott pozícióban ●fill(ToolBarManager, int) – toolbar elem lesz (Adott pozícióban)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 Action – további jellemzők  Alapvető függvények −setText(), setImage(), setTooltipText(), setDescription(), setEnabled()…  Checkbox, radio esetén −setChecked(), isChecked()  Gyorsbilentyűk −setAccelerator(), getAccelerator(), …

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 Szövegkezelés JFace-szel  IDocument −A szerkesztés alatt álló dokumentum tartalma −A tartalom változásról értesítés kérhető −Position – egy hely megjelölése ●Kezdőérték + hossz ●Ha a szöveget szerkesztik, automatikusan „követi” a jelölt részt −Partition content-type ●A szöveg egyes részei más-más típusúak lehetnek

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 Szövegkezelés JFace-szel  IDocument −Keresés ●Irány ●Kezdőpont ●case sensitivity, …

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 Szövegkezelés JFace-szel  ITextViewer −Dokumentum-alapú szöveg komponens −Események ●Tartalom változás ●Viewport (látható régió) változás −Plugin lehetőségek ●IUndoManager – undo/redo kezelés ●IDoubleClickStrategy – duplakatt kezelés ●IAutoIdentStrategy – automatikus behúzás ●ITextHover – ha az egér megáll a szövegen

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 Szövegkezelés JFace-szel  ITextViewer kiegészítések −org.eclipse.jface.text.contentassist ●Automatikus szöveg-kiegészítés −org.eclipse.jface.text.formatter ●Automatikus formázás (syntax highlight) −org.eclipse.jface.text.presentation ●Változás esetén −org.eclipse.jface.text.source ●Vizuális markerek elhelyezése −…

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 ToolBarManager  JFace elem −Action-öket fogadhat −ToolBar és ToolItem segíségével működik −ControlContribution – új! ●Bármilyen kontrollt feltehetünk ●Ebben az esetben Action helyett event/listener modell van!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 MenuManager  JFace elem −Action-öket fogadhat −Belül Menu és MenuItem példányok vannak −SWT MenuBar-ba is berakható (fill) −new MenuManager(„File) ●MenuManager.add(Action) ●MenuManager.fill(Control)  Ha hozzáadtuk egy kontrollhoz, többet ne adjuk hozzá máshoz!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 Viewer framework  Többféle widget egységes kezelése  MVC pattern −Model: ContentProvider, LabelProvider −View : Viewer −Controller: Listeners  Magasabb szintre emeli az SWT Table, Tree, List elemeit

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 Viewer framework

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 Viewer framework  Label provider −getText() −getImage() −isLabelProperty() ●Érinti-e a label-t az adott tulajdonság megváltozása? −Alap megvalósítás ●A benne lévő elemek toString() metódusával működik

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 Viewer framework  Content provider −A megjelenítendő elemeket adja meg −getElements() −Nem kötelező használni ●Az elemeket hozzáadhatjuk az add metódussal a viewerhez −inputChanged(Viewe, Object, Object) a root objektum megváltozott

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 Viewer framework  Listener-ek −Függ a viewer típusától −TreeView ●ItemSelection ●Fa események −StructuredViewer ●doubleClick

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 Viewer framework  Sorter-ek −Elemek rendezése megjelenítés előtt −category() ●Elemek kategóriákba sorolása −compare() ●Két elem összehasonlítása  Filter −Elemek leválogatása, szelektálása −select() ●Meg kell-e jeleníteni egy adott elemet

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Viewer framework  TreeViewer −ITreeContentProvider-alapú ●A megjelenítendő elemeket adja meg ●getChildren() – adott elem gyerekeinek megjelenítése ●hasChildren() – vannak-e gyerekei?  Ha lassú kiszámolni, mindig legyen true ●getParent() – szülő visszaadása

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Viewer framework  ListViewer −Elemek listájának megjelenítésére −IStructuredContentProvider ●A megjelenítendő elemeket adja meg ●getElements() – a lista elemeit adja vissza −Minden egyéb elem használható ●Sorter ●Filter ●Label provider

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 Viewer framework  Kiválasztott elemek −IStructuredSelection ●Az elemeknek kötött sorrendje van ●Biztosít egy iterator-t, hogy végig lépkedhessünk rajtuk

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 Viewer framework  TableViewer −Táblázat magasabb szinten −TableLayout – a tábla oszlopainak elrendezése ●addColumnData() −A mögötte lévő Table elérhető ●getTable() −ITableLabelProvider ●Adott sor és oszlop tartalmát adja meg

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 Viewer framework  Táblázatok szerkesztése −CellEditor ●ICellModifier  Érték elővétele az objektumból – getValue()  A szerkeszthetőség eldöntése – canModify()  Új érték beírása – modify() ●CellEditor  Beépített: Checkbox, Combo box, pop-up dialog, text

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 JFace dialógusok  MessageDialog −Üzenetek megjelenítése  ErrorDialog −Hibaüzenetek megjelenítése −IStatus – a hiba súlyosságának megadása, üzenet, exception megadása  InputDialog −Egyszerű szöveg bevitelére −IInputValidator – a bevitt szöveg érvényesítése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 JFace dialógusok  ProgressDialog −Háttérben futó munka állapotának megjelenítése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 Varázslók  3 szintű hierarchia −WizardContainer – varázslókat tartalmaz −Wizard – oldalakat tartalmaz ●canFinish() ●performCancel(), performFinish() ●createPageControls() −WizardPage – elemeket tartalmaz ●getName() ●getNextPage(), getPreviousPage() ●isPageComplete() ●canFlipToNextpage()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 DialogSettings  Dialógus beállításainak megőrzése −DialogSettings(String) −put(String, Object) −save(String) −load(String) −get(String) −get*(String)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 JFace összefoglalás  Komplex komponensek  Sok automatizmus  Összetett grafikus felületek tervezésére −Akciók −View framework −Dialógusok −Varázslók −GUI állapot mentése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Plug-in fejlesztés

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 Plug-in fejlesztés  Contribution rule −„everything is a contribution”  Az Eclipse keretrendszer minden eleme egy plug-in  Nincsenek „bevasalt” elemek −Sok plug-in (kb. 60 nagyobb az alap SDK- ban) −Még több lehetséges bővítés (pl. WSAD kb. 500 plug-in)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 Plug-in fejlesztés  Plug-in kezelés −Ha több ezer plug-int kell kezelni, kérdéses a teljesítmény −Jó lenne csak az éppen használtakkal törődni  Eredmény: Lazy loading rule −„Contributions are only loaded when theyare needed.”

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 Plug-in kezelés  Dilemma −Nem akarjuk az összes plug-in-t betölteni, −De tudni akarjuk, hogy mely plug-in-ok elérhetőek  Megoldás −Deklaráció/implementáció szétválasztása ●Csak a plug-inok jellemzőit olvassuk be ●Ez alapján már tudjuk, hogy milyen szolgáltatások érhetőek el

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 Plug-in elemek  Alapelemek −Erőforrások ●Ikonok ●Képek −Java kód jar állományban ●A plug-in megvalósítása −plugin.xml ●A manifesztum, a plug-in által megvalósított elemek leírása −manifest.mf ●Új elem, OSGi leírás

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 plugin.xml  Plugin ID −A plug-in egyedi azonosítására szolgál  Plugin name −Beszédes név  Verzió −Szám.szám.szám alakban −Kötelező, mert a függőségek kezelésében is szerepet kap  Provider −A plug-in készítőjének neve

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 plugin.xml  Függőségek −Mely plug-inok mely verziója szükséges a működéshez  Extension-ök − plug-in által hozzáadott elemek −Hivatkozva egy már létező plug-in egy extension point-jára

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 Manifest.mf  Open Services Gateway Initiative (OSGi) szabvány szerint  A név, id, szerző adatai  A függőségek leírása  Kerül bele  Ami benne van, azt nem kell megismételni a plugin.xml-ben  Csak Eclipse 3.0-tól működik

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins. helloworld.actionSet" label="Hello Action Set" visible="true"> <action id="hu.bme.mit.eclipse.plugins. helloworld.actions.HelloAction" label="Hello Action"

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins. helloworld.actionSet" label="Hello Action Set" visible="true"> <action id="hu.bme.mit.eclipse.plugins. helloworld.actions.HelloAction" label="Hello Action" A kiegészítendő pont

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins. helloworld.actionSet" label="Hello Action Set" visible="true"> <action id="hu.bme.mit.eclipse.plugins. helloworld.actions.HelloAction" label="Hello Action" A kiegészítés saját id-je

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins. helloworld.actionSet" label="Hello Action Set" visible="true"> <action id="hu.bme.mit.eclipse.plugins. helloworld.actions.HelloAction" label="Hello Action" A kiegészítés belső eleme

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 Implementáció  Miután a deklaráció már adott, következhet az implementáció  Az extension point-ok általában adott interfészt implementáló elemet fogadnak  Az implementáló osztályt is paraméterként adjuk meg a plugin-xml-ben

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins.helloworld.actionSet" label="Sample Action Set" visible="true"> <action class="hu.bme.mit.eclipse.plugins.helloworld.actions.SampleActi on" icon="icons/sample.gif" id="hu.bme.mit.eclipse.plugins.helloworld.actions.HelloAction" label="Hello Action" toolbarPath="sampleGroup" tooltip="Hello, Eclipse world"/>

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins.helloworld.actionSet" label="Sample Action Set" visible="true"> <action class="hu.bme.mit.eclipse.plugins.helloworld.actions.SampleActi on" icon="icons/sample.gif" id="hu.bme.mit.eclipse.plugins.helloworld.actions.HelloAction" label="Hello Action" toolbarPath="sampleGroup" tooltip="Hello, Eclipse world"/> Osztály megadása

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 Példa: Hello action <extension point="org.eclipse.ui.actionSets"> <actionSet id="hu.bme.mit.eclipse.plugins.helloworld.actionSet" label="Sample Action Set" visible="true"> <action class="hu.bme.mit.eclipse.plugins.helloworld.actions.SampleActi on" icon="icons/sample.gif" id="hu.bme.mit.eclipse.plugins.helloworld.actions.HelloAction" label="Hello Action" toolbarPath="sampleGroup" tooltip="Hello, Eclipse world"/> A toolbaron jelenjen meg az adott csoportban

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 Fontos szabály  Sharing rule −„Add, don’t replace”  Amikor egy új elemet készítünk, az éljen együtt a már meglévő, mások által készített elemekkel  Ne akarjuk kizárni a többi plugint

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 Példa: Hello action public class SampleAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public SampleAction() { } public void init(IWorkbenchWindow window) { this.window = window; } public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "HelloWorldPlugin Plug-in", "Hello, Eclipse world"); } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 67 Példa: Hello action public class SampleAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public SampleAction() { } public void init(IWorkbenchWindow window) { this.window = window; } public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "HelloWorldPlugin Plug-in", "Hello, Eclipse world"); } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { } Interfész, amit a workbench ablakba publikált akcióknak meg kell valósítani

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 68 Példa: Hello action public class SampleAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public SampleAction() { } public void init(IWorkbenchWindow window) { this.window = window; } public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "HelloWorldPlugin Plug-in", "Hello, Eclipse world"); } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { } Inicializálás, megmondják melyik ablakhoz tartozunk

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 69 Példa: Hello action public class SampleAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public SampleAction() { } public void init(IWorkbenchWindow window) { this.window = window; } public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "HelloWorldPlugin Plug-in", "Hello, Eclipse world"); } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { } Végrehajtjuk az akciót

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 Példa: Hello action public class SampleAction implements IWorkbenchWindowActionDelegate { private IWorkbenchWindow window; public SampleAction() { } public void init(IWorkbenchWindow window) { this.window = window; } public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "HelloWorldPlugin Plug-in", "Hello, Eclipse world"); } public void selectionChanged(IAction action, ISelection selection) { } public void dispose() { } Egyéb metódusok…

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 71 Implementáció  Az extension point-ok általában adott interfészt implementáló elemet fogadnak  Conformance rule −„Contributions must conform to expected interfaces”  Különben baj lesz…  Honnan tudjuk mit vár az extension point? −Fejlesztői dokumentáció (Help)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 72 Implementáció  Plugin osztály −A plugin életciklusát kezeli (ha kell) −start() −stop() −getDefault() −Képek, egyéb erőforrások betöltése −A plug-in leállásakor a foglalt erőforrások felszabadítása −Közös adatok kezelése (beállítások, dialógus adatok)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 73 Hogy kezdjünk hozzá?  Monkey see/monkey do rule −„Always copy the structure of a similar plug-in”  A már bevált receptet kell alkalmazni −Egyszerű plug-inokhoz van template wizard  Relevance rule −„Contribute only when you can successfully operate” −Csak olyankor jelenjen meg a hozzáadott elem, ha használható

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 74 Extension point-ok  Safe platform rule −„As the provider of an extension point, you must protect yourself against misbehavior on the part of extenders”  A felkínált kiegészítési pontnak biztonságosnak kell lenni, még a kiegészítés hibája esetén is!  Invitation rule −„Whenever possible, let others contribute to your contributions”

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 75 Extension point-ok  Fair play rule −„All clients play by the same rules, even me.” −Ne legyen saját „hátsó bejárat”, rejtett interfész  Explicit Extension Rule −„Declare explicitly where a platform can be extended” −A deklaráció a plugin.xml-ben  Diversity Rule −„Extension points accept multiple extensions”

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 76 Példa: Hello action

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 77 Példa: Hello action Extension point definiálása a plugin.xml fájlban

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 78 Példa: Hello action Séma fájl (megengedett xml elemek)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 79 Extension point-ok  Hogyan kérdezhetjük le a ponthoz tartozó kiegészítéseket? −Platform.getExtensionRegistry() −IExtensionRegistry.getExtensionPoint(String) −IExtension[] IExtensionPoint.getExtensions() −IExtension.getConfigurationElements() ●Az adott elem attribútumait, gyerekeit tartalmazza ●Validáció kérhető

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 80 Extension point-ok  Hogyan példányosítjuk a megadott osztályt? −Csak egy osztálynév van −A mi classloader-ünk nem találhatja meg, mert nincs a függő plugin-ok listáján −Nem is biztos, hogy kívülről látszik az osztály −Megoldás: kérjük meg az extension plug-in saját classloader-ét, hogy végezze el a piszkos munkát! ●IConfigurationElement.createExecutableExtension( String)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 81 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;}

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 82 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;} Elkérjük a registry-t

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 83 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;} Elkérjük a mi extension point-unkat

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 84 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;} Elkérjük a ponthoz tartozó aktuális extension-öket

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 85 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;} Példányosítunk egy osztályt

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 86 Példa: Hello action public List initNativeFunctionPlugins(){ IExtensionRegistry reg = Platform.getExtensionRegistry(); IExtensionPoint poi =reg.getExtensionPoint(native_ext_id); ArrayList ret=new ArrayList (); if (poi == null) return new Vector (); IExtension[] exts = poi.getExtensions(); for (int i=0;i<exts.length;i++) { IConfigurationElement[] el = exts[i].getConfigurationElements(); for (int j=0;j<el.length;j++){ try{ Object o =el[j].createExecutableExtension("class"); if (o instanceof ASMNativeFunction){ ret.add((ASMNativeFunction) o); } catch (Exception e){} }}return ret;} Ellenőrizzük a megfelelő interfész meglétét