nyílt fejlesztőrendszerek domain specifikus nyelvek eclipse modeling framework
DESCRIPTION
Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling Framework. Technológia részletesen. EMF - kódgenerálás. A generálás alapja a genmodel Platform specifikus Az ecore modell alapján készül részletes Létrejön Alapértelmezett editor Perzisztencia kezelés - PowerPoint PPT PresentationTRANSCRIPT
Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Nyílt FejlesztőrendszerekDomain specifikus nyelvek
Eclipse Modeling Framework
Technológia részletesen
2Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF - kódgenerálás
A generálás alapja a genmodel− Platform specifikus− Az ecore modell alapján készül− részletes
Létrejön− Alapértelmezett editor− Perzisztencia kezelés− Modell manipuláció
3Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF - kódgenerálás
Mi jön létre?− Néhány Eclipse plug-in
Minden esetre megoldás?− NEM!− Nem feltétlenül kényelmes editor− Nem feltétlenül elégséges „üzleti logika”
4Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF – a generált komponensek
Tree editor
Modell manipuláció
Modell tárolás
5Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Model
A modell kód a PIM 100%-os implementációjaHatékony perzisztencia kezelés XML fájlok
támogatásával100% folytonosság a modell és a kód között
− Előre tudjuk mit kapunk− Általában nem akarjuk módosítani
6Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Model
Lehetséges kiegészítések− Saját fájlformátum támogatás
● Parser● Okos szerkesztő
− Extra információk beszúrása a fájlokba● Kerülendő● Inkább legyen a PIM része
7Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Model – EClass implementáció
A generált implementáció egy előre definiált keretrendszert terjeszt ki
8Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Model – EClass implementáció
EAttribute -> get és set metódusokEReference
− „many” -> get metódus− „one” -> get és set metódus
9Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Model – EClass implementáció
Minden osztály tartalmaz framework-specifikus elemeket− Reflektiv set/get− Kezőértékek tárolása és inicializálása
10Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Az ecore keretrendszer
Igen összetett− Csak néhány elemét nézzük át
Általában csak egy kis részét kell megérteni a használathoz− Az EObject interfészt− A reflexiót− Az értesítési mechanizmust
A keretrendszer viselkedést az EObjectImpl és gyerekei valósítják meg
11Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EObject interfész
Minden interfész ezt terjeszti ki
12Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
eClass()
Gyakran használt metódusMinden üzleti objektum megkaphatja a saját
EClass reprezentációjátHasonló a Java getClass() hívásához
− reflexió
13Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
eResource()
Egy objektumhoz rendelhetünk egy Resource példány− Resource eResource()
Az erőforrás a perzisztens tárat reprezentálja
14Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EAttribute implementáció
Az attribútum get, set metódussá alakulÁltalában nem akarjuk módosítani az
implementációt
15Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EReference implementáció
Hasonló az EAttribute-hozA típus itt egy másik objektum leszNéhány kiegészítés szükséges, ha nem
tartalmazás jellegű reláció van− Az objektum más tárban is lehet
● Referencia-feloldás− Ellenőrizni kell a kétirányú referenciák integritását
● „opposite”
16Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EOperation implementáció
Az ecore modellben metódusokat is megadhatunk Nincs támogatás a szemantika definiálására Ötlet:
− Az ecore modellben definiáljuk a metódus● Nevét● Paramétereit, típusukat● Visszatérési típust
− Implementáljuk Java-ban A kódgenerátor csak vázat generál, amit kitöltünk
17Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EOperation implementáció
Első generálásnál az EMF egy Exception-t dobó implementációt készít
Át kell venni a felügyeletet− Beállítjuk a @generated taget NOT-ra− Implementáljuk a metódust
18Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EOperation implementáció
Ha definiáltunk egy metódust− Hozzáadja az interfészhez− Egy dummy implementációt készít az implementáló
osztályban
19Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Értesítés implementáció
Minden modell objektum támogatja az értesítés-küldést− Observer minta− Event objektumok az értesítésben− A genmodel-ben beállíthatjuk, hogy mi váltson ki
értesítést
20Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Értesítés implementáció
A megvalósítás részletei nem fontosak− Tipikusan sose akarjuk módosítani…
21Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.EDIT
Szerepe− A GUI és a modell szétválasztása− GUI független akciók implementálása
Nagyobb eséllyel módosítjuk− Módosítjuk az elem provider-t− Új parancsokat adunk hozzá
22Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Generator minta
Minden modell objektumhoz egy adapter jön létre az EMF.Edit-ben− Neve: ItemProvider− Pl. ArtistItemProvider
Az item provider az org.eclipse.emf.edit.provider.ItemProviderAdapter− Alapértelmezett implementáció az alap
funkcionalitáshoz− Általában felüldefiniáljuk bizonyos részét
23Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Generator struktúra
24Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Edit és a minták
25Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Címkék változtatása
Tipikus példa a testre szabásra a címkék változtatása− A genmodel-ben megadhatjuk, hogy egy objektum
mely attribútuma jelenjen meg címkeként− Mi van, ha többől akarjuk összerakni?
Változtatni kell a ItemProvider.getText-en− Megváltoztatjuk a @generated tag-et− Saját implementációt írunk
26Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Ikon változtatása
Másik tipikus példa az ikonok megváltoztatásaA genmodel egy egyszerű ikont rendel minden
elemhez− Az elemek az emf.edit/icons/obj16 és ctool16
könyvtárban találhatóak● Minden elemhez, illetve minden elem létrehozási
lehetőséghez
A legegyszerűbb a fájlok lecserélése saját ikonra
27Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Parancsok használata EMF.Edit-ben
Minden módosítás parancsokon (command) keresztül történik− Menü akció− Attribútum változtatás− Drag-n-drop
A keretrendszer generált és általános kód keverékét hsaználja− Common Command Framework (CCF)− EMF.Edit Generated Commands
28Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Parancsok használata EMF.Edit-ben
A parancsok használata a template method mintára épül
Az ItemProvider implementálja a createCommand() metódust, a kéréseket továbbítja protected metódusaiknak− createAddCommand()− createRemoveCommand()− …
A módosítás során a protected metódusok egyikét módosítjuk általában
29Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Parancsok használata EMF.Edit-ben : Példa
Egyszerű példa: loggolás hozzáadásaBonyolultabb példák esetén az összetett
parancsok módosítása is szükséges lehet
30Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF.Editor
Az EMF.Editor generálja az SWT/JFace kódot a grafikus editorhoz
Két fő opció− Hagyjuk ahogy van− Újraimplementáljuk, mivel köze sincs ahhoz, amit akarunk
31Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Mi generálódik?
Editor− Fastruktúra− Események – akciók összekötése− Workbench elemek beállítása
MenükVarázsló (új modell…)Plugin osztály
32Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Konklúzió – EMF.Edit
Az editor a leggyengébb láncszemTöbb próbálkozás van a javításraEgyik: GEF – Graphical Editing
Framework− Eclipse túránk következő állomása
33Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Kódgenerálás a gyakorlatban - keretrendszerek
• Eclipse
• Eclipse Modeling Framework
• Java Emitting Templates
• J2EE
• Velocity (Jakarta)
• JSP (XML/HTML)
• .NET
• CodeDOM
34Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
CodeDOM
• .NET alapú nyelvek kezelése
• Forráskód – DOM – forráskód transzformációk
• parser
• code generator
• nyelvek közötti fordítás
• dinamikus forráskód-generálás és fordítás
35Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Velocity/JSP
• Velocity
• Általános template nyelv
• Java objektumok használata
• Könnyen integrálható modellező eszközökbe
• Szöveges kimenet
• JSP
• Elsősorban XML alapú dokumentumokhoz (Web)
• J2EE-be integrált
36Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Java Emitting Templates
• Java Emitting Temlates (JET)• JSP alapú template nyelv• Szabad kimeneti formátum (Szöveges)• Java objektumok átadhatóak
37Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
38Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
JET fejléc
39Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
Bemenő paraméter definició
40Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
Céldokumentum kezdete
41Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
Ciklus a bemenő paraméter alapján
42Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
JET példa
<%@ jet package="hello" imports="java.util.*" class="XMLDemoTemplate" %><% List elementList = (List) argument; %>
<?xml version="1.0" encoding="UTF-8"?><demo>
<% for (Iterator i = elementList.iterator(); i.hasNext(); ) { %> <element><%=i.next().toString()%></element>
<% } %>
</demo>
Ciklusmag
43Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Kódgenerálás - összefoglaló
• A program-generálásból indult• UML -> Java, C++, ….
• ma már széles körben használt• dokumentum generálás (web)• report generálás (XML, XLS, CSV, nyomtatás)
• Széles körű támogatottság• EMF – JET• Velocity• CodeDOM
• NEM CSAK az MDA környékén használható!
44Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF extrák – UML
Org.eclipse.uml2 – UML2 plugin− Modell perzisztencia− Modell manipuláció− Default (tree) editor− Több ipari tool is használja
● Egyszerű eyüttműködés!
45Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
Emf extrák - OCL
OCL kényszerek kezeléseTetszőleges EMF modell felettMeta- és példány szintenInteraktív OCL editor…
46Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF extrák - query
Egyszerű, SQL szerű query apiModellek elemek kinyeréséreKönnyen programozhatóRugalmasBővíthető
47Budapest University of Technology and Economics
Fault-tolerant Systems Research Group
EMF extrák - reldb
Modell sorosítás/betöltés relációs adatbázisbaHibernate alapúHQL alapú lekérdezésekProjekt: Teneo (EMFT sub)