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

Slides:



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


Kamarai prezentáció sablon
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
Erőállóképesség mérése Találjanak teszteket az irodalomban
MATEMATIKA Év eleji felmérés 3. évfolyam
21 Years of Partnership and Innovation 1989 Citrix Systems founded 2010 Citrix signed licensing agreement with Microsoft for NT Server Introduced Independent.
Humánkineziológia szak
Mellár János 5. óra Március 12. v
6) 7) 8) 9) 10) Mennyi az x, y és z értéke? 11) 12) 13) 14) 15)
Matematika - 5. évfolyam © Kačmárová Fordította: Balogh Szilveszter.
Elektromos mennyiségek mérése
Koordináta transzformációk
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Graphical Editing Framework.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling.
Bevezetés a tárgyakhoz Tárgyak  Objects are the containers for values of a specified type  Objects are either signals, variables or constants  Once.
Az IBM SPSS Statistics programrendszer Gazdaságinformatikus MsC.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
Basics A few things one must know. Slides Insert a title slide Put a title on it.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
A tételek eljuttatása az iskolákba
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
Védőgázas hegesztések
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Course Situation and Event Driven Models for Multilevel Abstraction Based Virtual Engineering Spaces Óbuda University John von Neumann Faculty of Informatics.
File Classification Infrastructure
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Szerkezeti elemek teherbírásvizsgálata összetett terhelés esetén:
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
PHP II. Tömbök, sztringek
„MICROSOFT IT ÜZLETI INTELLIGENCIA MEGOLDÁS BEMUTATÓ” Avagy az IT adat vizualizációs lehetőségi egyéb szervezeti egységek felé („ablak” a nagyvilágra)
„MICROSOFT SYSTEM CENTER 2012 OPERATIONS MANAGER” Intelligens mérési megoldások gyorsan Benkovics Viktor Vezető tanácsadó Microsoft Magyarország – Services.
szakmérnök hallgatók számára
108 A kísérletek célja egy speciális anyag optimális előállítási körülményeinek meghatározása volt. A célfüggvény a kihozatal %. melynek maximális értékét.
Gincsai Gábor Dávid Zoltán MSDN Kompetencia Központ Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák Plug-in fejlesztés teszteléssel Balogh.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
TERMÉKAJÁNLÓ DOBOZOK Érvényes: február 8.. TERMÉKAJÁNLÓ DOBOZOK  Képes-szöveges termékajánló dobozok az Index, Velvet és Dívány cikkoldalain 
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
Matematika - 5. évfolyam © Kačmárová Fordította: Balogh Szilveszter.
var q = ( from c in dc.Customers where c.City == "London" where c.City == "London" select c).Including( c => c.Orders ); select c).Including(
Tanulni, tanulni, tanulni Értékesítői képességek, a személyzet képzése.
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Csurik Magda Országos Tisztifőorvosi Hivatal
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
2006. Peer-to-Peer (P2P) hálózatok Távközlési és Médiainformatikai Tanszék.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
Előadás másolata:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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

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

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); }

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

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

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

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

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

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.

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

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

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.

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

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

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

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

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

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ő

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 100 JUnit  Web:  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

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

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

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

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

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(); }

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

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)

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

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.

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

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

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; }

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!

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

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

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

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

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

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

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

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ó

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

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

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

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

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

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(); }

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)

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

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

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)

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)

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

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, …)

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

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:

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

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

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)

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$

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)

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

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

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ó

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!

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

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

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