====== Opis ====== Marcin Godlewski ==== MetamodelWikiPlugin ==== Add Wiki plugin to display metamodels (UML class diagrams) from XMI code OR create wiki plugin to display them from UMLGraph notation. Input: * [[http://carlosmanzanares.com/blog/?p=23|Wiki UML tool]] * [[http://www.twiki.org/|TWiki]] * [[http://www.umlgraph.org/|UMLGraph]] Output: * Wiki with plugin ====== Prezentacja ====== [[https://ai.ia.agh.edu.pl/wiki/pl:miw:2009:miw09_metamodelwikiplugin:prezentacja|Prezentacja projektu]]. ====== Projekt ====== Projekt stanowią dwa pluginy do Dokuwiki: Umlclass Plugin generujący diagramy klas oraz Umlsequence Plugin generujący diagramy sekwencji, zgodne z UML. Pluginy mogą być używane niezależnie, jednak do działania wymagają częściowo tego samego oprogramowania. Mogą być więc traktowane jako jedna całość. ====== Sprawozdanie ====== ===== Używanie pluginów ===== 1. Umlclass Plugin - aby stworzyć na stronie diagram klas należy umieścić w wiki opis klas przy użyciu składni Javy i znaczników javadoc pomiedzy znacznikami i . Na stronie wynikowej opis tekstowy zostanie zastąpiony plikiem png. 2. Umlsequence Plugin - aby stworzyć na stronie diagram sekwencji należy umieścić w wiki opis diagramów sekwencji (opis składni [[http://www.umlgraph.org/doc/index.html]]) pomiędzy znacznikami i (w opisie diagramu nie należy umieszczać wierszy '.PS', 'copy "sequence.pic";' i '.PE' - są one dodawane automatycznie). Na stronie wynikowej opis tekstowy zostanie zastąpiony plikiem png. ===== Instalacja ===== Pluginy można instalować za pomocą Plugin Managera ([[http://www.dokuwiki.org/plugin:plugin]]) lub ręcznie w sposób opisany poniżej. 1. Umlclass Plugin - do tworzenia grafiki png używa pakietu UMLGraph, który z kolei wykorzystuje program Graphviz, sam natomiast jest napisany w Javie. Aby zainstalować plugin należy umieścić syntax.php w katalogu dokuwiki/lib/plugins/umlclass/ . Zainstalowane muszą być JDK (może być to OpenJDK), Graphviz i UMLGraph (instrukcja na stronie [[http://www.umlgraph.org/|UMLGraph]]). UMLGraph musi znajdować się w ścieżce przeszukiwania. Częstym problemem po instalacji UMLGrapha jest niespełnienie wymogu aby tools.jar (składnik JDK) i UmlGrpah.jar znajdowały się w tym samym katalogu. Jest to konieczne aby UMLGraph działał poprawnie. 2. Umlsequence Plugin - do tworzenia grafiki używa programu pic2plot z pakietu GNUPlotutils oraz UMLGraph'a. Aby zainstalować plugin należy umieścić syntax.php w katalogu dokuwiki/lib/plugins/umlsequence/ . Dodatkowo zainstalowany musi być program pic2plot z pakietu GNUPlotutils. Plik sequence.pic będący częścią UMLGraph'a musi znajdować się w katalogu dokuwiki/lib/plugins/umlsequence/ . ===== Przykłady działania ===== Poniżej widoczne są przykładowe efekty działania pluginów: składnia (przykład ze strony http://www.umlgraph.org): boxwid = 1.3; # Define the objects object(B,":Web Browser"); object(W,":Workstation Kernel"); object(S,":Server Kernel"); object(D,":DNS Server"); step(); # Message sequences active(B); active(D); active(W); active(S); message(D,S,"select"); inactive(D); message(B,W,"socket"); message(B,W,"connect"); message(B,W,"sendto"); message(W,W,"send packet"); message(W,S,"DNS A query"); message(B,W,"recvfrom"); inactive(B); message(S,S,"receive packet"); rmessage(S,D,"select returns"); active(D); message(D,S,"recvfrom"); message(D,S,"sendto"); message(S,S,"send packet"); message(S,W,"DNS A reply"); message(W,W,"receive packet"); rmessage(W,B,"recvfrom returns"); active(B); message(B,W,"close"); complete(B); complete(W); complete(S); complete(D); efekt wygenerowany przez plugin: {{:pl:miw:2009:miw09_metamodelwikiplugin:seq_diagram.png|}} składnia (przykład ze strony http://www.umlgraph.org): /* * Advanced relationships * UML User Guide p. 137 */ /** * @opt attributes * @opt operations * @hidden */ class UMLOptions {} class Controller {} class EmbeddedAgent {} class PowerManager {} /** * @extends Controller * @extends EmbeddedAgent * @navassoc - - - PowerManager */ class SetTopController implements URLStreamHandler { int authorizationLevel; void startUp() {} void shutDown() {} void connect() {} } /** @depend - - SetTopController */ class ChannelIterator {} interface URLStreamHandler { void OpenConnection(); void parseURL(); void setURL(); void toExternalForm(); } efekt wygenerowany przez plugin: {{:pl:miw:2009:miw09_metamodelwikiplugin:class_diagram.png|}} ====== Pluginy do pobrania ====== Diagramy klas: {{:pl:miw:2009:miw09_metamodelwikiplugin:umlclass.zip}} Diagramy sekwencji: {{:pl:miw:2009:miw09_metamodelwikiplugin:umlsequence.zip}} ====== Spotkania ====== [[https://ai.ia.agh.edu.pl/wiki/pl:miw:2009:miw09_metamodelwikiplugin:spotkania|Notatki ze spotkań projektowych]]. ====== Materiały ====== [[http://www.dokuwiki.org/dokuwiki|DokuWiki]] [[http://www.dokuwiki.org/plugins|DokuWiki plugins]]