====== Opis ====== __**Projekt zakończony**__ Maciej Dudek (4AR) ARD GEF and Eclipse based editor for ARD and XTT. Evaluation, feasibility, prototype. XTTv2 Editor [[miw:xtt requirements|requirements]] * input * Eclipse: [[http://www.eclipse.org/modeling/|EMF]], Eclipse -> EMF -> GMF -> GEF * ARD: [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal|Towards Formalization of ARD+ Conceptual Design and Refinement Method]] and [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog|An ARD+ Design and Visualization Toolchain Prototype in Prolog]] and [[hekate:bib:hekate_bibliography#gjn2008flairs-userv|UServ Case Study, Conceptual Design with ARD+ Method]]. * output Feasibility study, a description how to create such editors with GEF, a prototype editor MS Thesis regarding GEF: Interfejs graficzny do budowy aplikacji komponentowych zapewniający weryfikację semantyczną, ARD+ Editor [[miw:ard requirements|requirements]] ====== Spotkania ====== [[pl:miw:miw08_gefardxtt_1:spotkania|Archiwum spotkań]] ====== Projekt ====== ===== Source ===== - {{:pl:miw:miw08_gefardxtt_1:ardeditor_project.zip|Ard Editor Project}} - {{:pl:miw:miw08_gefardxtt_1:ardeditor_diagram.zip|Ard Editor Diagram}} - {{:pl:miw:miw08_gefardxtt_1:ardeditor_edit.zip|Ard Editor Edit}} ==== Sposób uruchomienia ==== - Zaimportuj Ard Editor Diagram oraz Ard Editor Edit jako projekt w Eclipse - Otwórz oba projekty - Kliknij prawym przyciskiem na Ard Editor Diagram: - Run As... -> Eclipse Application - W nowo otwartym oknie Eclipse utwórz nowy projekt (wystarczy nawet pusty katalog) - Kliknij //New// -> Examples -> My Diagram - Otworzy się edytor. Użytkownik musi podać 2 nazwy plików: - Plik edytora o rozszerzeniu .hml_diagram (odpowiada za rozmieszczenie na ekranie itp) - Plik modelu o rozszerzeniu .hml (w formacie XML) ====== Sprawozdanie ====== ===== 1. Przygotowanie ===== ==== 1.1 Lektury ==== Swoją pracę rozpocząłem od lektury następujących prac: * {{:pl:miw:mgr-gef.pdf|GEF MS Thesis}} - Część pracy magisterskiej Macieja Kwietnia i Jana Rachwalika dotycząca GEF. * [[https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardformal|Specyfikacja Ard+]] * [[https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog|System varda]] * [[https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-userv|UServ case study]] * [[http://www.eclipse.org/articles/Article-GEF-diagram-editor/shape.html|Diagram Editor]] * [[http://www.eclipse.org/articles/Article-GEF-editor/gef-schema-editor.html|Schema Editor]] * [[http://wiki.eclipse.org/index.php/GMF_Tutorial|Mindmodel Tutorial]] Dalsze kroki to: * Uruchomienie programu Varda. * Zainstalowanie EMF, GEF, GMF. * Uruchomienie przykładowych edytorów: Logic Diagram, Flow Diagram, Shapes Diagram. ==== 1.2 Wyjaśnienie skrótów ==== Ponieważ skróty EMF, GEF i GMF są do siebie podobne, po krótce wyjaśnię między różnice między tymi frameworkami: * [[http://www.eclipsecon.com/modeling/emf/|EMF]] - służy do tworzenia modeli, logiki biznesowej. Modele zapisywane są w plikach ecore. Jest możliwa konwersja między modelami w ecore oraz modelem opisanym przy pomocy [[http://www.w3.org/XML/Schema|XSD (XML Schema)]]. * [[http://www.eclipse.org/gef/|GEF]] - służy do tworzenia edytorów graficznych. Opiera się na bibliotece draw2d, z której czerpie narzędzia do rysowania. Jest dość skomplikowany i trudny w opanowaniu. Daje za to szerokie możliwości. Uwaga, nie mylić z [[http://gef.tigris.org/|innym GEF]], który nie jest projektem Eclipse. * [[http://www.eclipse.org/modeling/gmf/|GMF]] - plugin do Eclipse - w stosunku do GEF znacznie ułatwia tworzenie edytorów. Jest niejako graficzną "nakładką" na framework GEF pomagając programiście stworzyć edytor. Można skorzystać z narzędzia [[http://eclipser-blog.blogspot.com/2007/06/gmf-project-in-5-minutes-with-gmf.html|dashboard]], który jest zaimplementowany jako jeden z widoków w Eclipse. Prowadzi on programistę przez proces tworzenia edytora używając do tego szeregu //wizardów// i łącząc drobne części ze sobą. Na końcu generowany jest kod edytora w GEF uzupełniony o Runtime GMF. Jednak trudno wykorzystać GMF do zaawansowanych problemów. Dla niestandardowych problemów trzeba edytować kod na własną rękę korzystając z klas GEF. Podsumowując, zastosowanie GMF daje zautomatyzowanie generacji kodu, ale może nie wystarczyć w niestandardowych projektach. Zatem tworząc aplikację z pewnością użycie wszystkich z nich będzie nieodzowne a ich działanie będzie się przenikało. ===== 2. Pierwsza próba stworzenia edytora ===== ==== 2.1 Użycie definicji DTD i translacja do XSD ==== Aby skorzystać z możliwości EMF importując model XSD, przekształcono definicję [[https://ai.ia.agh.edu.pl/wiki/_media/hekate:hml.dtd?id=hekate%3Ahekate_markup_language&cache=cache|HML.dtd]] z postaci DTD do postaci XSD. Efekt został przedstawiony poniżej: Dokument [[https://ai.ia.agh.edu.pl/wiki/_media/hekate:hml-test.xml?id=hekate%3Ahekate_markup_language&cache=cache|hml-test.xml]] poprawnie przechodzi [[http://www.xmlforasp.net/SchemaValidator.aspx|walidację]] przy użyciu powyższej definicji. Konwersji dokonano przy użyciu programu [[http://www.thaiopensource.com/relaxng/trang-manual.html|Trang]]. === Problem z użyciem powyższej definicji === Powyższa definicja, choć poprawna, okazała się niekompatybilna z frameworkiem GMF. Podstawowe problemy to: * Relacja zawierania się - brak bezpośredniego połączenia korzenia z property. W definicji oryginalnej występuje następujące zawieranie: //ard -> property_set -> property//. Zgodnie z takim modelem, aby utworzyć //property//, musielibyśmy tworzyć pośredni element //property_set// oraz połączenia między nimi. Jest to naturalnie sprzeczne z naszym założeniem. * Wybór korzenia - edytor tworzony jest dla konkretnego elementu w modelu. Wybierając korzeń K możemy edytować elementy zawarte w K, ale innych nie. Więc jeśli chcemy mieć możliwość edycji //property_set// oraz //ard// to naszym korzeniem musiałby być element //hml//. Lecz wtedy nasz edytor rozrósłby się jeszcze bardziej - o element //ard//. * Elementy IDREF - korzystanie z elementów IDREF nie uniemożliwia, lecz czyni trudniejszym tworzenie modelu. Trzeba jednak użyć [[http://www.eclipse.org/modeling/emf/docs/overviews/XMLSchemaToEcoreMapping.pdf|Ecore Annotations]]. Dokonano próby utworzenia edytora wszystkich elementów (bez żadnej customizacji) za pomocą pluginu do GMF o nazwie [[http://dynamicgmf.sourceforge.net/|Dynamic GMF]]. Ten plugin ma w założeniu dać możliwość wygenerowania edytora jedynie przez wybranie pliku xsd. Pojawiał się jednak błąd wewnętrzny programu "Null pointer exception". Takiego błędu nie było gdy użyłem pliku [[http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gmf/examples/org.eclipse.gmf.examples.mindmap/model/mindmap.xsd?root=Modeling_Project&view=markup&content-type=text%2Fvnd.viewcvs-markup&revision=HEAD|mindmap.xsd]]. Sądzę, iż obecność elementów IDREF mogła się do tego przyczynić. ==== 2.2 Inna metodologia tworzenia modeli ==== Dużo bardziej naturalnym, prostszym i efektywniejszym sposobem jest tworzenie modelu ecore pasującego do GMF. I tak import z XSD następuje do pliku ECORE, na którym później się operuje. Kolejnym krokiem mogłoby być eksportowanie tego modelu do XSD. W razie potrzeby można by dokonywać konwersji między róznymi definicjami XSD za pomocą szablonów XSLT. ==== 2.3 Własny model ==== Stworzyłem zatem edytor opierając się o własny model. Model powstał przy pomocy EMF, który następnie wyeksportowałem do formatu XSD. Nowa wersja Ard.xsd: Niestety, zawiera on jedynie opis ARD, bez TPH ani XTT. Poniżej zamieszczono screen z edytora oraz odpowiadający mu plik xml. ==== 2.4 Edytor oparty na własnym modelu ==== Diagram Ard {{http://hyper.ia.agh.edu.pl/~dudekm/zdj/przykladowy_edytor_1.jpg}} Wygenerowany plik XML: Sprawdzono zgodność pliku xml ze schematem xsd. Możliwości edytora ważne z punktu widzenia ARD: * Dodawanie nowych elementów //property//. * Dodawanie elementów //attribute// do //property//. * Łączenie elementów //property//. * Zapis do pliku xml. ===== 3. Perspektywy projektu ===== Jest to wstępny zarys edytora. Docelowy edytor miałby posiadać bogatą funkcjonalność. Dalsze elementy, które należałoby zaimplementować to: * Menu kontekstowe zawierające komendy //split// dla elementów //attribute// oraz //finalize// dla elementów //property//. [[http://wiki.eclipse.org/index.php/GMF_Tutorial_Part_3#Custom_Actions|Custom Actions]] * Utworzenie dwóch dodatkowych warstw: do pierwszej należałyby elementy i połączenia ard bez tph, do drugiego same elementy tph bez ard. Następnie należałoby umożliwić włączanie oraz wyłączanie widoczności warstw. W szczególności obie warstwy mogłyby być widoczne aby widzieć zarówno drzewo TPH jak i ARD. * Utworzenie połączenia edytora ARD z edytorem XTT. To połączenie mogłoby przyjąć różną formę: - otwarcia property w edytorze XTT [[http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15508.html|link]] - edycji XTT poprzez duże zbliżenie (zoom) na sfinalizowany element property. * Utworzenie edytora XTT. ===== 4. Wnioski ===== * Model warto tworzyć od podstaw w EMF. * GEF to potężne narzędzie, lecz trudne w opanowaniu. * API GMF oraz GEF zostało w ostatnim czasie uzupełnione o komentarze, lecz nadal jest wiele miejsc, gdzie ich brakuje. * Tutoriale są ukierunkowane na kilka zagadnień, w sprawie innych trzeba się pytać na forach dyskusyjnych, lub wręcz pisać do twórców frameworku. ===== 5. Linki ===== Poniżej zamieszczam wartościowe linki związane z moim projektem: === Instalacja GMF === * [[http://wiki.eclipse.org/index.php/GMF_Tutorial|Instalacja + tutorial]] * [[http://www.brovig.org/blog/2007/05/17/installing-gmf-on-eclipse-33-m7-europa/|installing-gmf-on-eclipse-33-m7-europa]] === Nauka === * [[http://www.eclipse.org/articles/Article-Introducing-GMF/article.html|Introducing GMF]] * [[http://www.eclipse.org/articles/Article-GEF-editor/gef-schema-editor.html|GEF Schema Editor]] * [[http://www.ibm.com/developerworks/library/os-ecemf1/|IBM tutorial]] * [[http://mirrors.ibiblio.org/pub/mirrors/eclipse/technology/phoenix/demos/gmf-orgchart/|Screencast]] - bardzo przydatny. * [[http://www.eclipse.org/articles/Article-FromFrontendToCode-MDSDInPractice/article.html|Inne podejście do tematu]] * [[http://wiki.eclipse.org/index.php/GMF_Tutorial_BPMN|Tutorial]] - edytora [[http://pl.wikipedia.org/wiki/BPMN|BPMN]]. Krok po kroku. === Troubleshooting === Problemy, które napotkałem oraz linki pomocne w ich rozwiązaniu: * [[http://dev.eclipse.org/newslists/news.eclipse.technology.gmf/msg03925.html|Containment Feature]] === Support === * [[http://www.nabble.com/Eclipse-GEF---Dev-f2208.html|GEF mailing list archive]] * [[http://eclipseforum.org.pl/|Polskie forum eclipse]] - zostało uruchomione pod koniec 2007 roku. === Inne === * [[http://wiki.eclipse.org/index.php/GMF_Documentation|GMF_Documentation]] - zawiera wiele dalszych linków. * [[http://help.eclipse.org/help33/index.jsp|Eclipse 3.3 API]] - zawiera również GMF, GEF. * [[http://eclipse-po-polsku.blogspot.com/|Eclipse po polsku]] * [[http://www.redbooks.ibm.com/redbooks/pdfs/sg246302.pdf|IBM red book]], [[http://publib-b.boulder.ibm.com/Redbooks.nsf/RedpieceAbstracts/sg246302.html|code]] - bardzo przydatne, wiele elementów dobrze opisanych. ====== Materiały ====== GEF resources ([[http://www-128.ibm.com/developerworks/opensource/library/os-eclipse-gef11/?ca=dgr-lnxw07EclipseGEF|GEF]], [[http://www.eclipse.org/articles/Article-GEF-editor/gef-schema-editor.html]]), {{:pl:miw:mgr-gef.pdf|GEF MS Thesis}} Patrz też na [[hekatedev:eclipse|osobne hasło]]