02341: Modeldrevet Softwareudvikling (f16)
Opgave 1: Eclipse Modeling Framework (EMF) — Introduktion |
|
For English version click here!
Ved denne her opgave lærer du hvordan man man kan bruge Eclipse Modeling Frameworket
(EMF) til at generere en enkel editor til Petrinet fra en domæne-model til
Petrinet. Derudover lærer du hvordan du kan tilføje funkionalitet til
denne editor, som er en enkel simulator til Petrinet.
Bemærk at løsningen her vil være meget enkelt og på nogle punkter forkert
eller ikke meget hensigtsmæssige. Det retter vi op i med de senere opgaver.
Især vil vi også generere en grafisk editor til Petrinet om nogle uger.
Du lærer at:
- installere (den rigtige version) af Eclipse (med Eclipse Modeling Tools),
- kreere EMF-projekter,
- kreere Ecore-modeller (EMF-modeller),
- generere kode fra disse model, og at
- bruge den genererede kode.
Nedenfor er opgaven brudt ned til enkelte skridt.
- Installer Eclipse Mars (4.5) med Eclipse Modeling Tools:
- Download Eclipse med Eclipse Modeling Tools paketet fra
http://www.eclipse.org/downloads/packages/eclipse-modeling-tools/marsr
tilsvarende din platform.
- Ekstraher den downloaded fil til en folder på din computer. I den ekstraherede
folder ligger der en eksekverbar fil med navn "eclipse".
- Start den nye version af Eclipse ved at starte denne "eclipse" fil.
- Første gang du starter denne nye version af Eclipse, skal du vælge en
folder til din workspace du vil arbjede med.
- I din nye workspace, kreer et nyt EMF-projekt til Petrinet-modellet med
et hensigtsmæsigt navn (fx.
mdsu.f16.tutorial1 ):
- Hvis din Eclipse ikke er i "Plug-in Development" perspektivet allerde, vælg det
(Window -> Perspektive -> Open Perspektive -> Other...).
- Kreer et nyt tomt EMF-projekt: [File ->] New -> Project; og så
vælg "Empty EMF Projekt" fra kategori "Eclipse Modeling Framework".
- Kreer en ny Ecore-fil i folderen "model" af dit nye projekt:
- Vælg folder "model" i dit nye EMF project og kreer en
ny Ecore-fil: New -> Other...; og så vælg "Ecore Model" fra
kategori "Eclipse Modeling Framework"; som "Model Object" vælg
default "EPackage".
- Hvis filen ikke åbnes automatisk, åbn denne nye fil med: Open With->
Sample Ecore Model Editor.
- Vælg top-level elementet af denne fil (package) og i "Properties" view
tilføj et navn (fx. "petrinet"), en "Ns Prefix" (fx. "pn") og en "Ns URI"
(fx. "http://mdsu-f16/tutorial1/petrinet"). Til sidst gem filen.
Bemærk: Hvis "Properties" view ikke er åben, kan den åbnes ved højre-klik
"Show Properties View" eller ved Windows ->Show View -> Properties.
- Brug denne editor til at at tilføje klasser og associationer (referencer) mellem
klasserne, som afspejler Petrinet modellen:
- Senere vil du bruge en grafisk editor til at editere Ecore-modeller, men
i starten skal du bruge denne enkelte træ-editor. Du kan tilføje klasser
ved at højre-klikke på top-level package, og så vælge "New Child -> EClass".
Til at tilføje attributer til en klasse, kan du hjøre-klikke på denne klasse;
det samme gælder referencer fra en klasse til andre klasser.
Som model til Petrinet kan du bruge den som blev præsenteret i
forlæsningen eller den nedenfor:
Bemærk: Kardinatitet "*" / "many" af en reference er representeret ved
at vælge "-1" som "Upper Bound" (og "0" som "Lower Bound").
- Bemærk at vil det være nødvendigt til opgaven at der ikke er
bare referencer
source og target
til Node men også de omvente referencer fra
Node til de indkommende og de udgående Arc .
I EMF/Ecore, gør man det igennem to modsatte referencer, som
er "opposites" af hinanden: vælg en af de modsatte referencer,
og i "Properties" view sæt den anden som "Opposite".
- For at sikre dig at Petrinet kan indeholde noget overhoved, tjek om
referencer til
Node og Arc er kompositioner
(attributet "Containment" af disse referencer skal være "true").
- Til sidst skal du sikre dig at din model er korrekt EMF/Ecore: Det gør
du med et højre-klik på paket elementet (som repræsenterer petrinet package)
i editoren (det øverste element i filen), og så at vælg "Validate".
Hvis der er nogle fejl ret dem.
- Når din model til Petrinet er færdig (og valideret) generer koden
fra denne model:
- Det første skridt er at generere et såkaldt "Gen Model". Til det
vælg Ecore-filen med Petrinet modellen, og højre-klik og
vælg New->Other... og vælg "EMF Generator Model" fra kategori
"Eclipse Modeling Framework". Det skal helst hedde som model-filen
med fil-ekstension ".genmodel".
- Åbn denne Gen model fil. Det eneste du skal ændre er attributet
"Base Package" på selve paketet. Det er Java paketet, hvor den
genererede kode skal placeres. Efter du har tilføjet "Base Package"
attributet gem filen. Det kunne for eksempel være
mdsu.tutorial1 .
- Ved at højre-klikke på paketet i "Gen model" og at vælge
"Generate all", kan du generere koden (faktisk er det nok
at generere "Model code", "Edit code" og "Editor code" for nu).
- Hvis det lykkes, burde der være tre nye plugin projekter i din
Eclipse workspace, som bliver kompilereret automatisk og burde være uden fejl.
Hvis Eclipse viser nogle fejl i disse projekter, så er der enten en fejl
i Ecore-modellen eller Gen-modellen.
- Hvis kode-generering lykkedes, kan du afprøve den genererede editor
ved at starte en ny instans af Eclipse, den såkaldte runtime workbench:
- Første gang du gør det, skal du kreere en ny "Run configuration":
vælg "Run" symbolet i toolbaren og vælg "Run configuration"; så
starter en "Create, manage and run configurations" dialog; vælg
"Eclipse Application" og klik på "New launch configuration";
indtast et navn, og så klik på "Apply" og "Run". Efter nogen
tid starter der en ny version af Eclipse op -- som også køre
dine nye plug-in projekter med din Petrinet editor (senere
kan du starte denne konfiguration igen bar at trykke på
"Launch"-knappen).
- Kreer et nyt projekt i denne workbench (det kunne være et almindelige "Projekt"
fra Kategori "General"). I dette nye projekt kreer et
nyt Petrinet: [File ->] New -> Others... og vælg "Petrinet Model"
i kategori "Example EMF Model Creation Wizard"; vælg
et fil-navn; som "Model Object" vælg "Petrinet".
- I editoren som åbner, skulle du se et træ med "Petrinet"
som øverste element. Med at bruge højre-klik "New Child" kan du
tilføje nogle Petrinet elementer (pladser, transitioner og
piler); du kan tilknytte pile til pladser og transitioner
med at vælge en pil, og ændre source og traget attributtet
i "Properties" view.
Bemærk: Hvis "New Child" ikke virker, har du sandsynligvis
glemt at referencer fra Petrinet til Node og
Arc i din Petrinet-model burde være "compositions".
- Hvis editoren virker, så kan du slukke Eclipse runtime workbench
igen. Så er den sidste trin at implementere en lille simulator;
den største del af det er forberdt for dig allered -- der er kun
to metoder, hvor du skal tilføje kode:
- Download Eclipse-projekt-filen fra
MDSU-tutorial1-simulator.zip og gem det. I din development workbench
importer dette project (File -> Import og så vælg "Existing Projects
into Workspace" fra kategori "General"; så klik "Next", og vælg
selve fil, som du lige havde downloaded, og derefter vælg
"dk.dtu.compute.se.mdsu.tutorial1.simulatorX" og afslut.
- Dette projekt skulle nu ligge i din workspace. Du er nødt til
at åbne dettes
plugin.xml , og slette den ugyldige
afhængihed (dependency) og til gengæld tilføje dit projekt med
Petrinet modellen; derefter
skal du ændre (tekstuelt ved at vælge tab "plugin.xml" på bunden
af plugin editoren) attributet type dk.dtu.compute.se.mdsu.petrinet.Transition til den
fuldt kvalificerede navn af din klasse Transition .
- Til sidst implementer de to metoder
isEnabled()
og fire() som tjekker om en transition er aktiveret
(der er Tokens nok i pladser foran transitionen til af affyre transitionen)
og som affyrer transition (fjener en token på alle pladser som
har en pil til transitionen og tilføjer en token på alle pladser
med en pil fra transitionen).
- Afprøv om din simulator fungerer: Det gør du idet du starter Eclipse runtime workbench
igen. Åbn en Petrinet-fil. Hvis du hjøre-klikker på en transition i denne
fil, burde der være et pop-up menu med undermenu "MDSU Tutorials" ->
"Fire Transition"; "Fire transition" burde være aktiv, hvis transitionen
kan affyre og ikke aktiv, hvis ikke. Når du trykker på denne menu, burde
token fra indgående pladser fjernet og tillføjet til alle udgående pladser;
det skulle kunne ses i editoren.
- Grafisk editor til EMF modeller:
Man kan også grafisk editere EMF-modeller med EcoreTools: Det starter
vi med fra næste uge.
Hvis du allerede nu vil bruge EcoreTools, så kan du læse lidt mere om det
på http://www.eclipse.org/ecoretools/doc/.
|
Materiale om Eclipse, EMF og Petrinet |
|
|
|