Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.

Hasonló előadás


Az előadások a következő témára: "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András."— Előadás másolata:

1 Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András

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 Action fill() függvénye segíségével ●fill(Composite) – dialógus elem lesz ●fill(MenuManager, int) – menü elem lesz (adott pozícióban ●fill(ToolBarManager, int) – toolbar elem lesz (Adott pozícióban)

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 −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 −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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

79 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 79 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”

80 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 80 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ő

81 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 81 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)

82 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 82 Extension-ök értesítése/hívása  Hogyan értesítjük az extension-t? −Adott hívási felület (interface) −Fel kell készülni a hibákra, exception-ökre ●Kivételkezelés! ●Minden extension hívást külön try-catch blokkban  Fault containment region… −Good fences rule: „When passing control outside your code, protectyourself.” −Intézményesített gyanakvás: ISafeRunnable

83 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 83 Extension-ök értesítése/hívása  ISafeRunnable −public void run() – ebbe tegyük a futtatandó kódot −public void handleException(Throwable) ●Kezeli a kivételeket, amik futtatás közben keletkeztek ●Például kidobhatjuk az extension-t, ha bajt okozott

84 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 84 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); }

85 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 85 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Végigmegyünk az extension-ökön

86 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 86 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Kivesszük a következőt

87 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 87 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Csinálunk egy új burkoló-osztályt

88 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 88 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Aki hibázik, azt eldobjuk

89 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 89 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Meghívjuk az extension egyik metódusát

90 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 90 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Végrehajtjuk a runnable- t.

91 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 91 Csomagolás, publikálás  Ha készen áll a plugin-ünk a felhasználásra −Be kell csomagolni −Hangolni kell a plugin.xml opcióit  Telepítési cél −Saját gépünk −Más gépek −Automatikus telepítés/frissítés

92 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 92 Csomagolás, publikálás  Könyvtárak – library −A csomagolás első lépése −Osztályainkat jar fájlokba csomagtatjuk ●Lehet bináris vagy forrás csomag ●Megmondhatjuk, mely osztályok látszódhatnak kívülről −A kész libeket és egyéb fájlokat csomagolhatjuk össze az exporthoz ●Lehet bináris és forrás bundle

93 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 93 Csomagolás, publikálás  Finomhangolás −Nem használt függőségek kiirtása ●Automatikus ellenőrző eszközökkel −Plugin neve, készítő, … −Verziószám beállítása  Export −File -> Export -> Deployable plug-ins and fragments ●Az eredmény egy könyvtár, ami tartalmazza a plugint.

94 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 94 Feature  Egy témához kapcsolódó plug-inek gyűjteménye  Könnyebb menedzselhetőség érdekében jött létre  Az automatikus letöltés és telepítés atomi egysége

95 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 95 Feature  Kiegészítő információk −License aggreement −License rule „always supply a license with every contribution” −Upgrade site-ok listája −Feature saját verziója −Szükséges pluginok verziója

96 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 96 Update site  Automatikusan létrehozott weblap  Feature-ök elhelyezésére −Publikálás −Letöltés −Upgrade  Lista az elérhető feature-ökről és verziókról  Megkönnyíti a szoftver elosztást

97 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 97 Eddig  Egyszerű plugin létrehozása  Kiterjesztések létrehozása  Kiterjesztési pontok létrehozása  Plugin csomagolás  Feature létrehozás  Update site

98 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 98 Plugin fejlesztés teszteléssel

99 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 99 JUnit  Regressziós teszt keretrendszer  Erich Gamma és Kent Beck írta  Unit tesztelésre használatos Java-ban  Nyílt forráskódú  IBM CPL licensz alatt elérhető

100 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 100 JUnit  Web: http://junit.org/index.htm  Az Eclipse tartalmazza a JUnit-ot −GUI-t is kínál a tesztek futtatásához  Eclipse-n kívül is futtathatóak a tesztek

