Commit d6e4e6f3 by Kai Westerkamp

Update chapter3.tex 3

parent c9d026a7
......@@ -6,7 +6,7 @@ Ein Ziel dieser Arbeit ist es die Verbindung des CSDAdapter zu verbessern und wi
Außerdem soll der SBA auch an die CSD angebunden werden.
Aktuell muss der Bidlasuwerter jedes Bild einzeln Dateisystem laden, was ineffizient und langwierig ist.
Der Bildauswerter soll die Daten direkt aus der CSD laden können und seine ausgewerteten Ergebnisse dort abspeichern.
Eine weiter Anforderung an den SBA ist das dieser auch ohne die Verbindung zur Middleware bzw. dem Backend funktionieren soll. % Zur Verbesserung der Robustheit.
Eine weitere Anforderung an den SBA ist das dieser auch ohne die Verbindung zur Middleware bzw. dem Backend funktionieren soll.
\section{Übersicht über die bestehende Struktur}
Der Bildauswerteplatz der Zukunft besteht aus mehren Komponenten (siehe Abbildung \ref{figure:backend}).
......@@ -83,7 +83,7 @@ Die Eingaben des Nutzers müssen in eine CSD-Query umgewandelt und die Verbindun
Der Geoviewer sendet die Task zur Verarbeitung an den CSD-Adapter.
Der SBA verarbeitet den Task direkt.
Bei beiden Zugriffen auf die CSD wird zunächst der Task gestartet und anschließend mit dem CSDReadingClient der Isaac.lib auf den Server zugegriffen. % Warum sprichst du von 2 Zugriffen?
Bei beiden Programmen wird zunächst der Task gestartet und anschließend mit dem CSDReadingClient der Isaac.lib auf den Server zugegriffen.
In den Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA} ist dieser Teil grün markiert.
Die Verarbeitung eines Tasks und der Zugriff auf den CSD-Server ist in beiden Komponenten ähnlich und wurde deshalb in die CSDCommons-Bibliothek ausgelagert.
......@@ -153,7 +153,7 @@ Zur Benutzung wurden Buttons zur schnellen Datumsauswahl und zum Generieren von
Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche Schreibvorgang.
Zunächst wird das Bild gerendert und mit Hilfe des NSIF-Creators in ein NSIF-Bild umgewandelt.
Das Metadaten-XML-File wird mit Hilfe des CSD-Writing Cleints der Isaac.lib an die CSD gesendet.
Das Bild wird in einem HTTP Server der der Isaac.lib zur Verfügung gestellt, sodass CSD Server das Bild herunterladen kann. % gehört der HTTP Server zur isaac.lib? Das ``der Isaac.lib'' kann man auf 2 Arten lesen (Genetiv ODER Dativ-Objekt zum Verb ``zur Verfügung stellen''
Das Bild wird in einem HTTP Server, der in der Isaac.lib enthalten ist, zur Verfügung gestellt, sodass CSD Server das Bild herunterladen kann.
\begin{figure}
\centering
......
......@@ -2,20 +2,24 @@
\label{chapter:implemetation}
\section{Laden von Daten}
\todo{Einleitung}
\subsection{CSD-Task erstellen}
Um eine wiederverwendbare Oberfläche einzubinden, wird eine Schnittstelle angelegt (siehe Abbildung \ref{figure:klassenRequest}).
Die Schnittstelle wird aufgerufen, sobald der Nutzer einen Task absendet und bei der Auswahl einer Region.
Das CSD-Plugin des Geoviewers implementiert diese Schnittstelle.
Region-Anfragen werden direkt bearbeitet und der Task Request wird an den CSD-Adapter gesendet.
Die Request UI des CSDPlugin soll wiederverwendbar werden.
Hierfür wurde eine Schnittstelle gemeinsame Schnittstelle angelegt (siehe Abbildung \ref{figure:klassenRequest}).
Diese Schnittstelle wird aufgerufen, sobald der Nutzer einen Task absendet und bei der Auswahl einer Region.
Das CSD Plugin des Geoviewers implementiert diese Schnittstelle.
Region Anfragen werden direkt bearbeitet und der Task Request wird an den CSD-Adapter gesendet.
Im SBA wird das Interface der CSDRequestAction implementiert.
Der Aufruf der Region wird falls möglich über einen DirectRequest an das CSD-Plugin weitergeleitet.
Die Antwort darauf erhält der SBA erneut über einen DirectRequest. % Warum ``erneut''?
Eine DirectMessage ist im System der Middleware nicht vorhanden.
Deshalb werden an dieser Stelle ersatzweise Requests verwendet.
Ein einziger Request genügt für diese Aufgabe nicht, da nicht bekannt ist, wie lange der Nutzer zum Einzeichnen benötigt.
Nutzt man lediglich einen DirectRequest, so müsste die Antwort der Plugins innerhalb des Timeouts von 5 Sekunden erfolgen, was nicht gewährleistet werden kann.
Der Aufruf der Region wird falls möglich an das CSD-Plugin weitergeleitet.
Die Middleware verfügt neben Nachrichten und Anfragen an das Backend über DirectRequests zwischen den an die Middleware angeschlossenen Komponenten.
Jede verbundene Komponente verfügt über eine eindeutige ID.
Durch diese ID erfolgt die Zuordnung des DirectRequests die am Empfänger verarbeitet und mit einer DirectResponse beantwortet wird.
Der SBA nutzt diese DirectRequests um eine Region auf dem Geoviewer auswählen zu lassen.
Das Problem hierbei ist, dass der Nutzer beliebig lange zum einzeichnen brauchen kann und die Antwort eines DirectRequest innerhalb des Timeouts erfolgen muss.
Deshalb antwortet der Geoviewer sofort auf den Request und lässt den Nutzer Einzeichnungen vornehmen.
Ist die Regionsauswahl abgeschlossen sendet der Geoviewer einen DirectRequest an den SBA um das Ergebnis der Auswahl zu übermitteln.
Im Sequenzdiagramm \ref{figure:klassenRequest} sind beide Abläufe dargestellt.
\begin{figure}
\centering
......@@ -26,34 +30,46 @@ So kann der RequestDialog wiederverwendet werden.}
\label{figure:klassenRequest}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{../UML/Sequenz RequestUI.png}
\caption{Das Erstellen eines CSD Tasks als Sequenz Diagramm.
Links der Ablauf im CSDPlugin des Geoviewer, Rechts im SBA.
Der Alt Block steht nur zur Verfügung wenn der SBA mit dem Geoviewer verbunden ist. }
\label{figure:sequenzRequest}
\end{figure}
\subsection{Task ausführen}
Die Isaac.lib unterstützt 2 Arten von Anfragen an die CSD.
Ein CSD-Request ist eine einmalige Abfrage des Servers, die alle Treffer an einen im Request definierten ResultHandler übergibt und sich dann beendet.
Eine Subskription liefert auch nach dem Abfragezeitpunkt Ergebnisse.
Wird zum Beispiel ein neuer Datensatz hinzugefügt, der auf die Abfrage passt, so wird dieser auch an den ResultHandler übergeben.
Beide Abfragen unterscheiden sich bei der Erstellung nur durch die eigentlichen Abfrage. % Was bedeutet das? ``Die ABFRAGEN unterscheiden sich NUR durch die ABFRAGE'' Bitte den geringen Unterschied klarer darstellen.
Die Verarbeitung der unterschiedlichen Abfragen unterscheidet sich nur in dem Aufruf des CSDReadingClients.
Deshalb wurde die abstrakte Klasse CSDTask angelegt (siehe Abbildung \ref{figure:klassenTask}).
Die Methode startRequest startet die Abfrage in einen neuen Thread.
Zuerst wird die abstrakte Methode beforeTask aufgerufen, um Vorbereitungen zu treffen, zum Beispiel Ergebnisse von einem alten Task zu löschen.
Die Ausführung der CSD-Abfrage erfolgt in 3 Schritten.
Erst wird der CSD Querry String generiert.
Erst wird der CSD Querry String generiert. \todo{Beispiel}
Anschließend folgt eine Abfrage über die Anzahl der erwarteten Ergebnisse.
Die Methode isValidTaskSize überprüft nun, ob der Task ausgeführt werden soll oder ob das Ergebnis zu lange brauchen würde.
Die Methode isValidTaskSize überprüft nun, ob der Task ausgeführt werden soll oder ob das Ergebnis zu groß und somit nicht sinnvoll ist.
Die Standard-Implementierung vergleicht die erwarteten Ergebnisse mit einem Wert aus der Konfigurationsdatei.
Ist der Task ``klein genug'', wird die abstrakte Methode queryCSD aufgerufen.
Die Methode wird implementiert von den beiden Klassen CSDRequst und CSDSubscription, die vom CSDTask erben.
In dieser Methode wird die Verbindung zur CSD aufgebaut und durchsucht.
Die Ergebnisse der Abfrage werden alle an den übergebenden Result Handler weitergeleitet.
Um in Präsentationen Fehler zu vermeiden, wurde die Möglichkeit eines lokalen Request aus dem CSD-Adapter übernommen. % Du meinst wahrscheinlich Präsentationen = Demonstrationen beim Kunden, wo keine Verbindung zum Backend besteht. Ich habe zuerst an die Präsentationsschicht im GUI gedacht. Sollten wir vielleicht klarer schreiben.
Dieser lokale Request lässt sich im Konfigurationsfile aktivieren und führt dazu, dass die Ergebnisse aus einer Datei geladen und direkt an den ResultHandler übergeben werden.
Um in Demonstrationen beim Kunden Fehler zu vermeiden, wurde die Möglichkeit eines lokalen Request aus dem CSD-Adapter übernommen.
Dieser lokale Request lässt sich im Konfigurationsdatei aktivieren und führt dazu, dass die Ergebnisse aus einer Datei geladen und direkt an den ResultHandler übergeben werden.
\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{../UML/Klassen CSDTask.png}
\caption{Vererbungs-Hierachie des CSDTasks. Die Ausführung des Task wird in der Superklasse gestartet. Die Funktionalität ist in den eigentlichen Klassen implementiert.}
% Ist die Formuilierung ``die eigentlichen Klassen'' gut? Wie wäre: in den ``spezialisierten Klassen''?
\caption{Vererbungs-Hierachie des CSDTasks. Die Ausführung des Task wird in der Superklasse gestartet.
Der Aufruf der CSDReadingClienst übernehmen Der CSDRequest und die CSDSubscription.
Der SBA Request und der Adapter Request implementieren die Vor- und Nachbereitung des Tasks sowie das Userfeedback über den Fortschritt in den jeweiligen Programmen.
}
\label{figure:klassenTask}
\end{figure}
......@@ -62,14 +78,16 @@ Dieser lokale Request lässt sich im Konfigurationsfile aktivieren und führt da
Die Ergebnisse aus einer CSD-Abfrage werden als Liste aus XML-Dokumenten an die Methode newResults(List<Documents>) übergeben.
Diese ist ein Teil des Interfaces isaac.lib ResultHandler.
Für den SBA und den CSD-Adapter müssen zunächst einige allgemeine Informationen aus dem XML-Dokument ausgelesen werden.
Deshalb wurde die abstrakte Klasse ResultHandler in der CSDCommon-Bibliothek angelegt (siehe Abbildung \ref{figure:klassenResult}.
Für jedes neue Ergebnis werden zunächst alle allgemeinen Felder ausgelesen und anschließend die Methode newResult aufgerufen, um das Ergebnis genau zu verarbeiten. %Was meinst du mit ``genau verarbeiten''?
Außerdem wird jeder Fehler abgefangen, der bei der Auswertung passieren könnte. % ``jeder Fehler wird abgefangen''. Bist du sicher das du ALLE Fehler abfängst? Wenn nicht, würde ich schreiben ``Außerdem werden Fehler abgefangen''
Bricht die Verarbeitung eines Ergebnisses ab, so wird die Methode storeErrorProduct aufgerufen.
In der Standard-Implementierung wird das XML-Dokument in einem Ordner abgelegt.
Deshalb wurde die abstrakte Klasse ResultHandler in der CSDCommon-Bibliothek angelegt (siehe Abbildung \ref{figure:klassenResult}).
Für jedes neue Ergebnis werden zunächst alle allgemeinen Felder ausgelesen und anschließend die abstrakte Methode newResult aufgerufen.
Diese Methode wird von den spezifischen ResultHandlern implementiert um ein Ergebnis zu verarbeiten.
Außerdem werden alle Java Exceptions abgefangen, der bei der Auswertung eines Ergebnisses geworfen werden.
Bricht die Verarbeitung eines Ergebnisses mit einer Exception ab, so wird die Methode storeErrorProduct aufgerufen.
In der Standard-Implementierung wird das XML Dokument dessen Verarbeitung fehlgeschlagen ist, in einem Ordner abgelegt.
Der Nutzer kann diese XML Dokument manuell einsehen und sich nötige Daten selber auslesen, falls die Verarbeitung fehlschlägt.
Ist ein Ergebnis verarbeitet, wird im zugehörigen Task die Methode resultFinished aufgerufen.
So kann der Task, nachdem alle Ergebnis ausgewertet sind, die Methode afterTask aufrufen, um einen eventuelle Nachbearbeitung durchzuführen.
So kann der Task, nachdem alle Ergebnis ausgewertet sind, die Methode afterTask aufrufen, um einen eventuelle Nachbearbeitung durchzuführen (Abbildung \ref{figure:klassenTask}).
\begin{figure}
\centering
......@@ -80,17 +98,17 @@ So kann der Task, nachdem alle Ergebnis ausgewertet sind, die Methode afterTask
\subsection{CSD-Adapter}
Im CSD-Adapter wird ein CSDRequest genutzt.
Die Methoden beforeTask wird verwendet, um alte Daten zu löschen.
Außerdem wird, wie auch in beforeTask und resultFinished, eine Nachricht an den Goeviewer gesendet, um ein visuelles Feedback an den Nutzer zu geben, wie weit die Bearbeitung des Tasks vorangeschritten ist.
In beforeTask und resultFinished werden Nachrichten an den Goeviewer gesendet, um ein visuelles Feedback an den Nutzer zu geben, wie weit die Bearbeitung des Tasks vorangeschritten ist.
\todo{Bild}
Zur Kommunikation implementiert der CSD-Adapter einen ConnectionServer und der Geoviwer einen ConnectionManager aus den MiddlewareTools.
Das heißt, die Kommunikation über neue Tasks und den Fortschritt läuft nicht über das Backend, sondern direkt zwischen den Programmen.
Die erstellten Datenobjekte werden über die % hier fehlt ein wichtiges Wort
an das Backend gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen können.
Die erstellten Datenobjekte werden an das Backend gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen können.
Die Verarbeitung der Ergebnisse im ResultHandler wird zunächst aufgeteilt.
Der MainResultHandler erhält alle Ergebnisse und gibt diese an einen auf den jeweiligen Datentyp spezialisierten ResultHandler weiter.
Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek. Im MainResultHandler wird die Methode newResults überschrieben, um die Ergebnisse weiterzureichen.
Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek.
Im MainResultHandler wird die Methode newResults überschrieben, um die Ergebnisse weiterzureichen.
\subsection{SBA}
Im SBA ist die Auswahl-Oberfläche auf Bilder eingeschränkt.
......@@ -99,16 +117,21 @@ Bei der Verarbeitung der Bilder werden alle wichtigen Informationen in einem CSD
Falls ein Vorschaubild vorhanden ist, wird dieses heruntergeladen.
Auch Vorschaubilder liegen in der CSD als NSIF-Bilder vor und werden deshalb in PNG-Bilder umgewandelt.
Alle Ergebnisse werden dem CSDDataStore hinzugefügt und der Nutzer kann sich in der ResultUI ein Bild aussuchen.
Sobald der Nutzer ein Bild aus der Datenbank öffnen möchte, wird dieses heruntergeladen und aus dem NSIF-Format in den SBA importiert.
Sobald der Nutzer ein Bild aus der CSD laden möchte, wird dieses heruntergeladen und aus dem NSIF-Format in den SBA importiert.
Um das Bil0 zu importieren wird es zunächst in ein PNG umgewandelt.
\section{Ausgewertete Daten speichern}
Das Exportieren von Daten war im SBA im Allgemeinen vorhanden. %Im Allgemeinen - im Speziellen nicht? Ich verstehe nicht, warum du die Formulierung ``im Allgemeinen'' verwendest.
Die ExportAction fragt den Nutzer nach einem Speicherort und rendert das Bild.
\section{Bilder exportieren}
Das Exportieren von Daten auf das Dateisystem war im SBA im vorhanden.
Wie alle Funktionen im SBA wurde auch das Exportieren in einer Swing Action implementiert, die an mehre Nutzereingaben wie Buttons verknüpft werden kann.
Diese ExportAction fragt den Nutzer nach einem Speicherort, rendert das Bild und legt es als Datei an den vom Nutzer ausgewählten Ort.
\subsection{Export in \rec}
Um den Export in den \rec zu gestalten, wurde das Rendern der ExportAction umgebaut, so dass es wiederverwendbar ist.
Die ExportAction in \rec überschreibt die Standard-Export-Action.
Die Auswahl des Nutzers wurde ersetzt durch einen Ordnerpfad, der aus der Konfigurationsdatei gelesen werden kann. % ... weil hier keine Benutzerinteraktion möglich ist? Ist mir nicht ganz klar.
Die ExportAction in \rec erbt von der Standart ExportAciton, sodass die Hauptfunktionalität, das Rendern übernommen wird.
Um das Bild dem \rec zur verfügung zu stellen muss dieses in einem vordefinierten Ordner abgelegt werden.
Dieser Ordnerpfad wird aus der Konfigurationsdatei gelesen.
Der Nutzer muss also nicht jedes mal manuell den Pfad heraussuchen, sondern das Bild wird direkt an den richtigen Ort gelegt.
\subsection{Export in CSD}
Der Export in die CSD erbt auch von der ExportAction.
......@@ -117,28 +140,35 @@ Die Informationen werden auf Richtigkeit und Notwendigkeit überprüft.
Wurde das editierte Bild aus der CSD geladen, so wird die Oberfläche mit den Informationen aus dem geladenen XML-File ausgefüllt.
Stammt das Bild nicht aus der CSD, werden falls möglich Standardwerte gesetzt.
Diese Werte sind in der Konfigurationsdatei editierbar.
Nachdem der Nutzer die Informationen editiert hat, wird das temporäre Bild mit dem Nsif-Creator zu einem NSIF-Bild konvertiert.
Die nötigen Metadaten zur Erstellung des Bildes werden aus der Nutzeroberfläche geladen und in ein XML-Dokument geschrieben.
Nachdem der Nutzer die Informationen editiert hat, wird das temporäre Bild mit dem NSIF-Creator zu einem NSIF-Bild konvertiert.
Der NSIF-Creator ist eine Bibliothek, die aus diversen herkömmlichen Bildformaten und einem Metadaten XML-File ein NSIF-Bild erstellt.
Die nötigen Metadaten werden aus der Nutzeroberfläche geladen und in ein XML-Dokument geschrieben.
Sind im SBA Geoinformationen vorhanden, werden diese ebenfalls angefügt.
Das XML-Dokument für die CSD wird mit den restlichen Informationen angereichert und zusammen mit dem NSIF-Bild an die Isaac.lib übergeben. % Welche Informationen können zu den ``restlichen'' gehören?
Das XML-Dokument für die CSD wird ebenfalls mit den Informationen aus der Nutzereingabe generiert und zusammen mit dem NSIF-Bild an die Isaac.lib übergeben.
Ist das Bild aus der CSD geladen, wird darauf geachtet, dass alle Informationen aus dem alten XML-Dokument übernommen werden.
Die Eingabe umfasst nicht alle Felder , die in dem XML-Dokument vorhanden sein können.
Bei der Erstellung des neuen Dokuments wird in diesem Fall das alte kopiert, alle Felder, die vom Server generiert werden, gelöscht und alle Änderungen aus der Nutzereingabe eingetragen.
Sind keine Informationen vom vorherigen Bild vorhanden, wird ein neues XML-Dokument generiert.
Der CSDWritingClient übernimmt das Übertragen des Meta-Dokuments.
Das NSIF-Bild stellt die Bibliothek in einem HttpServer zur Verfügung. % Dieser Satz scheint logisch verdreht.
Der CSD-Server lädt sich diese Datei herunter.
Das NSIF-Bild wird nicht direkt übertragen sondern wird in einem HTTP Server der isaac.lib zum download bereitgestellt.
Die URL des Bildes wird in das XML Dokument eingetragen ud dann mit dem CSDWritingClient an die CSD übertragen.
Der CSD-Server läd sich daraufhin das Bild aus dem HTTP-Server herunter.
In der Implementierung sind beim Bereitstellen des Bildes einige Probleme aufgetreten.
Zum Einen ist darauf zu achten, dass die Infrastruktur erlaubt, dass der Server eine Rückverbindung zum Client aufbaut. Ist diese Funktionalität durch eine Firewall blockiert, kann das Bild nicht übertragen werden.
Zum Anderen überträgt die Isaac.lib nicht die IP-Adresse des Clients als Download-URL, sondern den DNS-Namen. Dies kann ebenfalls dazu führen, dass der Server das Bild nicht herunterladen kann.
\TODO{Ref auf Bild}
\begin{figure}
\centering
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{../UML/Struktur Writing.png}
\caption{Die Nutzereingabe zur Eingabe der Metadaten. }
\label{figure:StrukturWriting}
\caption{Ablauf des Exportierns in die CSD
In Orange Action ist die Initiale Aktivierung des Nutzers.
Die roten Pfeile ist die Abfolge der Programmteile die Aufgerufen werden.
In grün sind die Komponenten der isaac.lib und der CSD dargestellt.
Insbesonder erfolgt der ``upload'' des Bildes, indem sich der Server die Datei vom Client herunterlädt.}
\label{figure:klassenResult}
\end{figure}
\subsection{Probleme}
\todo{Kapittel Probleme?}
In der Implementierung sind beim Bereitstellen des Bildes einige Probleme aufgetreten.
Zum Einen ist darauf zu achten, dass die Infrastruktur erlaubt, dass der Server eine Rückverbindung zum Client aufbaut. Ist diese Funktionalität durch eine Firewall blockiert, kann das Bild nicht übertragen werden.
Zum Anderen überträgt die Isaac.lib nicht die IP-Adresse des Clients als Download-URL, sondern den DNS-Namen. Dies kann ebenfalls dazu führen, dass der Server das Bild nicht herunterladen kann.
......@@ -10,6 +10,8 @@ Jedes Objekt in der CSD hat eine eindeutige UUID. Diese wird verwendet um die Da
Bisher werden auf dem Geoviewer die Objekte aus der CSD nur dargestellt, und ermöglichen das Anzeigen der zugehörigen Metadaten auf dem MetaDaten Display.
Hier kann eine weiter Verbindung zwischen SBA und Geoviewer hergestellt werden. Durch Auswahl des Objektes im Geoviewer wird das Bild im SBA geladen.
\subsection{Geoviewer Umgebung vom SBA ausr}
\subsection{Assoziationen}
Bidl und ergebniss verknüpfen
Bericht hinzufügen
......
No preview for this file type
UML/Klassen CSDTask.png

26.3 KB | W: | H:

UML/Klassen CSDTask.png

25.4 KB | W: | H:

UML/Klassen CSDTask.png
UML/Klassen CSDTask.png
UML/Klassen CSDTask.png
UML/Klassen CSDTask.png
  • 2-up
  • Swipe
  • Onion skin
No preview for this file type
No preview for this file type
UML/Struktur Writing.png

11.6 KB | W: | H:

UML/Struktur Writing.png

14.1 KB | W: | H:

UML/Struktur Writing.png
UML/Struktur Writing.png
UML/Struktur Writing.png
UML/Struktur Writing.png
  • 2-up
  • Swipe
  • Onion skin
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment