Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaIrén Vargané Megváltozta több, mint 10 éve
1
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace
2
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ó
3
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}
4
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(); }
5
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
6
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)
7
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()
8
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
9
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
10
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
11
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
12
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
13
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 Contribution ContributionManager −Item-eket fogadó konténer elem ●Menu menedzser ●Toolbar menedzser
14
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."); }
15
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
16
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
17
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.)
18
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
19
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;}
20
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
21
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
22
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; }
23
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
24
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
25
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)
26
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(), …
27
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
28
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, …
29
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
30
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 −…
31
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!
32
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!
33
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
34
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 Viewer framework
35
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
36
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
37
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
38
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
39
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
40
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
41
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
42
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
43
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
44
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
45
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
46
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
47
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)
48
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
49
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
50
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
51
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
52
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
53
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
54
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
55
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; }
56
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
57
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
58
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)
59
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));
60
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
61
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
62
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
63
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);
64
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(); } };
65
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: −http://wiki.eclipse.org/index.php/JFace_Data_Binding
66
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
67
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
68
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()
69
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)
70
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
71
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 71 Plug-in fejlesztés
72
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)
73
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.”
74
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
75
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
76
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
77
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
78
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
79
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"
80
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
81
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
82
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
83
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
84
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"/>
85
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
86
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
87
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
88
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() { }
89
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
90
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
91
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
92
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…
93
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)
94
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)
95
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ó
96
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”
97
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”
98
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 98 Példa: Hello action
99
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
100
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 100 Példa: Hello action Séma fájl (megengedett xml elemek)
101
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ő
102
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)
103
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;}
104
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
105
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
106
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
107
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
108
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.