diff options
Diffstat (limited to 'document.tex')
-rw-r--r-- | document.tex | 801 |
1 files changed, 801 insertions, 0 deletions
diff --git a/document.tex b/document.tex new file mode 100644 index 0000000..3ed2fc3 --- /dev/null +++ b/document.tex @@ -0,0 +1,801 @@ +% !TEX TS-program = pdflatex -shell-escape +% !TEX encoding = UTF-8 Unicode +\documentclass[%draft, +12pt,titlepage,abstracton]{scrreprt} +\usepackage[T1]{fontenc} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} +\usepackage[ngerman]{babel} +\usepackage{url,graphicx,xcolor} +%\usepackage{float} % for [H] +\usepackage[pdfstartview=FitH,colorlinks,linkcolor=black,citecolor=darkgray,urlcolor=darkgray,filecolor=darkgray]{hyperref} +%\usepackage{draftwatermark} \SetWatermarkLightness{0} + +\bibliographystyle{unsrt} + +\usepackage{libertine} %Schriftart Linux-Libertine +\usepackage{courier} % Schriftart für monospaced +\usepackage[activate]{microtype} % Microtype für besseren Zeichensatz + +\usepackage{setspace} +\setlength{\parindent}{0pt} +\setlength{\parskip}{9pt} +\onehalfspacing % BA Vorgabe ein-einhalb Zeilenabstand + +\usepackage{listings} +\usepackage{pdfpages} % Zum einbinden externer PDF-Dateien + +\newcommand{\boppel}[1]{ + \parbox{1cm}{ + \setlength{\unitlength}{1cm} + \begin{picture}(1,1)(0,0) + \linethickness{2pt} + \put(0.5,0.5){\color{cyan}\circle*{1.5}} + \put(0.5,0.5){\makebox(0,0){\textcolor{white}{\textbf{#1}}}} + \end{picture} + } +} + +\usepackage[toc,smallcaps]{glossaries} +\renewcommand*{\glstextformat}[1]{\textit{#1}} +\makeglossaries +\makeindex + +\title{\infoTitle} +\author{\infoAuthor} +\date{\infoDate} + + +\newcommand{\infoTitel}{KSM: Eclipse RCP} +\newcommand{\infoTyp}{Studienarbeit 2} +\newcommand{\infoKurs}{Studiengang Informationstechnik} +\newcommand{\infoAutor}{Yves Fischer} +\newcommand{\infoAbgabe}{20. Mai 2011} % Titelseite und Erklärung +\newcommand{\infoBetreuerDH}{Dr. Jörg Wedeck} +\newcommand{\infoKurskuerzel}{\textsc{TIT}2008/NS} + +\newglossaryentry{Viewport}{name={Viewport}, description={Begriff aus + dem Grafikbereich der den Auschnitt eines Bildes, welcher + dargestellt wird, bezeichnet.}} + +\newglossaryentry{Controls}{name={Controls},description={hier Teil einer GUI Anwendung, +oft auch Widget genannt.}} + +\newglossaryentry{JDT}{name={JDT},description={\emph{J}ava \emph{D}evelopment \emph{T}ools}} + +\newglossaryentry{Classpath}{name={Classpath},description={Der Classpath wird vom Java Classloader benützt um referenzierte Klassen zu finden. Durch spezielle Classloader lässt sich Code innerhalb einer Virtual-Machine separieren.}} + +\newglossaryentry{Classloader}{name={Classloader},description={siehe \glstext{Classpath}}} + +\newglossaryentry{Memory Leak}{name={Memory Leak},description={Ein Memory Leak ensteht wenn ein Programm (auch indirekt über Bibliotheken) vom Betriebssystem Speicher anfordert (\texttt{*alloc}) und die Referenz auf den zugewiesenen Speicher löscht, daher den Speicher ,,vergisst'' und nicht wieder freigeben kann.}} + +\newglossaryentry{KSM/Swing}{name={KSM/Swing},description={Die KSM +Implementierung auf Basis der Java-Swing GUI-Bibliothek.}} + +\newglossaryentry{KSM/RCP}{name={KSM/RCP},description={Die KSM +Implementierung als eine Eclipse~RCP Anwendung.}} + + +\begin{document} +\begin{titlepage}\enlargethispage*{4\baselineskip} +\pagenumbering{roman} +\unitlength1mm +\begin{picture}(0,0) + \put(45,0){\includegraphics[width=5cm]{images/dhbwlogo.png}} +\end{picture} + +\vspace{2cm} + +\begin{centering} +\huge{\infoTitel}\\ +\vspace{1.5cm} +\LARGE{\textsc{\infoTyp}}\\ +\vspace{3cm} +\Large{\infoKurs}\\ +\normalsize{% +an der Dualen Hochschule Baden-Württemberg Stuttgart Campus Horb\\ +von}\\ +\Large{\infoAutor} \\ +\vspace{2cm} +\normalsize +Abgabedatum:\\ \infoAbgabe\\ +\end{centering} + +\vspace{5.0cm} +\begin{tabbing} +MMMMMMMMMMMMMMMMMMMMMMMM \= \kill\\ +\textbf{Kurs} \> \infoKurskuerzel\\ +\textbf{Betreuer der Dualen Hochschule} \> \infoBetreuerDH\\ +\end{tabbing} +\begin{flushleft} +\end{flushleft} + +\end{titlepage} + +{\huge Erklärung} + +\vspace{2cm} +Ich habe die Studienarbeit selbständig verfasst und keine anderen als +die angegebenen Quellen und Hilfsmittel benutzt. + +Die Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen +Prüfungsbehörde vorgelegt und auch nicht veröffentlicht. + +\vspace{1cm} + +Rheinau, \infoAbgabe + +\vspace{1cm} + +\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ + +\newpage +\renewcommand{\abstractname}{Zusammenfassung} +\begin{abstract} +Im vorangegangen Semester wurde die Portierung der KSM Java/Swing Applikation +auf Eclipse~RCP evaluiert. + +In dieser Arbeit sollen konkrete Vorgehensweisen erörtert und der Weg zu +einer Eclipse~RCP basierten KSM Applikation geebnet werden. + +\section*{Motivation} +Das GUI von KSM basiert momentan auf Swing bei Verwendung des +NetBeans GUI-\-Designers. Der auf diesem Weg erzeugte Code ist nahezu +unwartbar und auch durch die ständige Weiterentwicklung inkonsistent. + +Mithilfe von Eclipse~RCP können dank klarer Strukturen und +Konventionen Verbesserungen im Bereich Wartbarkeit, Erweiterbarkeit +und Usability erzielt werden. + +\section*{Problemstellung und Ziele} +Während die vorhergehende Studienenarbeit \cite{fischer10} sich mit der +Einarbeitung in Eclipse~RCP und der grundsätzlichen Möglichkeit der Realisierung +von KSM darin beschäftigte, soll mit dieser Studienarbeit die konkrete Umsetzung +begonnen werden. +\end{abstract} + +\renewcommand{\abstractname}{Summary} +\begin{abstract} +The previous assignment evaluated the porting of the KSM Java / Swing +Application to Eclipse-RCP. + +This follow-up discuss specific ways to an Eclipse~RCP based KSM application. + +\section*{Motivation} Currently KSM is based on a Java-Swing Graphical User +Interface, developed with the NetBeans GUI-Designer. This GUI-related code is +inconsistent and unmaintainable due to continuos development. + +Its possible to gain a better maintainability, expandability and usability by +using Eclipse RCP through clear structures and conventions. + +\section*{Tasks and Objectives} +While the foregoing Studienenarbeit elaborates +basic Eclipse-RCP technics and presented a rough-prototype, its now time to +begin with the implementation of specific points of a new KSM Application in +Eclipse-RCP to supersede the Swing-based Application. + +The ongoing development will be in close cooperation with students working on +bugfixing and extending the Swing-based KSM, to gain interoperability and quality. +\end{abstract} + +\tableofcontents +\newpage\pagenumbering{arabic} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Einleitung} +Aufbauend auf den Ergebnissen der vorangegangen Studienarbeit gilt es zu +beginnen, mithilfe von Eclipse~RCP ein KSM Werkzeug zu erstellen welches auf +längere Sicht den die Java/Swing Version ablösen kann. + +Für ein KSM auf Basis von Eclipse~RCP sprechen viele Gründe von denen einige +im folgenden kurz erläutert werden: + +\textbf{Erweiterbarkeit/Modularität\ } Die Entwicklung von KSM hat viele +verschiedene Versionsstände hervorgebracht die oftmals nicht wieder vereint +werden konnten. Wäre das Grundprojekt modularer aufgebaut gewesen hätten diese +einfacher in ein großes ganzes integriert werden können. + +Zu diesem Zeitpunkt existieren zwei im Grunde gleiche KSM Entwicklungszweige: +KSM und QKSM. Der Ideen und Bugfix Austausch zwischen den Entwicklern und +Projektständen ist durch die strikte Trennung nahezu null. + +Wenn zukünftig weitere Anwendungen mit ähnlichen Anwendungsbereich in +Eclipse~RCP entwickelt werden ist es möglich diese mit wenig Aufwand gebündelt +auszuliefern. + +\textbf{Vereinfachung\ } Durch Verwendung von Softwarekomponten und Frameworks +aus der Eclipse Platform kann auf aufwendige, fehleranfällige Eigenentwicklungen +verzichtet werden. + +\textbf{Bessere GUI\ } Für Benutzer von Eclipse wird das Arbeiten mit +Workspaces und Projekten in der Eclipse~Art bereits vertraut sein. Alle anderen +werden mit einem intuitiven Standard- --- weniger individuell-kreativen --- +Oberfläche konfrontiert. + +\textbf{Lizenzmanagement\ } KSM soll in naher Zukunft öffentlich verfügbar +sein, QKSM nicht. Wäre QKSM ein Zusatzmodul (Bundle, Plugin) für KSM, dann +würde lediglich eine zusätzliche Datei einem Open-Source KSM QKSM Fähigkeiten +verleihen. + +\textbf{Deployment/Update\ } Eclipse verfügt über ausgereifte Mechanismen zur +Softwareverteilung und Aktualisierung. Über eine Update-Site könnten Benutzer +über das Internet Ihre KSM-Installation modular Ihren Bedürfnissen anpassen und +aktualisieren. + +\textbf{Web Anwendungen\ } Mithilfe von RAP (Rich Ajax Platform) lassen sich +RCP Anwendungen ins Web portieren. + +\vspace{1cm} + +Diese Studienarbeit wird die Vorteile der Nutzung der Eclipse Platform nur zum +Bruchteil auskosten. Nicht zu vergessen ist, dass es auch Hindernisse gibt auf +die im Kapitel \ref{chapter:rcpprogrammierung} ab Seite +\pageref{chapter:rcpprogrammierung} eingegangen wird. + +Zu Beginn wird die Entwicklung eines Datenformat für die Computerdarstellung von +Kybernetischen System-Modellen besprochen. Kapitel +\ref{chapter:weiterentwicklung} beschreibt Veränderungen gegenüber dem Prototyp +aus der vorhergehenden Arbeit. + +In Kapitel \ref{chapter:rcpprogrammierung} wird auf die Arbeit und das +Erlernen des Umgangs mit Eclipse~RCP besprochen. Kapitel \ref{chapter:ausblick} +wird die Ergebnisse dieser Arbeit kurz zusammenfassen und zur möglichen +Weiterentwicklung Stellung nehmen. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Datenformat und Datenmodell} +In der Studienarbeit 1 wurde mit einem vereinfachten Datenmodell gearbeitet. + +Da zukünftig sowohl KSM/Swing alsu auch /RCP die gleichen Daten verarbeiten +können sollten liegt es nahe, dass Format in dem die Daten persistent im +Dateisystem abgelegt werden können zu vereinheitlichen. + +Im folgenden wird ausgeführt warum das aktuelle Datenformat in KSM/Swing nicht +geeignet ist und wie ein neues entwickelt wurde. + +\par +\begingroup +\leftskip=1.5cm % ggf. verstellen +\noindent In Anhang \ref{chapter:doku-datamodel} ist die vollständige Dokumentation des +in neuen Dateformat zu finden dessen Entwicklung in diesem Kapitel beschrieben +wird. +\par +\endgroup + +\section{Istzustand} +In der Evaluation von RCP wurde ein einfaches Datenformat eingeführt, indem die +Model-Objekte einfach mittels leicht annotiertem JAXB serialisiert wurden: +{\small +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<diagram> + <connections> + <connection> + <source>1c862df6-80e5-445b-a41c-ed677973abfb</source> + <target>e36a0368-d8f6-40a2-bd29-375352045da8</target> + </connection> + </connections> + <nodes name="Node 01"> + <id>1c862df6-80e5-445b-a41c-ed677973abfb</id> + <location> + <x>128</x> + <y>90</y> + </location> + <nodeProperties/> + </nodes> + <nodes name="Node 11"> + <id>e36a0368-d8f6-40a2-bd29-375352045da8</id> + <location> + <x>531</x> + <y>104</y> + </location> + <nodeProperties/> + </nodes> +</diagram> +\end{verbatim} +} + +In der aktuellen KSM/Swing Applikation wird ebenfalls ein auf XML-basierendes +Datenformat verwendet. + +Abbildung \ref{fig:ksmswing-diagramm} zeigt ein einfaches KSM-Diagramm in +KSM/Swing. Listing \ref{ksmswingdata} gibt stark gekürzt das bei der Speicherung +erzeugte XML wieder. + +\begin{figure}[ht!] + \centering + \includegraphics[width=\textwidth]{images/ksm-swing-screenshot.png} + \caption{KSM/Swing Applikation bei der Anzeige der Daten aus Listing + \ref{ksmswingdata}} + \label{fig:ksmswing-diagramm} +\end{figure} + +\lstinputlisting[language=XML,basicstyle=\ttfamily\scriptsize, + caption={Datenformat aus KSM/Swing Applikation Stand + 22.02.2011}]{files/ksm-example.xml}\label{ksmswingdata} + +Für das KSM/Swing Datenform existiert ein XML-Schema in der Ausarbeitung der +Studienarbeit von Friedhelm Wolf \cite{wolf05} in Anhang 4. Es wurde aber in den +folgenden Studienarbeiten nicht mehr weiter gepflegt und ist daher vermutlich +nicht mehr gültig. + +Darüberhinaus existierte keine saubere Dokumentation dieses Datenformates. Die +Bedeutung der abgelegten Werte muss aus dem Quelltext von KSM/Swing +interpretiert werden was nicht immer einfach ist. + +Weiterhin scheinen die Konventionen beim Entwurf dieses Formates (oder +,,Schema'') eher beliebig gewesen zu sein. +Dies fällt als erstes auf bei der Benennung der der Eigenschaftsnamen (Tags), wo +\texttt{CamelCase} (,,Microsoft Stil''), \texttt{javaStilArt} und +underline\_stil wild gemischt werden. Die Benamung verwendet teils Typ-Prefix +(\texttt{sIconPath}), teils auch nicht. + +Die Ein- und Ausgabe erfolgt in KSM/Swing mithilfe der Java-Bibliothek +\textit{com.machinedialog}. Von Seiten der Projektbetreuung wurde geäusert, dass +es gewünscht ist diese alte Bibliothekt nicht mehr weiter zu verwenden. + + +Die fehlende Dokumentation und der anscheinend unstrukturierte Entwurf sprachen +ebenfalls gegen eine Weiterverwendung dieses Schemas. +In Sicht zur Zukunft ist das Format ungeignet, weil es nicht erlaubt zusätzlich +Eigenschaften rückwärtskompatibel abzubilden. + +Es ist nicht durch ein XML-Schema gestützt und es wurde im Laufe der Entwicklung +mehrmals beliebig verändert. Es ist nicht dokumentiert und der Parser in +KSM/Swing Programm ist in einem schlechten und mit der GUI verknüpften Zustand. + + +\section{Entwicklung eines neuen Datenformat} +Wie an diesen beiden Beispielen zu sehen ist, bietet das XML-Format aus der +Studienarbeit~1 nicht den Darstellungsumfang des KSM/Swing Format. Letzteres ist +jedoch ungeignet zur Nutzung in einer neuen KSM RCP-Applikation. + +Daher lag es nahe ein Format zu entwerfen welche sowohl von KSM/Swing mithilfe +einer sauberen neuen Import/Export Infrastruktur als auch in der RCP-Anwendung +genutzt werden kann. Es wurde hierbei ein Ansatz gewählt der sowohl Knoten, +Gruppen von Knoten (auch bekannt als ,,Hirarchien'') als auch gerichtete +Verbindungen zu einem anderen Knoten abbilden kann. Alle drei Objekte können +durch Eigenschaften dynamisch, nicht schemagebunden mit Informationen +angereichert werden. + +\par +\begingroup +\leftskip=1.5cm % ggf. verstellen +\noindent Die Implementierung des neuen Datenformat in KSM/Swing wurde von +Tobias Dreher vorgenommen. Siehe dazu seine Studienarbeit \cite{dreher11}. +\par +\endgroup + + +Zu festen Standardisierung wurde ein XML-Schema erstellt woraus wiederum mittels +des XML-Schema-Compiler (xjc) von JAXB Java-Klassen erzeugt werden die mit +weiteren, handgeschrieben Klassen eine Bibliothek zur Abbildung von +KSM-Diagrammen im Speicher und laden/speichern bietet (Abb. +\ref{fig:class-diagram-xmlschema}). Diese kann sowohl von KSM/RCP als auch +beliebigen Java-Anwendungen verwendet werden. + +\begin{figure}[ht!] + \centering +\includegraphics[width=0.8\textwidth]{images/class-diagram-xmlschema.PNG} +\caption{Klassendiagramm XML-Datenmodell Bibliothekt, Auschnitt KSM +Model-Klasse} +\label{fig:class-diagram-xmlschema} +\end{figure} + +Die Datenmodell Bibliothek (Name +\texttt{de.\-dhbw.\-horb.\-ksm.\-xmlschema}) ist als Eclipse-Project angelegt +kann jedoch auch nur mit Ant entwickelt werden. Das Projektverzeichnis enthält +weiterhin umfassende Unit-Tests, teils Beaviour Driven + +Listing \ref{listing:example} zeigt valide Beispieldaten zum im Anhang ab Seite +\pageref{listing:schema} hinterlegten neuen XML-Schema.. + +\lstinputlisting[language=XML,basicstyle=\ttfamily\scriptsize, + caption={KSM example-1.xml} + ]{files/example-1.xml}\label{listing:example} + + +Weitere Dokumentation zum Format und der Bibliothek finden sich im Anhang ab +Seite \pageref{chapter:doku-datamodel}. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Weiterentwicklung Programmfunktionalität und +Modularisierung}\label{chapter:weiterentwicklung} + +Das KSM/RCP Projekt besteht aus folgenden Komponenten: +\begin{description} + \item[\texttt{de.\-dhbw.\-horb.\-ksm.\-core}] Plugin + Project, Kernfunktionalität: + \begin{itemize} + \item RCP-Anwendung Einstiegspunkt + \item Editor auf Basis von GEF (Figures, EditParts) + \item Projekttypen, Dateiwizard, Outline und Navigator + \item KSM-Property Extension-Point + \end{itemize} + \item[\texttt{de.\-dhbw.\-horb.\-ksm.\-qksm}] Plugin Project, Enthält nur + eine Demo für den Property Extension-Point. + \item[\texttt{de.\-dhbw.\-horb.\-ksm.\-simulator}] Fragment Project von + \texttt{.core}, Enthält eine Demo der + live Verknüpfung des im Editor dargestellten Modells mit einem Chart auf Basis + von SWTChart. + \item[\texttt{de.\-dhbw.\-horb.\-ksm.\-tableeditor}] Fragment Project von + \texttt{.core}, Enthält einen Prototyp + zum Editieren von Knoteneigenschaften in Tabellenform. + \item[\texttt{ksm-model}] + Java-Project/Apache Ant, Datenmodell: + \begin{itemize} + \item XML-Schema des Datenformat. + \item Java Library auf Basis von JAXB. + \item Dokumentation des Datenformat. + \end{itemize} + \item[\texttt{de.\-dhbw.\-horb.\-ksm.\-model}] Plugin Project welches + \texttt{ksm-model} als OSGi-Bundle zur Verfügung stellt. Muss nach + Aktualisierung von \texttt{ksm-model} ebenfalls aktualisiert werden. +\end{description} + + +\section{Die RCP Applikation \texttt{ksm.\-core}} +\subsection{Der Editor und das Datenmodell} + +\begin{figure}[mt] +\centering +\includegraphics[width=\textwidth]{images/node-edit-and-figure.PNG} +\caption{Model, View und Controller des KSM (von Rechts nach Links)} +\label{fig:node-edit-and-figure} +\end{figure} + + +% model source/target connections +% commands +%zooming redbook 4.2.4 +% übersicht der commits mit verbesserten commit-messages + +% fragment project versus bundle + + + +% Properties +% http://www.eclipse.org/articles/Article-Properties-View/properties-view.html +% vogella: extension points + + + +\section{Simulation} +Ein Prototyp der Simulationsdarstellung zeigt wie sich Änderungen + +\begin{figure}[ht!] +\centering +\includegraphics[width=0.8\textwidth]{images/eclipse-simulator.jpg} +\caption{Simulator Prototyp} +\label{fig:eclipse-simulator} +\end{figure} + +Die Simulationskomponente lässt sich in Eclipse~RCP mithilfe einer zusätzlichen +View implementieren. + +Diese View besitzt einen eigenen Zustand ist jedoch zum Start der Simulation mit dem +dann aktiven Editor gekoppelt. + +\subsection{Dieser komische Graph} +kann mit der library swtchart dargesellt werden + +\section{Table-Editor} +Der Table-Editor ,,besteht aus sechs Reitermenüs. Diese besitzen folgende +Funktionalitäten: [Editoren für] ,Edge Values' – Kanteneigenschaften [..] +,Node Values' – Knoteneigenschaften'' (Studienarbeit Christian Riess \cite[S. +24]{riess03}). + +Im Rahmen dieser Studienarbeit wurde ein Table-Editor prototypisch entworfen +welcher Knoteneigenschaften manipulieren kann. Abbildung \ref{fig:table-editor} +zeigt die dabei eingeführten Neuigkeiten. + +\begin{figure}[ht!] +\centering +\includegraphics[width=0.8\textwidth]{images/table-editor.jpg} +\caption{Prototyp eines Table-Editor} +\label{fig:table-editor} +\end{figure} + +Rot markiert ist die neue View des ,,Table-Editor''. Sie wird durch den Aufruf +der Table-Editor Perspektive aktiviert (Button ebenfalls rot markiert). + +Bei der View handelt es sich \texttt{PageBookView}. Sie instanziert für jeden +offenen Editor einen Table-Editor. Es wird jeweils der zu dem fokussierten +Diagramm-Editor passende Table-Editor angezeigt. Die Implentierung folgt dabei +dem Eclipse-Standard wie er auch in Outline verwendet wird. + +Änderungen am Diagramm übernimmt der Table-Editor einfacherweise indem er auf +alle Node/NodeGroup Objekte listener registriert sondern er beobachtet den +Command-Stack des Editors. Dies funktioniert nur solange wie keine weiteren +Änderungen am Modell vorgenommen werden die kein Command im Diagramm-Editor +Command-Stack erzeugen. + +Der Table-Editor nutzt im Prototyp noch keine Undo-/Redo-Funktionalität. + +Der Table-Editor Prototyp ist als seperates Eclipse-Projekt vom Typ +,,Plugin-Fragment'' abgelegt. Das bedeutet, es hängt direkt vom KSM-Core Plugin +als Host-Plugin ab und ist kein eigenständiges (OSGi-)Bundle. Daraus folgt auch, +dass es nicht über ein \texttt{Activator} Klasse verfügt. + +\section{Property Editor} +Damit ein Model für die Properties-View nötigen Informationen bereitstellt muss +eine \texttt{Prop\-erty\-Source} bereitgestellt werden. Dies geschieht im +einfachen Fall indem die Model-Klasse \texttt{IProp\-erty\-Source\-Provider} implementiert. + +Ist dies nicht der Fall fragt die Properties-View das \texttt{EditPart} über +\texttt{getAdapter\-(IProp\-erty\-Source\-Provider.class)} nach einem Objekt das +die Properties des Model beschreibt. Dieser Ansatz wurde gewählt, da die +Klassen des Models nicht angepasst werden konnten. Dies ist in einer +Designschwäche der Model-Bibliothek begründet. Es ist noch nicht möglich eigene, +abgeleitete Klassen für das Model zu verwenden. + +Es wurden daher die Klassen \texttt{d.d.h.k.core.\-editor.\-model.\-property.*} +als PropertySourceProvider für \texttt{Node} und \texttt{NodeGroup} eingeführt. +Abbildung \ref{fig:ext-property-descriptors} zeigt als UML-Klassendiagramm die +Klassen zur Verwaltung der Properties. + +\begin{figure}[mt] +\centering +\includegraphics[width=0.7\textwidth]{images/ext-property-descriptors.PNG} +\caption{Klassen des Extension Point für Property Deskriptoren} +\label{fig:ext-property-descriptors} +\end{figure} + +Für jedes Model-Objekt meldet das entsprechende EditPart eine Instanz von +\texttt{Model\-Property\-Source}. Das Attribut \texttt{type} ist dabei je nach +Model eines von \texttt{ksm, nodegroup, node, connection}. +Anhand dieses Typs wird in der Extension\-Registry nachgeschlagen ob für den +Extension\-Point \texttt{de.\-dhbw.\-horb.\-ksm.\-core.\-model.\-property} +Extensions registriert wurden. + +Extensions sehen so aus, dass eine von +\texttt{Abstract\-Property\-Descriptor\-Advisor} abgeleitete Klasse (im +Beispiel sind schon BaseNode(Group)PropertyAdvisor dargestellt die die +Manipulation der grundlegenden Eigenschaften Farbe und Beschriftung erlauben) +angegeben wird die Descriptoren für Eigenschaften des Model-Objekt erstellt. + +\begin{figure}[mt] +\centering +\includegraphics[width=0.7\textwidth]{images/eclipse-property-declaration-extensionpoint.jpg} +\caption{Deklaration des Extension-Point für Property-Advisors} +\label{fig:property-declaration-extensionpoint} +\end{figure} + +\begin{figure}[mt] +\centering +\includegraphics[width=0.7\textwidth]{images/eclipse-property-usage-extensionpoint.jpg} +\caption{Benutzung des Extension-Point für Property-Advisors} +\label{fig:eclipse-property-usage-extensionpoint} +\end{figure} + +Abbildung \ref{fig:property-declaration-extensionpoint} zeigt wie der Extension +Point deklariert wurde. Das gezeigte GUI ist eine Maske für eine XML-Datei die +im Prinzip ein XML-Schema für das XML ist mit dem der Extension-Point +genutzt werden kann. In diesem Fall können auf den Extension-Point beliebig +viele ,,advisor'' Elemente angelegt werden die auf eine von +\texttt{Abstract\-Property\-Descriptor\-Advisor} abgeleitete Klasse zeigen und +ein Attribut \texttt{type} haben (Abb. +\ref{fig:eclipse-property-usage-extensionpoint}). + + +\section{ksm-datamodel als OSGi Bundle} +%%% warum primitiv gehalten +%% wies in eclipse geht + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Eclipse~RCP Programmierung}\label{chapter:rcpprogrammierung} +Dieses Kapitel soll zukünftigen Entwickler einige Hinweise zum schnellen Start +geben. Dazu soll die in dieser Arbeit verwendete Arbeitsumgebung vorgestellt und +dabei gewonnenen Erfahrungen bei der Einarbeitung und Nutzung mitgeteilt werden. + +\section{Hilfsmittel} +Zu Beginn der Studienarbeit I verfügte ich über Basiskentnisse der Eclipse +Java Development Tools (JDT). Das Thema Eclipse~RCP wurde im Studium nicht +angesprochen und daher war meine primäre Aufgabe einen Einstieg in das Thema +RCP-Entwicklung zu finden. + +Zum Kennenlernen von Eclipse ist der Besuch eines Eclipse Demo~Camp +empfehlenswert. Dort werden neue, auf Eclipse aufbauende Technologien +vorgestellt. Informationen darüber finden sich im Eclipse Wiki +\cite{eclipse:wiki}. Weitere aktuelle Informationen aus dem Eclipse Umfeld +finden sich in Blogs die im Eclipse Planet aggregiert werden +(\url{http://planeteclipse.org/}). + +Weiterhin war auch einige der Literatur in Buchform, die im Literaturverzeichnis +dieser Arbeit verlinkt ist, sehr hilfreich. Grundsätzlich findet man jedoch die +meisten Informationen in RCP-Beispielapplikationen, formloser Dokumentation und +im Eclipse-(Online-)Hilfesystem. Auch sollte man zur RCP-Entwicklung die Quellen +von RCP installiert haben, sodass man bei jeder Gelegenheit nahtlos in den +Quellcode von RCP wechseln kann. Die API-Dokumentation der RCP und auch GEF +Klassen ist meist sehr hilfreich. + +Zum Einstieg ist das RCP Tutorial von Lars Vogel empfehlenswert \cite{vogelrcp}. +Zu den Grundlagen von GEF sind die Folien eines EclipseCon Tutorials interessant +\cite{gefslides}. Tiefergehend jedoch teils veraltete Informationen bietet +das IBM Redbook zu diesem Thema \cite{gefredbook}. + +Einen allgemeinen Überblick und guten Enstieg in die Eclipse Plugin Entwicklung +findet sich in der Seminararbeit im Kurs Software-Engineering 2011 von Felix +Kienzle TIT2008NS \cite{kienzle11}. + +Da Eclipse~RCP kein abgeschlossenes Produkt ist sondern sich aus einzelnen +Komponenten zusammensetzt findet man auch Informationen jenseits von RCP. +Beispielsweise zu OSGi\cite{bartlett}, JFace\cite{jfaceaction} oder SWT. Eine +Liste von Empfohlenen Büchern findet sich unter \cite{eclipse-read}. + +\section{Berücksichtigung von Eclipse~RCP in zukünftigen Vorlesungen} +Im 4ten-Semester gab es eine Einführung in das Arbeiten mit Eclipse. Aus der +Sicht dieser Studienarbeit lag der Focus dabei leider lediglich auf einer +kurzen Einführung in die Arbeit mit den Java Development Tools (JDT). + +Um die Arbeit an KSM/RCP vorzubereiten könnte in dieser Vorlesung schon die +Entwicklung von Eclipse-Plugins und RCP-Anwendungen besprochen werden. + +Dadurch wird der Zeitbedarf der Vorlesung steigen. Ein Möglichkeit diese Zeit zu +gewinnen könnte in der Optimierung der Vorlesungen zu Programmiersprachen +liegen. +So gab es im Zuge der Vorlesungen C++, Java/Eclipse, .net/C\# Themenredundanzen. +Möglicherweise wäre es sinnvoll, anhand Java - wegen dem vglw. einfachen Aufbau +dieser Programmiersprache - in die Objektorientierte Programmierung einzuführen +und ggf. darauf aufbauend C++ zu lehren. + +Die zusätzliche Vermittlung der .net-Umgebung mit der Sprache C\# hat in meinen +Augen keinen Sinn gemacht, da hier keine neuen oder andersartigen Konzepte +sondern lediglich leichte Syntaxveränderungen vermittelt wurden. + +Ergänzend hätte mich vielmehr eine Einführung in funktionale Programmierung +interessiert, die könnte - bei anhaltender Eclipse~RCP-Ausrichtung - mit dem +Einsatz Scala erfolgen \cite{eclipse:scalabundle}\cite{eclipse:scalarcp}. + +\section{Technische Organisation des Projekts} +XXX +hier zum opensource, git svn migration. + +kurz xmlschema-doc als asciidoc. + +einschätzung ksm als opensource + +vorteile github +XXX + +\section{KSM als Open-Source Projekt} +Bereits zu Beginn der ersten Studienarbeit wurde die Veröffentlichung des KSM +Programm inklusive Quelltexte diskutiert. Zu diesem Zeitpunkt war man der +Auffasung, dass KSM/Swing technisch nicht in einem veröffentlichungswüdigen +Zustand ist und KSM/RCP existierte noch nicht als Prototyp. +Die Veröffentlichung von KSM/Swing wird wahrscheinlich nicht mehr in dieser +Studienarbeit geschehen. + +Unabhängig davon erscheint eine Veröffentlichung von KSM/RCP sinnvoll. Es darf +dabei jedoch nicht als klassisches Open-Source Projekt gesehen werden weil es +noch nicht produktiv verwendbar ist: +\begin{quote} +It's fairly clear that one cannot code from the ground up in bazaar style. +One can test, debug and improve in bazaar style, but it would be very hard to +originate a project in bazaar mode.\\ +\ldots Your nascent developer community needs to have something runnable and +testable to play with. +\flushright{\small Eric S. Raymond, ,,Necessary +Preconditions for the Bazaar Style'' \cite{cathedral}} +\end{quote} + +Die Veröffentlichung hat nicht die Absicht eine Entwicklergemeinde zu bilden, +sondern eine ,,stabile'' Heimat für KSM zu gründen. Wie in Studienarbeit 1 +visualisiert wurde \cite[S. 2]{fischer10} war die bisherige Entwicklung von KSM +eher chaotisch als zielstrebig. Dies lag vermutlich auch zum Teil daran, dass +beginnende Studenten kein sauberes Projekt vorfanden sondern auf ,,ein SVN'' was +\textit{irgendwo liegt} verwiesen wurden und dann gibts da noch so eine +\textit{CD-ROM}. Eine Übersicht über die vorhergehenden +Studienarbeiten-Ausarbeitungen gab es bis dahin ebenfalls nicht. + +Die Veröffentlichung - bzw. eine sauber strukturierte Ablage - ist ein Baustein +im Prozess der Zustand ändert. + +In Hinblick auf eine Open-Source Entwicklung wird das private und sich als +unzuverlässig herausgestellte Subversion-Repository gegen ein Git-Repository +getauscht. Die Wahl für Git begründet sich durch die starke Präsenz besonders in +Eclipse nahen Projekten und dadurch, dass bereits im Kurs Software-Engineering +mit Git gearbeitet wurde. Es wird die ebenfalls im Studium bereits verwendete +Platform \texttt{github.com} verwendet. + +Die Quellen des Eclipse basierten KSM/RCP werden unter dem Github +Organization-Account \textit{dhbw-horb} veröffentlicht bzw. hinterlegt werden. +Ebenso wird ein Verweis auf die KSM-Website hinterlegt. Zukünftige Entwickler +erhalten Zugriff, indem sie Mitglied dieses Organization-Account werden. + +Zwar wird der Quellcode veröffentlicht. Von Open-Source im Sinne der allgemeinen +Bedeutung ist allerdings nicht zu sprechen, da keine Open-Source Lizenzierung +vorgenommen wird die fremden Personen die Beteiligung erleichtern würde. + +%XXX +Da zur Drucklegung noch keine endgültige Entscheidung der Projektleitung +gefallen ist, ist das KSM/RCP-Repository bis auf weiteres \textit{private}, d.h. +es kann nur von Mitgliedern der \textit{dhbw-horb Organization} eingesehen werden. + + +% ergänzungen zu sa-1 +%link zu +%% java coding style +%% mockito dokumentation +%% avh vorlesung xmlschema + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Zusammenfassung und Ausblick}\label{chapter:ausblick} +% zukpnftige aufgaben +%% lizenzierung +%% programmieren der fehleenden komponetenten +%%% graph, table editor +%% Automatische GUI-Tests +%% Model mit EMF erstellen von KSM/Swing wegfällt + +%% graffiti statt GEF? + +%% trennung qksm/ksm/rcp sinnlos + +% model/xmlschema: fehlender factory support; einzelne listener vll. doch falsch + +% gef nach migration http://eclipse.org/graphiti/ + +%danksagung + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\cleardoublepage +\appendix +\addcontentsline{toc}{chapter}{Anhang} +\label{appendix} +\setcounter{section}{0} + + +\cleardoublepage +\addtocounter{section}{1} +\chapter*{Anhang \arabic{section}. \ Dokumentation Datenmodell} +\addcontentsline{toc}{section}{Anhang \arabic{section}. \ Dokumentation Datenmodell} +\label{chapter:doku-datamodel} +\includepdf[pages=2-, +pagecommand=, +scale=0.8, +offset=0 50,scale=1.12]{../ksmrcp/ksm-model/doc/KSM-Datamodel.pdf} + +\cleardoublepage +\addtocounter{section}{1} +\chapter*{Anhang \arabic{section}. \ Neues XML-Schema} +\addcontentsline{toc}{section}{Anhang \arabic{section}. \ Neues XML-Schema} +\label{appendix:schema} +\lstinputlisting[language=XML,basicstyle=\ttfamily\scriptsize, + label=listing:schema + ]{files/ksm-1.xsd} + + +\cleardoublepage +\addtocounter{section}{1} +\renewcommand{\listfigurename}{Anhang \arabic{section}. \ Abbildungsverzeichnis} +\addcontentsline{toc}{section}{\listfigurename} +\listoffigures + +%\cleardoublepage +%\addtocounter{section}{1} +%\renewcommand{\listtablename}{Anhang \arabic{section}. \ Tabellenverzeichnis} +%\addcontentsline{toc}{section}{\listtablename} +%\listoftables + +%\newpage +%\twocolumn +%\printglossary[toctitle={Glossar},title={Glossar}] +%\onecolumn + +\cleardoublepage +\addtocounter{section}{1} +\renewcommand{\bibname}{Anhang \arabic{section}. \ Literatur} +\addcontentsline{toc}{section}{\bibname} +\nocite{*} %alles ausgaben +\bibliography{document} +\end{document}
\ No newline at end of file |