Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_gefardxtt_1 [2008/04/07 14:20]
gjn materialy
pl:miw:miw08_gefardxtt_1 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Maciej Dudek (4AR) <​md5@o2.pl>​ Maciej Dudek (4AR) <​md5@o2.pl>​
  
Linia 7: Linia 9:
 XTTv2 Editor [[miw:xtt requirements|requirements]] XTTv2 Editor [[miw:xtt requirements|requirements]]
   * input   * input
-    * Eclipse: [[http://​www.eclipse.org/​modeling/​|EMF]],​ +    * 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 
  
 ====== Projekt ====== ====== 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 ====== ====== 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>
 +<?xml version="​1.0"​ encoding="​UTF-8"?>​
 +<​xs:​schema xmlns:​xs="​http://​www.w3.org/​2001/​XMLSchema"​ elementFormDefault="​qualified">​
 +  <​xs:​element name="​hml">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element ref="​type_set"/>​
 +        <​xs:​element ref="​attribute_set"/>​
 +        <​xs:​element minOccurs="​0"​ ref="​property_set"/>​
 +        <​xs:​element minOccurs="​0"​ ref="​tph"/>​
 +        <​xs:​element minOccurs="​0"​ ref="​ard"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​type_set">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​type"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​type">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ ref="​desc"/>​
 +        <​xs:​element ref="​domain"/>​
 +      </​xs:​sequence>​
 +      <​xs:​attribute name="​id"​ use="​required"​ type="​xs:​ID"/>​
 +      <​xs:​attribute name="​name"​ use="​required"/>​
 +      <​xs:​attribute name="​base"​ use="​required">​
 +        <​xs:​simpleType>​
 +          <​xs:​restriction base="​xs:​token">​
 +            <​xs:​enumeration value="​integer"/>​
 +            <​xs:​enumeration value="​numeric"/>​
 +            <​xs:​enumeration value="​string"/>​
 +            <​xs:​enumeration value="​bool"/>​
 +            <​xs:​enumeration value="​date"/>​
 +            <​xs:​enumeration value="​time"/>​
 +            <​xs:​enumeration value="​timestamp"/>​
 +          </​xs:​restriction>​
 +        </​xs:​simpleType>​
 +      </​xs:​attribute>​
 +      <​xs:​attribute name="​length"/>​
 +      <​xs:​attribute name="​scale"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <!-- id should begin with '​tpe_...'​ -->
 +  <​xs:​element name="​desc"​ type="​xs:​string"/>​
 +  <​xs:​element name="​domain">​
 +    <​xs:​complexType>​
 +      <​xs:​choice minOccurs="​0"​ maxOccurs="​unbounded">​
 +        <​xs:​element ref="​range"/>​
 +        <​xs:​element ref="​value"/>​
 +      </​xs:​choice>​
 +      <​xs:​attribute name="​type">​
 +        <​xs:​simpleType>​
 +          <​xs:​restriction base="​xs:​token">​
 +            <​xs:​enumeration value="​ordered"/>​
 +            <​xs:​enumeration value="​unordered"/>​
 +          </​xs:​restriction>​
 +        </​xs:​simpleType>​
 +      </​xs:​attribute>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​range">​
 +    <​xs:​complexType>​
 +      <​xs:​attribute name="​from"​ use="​required"/>​
 +      <​xs:​attribute name="​to"​ use="​required"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​value"​ type="​xs:​string"/>​
 +  <​xs:​element name="​attribute_set">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​att"/>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​group"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​att">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ ref="​desc"/>​
 +      </​xs:​sequence>​
 +      <​xs:​attribute name="​id"​ use="​required"​ type="​xs:​ID"/>​
 +      <​xs:​attribute name="​type"​ type="​xs:​IDREF"/>​
 +      <​xs:​attribute name="​name"​ use="​required"/>​
 +      <​xs:​attribute name="​abbrev"/>​
 +      <​xs:​attribute name="​value"​ use="​required">​
 +        <​xs:​simpleType>​
 +          <​xs:​restriction base="​xs:​token">​
 +            <​xs:​enumeration value="​single"/>​
 +            <​xs:​enumeration value="​multiple"/>​
 +          </​xs:​restriction>​
 +        </​xs:​simpleType>​
 +      </​xs:​attribute>​
 +      <​xs:​attribute name="​class"​ use="​required">​
 +        <​xs:​simpleType>​
 +          <​xs:​restriction base="​xs:​token">​
 +            <​xs:​enumeration value="​ro"/>​
 +            <​xs:​enumeration value="​rw"/>​
 +            <​xs:​enumeration value="​wo"/>​
 +            <​xs:​enumeration value="​state"/>​
 +          </​xs:​restriction>​
 +        </​xs:​simpleType>​
 +      </​xs:​attribute>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <!-- id should begin with '​att_...'​ -->
 +  <​xs:​element name="​group">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ ref="​desc"/>​
 +        <​xs:​element maxOccurs="​unbounded"​ ref="​attref"/>​
 +      </​xs:​sequence>​
 +      <​xs:​attribute name="​id"​ use="​required"​ type="​xs:​ID"/>​
 +      <​xs:​attribute name="​name"​ use="​required"/>​
 +      <​xs:​attribute name="​abbrev"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <!-- id should begin with '​grp_...'​ -->
 +  <​xs:​element name="​attref">​
 +    <​xs:​complexType>​
 +      <​xs:​attribute name="​ref"​ use="​required"​ type="​xs:​IDREF"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​property_set">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​property"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​property">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element maxOccurs="​unbounded"​ ref="​attref"/>​
 +      </​xs:​sequence>​
 +      <​xs:​attribute name="​id"​ use="​required"​ type="​xs:​ID"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <!-- id should begin with '​prp_...'​ -->
 +  <​xs:​element name="​tph">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​trans"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​trans">​
 +    <​xs:​complexType>​
 +      <​xs:​attribute name="​src"​ use="​required"​ type="​xs:​IDREF"/>​
 +      <​xs:​attribute name="​dst"​ use="​required"​ type="​xs:​IDREF"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​ard">​
 +    <​xs:​complexType>​
 +      <​xs:​sequence>​
 +        <​xs:​element minOccurs="​0"​ maxOccurs="​unbounded"​ ref="​dep"/>​
 +      </​xs:​sequence>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +  <​xs:​element name="​dep">​
 +    <​xs:​complexType>​
 +      <​xs:​attribute name="​independent"​ use="​required"​ type="​xs:​IDREF"/>​
 +      <​xs:​attribute name="​dependent"​ use="​required"​ type="​xs:​IDREF"/>​
 +    </​xs:​complexType>​
 +  </​xs:​element>​
 +</​xs:​schema>​
 +</​code>​
 +
 +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:
 +<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]]), ​
Linia 60: Linia 433:
 {{:​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]]
  
pl/miw/miw08_gefardxtt_1.1207570837.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0