101 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 101 Eclipse - JUnit  A JUnit beállítása a Preferences ablakban lehetséges  Általában jók az alapbeállítások  Szűrőket lehet megadni, hogy mely csomagok és osztályok jelenjenek meg a stack trace-ben

102 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 102 TestCase - teszteset  Több tesztet is futtathat  A TestCase osztályból származik  Definiálja, hogy mely tagváltozók tartalmazzák a teszt állapotát az osztályon belül  Inicializálás a setUp metódussal  Takarítás a tearDown metódussal

103 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 103 TestCase készítése  Csináljunk egy új osztályt a project-ben  Adjuk hozzá a junit.jar-t a függőségekhez

104 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 104 TestCase létrehozása  Kiválasztjuk a csomagot, ahova a tesztet rakni szeretnénk  A new menüből válasszuk a JUnit Test Case-t.  Elnevezzük, stb.  Egy megfelelő osztály létrejön

105 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 105 Példa: TestCase package com.espirity.course.testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) { } protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); }

106 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 106 TestCase létrehozása  Minden „test”-tel kezdődő metódus tesztként lesz kezelve az osztályban −Sok teszt metódusunk lehet  Minden teszt metódus többféle „assert” metódust használhat, hogy a tesztelés alatt álló osztályok állapotát vizsgálja −Az assert metódusok öröklöttek

107 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 107 TestCase létrehozása  Assert −assertEqual(x,y) −assertFalse(boolean) −assertTrue(boolean) −assertNull(Object) −assertNotNull(Object) −asserSame(Object,Object) −assertNotSame(Object,Object)

