@@ -9,12 +9,12 @@ Der erste Schritt eines Bildauswerters ist das Laden der benötigten Daten, insb
Um den Bildauswertern die Arbeit zu vereinfachen, soll in allen Programmen die gleiche Nutzeroberfläche zur Verfügung stehen, um Daten aus der CSD auszulesen (siehe Abbildung \ref{figure:requestUI}).
Die Benutzeroberfläche ermöglicht das Suchen nach vielen Kriterien, wie zum Beispiel dem Namen der Mission, des Erstellers und der Erstellungszeit.
Die Auswahl einer Region soll auch möglich sein, um die Daten auf diesen Bereich der Karte zu beschränken. Der Geoviewer bietet hierfür eine einfache Möglichkeit. Der Nutzer kann durch eine einfach Einzeichnung auf der Karte den Suchbereich selektieren und die Suche einschränken. Auf dem SBA gibt s keine einfache Möglichkeit den Bereich zu selektieren. Ume eine einfache Eingabe zur Verfügung zu stellen wurde die Verbindung vom SBA zum Geoviewer um eine Regionsauswahl erweitert.
Die Auswahl einer Region soll auch möglich sein, um die Daten auf diesen Bereich der Karte zu beschränken. Der Geoviewer bietet hierfür eine einfache Möglichkeit. Der Nutzer kann durch eine einfach Einzeichnung auf der Karte den Suchbereich selektieren und die Suche einschränken. Auf dem SBA gibt es keine einfache Möglichkeit den Bereich zu selektieren. Um eine einfache Eingabe zur Verfügung zu stellen, wurde die Verbindung vom SBA zum Geoviewer um eine Regionsauswahl erweitert.
Ist der SBA mit dem Backend des Geoviewers verbunden und Geoviewer gestartet, so aktiviert sich der Regionsauswahl des Bildauswerters. Die Auswahl der Region erfolgt genau so wie auf dem Geoviewer und das Ergebniss wird zurück an den SBA gesendet. Die Auswahl erfolgt also nicht direkt im SBA sondern im Geoviwer.
Die Nutzeroberfläche kann durch ein Preset vorkonfiguriert werden. Die Konfiguration wird aus einemKonfigurationsdatei gelesen und ermöglicht eine einfachere Bedienung. Zum Beispiel kann man so mögliche CSD-Server vorgeben. Der Nutzer muss dann keine URL eingeben, sondern kann die Server aus einer Combobox auswählen.
Die Nutzeroberfläche kann durch ein Preset vorkonfiguriert werden. Die Konfiguration wird aus einerKonfigurationsdatei gelesen und ermöglicht eine einfachere Bedienung. Zum Beispiel kann man so mögliche CSD-Server vorgeben. Der Nutzer muss dann keine URL eingeben, sondern kann die Server aus einer Combobox auswählen.
Um die Nutzeroberfläche wiederverwendbar zu gestallten soll sie in eine CSDCommns Bibliothek integriert werden.
Um die Nutzeroberfläche wiederverwendbar zu gestalten soll sie in eine CSDCommns-Bibliothek integriert werden.
\begin{figure}
\centering
...
...
@@ -24,19 +24,19 @@ Um die Nutzeroberfläche wiederverwendbar zu gestallten soll sie in eine CSDComm
\end{figure}
\subsection{Task ausführen}
Nachdem der Nutzer einen Task Request erstellt hat, muss dieser ausgeführt werden. Die Eingaben des Nutzers müssen in einen CSD-Abfrage umgewandelt werden und eine Verbindung aufgebaut werden.
Nachdem der Nutzer einen Task Request erstellt hat, muss dieser ausgeführt werden. Die Eingaben des Nutzers müssen in eine CSD-Abfrage umgewandelt werden und eine Verbindung aufgebaut werden.
%TODO ref auf Isaac.lib
Der Geoviewer sendet den Task Request zur Verarbeitung an den CSD-Adapter. Der Adapter baut mit Hilfe der Isaac.lib (TODO ref) eine Verbindung zum CSD-Server auf und generiert die zugehörige Query. Der SBA verarbeitet den Task direkt. Die Vorgehensweise bei einer CSD Abfrage ist im SBA und im CSD Adapter sehr ähnlich. Es wurde versucht möglichst viel gemeinsamkeiten in die CSD-Common Bibliothek zu integriert (Siehe Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA}. Die grün markierten Komponenten sind gleich). Zur Verbindung mit der CSD wird die Isaac.lib verwendet.
Der Geoviewer sendet den Task Request zur Verarbeitung an den CSD-Adapter. Der Adapter baut mit Hilfe der Isaac.lib (TODO ref) eine Verbindung zum CSD-Server auf und generiert die zugehörige Query. Der SBA verarbeitet den Task direkt. Die Vorgehensweise bei einer CSD-Abfrage ist im SBA und im CSD-Adapter sehr ähnlich. Es wurde versucht, möglichst viele Gemeinsamkeiten in die CSD-Common Bibliothek zu integriert (Siehe Abbildungen \ref{figure:strukturViewer} und \ref{figure:strukturSBA}. Die grün markierten Komponenten sind gleich). Zur Verbindung mit der CSD wird die Isaac.lib verwendet.
\subsection{Ergebnis auswerten}
Der Isaac.lib kann bei einer Abfrage ein Result Handler übergeben werden. Gibt es zu einer Abfrage ein Ergebnis, wird dieses dem Result Handler übergeben. Ein Ergebniss besteht aus einem MetaDaten XML Dokument. Für den SBA und den CSD Adapter müssen zunächst alle generellen Informationen aus diesem XML Dokument heruasgelesen werden. Anschließend folgt die genauere Verarbeitung.
Der Isaac.lib kann bei einer Abfrage ein Result Handler übergeben werden. Gibt es zu einer Abfrage ein Ergebnis, wird dieses dem Result Handler übergeben. Ein Ergebnis besteht aus einem Metadaten-XML-Dokument. Für den SBA und den CSD Adapter müssen zunächst alle generellen Informationen aus diesem XML Dokument herausgelesen werden. Anschließend folgt die genauere Verarbeitung. % ist ``genauer'' hier das richtige Wort?
Beim SBA wird anschließend ein CSD-Data-Objekt mit allen nötigen Informationen erstellt und dieses Objekt dem CSD-DataStore hinzugefügt. Das Ergebnis der Anfrage wird anschließend in einer Tabelle dargestellt und der Nutzer kann ein Bild zum Laden auswählen (Bild \ref{figure:resultUI}).
Der CSD-Adapter trennt die Ergebnisse erst nach ihrem Typ, sodass zum Beispiel Bilder und Videos anders verarbeitet werden.
Im den meisten Fällen wird zuerst das eigentliche Objekt heruntergeladen und für den Lagetisch aufbereitet. Bei Bildern wird überprüft, ob das Bild direkt als Kartenmaterial eingebunden werden kann. Aus dem Metadaten-XML-File wird eine Metadaten-Anzeige erstellt. Außerdem wird ein Data Objekt erstellt und an das Backend gesendet, sodass das Ergebnis auf der Karte visualisiert werden kann. Im Geoviewer werden diese Objekt dann dargestellt und können verwendet werden, um die Metadaten im Metadaten Display anzuzeigen.
Im den meisten Fällen wird zuerst das eigentliche Objekt heruntergeladen und für den Lagetisch aufbereitet. Bei Bildern wird überprüft, ob das Bild direkt als Kartenmaterial eingebunden werden kann. Aus dem Metadaten-XML-File wird eine Metadaten-Anzeige erstellt. Außerdem wird ein Data-Objekt erstellt und an das Backend gesendet, sodass das Ergebnis auf der Karte visualisiert werden kann. Im Geoviewer werden diese Objekt dann dargestellt und können verwendet werden, um die Metadaten im Metadaten-Display anzuzeigen.
\begin{figure}
\centering
...
...
@@ -62,11 +62,13 @@ Im den meisten Fällen wird zuerst das eigentliche Objekt heruntergeladen und fÃ
\section{Ausgewertete Daten des SBA speichern}
\subsection{Export in \rec}
Eine Funktion der Erkennungsassistenz \rec ist das Hinzufügen von bisher unbekannten Fahrzeugen. Sind zum Beispiel Piraten mit ihrem selbstgebauten Bot unterwegs, ist diese höchst warscheinlcih nicht im System.In so einem Fall kann man Bilder hinzufügen, sodass das System dieses in Zukunft vorgeschlagen kann. In dem SBA wurde eine Funktion eingebaut, die das Exportieren eines Bildes für den \rec vereinfacht. Durch einen Knopf wird das Bild gerendert und in einen definierten Ordner abgespeichert. In diesem Ordner findet der \rec das Bild und bietet eine Import an.
Eine Funktion der Erkennungsassistenz \rec ist das Hinzufügen von bisher unbekannten Fahrzeugen. Sind zum Beispiel Piraten mit ihrem selbstgebauten Boot % oder meintest du wirklich den ``Bot''? Kurzform von Roboter.
unterwegs, ist diese höchst wahrscheinlich nicht im System. In so einem Fall kann man Bilder hinzufügen, sodass das System dieses in Zukunft vorgeschlagen kann. In dem SBA wurde eine Funktion eingebaut, die das Exportieren eines Bildes für den \rec vereinfacht. Durch einen Knopf % nicht durch den Knopf wird gerendert. Durch Knopfdrücken wird ausgelöst...
wird das Bild gerendert und in einen definierten Ordner abgespeichert. In diesem Ordner findet der \rec das Bild und bietet einen Import an.
\subsection{Export in CSD}
Nach einer erfolgreichen Auswertung soll das annotierte Bild auch wieder zu den CSD hinzugefügt werden. Hierfür wurde in den SBA ein schreibender Zugriff auf den Server implementiert. Zunächst kann der Nutzer die nötigen und bei Bedarf auch einige optionale Meta-Informationen eingeben. Hierfür wurde eine Oberfläche angelegt (siehe Abbildung \ref{figure:metaUI}). Falls das Bild aus der CSD geladen wurde, so wird das UI mit den Werten des geladenen Bildes gefüllt. Die Oberfläche überprüft, ob alle zwingenden Richtlinien eingehalten wurden. Das kann zum Beispiel bedeuten, dass gewisse Felder notwendig sind und dass einige Felder eine maximale Länge haben. Zur einfacheren Benutzung wurden Knöpfe zur einfacheren Datumsauswahl und zum Generieren von zufälligen IDs hinzugefügt.
Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche Schreibvorgang. Zunächst wird das Bild gerendert. Mit Hilfe des NSIF-Creators wird anschließend ein NSIF-Bild erstellt, das in der CSD gespeichert werden kann. Zusammen mit einem aus den Eingaben generierten MetaDaten-XML-File wird das Bild in die CSD hochgeladen.
Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche Schreibvorgang. Zunächst wird das Bild gerendert. Mit Hilfe des NSIF-Creators wird anschließend ein NSIF-Bild erstellt, das in der CSD gespeichert werden kann. Zusammen mit einem aus den Eingaben generierten Metadaten-XML-File wird das Bild in die CSD hochgeladen.
\begin{figure}
...
...
@@ -79,6 +81,6 @@ Nachdem der Nutzer alle Informationen eingetragen hat, beginnt der eigentliche S
Um eine wiederverwendbare Oberfläche einzubinden wird eine Schnittstelle angelegt (Siehe Bild \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 CSDAdapter gesendet. Im SBA wird das Interface von der CSDRequestAction implementiert. Der Regionsaufruf wird falls möglich an das CSDPlugin über ein DirectRequest weitergeleitet. Die Antwort darauf erhält der SBA erneut über einen DirectRequest. Eine DirectMessage ist im System des Backends nicht vorhanden und wird deshalb an dieser Stelle über zu Request gelöst. Wir können nicht einen einzigen Request verwenden, da der Nutzer beliebig lange zum Einzeichnen brauchen kann. Nutzt man einen einzigen DirectRequest so müsste die Antwort der Plugins innerhalb des Timeouts von 5 Sekunden erfolgen.
Um eine wiederverwendbare Oberfläche einzubinden, wird eine Schnittstelle angelegt (siehe Bild \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. Im SBA wird das Interface von der CSDRequestAction implementiert. Der Regionsaufruf wird falls möglich an das CSDPlugin über ein DirectRequest weitergeleitet. Die Antwort darauf erhält der SBA erneut über einen DirectRequest. Eine DirectMessage ist im System des Backends nicht vorhanden und wird deshalb an dieser Stelle über zu Request gelöst. Wir können nicht nur einen Request verwenden, da der Nutzer beliebig lange zum Einzeichnen brauchen kann. Nutzt man einen einzigen DirectRequest so müsste die Antwort der Plugins innerhalb des Timeouts von 5 Sekunden erfolgen.
\begin{figure}
\centering
...
...
@@ -14,41 +14,43 @@ Um eine wiederverwendbare Oberfläche einzubinden wird eine Schnittstelle angele
\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 und übergibt alle Treffer an einen mit übergebenen ResultHandler und ist dann beendet. Eine Subskription liefert auch nach dem abfrage Zeitpunkt 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 in der eigentlichen Abfrage. Deshalb wurde die Abstrakte Klasse CSDTask angelegt (siehe Abbildung \ref{figure:klassenTask}). Die Methode startRequest startet einen neuen Thread. Zuerst wird die abstrakte Methode beforeTask aufgerufen um Vorbereitungen zu treffen, zum Beispiel Ergebnisse von einem alten Task zu löschen. TODO local Request??.
Die Ausfürhung der CSD Abfrage erfolgt in 3 Schritten. Erst wird der CSD Querry String generiert. 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 Standard Implementierung vergleicht die erwarteten Ergebnisse mit einem Wert aus der Konfigurationsdatei. Ist der Task nicht zu groß wird die Methode querryCSD aufgerufen.
Die Methode wir den beiden Klassen CSDRequst und CSDSubscription, die vom CSDTask erben, implementiert. In dieser Methode wird die Verbindung zur CSD aufgebaut und durchsucht. Die Ergebnisse der Abfrage werden alle an den übergeben Result Handler weitergeleitet.
Die Isaac.lib unterstützt 2 Arten von Anfragen an die CSD. Ein CSD-Request ist eine einmalige Abfrage des Servers, übergibt alle Treffer an einen mit übergebenen ResultHandler und ist 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 in der eigentlichen Abfrage. Deshalb wurde die abstrakte Klasse CSDTask angelegt (siehe Abbildung \ref{figure:klassenTask}). Die Methode startRequest startet einen neuen Thread. Zuerst wird die abstrakte Methode beforeTask aufgerufen, um Vorbereitungen zu treffen, zum Beispiel Ergebnisse von einem alten Task zu löschen. TODO local Request??.
Die Ausfürhung der CSD-Abfrage erfolgt in 3 Schritten. Erst wird der CSD Querry String generiert. 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 Standard-Implementierung vergleicht die erwarteten Ergebnisse mit einem Wert aus der Konfigurationsdatei. Ist der Task nicht zu groß, wird die Methode queryCSD aufgerufen.
Die Methode wird von den beiden Klassen CSDRequst und CSDSubscription, die vom CSDTask erben, implementiert. % Hab ich den vorherigen Satz richtig korrigiert?
In dieser Methode wird die Verbindung zur CSD aufgebaut und durchsucht. Die Ergebnisse der Abfrage werden alle an den übergebenden Result Handler weitergeleitet.
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 CSDAdapter 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 wird zunächst alle allgemeinen Felder ausgelesen und anschließend die Methode newResult aufgerufen um das Ergebnis genau zu verarbeiten. Außerdem wird jeder Fehler der Bei der Auswertung passieren könnte 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.
Ist ein Ergebnis verarbeitet wird im zugehörigen Task die Methode resultFinished aufgerufen. So kann der Task sobald alle Ergebnis ausgewertet sind die Methode afterTask aufrufen um einen eventuelle Nachbearbeitung durchzuführen.
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 CSDAdapter 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. Außerdem wird jeder Fehler abgefangen, der bei der Auswertung passieren könnte. Bricht die Verarbeitung eines Ergebnisses ab, so wird die Methode storeErrorProduct aufgerufen. In der Standard-Implementierung wird das XML-Dokument in einem Ordner abgelegt.
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.
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.
Zur Kommunikation implementiert der CSDAdapter 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. Im Gegensatz dazu werden alle erstellten Datenobjekte zusätzlich an das backen gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen könnten.
Die Verarbeitung der Ergebnisse im ResultHandler wird zunächst aufgeteilt. Der MainResultHandler erhält alle Ergebnisse und gibt diese je nach Typ des Ergebnisses an einen genaueren ResultHandler weiter. Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek. In MainResultHandler wird die Methode newResults überschrieben um die Ergebnisse weiterzureichen.
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.
Zur Kommunikation implementiert der CSDAdapter 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. Im Gegensatz dazu werden alle erstellten Datenobjekte zusätzlich an das Backend gesendet, sodass diese im System sind und alle angeschlossenen Programme die Daten darstellen könnten.
Die Verarbeitung der Ergebnisse im ResultHandler wird zunächst aufgeteilt. Der MainResultHandler erhält alle Ergebnisse und gibt diese je nach Typ des Ergebnisses an einen genaueren ResultHandler weiter. % In welchem Sinne ``genauer''?
Sowohl der MainResultHandler als auch die spezifischen Handler erben von der allgemeinen Implementierung in der CSDCommons Bibliothek. In MainResultHandler wird die Methode newResults überschrieben, um die Ergebnisse weiterzureichen.
\subsection{SBA}
Im SBA ist zunächst die Auswahl-Oberfläche auf nur Bilder eingeschränkt. Andere Datentypen können nicht verarbeitet werden und sind deshalb auch nicht abfragbar.
Im SBA ist die Auswahl-Oberfläche zunächst nur auf Bilder eingeschränkt. Andere Datentypen können nicht verarbeitet werden und sind deshalb auch nicht abfragbar.