Statikus/dinamikus, sima/behavioural metamodellek elkülönülése.

0 votes
asked Mar 20, 2016 in MDSD by fnn (37 points)  
retagged Mar 21, 2016 by benedekh

Üdv!
Az lenne a kérdésünk az mdsd házi első leadásának követelményeivel kapcsolatban, hogy EMF-ben egyetlen .ecore modellben kell-e felvenni a sima/behavioural, illetve a static/dynamic részeket, vagy ezek teljesen különüljenek el? Ez utóbbi esetben pedig hogy kapcsolódnak/mi közük lesz egymáshoz? Mi arra gondoltunk, hogy egy modellben szerepelnének, de több különböző diagramon lennének ábrázolva az egyes részek, amelyek esetleg 1-2 közös osztályon keresztül lennének kapcsolatban.
Köszi.

1 Answer

+3 votes
answered Mar 20, 2016 by benedekh (677 points)  
selected Mar 23, 2016 by kovari
 
Best answer

Tavaly hallgattam a tárgyat, és mi úgy csináltuk anno, hogy a strukturális és a dinamikus részeket leíró metamodellek külön-külön ecore fájlokban voltak. Nálunk is szükség volt arra, hogy a dinamikusban legyenek referenciák a strukturális metamodellre, így a következőket tettük:

  1. A dinamikus metamodellt megnyitjátok Sample Ecore Editorral (fastruktúra), és kerestek egy nagy fehér területet az editorban. Jobb klikk -> Load Resource.. Itt vagy az első lehetőségnél ahogy defaultban feljött az ablak a szövegbeviteli mezőbe beírjátok a strukturális metamodellnek az NS URI-ját, vagy a gombokkal megkeresitek a strukt. metamodellt tartalmazó projektet, és azon belül az ecore fájlt.

  2. Ekkor elvileg megjelent a strukturális metamodell is egy helyen a dinamikussal (látszólag egy ecore fájlban). Hogyha most elmentitek az ecoret, és megnyitjátok az .aird-ben (Siriusos editor), akkor elvileg fel tudtok venni új elemeket a metamodellbe az Add paranccsal, és ott elvileg látszódnia kell a strukturális metamodell elemeinek is.

  3. Miután összeraktátok, hogy mi kell nektek, azaz mire akartok referálni a strukt. metamodellből, akkor ideje lenne kódot generálni. Viszont ehhez kell egy új codegen fájl.

  4. Laboron tanult módon jobbklikk a project explorerben -> new -> New Generator Model. Megadjátok neki, hogy a metamodell a dinamikus metamodell legyen (ecore fájl), és azt hiszem a következő fülön ahol ki kell választani, hogy tényleg melyik ecoret / metamodellt akarjátok, akkor látjátok egymás alatt a két ecorenak a gyökérelemét, mint ahogy a 2. lépés végén is.

  5. Nah ekkor kell figyelni és rá kell klikkelni arra, hogy a strukturális metamodellhez használja a hozzá tartozó (referenced) codegent. A mellette lévő négyzetet értelemszerűen ki kell jelölni az ablak alsó részén. Ekkor ha jól csináltátok, akkor a strukturálisra vonatkozó részek elszürkülnek az ablakban. Most ki kell választani a megmaradt dinamikus metamodell melletti kis jelölőnégyzetet, és next-next-finishhel meglesz a genmodel.

  6. Ha nyomtok egy jobb klikk generate allt ezen az új genmodelen, akkor elvileg kulturáltan fogja legenerálni a kódot, azaz nem lesz olyan hogy a dinamikus metamodellhez legenerált kódban lennének a strukturális metamodellnek az osztályai.

  7. Indítsatok egy Runtime eclipset, abban hozzatok létre egy strukturális példánymodellt, és vegyetek fel bele olyan elemeket, amikre hivatkoztok majd a dinamikus példánymodellből. Ha ez megvan, akkor hozzatok létre egy dinamikus példánymodellt, de mielőtt beleraknátok elemeket fogjátok meg a strukturális példánymodellt és húzzátok bele az egérrel a dinamikus példánymodell editorába. Azaz ha jobban megnézitek így egy resource setbe kerül a dinamikus és a strukturális példánymodell. Így most már elvileg hivatkozni is fogtok tudni a dinamikusból a strukturálisba.

Disclaimer: a fenti szövegben a dinamikus/strukturális meta/példánymodell kifejezéseket természetesen úgy értettem, hogy a dinamikus/statikus (strukturális) részeket leíró meta/példánymodellek.

Lehet, hogy valamit kihagytam, mert emlékezetből írtam. Ha elakadtok szóljatok, esetleg válaszba küldjetek screenshotot és akkor pontosítom a leírtakat. Sok sikert!

commented Mar 22, 2016 by kovari (2,221 points)  
Köszi, nekem hasznos volt.
commented Mar 23, 2016 by nagya (675 points)  
Köszi a választ.

Valóban az a szebb megoldás, ha két külön ecore modellel dolgoztok és max referálnak egymásra. Ugyanakkor elfogadjuk azt is, ha egy ecore modellben van az egész, de plusz pont és jobban örülünk ha külön vannak.
commented Mar 23, 2016 by kovari (2,221 points)  
Ennek fényében, Beninek 30 pontot adományozok.
...