Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_gefardxtt_1 [2008/04/18 12:01] miw |
pl:miw:miw08_gefardxtt_1 [2009/05/04 17:19] gjn Links to hekate:eclipse changed to hekatedev:eclipse |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Maciej Dudek (4AR) <md5@o2.pl> | Maciej Dudek (4AR) <md5@o2.pl> |
| |
* input | * input |
* Eclipse: [[http://www.eclipse.org/modeling/|EMF]], Eclipse -> EMF -> GMF -> GEF | * Eclipse: [[http://www.eclipse.org/modeling/|EMF]], Eclipse -> EMF -> GMF -> GEF |
* ARD: [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal-submitted|Towards Formalization of ARD+ Conceptual Design and Refinement Method]] and [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog-submitted|An ARD+ Design and Visualization Toolchain Prototype in Prolog]] and [[hekate:bib:hekate_bibliography#gjn2008flairs-userv-submitted|UServ Case Study, Conceptual Design with ARD+ Method]]. | * 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 | * output |
Feasibility study, a description how to create such editors with GEF, a prototype editor | 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]] | MS Thesis regarding GEF: Interfejs graficzny do budowy aplikacji komponentowych zapewniający weryfikację semantyczną, ARD+ Editor [[miw:ard requirements|requirements]] |
| |
| |
====== Spotkania ====== | ====== Spotkania ====== |
| |
===== 080304 ===== | [[pl:miw:miw08_gefardxtt_1:spotkania|Archiwum spotkań]] |
| |
Wykonano: | |
* Zapoznanie się z częścią pracy magisterską Macieja Kwietnia i Jana Rachwalika dotyczącą GEF. | |
* Zainstalowanie plug-inu GEF na platformie Eclipse | |
* Uruchomienie przykładowego edytora, stworzenie przykładowego grafu w tym edytorze, przeglądnięcie kodu przykładowego edytora. | |
* Zapoznanie się ze specyfikacją ARD+ zawartą w https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardformal-submitted | |
* Zapoznanie się z opisem systemu VARDA zawartego w https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog-submitted | |
* Pobieżne przestudiowanie przykładu UServ zawartego w https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-userv-submitted | |
| |
Powstałe wątpliwości: | |
* Finalizacja. | |
* Zbiór wszystkich możliwych operacji wykonywanych przez użytkownika. | |
* Język opisu powstałego grafu: <del>RGML?</del> ATTML [[hekatedev:hekate_markup_language]] | |
* Przestrzeń nazw. | |
* Czy również implementacja drzewa TPH? Na ile bezpieczne w sytuacji cykli, split/merge, manual refactoring. | |
* Liczba korzeni w drzewie, czy istnieje coś takiego jak korzeń? | |
* XSD z opisem ARD+. | |
* Co jak na końcu "liścia" jest Conceptual Attribute? Jaki wpływ na system? | |
* Physical Attribute a XTT. | |
* Attribute a Property. W prologu deklarowane oba. | |
| |
| |
===== 080318 ===== | |
* [[hekate:varda]] - uruchomiono i przeanalizowano funkcjonalność. | |
* Zapoznano się ze specyfikacją ATTML | |
* Zapoznano się z UServ case study | |
| |
| |
| |
| |
===== 080415 ===== | |
Planowano: | |
* prototyp | |
| |
Zrealizowano: | |
* Przeanalizowanie [[http://www.eclipse.org/articles/Article-GEF-diagram-editor/shape.html|Diagram Editor]] | |
* Przeanalizowanie [[http://www.eclipse.org/articles/Article-GEF-editor/gef-schema-editor.html|Schema Editor]] | |
* Rozpoznanie struktury framework'u GEF | |
* Zainstalowanie EMF oraz GMF | |
* Wykonanie tutorialu [[http://wiki.eclipse.org/index.php/GMF_Tutorial|mindmodel]] na podstawie [[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|mindmodel.xsd]] | |
| |
| |
===== 080429 ===== | |
Planowano: | |
* model xsd, translacja do ecore | |
* automatyczny edytor | |
| |
Zrealizowano: | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| ====== 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: |
<code xml> | <code xml> |
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> |
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]]. | 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]]. |
| |
====== Projekt ====== | === Problem z użyciem powyższej definicji === |
====== Sprawozdanie ====== | |
| 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: |
| <code xml> |
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
| <xsd:schema xmlns:hml="hml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="hml"> |
| <xsd:element name="Ard" type="hml:Ard"/> |
| <xsd:element name="Property" type="hml:Property"/> |
| <xsd:element name="Atrybut" type="hml:Atrybut"/> |
| <xsd:complexType name="Ard"> |
| <xsd:sequence> |
| <xsd:element maxOccurs="unbounded" minOccurs="0" name="property" type="hml:Property"/> |
| </xsd:sequence> |
| </xsd:complexType> |
| <xsd:complexType name="Property"> |
| <xsd:sequence> |
| <xsd:element maxOccurs="unbounded" minOccurs="0" name="atrybut" type="hml:Atrybut"/> |
| </xsd:sequence> |
| <xsd:attribute name="dependant"> |
| <xsd:simpleType> |
| <xsd:list itemType="xsd:anyURI"/> |
| </xsd:simpleType> |
| </xsd:attribute> |
| </xsd:complexType> |
| <xsd:complexType name="Atrybut"> |
| <xsd:attribute name="nazwa"/> |
| </xsd:complexType> |
| </xsd:schema> |
| </code> |
| |
| 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: |
| <code xml> |
| <?xml version="1.0" encoding="UTF-8"?> |
| <hml:Ard xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:hml="hml"> |
| <property dependant="//@property.1 //@property.2"> |
| <atrybut nazwa="jeden"/> |
| <atrybut nazwa="dwa"/> |
| </property> |
| <property> |
| <atrybut nazwa="trzy"/> |
| <atrybut nazwa="cztery"/> |
| </property> |
| <property> |
| <atrybut nazwa="pięć"/> |
| <atrybut nazwa="sześć"/> |
| </property> |
| </hml:Ard> |
| </code> |
| |
| 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 ====== | ====== 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]]), | 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}} | {{:pl:miw:mgr-gef.pdf|GEF MS Thesis}} |
| |
Patrz też na [[hekate:eclipse|osobne hasło]] | Patrz też na [[hekatedev:eclipse|osobne hasło]] |
| |