Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaEszter Pintérné Megváltozta több, mint 10 éve
1
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés
2
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 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”
3
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 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”
4
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 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ő
5
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 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)
6
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 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
7
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 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
8
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 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); }
9
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 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
10
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 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
11
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 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
12
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 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
13
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 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
14
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 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.
15
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 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
16
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 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
17
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 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.
18
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 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
19
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 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
20
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 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
21
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 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
22
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 Plugin fejlesztés teszteléssel
23
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 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ő
24
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 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
25
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 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
26
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 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
27
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 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
28
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 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
29
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 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(); }
30
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 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
31
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 TestCase létrehozása Assert −assertEqual(x,y) −assertFalse(boolean) −assertTrue(boolean) −assertNull(Object) −assertNotNull(Object) −asserSame(Object,Object) −assertNotSame(Object,Object)
32
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 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 }}
33
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 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.
34
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 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
35
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 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
36
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 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; }
37
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 TestSuite futtatás Hasonló a TestCase-éhez Minden megadott TestCase lefut A JUnit ablak tartalmazza az eredményeket Fontos: TestSuite is adható TestSuite-hoz!
38
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 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
39
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Plugin futtatás Alap Eclipse, ezen dolgozunk
40
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Plugin futtatás Projectek a workbench- ben
41
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 Plugin futtatás Ha plugint futtatunk egyúj Eclipse példány indul
42
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 Plugin futtatás Betöltődik a plugin-unk
43
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 Plugin futtatás Külön workspace látszik
44
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 Plugin teszt futtatás Teszt projekt a workspace-ben
45
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 Plugin teszt futtatás A teszt is betöltődik, valamint a teszt futtató
46
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 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
47
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 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
48
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 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
49
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Gyakori kiterjesztések
50
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 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
51
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 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(); }
52
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 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)
53
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 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
54
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 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
55
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 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)
56
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 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)
57
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 Help készítése A fő toc: toc.xml-ben (konvenció) …
58
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 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, …)
59
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 Help – plugin.xml …
60
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 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:
61
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 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
62
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 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
63
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 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)
64
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 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$
65
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 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)
66
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 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
67
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 67 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
68
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 68 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ó
69
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 69 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!
70
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 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
71
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 71 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
72
Budapest University of Technology and Economics Fault-tolerant Systems Research Group 72 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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.