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”,
A társadalmi tényezők hatása a tanulásra
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
Messages Szöveg A A B B C C A A B B C C A A B B C C Endpoint.
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)
Matematika - 5. évfolyam © Kačmárová Fordította: Balogh Szilveszter.
Elektromos mennyiségek mérése
Az új történelem érettségiről és eredményeiről augusztus Kaposi József.
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
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.
Kutyafajták Retrieverek Készítette: Bak Barna József
Szerkezeti elemek teherbírásvizsgálata összetett terhelés esetén:
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 VI Adatbázisok, MySQL
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;
Merre tovább? Tapasztalatok a kétszintű latin nyelvi érettségiről.
A közép- és emelt szintű vizsga tanári értékelése
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 Pomothy Judit 9. B.
Logikai szita Izsó Tímea 9.B.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
LENDÜLETBEN AZ ORSZÁG A Magyar Köztársaság kormánya.
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
Gyorsjelentés a Kulturális Központok Országos Szövetsége tagintézményeinek felméréséről Kecskemét,
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é.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
Csurik Magda Országos Tisztifőorvosi Hivatal
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
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.
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
Topográfiai gyakorlatok Magyarország
Kvantitatív módszerek
> 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 ActionContributionItem 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 ●DE AJÁNLOTT a content provider −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 (pre 3.3) −setCellEditors() – editorok megadása oszloponként… −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 Viewer framework  Táblázatok szerkesztése (>=3.3) −TableColumn.setEditingSupport ●canEdit(Object) – editálható-e az adott elem ●getCellEditor(Object) – a cella editor létrehozása ●getValue(Object) – editálható érték visszaadása ●setValue(Object, Object) – az új érték beírása a modellbe  ColumnViewerEditorActivationStrategy −Az editor aktiválás megadása  TreeViewerEditor/TableViewerEditor −Editor készítése a viewer köré −Editálás közbeni akciók kezelése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 JFace data binding  Adatkötés GUI elemekhez −Struktúrált programozás −Adat objektumok megadása −Adat-GUI szinkronizálás változás esetén  Adat-intenzív alkalmazásokban nagy segítség

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } Adat bean

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } Egyszerű dialógus létrehozása (label, text, button)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } Gombnyomásra duplázzuk az amount attribútum értékét

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } A context tartalmazza a létrehozott GUI-adatelem kötéseket

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } Létrehozunk egy „megfigyelhető” értéket az amount attribútumból

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 Példa public class GettingStarted { static Model model = new Model(); static void init(Shell shell) { Text text = new Text(shell, SWT.BORDER); Label label = new Label(shell, SWT.NONE); Button button = new Button(shell, SWT.PUSH); button.setText("Double!"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { model.setAmount(model.getAmount() * 2); } }); DataBindingContext dbc = new DataBindingContext(); IObservableValue modelObservable = BeansObservables.observeValue(model, "amount"); dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); dbc.bindValue(SWTObservables.observeText(label), modelObservable, null, null); GridLayoutFactory.swtDefaults().generateLayout(shell); } Az értéket hozzákötjük a text-hez és a label-hez is

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 Példa – osztály többi része public static void main(String[] args) { final Display display = new Display(); Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() { public void run() { Shell shell = new Shell(display); init(shell); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } }); display.dispose(); } A model-GUI kötéshez kötelező egy Realm-ot rendelni

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 Példa – osztály többi része public static void main(String[] args) { final Display display = new Display(); Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() { public void run() { Shell shell = new Shell(display); init(shell); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } }); display.dispose(); } Szokásos SWT esemény hurok

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 Realm  Feladata −Observable hozzáférések sorosítása −Speciális thread-ként értelmezhető  SWT-ben a GUI szálhoz kötődik  A modell oldalon nem kell törődni vele −A másik szálból történő hozzáférés automatikusan a realm-hoz szinkronizálódik

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 Modell osztály (bean) import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class Model { private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } private int amount = 0; public void setAmount(int newAmount) { int oldAmount = this.amount; this.amount = newAmount; changeSupport.firePropertyChange("amount", oldAmount, newAmount); } public int getAmount() { return amount; }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 Modell osztály (bean) import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class Model { private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } private int amount = 0; public void setAmount(int newAmount) { int oldAmount = this.amount; this.amount = newAmount; changeSupport.firePropertyChange("amount", oldAmount, newAmount); } public int getAmount() { return amount; } Support osztály az eseménykezelés támogatására

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 Modell osztály (bean) import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class Model { private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } private int amount = 0; public void setAmount(int newAmount) { int oldAmount = this.amount; this.amount = newAmount; changeSupport.firePropertyChange("amount", oldAmount, newAmount); } public int getAmount() { return amount; } Eseménykezelők regisztrálása, elvétele

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 Modell osztály (bean) import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; public class Model { private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } private int amount = 0; public void setAmount(int newAmount) { int oldAmount = this.amount; this.amount = newAmount; changeSupport.firePropertyChange("amount", oldAmount, newAmount); } public int getAmount() { return amount; } Attribútum változás esetén esemény küldése (FONTOS)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 Databinding - Validáció  Validátorok/formázók −A példában string-et szerkesztünk, de int a cél attribútum ●Default konverzió, validáció −Saját validátor is készíthető dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, // UI to model: new UpdateValueStrategy().setAfterConvertValidator(anIntValidator), // model to UI: new UpdateValueStrategy().setConverter(anIntToStringConverter));

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 Databinding - Validáció  Validátorok/formázók −A példában string-et szerkesztünk, de int a cél attribútum ●Default konverzió, validáció −Saját validátor is készíthető dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, // UI to model: new UpdateValueStrategy().setAfterConvertValidator(anIntValidator), // model to UI: new UpdateValueStrategy().setConverter(anIntToStringConverter)); UI -> modell konverter és validátor

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 Databinding - Validáció  Validátorok/formázók −A példában string-et szerkesztünk, de int a cél attribútum ●Default konverzió, validáció −Saját validátor is készíthető dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, // UI to model: new UpdateValueStrategy().setAfterConvertValidator(anIntValidator), // model to UI: new UpdateValueStrategy().setConverter(anIntToStringConverter)); Modell -> UI konverter

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 UpdateValueStrategy  A validáció/konverzió/update összefogása −Fázisok ●Validate after get  Az érték forrásból való kiolvasása utáni validáció ●Konverzió  Érték konverzió a forrás domain-ból a cél domainbe ●Validate after conversion  A konverzió értékének validálása ●Validate before set  A cél érték beállítása előtti validáció ●Value set  A célérték beállítása a cél objektumon

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 Validáció eredményének megjelenítése  Minden hibát Label errorLabel = new Label(shell, SWT.NONE); dbc.bindValue(SWTObservables.observeText(errorLabel), new AggregateValidationStatus(dbc.getBindings(), AggregateValidationStatus.MAX_SEVERITY), null, null);  Egy bizonyos elem hibáját Binding b = dbc.bindValue(SWTObservables.observeText(text, SWT.Modify), modelObservable, null, null); Label individualErrorLabel = new Label(shell, SWT.NONE); dbc.bindValue(SWTObservables.observeText(individualErrorLa bel), b.getValidationStatus(), null, null);

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 Databinding - TrackedGetter  Minden observable objektum, minden getter híváskor meghívja az ObservableGetter getterCalled metódusát – miért? −Nyilvántartható a függő elemek listája −Számolt attribútumok (ComputedValue, ComputedList) automatikusan frissülnek (ha observable-kre támaszkodnak csak)  Példa final IObservableValue firstName = SWTObservables.observeText(firstNameField, SWT.Modify); final IObservableValue lastName = SWTObservables.observeText(lastNameField, SWT.Modify); IObservableValue formattedName = new ComputedValue() { protected Object calculate() { return lastName.getValue() + firstName.getValue(); } };

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 Databinding - összefoglaló  Új megoldás a JFace-ben  Magas szintű adat-GUI szinkronizáció  Erősen fejlődik…  WIKI: −

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 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 67 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 68 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 69 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 70 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 71 Plug-in fejlesztés

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 72 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 73 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 74 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 75 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 76 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 77 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 78 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 79 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 80 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 81 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 82 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 83 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 84 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 85 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 86 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 87 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 88 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 89 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 90 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 91 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 92 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 93 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 94 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 95 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 96 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 97 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 98 Példa: Hello action

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 99 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 100 Példa: Hello action Séma fájl (megengedett xml elemek)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 101 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 102 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 103 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 104 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 105 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 106 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 107 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 108 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