Ein Ziel dieser Arbeit ist es die Verbindung des CSDAdapter zu verbessern und wiederverwendbar für andre Projekte zu machen und zu aktualisieren.
Ein Ziel dieser Arbeit ist es die Anbindung an die CSD des CSDAdapter wiederverwendbar für andre Projekte zu machen und zu aktualisieren.
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.
Aktuell muss der Bildauswerter jedes Bild einzeln aus dem 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 weitere Anforderung an den SBA ist das dieser auch ohne die Verbindung zur Middleware bzw. dem Backend funktionieren soll.
Eine weitere Anforderung an den SBA ist, dass dieser auch ohne die Verbindung zur Middleware bzw. dem Backend funktionieren soll.
Alle CSD Anfragen des SBA im CSD Adapter zu bearbetien ist dementsprechend nicht erwünscht.
\section{Übersicht über die bestehende Struktur}
Der Bildauswerteplatz der Zukunft besteht aus mehren Komponenten (siehe Abbildung \ref{figure:backend}).
Der Bildauswerteplatz der Zukunft besteht aus mehreren Komponenten (siehe Abbildung \ref{figure:backend}).
Die zentrale Komponente ist das Backend.
Dies speichert alle Informationen wie die Data Objekte die auf dem Geoviewer visualisiert werden.
Die Kommunikation zwischen dem Backend und andern verbundenen Komponenten läuft über die Middleware.
Der Geoviewer bezieht das Kartenmaterialsich von einem Geoserver.
Dieses speichert alle Informationen wie die Data Objekte, die auf dem Geoviewer visualisiert werden.
Die Kommunikation zwischen dem Backend und anderen verbundenen Komponenten läuft über die Middleware.
Der Geoviewer bezieht das Kartenmaterial von einem Geoserver.
Hierfür werden unter anderem Web Map Service (WMS) und Web Feature Service (WFS) verwendet.
Durch die Auswahl eines Data Objektes im Geoviewer können Metadaten zu diesem Objekt abgefragt werden.
Diese Daten werden über die Metadaten Anzeige im Webbrowser dargestellt.
Der Stereo Bildauswerter ist ebenfalls an das Backend angeschlossen.
Bisher wird dies Verbindung beim laden eines Bildes genutzt.
Der SBA sendet falls das Bild georeferenziert ist die Koordinaten an den Geoviewer der dann zur Umgebung des Bildes zoomt.
Bisher wird dies Verbindung beim Laden eines Bildes genutzt.
Falls das Bild georeferenziert ist, sendet der SBA die Koordinaten an den Geoviewer, der dann zur Umgebung des Bildes zoomt.
Der CSDAdapter implementiert eine Verbindung zur CSD.
Mit Hilfe der isaac.lib (Siehe \cite[Clients für Datenzugriff]{CSD}) wird auf den Server zugegriffen und Datenobjekte für das Backend erstellt.
Der Geoviewer beschränkt sich beim Laden aus der CSD auf einige wichtige Datentypen, insbesondere Bilder Videos und Berichte, die sofern sie georeferenziert sind, an der richtigen Stelle auf die Karte angezeigt werden.
Die Bilder aus der CSD werden heruntergeladen und wenn möglich als zusätzliches Kartenmaterial in den Geoserver integriert.
Damit eignen sich diese Datenobjekte nicht zum Laden und verarbeiten im Stereo Bildauswerter.
Mit Hilfe der isaac.lib (Siehe \cite[Clients für Datenzugriff]{CSD}) wird auf den Server zugegriffen und es werden Datenobjekte für das Backend erstellt.
Der Geoviewer beschränkt sich beim Laden aus der CSD auf einige wichtige Datentypen, insbesondere Bilder, Videos und Berichte, die sofern sie georeferenziert sind, an der richtigen Stelle auf die Karte angezeigt werden.
Die Bilder aus der CSD werden heruntergeladen und wenn möglich als zusätzliches Kartenmaterial in den Geoserver integriert.
Luftbilder von Aufklärunsgflügen können so als aktuelles Kartenmaterial eingebunden werden.
Damit eignen sich diese Datenobjekte nicht zum Laden und Verarbeiten im Stereo Bildauswerter.
\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.
Die jeweilige CSD anfragen sind im CSDRequest und die CSDSubscription implementiert.
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}
...
...
@@ -96,14 +96,14 @@ 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 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.
Diese Methode wird von den spezifischen ResultHandlern implementiert, um ein Ergebnis zu verarbeiten.
Außerdem werden alle Java Exceptions abgefangen, die 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.
Falls die Verarbeitung fehlschlägt, kann der Nutzer dieses XML Dokument einsehen um totzdem an die Informationen zu kommen.
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 (Abbildung \ref{figure:klassenTask}).
So kann der Task, nachdem alle Ergebnisse ausgewertet sind, die Methode afterTask aufrufen, um eine eventuelle Nachbearbeitung durchzuführen (Abbildung \ref{figure:klassenTask}).
...
...
@@ -111,7 +111,7 @@ So kann der Task, nachdem alle Ergebnis ausgewertet sind, die Methode afterTask
@@ -149,20 +149,20 @@ 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 CSD laden möchte, wird dieses heruntergeladen und aus dem NSIF-Format in den SBA importiert.
Um das Bild zu importieren wird es zunächst in ein PNG umgewandelt.
Um das Bild zu importieren wird es zunächst in das PNG-Format umgewandelt.
\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.
Das Exportieren von Daten auf das Dateisystem war im SBA vorhanden.
Wie alle Funktionen im SBA wurde auch das Exportieren in einer Swing Action implementiert, die an mehrere Nutzereingaben wie z.B. 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 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.
Die ExportAction in \rec erbt von der Standard ExportAction, 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.
Der Nutzer muss 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.
...
...
@@ -175,14 +175,14 @@ Die Nutzereingane erfolgen id der MetaDataUI (siehe Abbildung \ref{figure:strukt
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 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 ebenfalls mit den Informationen aus der Nutzereingabe generiert und zusammen mit dem NSIF-Bild an die Isaac.lib übergeben.
Das XML-Dokument für die CSD wird auch 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.
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.
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 und dann mit dem CSDWritingClient an die CSD übertragen.
Der CSD-Server lädt sich daraufhin das Bild aus dem HTTP-Server herunter.
In diesem Kapitel wird zunächst auf einige Probleme in der Implementierung eingegangen und anschließend die Code Qualität betrachtet.
In diesem Kapitel wird zunächst auf einige Probleme bei der Implementierung eingegangen und anschließend die Code Qualität betrachtet.
\section{Probleme}
\subsection{Maven und nicht Maven Bibliotheken}
Alle Dependencies in den bestehenden Projekten werden durch Maven (\cite{MVN}) aufgelöst.
Maven ist ein Build-Management Tool das auch die Dependency Verwaltung übernimmt.
Maven ist ein Build-Management Tool, das auch die Dependency Verwaltung übernimmt.
Die isaac.lib und der nisf-creator standen zum Beginn des Projektes nicht in einem Maven Repository zur Verfügung.
Damit weiterhin keine lokalen Bibliotheken eingebunden werden müssen wurden beide Bibliotheken und deren Abhängigkeiten in das Repository eingefügt.
Dazu musste zunächst manuell die Abhängigkeiten der einzelnen Bibliotheken aufgelöst werden bevor diese in das Project Object Model (POM) der einzelnen Bibliotheken eingetragen werden kann.
Damit weiterhin keine lokalen Bibliotheken eingebunden werden müssen, wurden beide Bibliotheken und deren Abhängigkeiten in das Repository eingefügt.
Dazu mussten zunächst die Abhängigkeiten der einzelnen Bibliotheken manuell aufgelöst werden, bevor diese in das Project Object Model (POM) der einzelnen Bibliotheken eingetragen werden können.
\subsection{CSD upload}
In der Implementierung sind beim hochladen des Bildes einige Probleme aufgetreten.
Genauer gesagt wird der CSD mitgeteilt wo das Bild herunterzuladen ist und das kann zu Problemen führen. Siehe Abbildung \ref{upload}
Ein Problem das hierbei auftreten kann, das der Port freigegeben sein muss.
Um einen Port freizugeben braucht man Administratorrechte, die nicht jeder Nutzer hat.
In der Implementierung sind beim Hochladen des Bildes einige Probleme aufgetreten.
Genauer gesagt wird der CSD mitgeteilt, wo das Bild herunterzuladen ist und das kann zu Problemen führen. Siehe Abbildung \ref{upload}
Ein Problem, das hierbei auftreten kann, ist, dass der benötigte Netzwerk-Port nicht freigegeben ist.
Um einen Port freizugeben, braucht man Administratorrechte, die nicht jeder Nutzer hat.
\begin{figure}[h]
\centering
...
...
@@ -25,38 +25,35 @@ Um einen Port freizugeben braucht man Administratorrechte, die nicht jeder Nutze
\end{figure}
Außerdem ist darauf zu achten, dass die Infrastruktur erlaubt, dass der Server eine Rückverbindung zum Client aufbaut.
Steht der Server in einem andern Netz als der Client kann diese Funktionalität durch eine Firewall blockiert werden, und das Bild lässt sich nicht übertragen.
Steht der Server in einem anderen Netz als der Client, kann diese Funktionalität durch eine Firewall blockiert werden, und das Bild lässt sich nicht übertragen.
Die Isaac.lib überträgt nicht die IP-Adresse des Clients als Download-URL, sondern denn Domain Namen des Clients.
Kann der Server den Namen nicht auflösen, kann der Server das Bild ebenfalls nicht herunterladen.
\section{Code Qualität}
\subsection{Testing}
Es wurden keine Testcases geschrieben.
Um die Anbindung an die CSD zu testen wären umfangreiche Integrationstest nötig.
Diese gestalten sich als schwierig da keine CSD Server nur zum Testen zur Verfügung steht.
Alle Komponenten wurden manuell testet um die Funktionalität zu überprüfen.
Das bedeutet beim Parsen der XML Dokumetne im Result Handler der CSDCommons Bibliothek wurde für jedes ausgelesen Feld die Korrektheit des Ergebnisses überprüft.
Es wurde daruf geachtet das einige Felder optional sind und das das Fehlend dieser Komponenten nicht zu Programmabstürzen führt.
Um die Anbindung an die CSD zu testen, wären umfangreiche Integrationstest nötig.
Diese gestalten sich schwierig, da keine CSD Server als exklusive Testinstanzen zur Verfügung stehen.
Alle Komponenten wurden manuell getestet, um die Funktionalität zu überprüfen.
Das bedeutet, beim Parsen der XML Dokumente im Result Handler der CSDCommons Bibliothek wurde für jedes ausgelesen Feld die Korrektheit des Ergebnisses überprüft.
Es wurde darauf geachtet, dass einige Felder optional sind und dass das Fehlen dieser Informationen nicht zu Programmabstürzen führt.
Das Parsen der XML Dokumente im ResultHandler der CSDCommons Bibliothek ist besonders intensiv überprüft worden.
Viele Felder sind optional und werden versucht im CSDAdapter und im SBA ausgelesen.
Es muss also immer darauf geachtet werden,das Informationen vorhanden sind und auch verwendet werden können.
Viele Felder sind optional. Sowohl CSDAdapter als auch SBA versuchen aber diese auszulesen.
Es wurde daruf geachtet das dies nicht zu Fehlern in der weitern Verarbeitung führt.
Bei der Nutzereingabe zum Schreiben in die CSD wird die Richtigkeit und Notwendigkeit der einzelnen Felder direkt bei der Eingabe überprüft.
Übergibt man ein unvollständiges XML Dokument an die Isaac.lib, so wirft diese Fehler.
Um das zu vermeiden, kann der Nutzer die Anfrage nicht absenden, bevor alle Eingaben korrekt erfolgt sind.
Auch hier wurde für jedes Feld überprüft ob die Eingabe den Richtlinien der CSD entspricht.
Auch hier wurde für jedes Feld überprüft, ob die Eingabe den Richtlinien der CSD entspricht.
\subsection{Find Bugs}
Um in der Benutzung keine Programmabstürze durch Programmierfehler zu erhalten, wurde der Code mit Findbugs \cite{FB} überprüft.
Findbugs untersucht den Java bytecode nach Bug Patterns.
Vermutliche Fehler z.B. Nullpointer oder auch schlechter Stil wie == Operator anstelle der equals Methode wird von der Bibliothek erkannt und dem Nutzer zur Verbesserung vorgeschlagen.
Vermutliche Fehler z.B. Nullpointer oder auch schlechter Stil wie == Operator anstelle der equals Methode werden von der Bibliothek erkannt und dem Nutzer zur Verbesserung vorgeschlagen.
In der Implementierung wurden alle Anmerkungen von Findbugs behoben.
Lediglich die Fehler in der JHotDraw GUI Bibliothek, auf dem der SBA aufbaut, wurden nicht behoben.
Es ist ein exaktes Verständnis des gesamten JHotDraw Frameworks notwendig, um z.B. die gefundenen Bitmaskenfehler zu beheben.
\subsection{Direktest laden aus der CSD mit der UUID }
\subsection{Direktes Laden aus der CSD mit der UUID }
Jedes Objekt in der CSD hat eine eindeutige UUID.
Diese wird verwendet, um die Datensätze eindeutig zu identifizieren.
Bekommt ein Bildauswerter den Auftrag ein bestimmtes Bild auszuwerten, bekommt er die ID des Bildes mitgeteilt.
Bekommt ein Bildauswerter den Auftrag ein bestimmtes Bild auszuwerten, bekommt er die UUID des Bildes mitgeteilt.
Die Eingabeoberfläche unterstützt das Suchen nach der UUID, jedoch wird das Ergebnis anschließend in der Tabelle angezeigt.
Da diese Suche nur ein einziges Ergebnis liefern kann, ist das erneute Anzeigen und Aussuchen das Nutzer überflüssig.
Da diese Suche nur ein einziges Ergebnis liefern kann, ist das erneute Anzeigen und Aussuchen des Nutzers überflüssig.
Das direkte Laden eines Bildes anhand der UUID könnte die Arbeit des Bildauswerters verbessern.
\subsection{SBA-Import durch Geoviewer}
Bisher werden die Objekte aus der CSD auf dem Geoviewer dargestellt und diese werden unter anderm verwendet um die zugehörigen Metadaten auf dem MetaDaten Display anzuzeigen.
Bisher werden die Objekte aus der CSD auf dem Geoviewer dargestellt. Diese werden unter anderem verwendet, um die zugehörigen Metadaten auf dem MetaDaten Display anzuzeigen.
Hier kann eine weitere Verbindung zwischen SBA und Geoviewer hergestellt werden.
Durch Auswahl des Objektes im Geoviewer wird das Bild im SBA geladen und man erspart sich eine erneute Abfrage der CSD auf dem SBA.
\subsection{Goeviewer Vorschau beim Laden in den SBA}
Nachdem der Nutzer auf dem SBA eine CSD Abfrage ausgeführt hat bekommt er alle Ergebnisse tabellarisch aufgelistet.
Eine der Auswahlinformationen ist die Koordinate des Bildes.
\subsection{Geoviewer Vorschau beim Laden in den SBA}
Nachdem der Nutzer auf dem SBA eine CSD Abfrage ausgeführt hat, bekommt er alle Ergebnisse tabellarisch aufgelistet.
Eine der Auswahlinformationen ist sind die Koordinaten des Bildes.
An dieser Stelle könnte auf Anfrage des Nutzers die Karte des Geoviewers an die entsprechende Stelle bewegt werden.
So kann sich der Auswerter die Umgebung der Ergebnisse ansehen, bevor er das Bild im SBA lädt.
Damit nicht nur die Karte zu sehen ist, muss ein Data Objekt angelegt werden.
Eine Möglichkeit wäre, hierfür einen Task an den CSDAdapter zu senden, der genau das eine Datenobjekt aus der CSD lädt und für den Geoviewer bearbeitet.
\subsection{Assoziationen}
Bisher werden bei der Lesen und Schreiben der CSD die Assoziationen zwischen den Datensätzen nicht ausgelesen.
Assoziationen stellen Zusammenhänge zwischen den Datesnätzen dar.
Hier bieten sich 2 Verbesserungsmöglichkeiten an.
Zum Einen sollte beim Schreiben in die CSD überprüft werden, ob eine neue Assoziation sinnvoll ist.
Bisher werden beim Lesen und Schreiben der CSD die Assoziationen zwischen den Datensätzen nicht ausgelesen.
Assoziationen stellen Zusammenhänge zwischen den Datensätzen dar.
Hier bieten sich zwei Verbesserungsmöglichkeiten an.
Beim schreiben in die CSD sollte überprüft werden, ob eine neue Assoziation sinnvoll ist.
Ist das Bild aus der CSD geladen, sollte das ausgewertet Bild auf das Original verweisen.
Außerdem müssten diese Verknüpfungen beim Laden ebenfalls visualisiert werden, um anzuzeigen, wie die Bilder zusammenhängen.
Ein Vorteil hierbei ist, dass man sofort erkennt, welches Bild noch nicht ausgewertet ist und welches bereits bearbeitet wurde.