108 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 108 Példa: TestCase package testing; import junit.framework.TestCase; public class FirstTestCase extends TestCase { public FirstTestCase(String arg0) { super(arg0); } public static void main(String[] args) {} protected void setUp() throws Exception { super.setUp(); } protected void tearDown() throws Exception { super.tearDown(); } public void testCompareSucceed() { assertEquals(0, 0); //this assertion will succeed } public void testCompareFail() { assertEquals(0, 1); //this assertion will fail }}

109 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 109 TestCase futtatása  Válasszuk ki az osztályt  Run -> Run as - > JUnit Test  Lefutnak a tesztek  Az eredmény a JUnit view-ban jelenik meg.

110 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 110 JUnit view  Információk −Piros/zöld a teszt eredménye hiba/ok −Látható a meghiúsult tesztek neve −Látható a hiba trace −Látható a lefutott tesztek száma −Látható a hibák száma

111 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 111 TestSuite  Több TestCase vagy Suite futtatása  A TestSuite osztályból örököltetjük  Létrehozás varázslóval… −File->New->Other…->Java->JUnit −A varázslóban válasszuk a JUnit Test Suite opciót −Megadhatjuk a résztevő Case-eket

112 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 112 Példa: TestSuite package com.espirity.course.testing; import junit.framework.Test; public class AllInclusiveTestSuite { public static Test suite() { TestSuite suite = new TestSuite("Test for com.espirity.course.testing"); //$JUnit-BEGIN$ suite.addTestSuite(FirstTestCase.class)); suite.addTestSuite(SecondTestCase.class)); //$JUnit-END$ return suite; }

113 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 113 TestSuite futtatás  Hasonló a TestCase-éhez  Minden megadott TestCase lefut  A JUnit ablak tartalmazza az eredményeket  Fontos: TestSuite is adható TestSuite-hoz!

114 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 114 PDE JUnit  JUnit támogatás plug-in fejlesztéshez  A sima JUnit nem használható −Nem Workbench-ben fut −Az Eclipse plug-inok nem leérhetőek  PDE JUnit −Külön futtatási mód

115 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 115 Plugin futtatás Alap Eclipse, ezen dolgozunk

116 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 116 Plugin futtatás Projectek a workbench- ben

117 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 117 Plugin futtatás Ha plugint futtatunk egyúj Eclipse példány indul

118 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 118 Plugin futtatás Betöltődik a plugin-unk

119 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 119 Plugin futtatás Külön workspace látszik

120 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 120 Plugin teszt futtatás Teszt projekt a workspace-ben

121 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 121 Plugin teszt futtatás A teszt is betöltődik, valamint a teszt futtató

122 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 122 PDE JUnit működés  Írunk egy tesztet (ugyanúgy, mint alapesetben)  Futtatjuk JUnit Plug-in Test-ként  Egy Eclipse ablak nyílik, majd a tesztek lefutása után bezáródik  A teszteredményt a szokásos ablakban találhatjuk meg

123 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 123 PDE JUnit működés  Hol legyenek a tesztek? −Lehet a tesztelendő plug-inban is −De! ●A JUnit függőségeket be kell építeni ●Keveredik a kód és a teszt −Tegyük külön plug-inba, ami könnyen leválasztható ●Ez függ az eredeti plug-in-től

124 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 124 Mit teszteljünk?  Nyilván csak a meghajtható részek (API) tesztelhető  Nincs lehetőség közvetlen GUI tesztre −Rational Robot  Amit tesztelni szeretnénk, látható kell legyen  Erősen függ a konkrét plug-intól

125 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 125 Gyakori kiterjesztések

126 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 126 View  Általános információ-megjelenítő elem  Extension point: −org.eclipse.ui.views −If: IViewPart  Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is

127 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 127 Példa: View public class View extends ViewPart { public static final String ID = "raktarAppFrontend.view"; private TreeViewer viewer; public void createPartControl(Composite parent) { //View controls initialization } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); }

128 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 128 View  setFocus metódus −Hova kerüljön a fókusz? −Nekünk kell megmondani… −Program to API contract rule: „Check and program to the Eclipse API contract.” −Ezt a metódust nekünk nem szabad hívni! −Helyette: IWorkbenchPage.showView(String) −És: IWorkbenchPage.activate(IViewPart)

129 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 129 View  Általános információ-megjelenítő elem  Extension point: −org.eclipse.ui.views −If: IViewPart  Sokféle lehetőség van információ megjelenítésére −Tartalmazhat SWT és JFace elemeket is

130 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 130 Menü elemek  Pop-up menü: ActionSet-ek (már volt)  Context Menü −Jobbgombra előugró menü egy adott elemen −Invitation rule-> általában mindegyik context menü fogad új elemeket −Elemek: Action-ök, separator-ok −Két speciális elem, amik közé mások menü elemei kerülhetnek (MB_ADDITIONS) −Hozzáadás: org.eclipse.ui.popupMenus ●A View megadásával

131 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 131 Perspektívák  Layot-ot definiál a megjelenítendő view-k és editorok számára  Pl. Java/Debug/Resource perspektívák  Perspektíva kiegészítése −Megadható hol jelenjen meg a view, ha megnyitják −Kezdetben látható legyen a view?  RCP alkalmazásoknál teljesen új perspektívát készítünk! (programozottan)

132 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 132 Help  Minden plugin tartalmazhat help-et  Alapelem: TOC – Table of contents −Fa −Más toc-okat és topic-okat tartalmaz  Topic −Egy html fájl  Extension point: org.eclipse.help.toc  Lehet különálló plugin (nem keveredik a kóddal)

133 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 133 Help készítése  A fő toc: toc.xml-ben (konvenció) …

134 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 134 Help  Topic elemek −Van címkéjük −Van egy fájl hivatkozás a tartalmukra −Ha a címkét kiválasztjuk, betöltődik a megadott fájl −A HTML minden elemet tartalmazhat, amit általában (képek, linkek, …)

135 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 135 Help – plugin.xml …

136 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 136 Integrált Help  Topic hozzáadása létező help-hez  Pl. határtalan tudásunkkal gyarapítni szeretnénk a beépített PDE súgót  Anchorok helyezhetőek el a toc-ban (invitation rule)  Toc link_to attribútum -> útvonal a toc gyökeréhez (az anchorhoz)  Példa:

137 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 137 Context sensitive help  „F1” szindróma  Hozzárendelés: −WorkbenchHelp.setHelp(Control,String)  Help context extension: −Egy xml fájl, ami leírja a context-eket (mely topicok jelennek meg, …) + egy description (általános szöveg) −Ezt az xml-t mint org.eclipse.help.context extension-t kell bejegyezni

138 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 138 Internationalization  A plug-inok nemzetközivé tétele, többnyelvűsítése  Első lépésben eltávolítjuk a string konstansokat a kódból és egyéb fájlokból, hogy könnyen cserélhető legyen a felület szövege

139 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 139 I18N – plugin.xml  A plugin.xml egyes szövegei csak a rendszer számára láthatóak (extension id, …) ezeket nem kell lefordítani  Másokat viszont a felhasználó is lát (action label) – ezeket ki kell szedni, hogy könnyen le lehessen fordítani −plugin.properties – név érték párok −%név – az adott helyre behelyettesíti a talált értéket  feature.xml-nél hasonló módszer (feature.properties)

140 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 140 I18N – forráskód  A Java forráskód egy része felhasználó számára látható szöveget tartalmaz (gombfelirat, üzenetek…) – ezeket ki kellene szedni…  Más stringek viszont fontos rendszer- konstansokat tartalmaznak (id, …) – ezekenek maradni kell  Megoldás: megjelöljük a maradókat: //$NON-NLS-1$

141 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 141 I18N – forráskód  Előkészületek: −Resource bundle létrehozása a plug-in-hoz (akrá több is) −Minden bundle-be rakjunk egy properties fájlt (pl. messages.properties), és egy helper osztályt, mely ezt betölti −A kulcsok legyenek kvalifikáltak, hogy ne legyen ütközés (pl. Osztaly.elem.attributum)

142 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 142 Eclipse támogatás  Source -> Externalize strings −Megkeresi a stringeket, létrehozza a bundle-t és a beolvasó segédosztályt. −Mindent elrendez nekünk

143 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 143 Probléma - publikálás  Mit tegyünk a plugin publikálásakor?  Várjuk meg az összes fordítást? – időveszteség  Adjunk ki új verziót minden fordításkor? – bonyolult  Megoldás: fragment-ek − Külön elemek, melyek a plugin egy részét tartalmazzák – nyelv vagy platform specifikus elemekhez találták ki

144 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 144 Accessibility  A plugin legyen elérhető hátrányos helyzetűek számára is −Minden funkció legyen elérhető billentyűzetről −Az elemekhez rendeljünk cimkéket, hogy a felolvasó programok számára legyen elégéséges információ −A színeket csak mint kiterjesztést használjuk −Tegyük lehetővé erős kontrasztos üzemmód használatát −A hangjelzések és kép legyen kiváltható

145 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 145 A plugin megnyitása más programozók számára  API definiálása −Meg kell határrozni, mely interfészek, osztályok látszanak, melyeket kell másoknak használni −Csak a szükségeseket exportáljuk −Az exportán megadhatunk egy prefixet is az osztálynevekre -> teljesítmény!

146 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 146 Belső és nyilvános csomagok  Explicit API rule: „Separate the API from internals” −Lehetőleg világosan el legyen választva a nyilvános API és a belső osztályok (pl. külön csomag)  Stability rule: „Once you invite others to contribute, don’t change the rules” −Lehetőleg tartsuk stabilan az API-t  Defensive API rule: „Reveal only the API in which you have confidence, but be prepared to reveal more API as clients ask for it.” −Csak a stabil részeket mutassuk meg

147 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 147 Core és UI  A nagy komponensek általában külön plug-inbe helyezik a belső működést és az UI-t  Ez praktikus, és kikényszeríti a kettő közötti interfész definiálását −Könnyen cserélhető, kiegészíthető GUI −Külön-külön fejleszthető elemek

148 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 148 Extension point  A hivatalos kiegészítési mechanizmus alapeleme  Fontos, hogy definiáljunk hozzá megfelelő sémát! −Ez adja meg a használható elemeket


Letölteni ppt "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András."

Hasonló előadás


Google Hirdetések