Entwicklung einer Mobilen Applikation für die Präsentation tunnelbauspezifischer Daten in einer dokumentenbasierten Datenbank

Ähnliche Dokumente
Kleines Handbuch zur Fotogalerie der Pixel AG

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

OP-LOG

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Kapitel 3 Frames Seite 1

Der Kalender im ipad

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Durchführung der Datenübernahme nach Reisekosten 2011

SAMMEL DEINE IDENTITÄTEN::: NINA FRANK :: :: WINTERSEMESTER 08 09

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Outlook-Daten komplett sichern

Aufklappelemente anlegen

TeamSpeak3 Einrichten

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Die Downloadarea ist nur noch bedingt mit den bestehenden Dingen befüllt, wird aber nicht mehr aktualisiert.

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Datensicherung. Beschreibung der Datensicherung

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

1 Konto für HBCI/FinTS mit Chipkarte einrichten

CALCOO Lite. Inhalt. 1. Projekt anlegen / öffnen. 2. Projekt von CALCOO App importieren

ecaros2 - Accountmanager

Outlook Web App 2010 Kurzanleitung

Newsletter. 1 Erzbistum Köln Newsletter

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

Guide DynDNS und Portforwarding

Diese Anleitung beschreibt das Vorgehen mit dem Browser Internet Explorer. Das Herunterladen des Programms funktioniert in anderen Browsern ähnlich.

VIDA ADMIN KURZANLEITUNG

ÖKB Steiermark Schulungsunterlagen

Thunderbird herunterladen, Installieren und einrichten Version (portable)

Anlegen eines DLRG Accounts

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Eigenen Farbverlauf erstellen

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Datenbanken Kapitel 2

Artikel Schnittstelle über CSV

Arbeiten mit UMLed und Delphi

Anleitung für Berichte in Word Press, auf der neuen Homepage des DAV Koblenz

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Netzwerk einrichten unter Windows

Anleitung zur Webservice Entwicklung unter Eclipse

Adami CRM - Outlook Replikation User Dokumentation

Einkaufslisten verwalten. Tipps & Tricks

Eigene Seiten erstellen

INHALTSVERZEICHNIS Allgemeine Beschreibung... 3 Verwendung der Webseite... 4 Abbildungsverzeichnis... 12

HANDBUCH PHOENIX II - DOKUMENTENVERWALTUNG

Anleitung für den Euroweb-Newsletter

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Installation des Zertifikats. Installationsanleitung für Zertifikate zur Nutzung des ISBJ Trägerportals

Die Dateiablage Der Weg zur Dateiablage

Einfügen von Bildern innerhalb eines Beitrages

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

4.1 Download der App über den Play Store

Einführung Internet Adresse Passwort Klick auf Ansicht der Mailbox nach dem Einloggen

Übung: Verwendung von Java-Threads

Handbuch B4000+ Preset Manager

Installationsanleitung Webhost Linux Flex

Ihr CMS für die eigene Facebook Page - 1

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

kreativgeschoss.de Webhosting Accounts verwalten

Live Update (Auto Update)

Sicherer Datenaustausch zwischen der MPC-Group und anderen Firmen. Möglichkeiten zum Datenaustausch... 2

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

DOKUMENTATION VOGELZUCHT 2015 PLUS

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

Betriebshandbuch. MyInTouch Import Tool

Quartalsabrechnung! " " " " " " " Stufe 1! Beheben von Abrechnungsfehlern" Stufe 2! Neue Abrechnung erstellen"

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Browser Grid Funktionalitäten

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Installationsanleitung für FireFTP 1.0.7

Umgang mit der Software ebuddy Ändern von IP Adresse, Firmware und erstellen von Backups von ewon Geräten.

Adminer: Installationsanleitung

Die Formatierungsregeln (die so genannte Wiki-Syntax) für Texte in DokuWiki sind zu großen Teilen die selben, wie in anderen Wiki-Systemen.

GeoPilot (Android) die App

Fülle das erste Bild "Erforderliche Information für das Google-Konto" vollständig aus und auch das nachfolgende Bild.

Migration NVC 5.x auf NEM/NPro (Migration eines bestehenden, produktiven NVC Verteilservers auf NEM/NPro)

Anleitungen zum KMG- -Konto

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

DER WEG ZUR VISITENKARTE IHRES VEREINS AUF

ESB - Elektronischer Service Bericht

KURZANLEITUNG CLOUD OBJECT STORAGE

Kurzinformation Zugang zur NOVA für dezentrale Administratoren

TELIS FINANZ Login App

Erstellen einer digitalen Signatur für Adobe-Formulare

Dokumentation von Ük Modul 302

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Erste Schritte mit TeamSpeak 3

Handbuch zum Excel Formular Editor

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Eine Einführung in die Installation und Nutzung von cygwin

Transkript:

Entwicklung einer Mobilen Applikation für die Präsentation tunnelbauspezifischer Daten in einer dokumentenbasierten Datenbank Schriftliche Prüfungsarbeit für die Bachelor-Prüfung des Studiengangs Angewandte Informatik an der Ruhr-Universität Bochum vorgelegt von Schemberg, Sebastian 108 009 201 418 Abagebdatum 17.04.2013 Pr. Dr. Markus König Dr. Karlheinz Lehner

Erklärung Ich erkläre, dass das Thema dieser Arbeit nicht identisch ist mit dem Thema einer von mir bereits für ein anderes Examen eingereichten Arbeit. Ich erkläre weiterhin, dass ich die Arbeit nicht bereits an einer anderen Hochschule zur Erlangung eines akademischen Grades eingereicht habe. Ich versichere, dass ich die Arbeit selbstständig verfasst und keine anderen als die angegeben Quellen benutzt habe. Die Stellen der Arbeit, die anderen Werken dem Wortlaut oder dem Sinn nach entnommen sind, habe ich unter Angabe der Quellen der Entlehnung kenntlich gemacht. Dies gilt sinngemäß auch für gelieferte Zeichnungen, Skizzen und bildliche Darstellungen und dergleichen. Datum Unterschrift 2

Inhaltsverzeichnis 1Einleitung...4 1.1Motivation...4 1.2Problemstellung...4 1.3Zielsetzung...4 2Hintergrund...5 2.1CouchDB...5 2.1.1Allgemeines...5 2.1.2JSONDokument...6 2.1.3MapReduce Prozedur...7 2.1.4Struktur der in der Arbeit verwendeten CouchDB Dokumente...8 2.1.5Beispiel...9 2.2Android-SDK...13 2.2.1Eigenschaften des Android SDK...13 2.2.2Layouts...13 2.2.3Beispiel...15 3Konzept...16 3.1Grundidee...16 3.2Anforderungen : Lastenheft...17 3.3Systemarchitektur : UML...18 4Implementierung...19 4.1Applikation Design...19 4.2Klassenarchitektur...20 4.2.1Util...21 4.2.2StartActivity...21 4.2.3AdminMainActivity...23 4.2.4UserMainActivity...24 4.2.5Bodeninformationen...25 4.2.6MaterialDocumentView...27 5Anwendungsbeispiel...29 6Schlussbetrachtung...31 7Literaturverzeichnis...32 8Bildquellen...32 9Abbildungsverzeichnis...33 10Listingverzeichnis...33 3

1 Einleitung 1.1 Motivation Der Tunnelbau ist ein komplexer Vorgang, der sich vielfach die jahrtausendealten Erkenntnisse des Bergbaus zu Nutze macht [1]. Um einen Tunnel bauen zu können, werden viele verschiedene Daten benötigt. Es müssen Daten zur Materialumgebung vorhanden sein. Ohne diese Daten kann das Bauvorhaben und die Sicherung des Tunnels nicht gewährleistet werden [1]. Weitere Daten beschäftigen sich mit den einzelnen Tunnelsegmenten, der Geometrie der Umgebung oder mit der Tunnelbohrmaschine. Es fallen demnach eine ganze Menge an Daten an, die zur Planung und Ausführung des Tunnelbaus benötigt werden. Diese Daten werden in einer Datenbank gespeichert. Bei diesen speziellen Daten bieten sich dokumentenbasierte Datenbanken an. In diesen können gezielt Attribute gesetzt werden ohne Speicherplatz zu verschwenden. 1.2 Problemstellung Die Problematik besteht nun darin, dass von überall auf diese Daten zugegriffen können werden muss. Der Ingenieur muss demnach entweder alles auf Papier dabei haben oder es im Laptop nachschauen. Und dies wenn der Ingenieur zum Beispiel mitten auf der Baustelle ist. Eine weitere Möglichkeit ist der Zugriff auf die Datenbank via Internet des Smartphones. Es könnte also über die Browserobefläche auf die Daten zugegriffen werden. Das Laden der Seiten und die Bedienung könnte jedoch zu umständlich sein und demnach zu lange dauern. Eine Lösung ist also eine Applikation für ein mobiles Endgerät wie ein Smartphone oder ein Tablet. 1.3 Zielsetzung Diese Bachelorarbeit befasst sich demnach mit dem Thema der Entwicklung einer Mobilen Applikation zur Präsentation tunnelbauspezifischer Daten in einer dokumentenbasierten Datenbank. Als Plattform für die Applikation wird das Android Betriebssystem gewählt. Es wird eine Applikation geschrieben, die auf die CouchDB Daten zugreift und diese visuell wiedergibt. Um dies zu erreichen stellt die Applikation eine Verbindung zum CouchDB Server her. Diese Verbindung läuft über das Internet. Damit die Daten auch schnell zu finden und leicht zu lesen sind, werden verschiedene Layouts für verschiedene Daten verwendet. Diese Layouts sind in Views der Datenbank vordefiniert. 4

Die Applikation mach sich die Views zu Nutze um Filter zu implementieren, die die Suche nach den Daten vereinfacht. 2 Hintergrund 2.1 CouchDB 2.1.1 Allgemeines CouchDB ist eine dokumentenbasierte Datenbank, welche die angelegten Daten in Dokumenten im JSON Format speichert [2]. Diese Dokumente werden als.couch Dateien auf dem Server oder Rechner, auf dem die CouchDB installiert ist hinterlegt. Es können demnach Datenbanken importiert oder gelöscht werden, ohne auf die CouchDB direkt zugreifen zu müssen. Der Vorteil dieser Art der Speicherung ist eine variable Gestaltung der Dokumente ohne festes Schema. In relationalen Datenbanken, wie mysql, werden Daten in Tabellen, Zeilen und Spalten in der Datenbank angelegt [2]. Soll ein Attribut bei einem Dokument der Datenbank hinzugefügt werden, muss es demnach auch bei allen hinzugefügt werden. Dieser Null Eintag der bei manchen Dokumenten dann entstehen kann verbraucht Speicher. Dieser Speicherverlust fällt bei den dokumentenbasierten Datenbanken nicht an. CouchDB verwendet zudem die MapReduce Prozedur von Google [2],[3]. Genauere Informationen zu dieser Prozedur folgen im Kapitel 2.1.3. Der Zugriff auf die CouchDB erfolgt über die REST-HTTP Schnittstelle. Dieser Zugriff kann direkt oder indirekt ausgeführt werden. Der indirekte Zugriff läuft über Bibliotheken und Clients, die für viele klassische Programmiersprachen vorhanden sind. PHP und Java Script sind solche Sprachen, die den Zugriff auf die Daten standardisieren. Die Daten können aber auch direkt ohne einen zusätzlichen Webserver an den Browser gesendet werden. Dazu stellt CouchDB die Benutzeroberfläche Futon zur Verfügung. Dieser Absatz bezieht sich auf die Quelle [2] auf die Informationen über Zugriff und Schnittstellen. Ein weiteres Merkmal der CouchDB ist die Multiversion Concurrency Control. Diese verhindert Lese-Schreibblockaden, indem sie alte Versionen beim Speichern nicht überschreibt. Jedes JSON Dokument bekommt beim speichern einen rev String. Dieser ändert sich beim erneuten Speichern an der ersten Stelle. Ein Vorteil dieser Methode ist, dass ältere Versionen anhand des rev Strings identifiziert und wiederhergestellt werden können [2]. Laut Quelle [2] werden beim Replizieren die alten Versionen nicht weitergegeben, was eine Versionsverwaltung ausschließt. 5

Die CouchDB kann von Quelle [4] heruntergeladen werden. 2.1.2 JSONDokument Die Spezifikationen für das JSON Dokument sind der Quelle [5] entnommen. Zahlen double precision floating-point format in JavaScript, das hängt hauptsächlich von der Implementierung ab. Strings double-quoted Unicode, mit Backslash Endung Boolean true und false Werte Arrays eine sortierte Ansammlung von Werten, die durch Kommata getrennt und in eckigen Klammern eingeschlossen sind, die Werte müssen nicht vom selben Typ sein Objekte unsortierte Ansammlung von Schlüssel : Wert paaren, bei denen der : den Schlüssel von dem Wert trennt, Kommata trennen Objekte voneinander, sie sind in geschweifte Klammern gefasst und müssen Strings sein, die voneinader unterscheidbar sein sollten null für leere Dokumente Ein JSONDokument der CouchDB erhält beim Erstellen immer eine eindeutige und einzigartige ID. Diese ist ein String bestehend aus Zahlen und Buchstaben. Beim { Speichern eines Dokuments wird eine "_id": "12345abc56", "_rev": "1-12345abc56", "type": "adressdata", "firstname": "John", "lastname": "Smith", "address": { "streetaddress": "21 2nd Street", "city": "New York",, "phonenumbers": [ { "type": "home", "number": "212 555-1234", { "type": "fax", "number": "646 555-4567" ] Listing 1 : Beispielhaftes JSONDokument 6 dazu passende, einzigartige rev erstellt. Diese ist ebenfalls ein String aus Zahlen und Buchstaben. Der rev geht eine Zahl voran die mit einem vom Rest getrennt ist. Diese erste Zahl dient der Identifikation der Version der datei. Beim erneuten Speichern wird nur diese erste Zahl um eins inkrementiert. Zu den JSONDokumenten werden meist keys wie type hinzugefügt um Dokumente zu Kategorisieren. die

Listing 1 zeigt ein Beispielhaftes JSONDokument. Dieses Beispiel ist ein einzelnes JSONObjekt, indem andere JSONObjekte und JSONArrays verschachtelt sind. Ein weiteres JSONObjekt ist zum Beispiel address. Dieses JSONObjekt enthält String Felder zur Bestimmung der Straßen Adresse und der Stadt. _id und _rev werden durch die CouchDB generiert wenn das Dokument erstellt und gespeichert wird. Das String Feld für Type dient zur Kategorisierung des Dokuments und wird vom Ersteller des Dokumentes eingefügt. phonenumbers ist in diesem beispiel ein JSONArray, welches mehrere elemente vom Anschlusstyp und der dazugehörigen Nummer enthält. Über den _rev String können frühere Versionen des Dokuments wiederhergestellt werden. 2.1.3 MapReduce Prozedur Die MapReduce Prozedur wurde von Google Inc entwickelt. Dieses Framework wurde für die nebenläufige Berechnung über große Datenmengen in Computerclustern eingeführt. Das Framework wurde von den map und reduce Funktionen, die häufig in der funktionalen Programmierung verwendet werden, inspiriert. MapReduce Implementierungen sind für mehere Programmiersprachen wie C++ oder Java vorhanden. Die Zeichnung 1 zeigt den Datenfluss der MapReduce Prozedur. Intermediate Result D MAP A MAP T MAP A MAP Reduce Output Files Zeichnung 1: Datenfluss MapReduce (BQ 1) Die Eingabedaten (Ellipsen) D, A, T, A werden einer Reihe von Map-Prozessen (Rechtecke) zugeordnet. Diese berechnen die vom Benutzer bereitgestellten MapFunktionen. Die Map-Instanzen legen dann Zwischenergebnisse (Dreiecke) ab, die in der Benutzeroberfläche Futon angeschaut werden können. Für jedes der Zwischenergebnisse 7

berechnet genau ein Reduce-Prozesse (Rauten), die vom Benutzer vordefinierte ReduceFunktion. Diese liefern dann die Ausgabedaen (Achtecke) [3]. Beispiele einer Map und einer Reduce Funktion können in Listing 2 betrachtet werden. function(doc){ if(doc.material == reinforced_concrete ) { emit(doc.type, doc.concrete_volume); Die obige Map-Funktion durchsucht alle Dokumente einer Datenbank nach dem Field material. Dieses vergleicht die Funktion dann mit dem String reinforced_concrete. Wenn function(keys,values){ return sum(values); Dokumente mit diesem String im Feld material gefunden werden, gibt die Funktion den Type und das Volumen Listing 2 : Beispiele einer Map (oben) und Reduce des Dokumentes zurück. Type und Volumen sind vom Benutzer erstellte (unten) Funktion Attribute, die das Dokument beschreiben und Kategorisieren. Type könnte in diesem Fall zum Beispiel Wand sein und das Volumen 3m³. Die Werte Type und Volumen werden als key:value an die ReduceFunktion übergeben. Diese summiert alle values von identischen keys auf, und gibt die aufsummierten Ergebnisse zurück. 2.1.4 Struktur der in der Arbeit verwendeten CouchDB Dokumente In dieser Bachelorarbeit werden verschiedene Typen von Dokumenten verwendet. Diese Typen sind Material Daten, Geometrie Daten, Tunnel Daten, Tunnelsegment Daten und Daten zur Tunnelbohrmaschine. Die Daten der Tunnelbohrmaschine sind in einer separaten Datenbank abgelegt, wohingegen die anderen Daten alle in einer Datenbank aufgeführt werden. Die in dieser Arbeit hauptsächlich betrachteten Daten sind die Material Daten. Diese enthalten Informationen zu den Bodenbeschaffenheiten der Region, in welcher der Tunnel gebaut werden soll. Diese Dokumente besitzen alle die gleiche Grundstruktur zur Anordnung der Daten. Als erstes besitzen alle Daten eine eindeutige id, rev und Typ Bezeichnung. Id und rev werden automatisch erstellt, können aber geändert werden und der Typ wird vom Benutzer generiert. Dieser dient zur Kategorisierung. Ein weiteres Feld das alle Dokumente besitzen bezeichnet den kind des Dokumentes. Ist es die tbm, gehört zu zu den syntetic Models oder sind es layer Informationen? Diese Dinge beantwortet das Feld kind. Also haben alle Dokumente 4 Felder gemein, diese sind id, rev, 8

kind und type. Die Bodeninformationen besitzen jetzt noch ein Feld Material, in dem viele unterschiedliche Daten zur Bodenbeschaffenheit aufgelistet werden. Diese wären zum Beispiel density Daten, type Daten, cohesion Daten und viele mehr. Die weiteren Oberpunkte für die Daten sind in Abbildung 1 zu sehen. Abbildung 1: Beispiel zu Daten für die Bodeninformationen Die zu sehenden Oberpunkte sind im JSONDokument meist JSONObjekte, es können aber auch JSONArays dabei sein. Discontinuities ist in diesem Beispiel ein JSONArray. Die Dokumente der Geometrie Daten besitzen auch ein material Feld. In diesem steht allerdings die id eines Material Dokumentes. Tunnelsegmente, Tunnel und die Tunnelbohrmaschine besitzen noch andere Felder, um diese zu beschreiben. Da in dieser Arbeit jedoch hauptsächlich mit den Bodeninformationen gearbeitet wird, werden diese hier nicht genauer erläutert. 2.1.5 Beispiel In diesem Abschnitt wird ein einfaches Beispiel zu CouchDB Features vorgestellt. Dieses Beispiel behandelt eine Datenbank für ein Zoofachgeschäft. In dieser Datenbank liegen 9

mehrere Dokumente, die Tiere, die zum Verkauf stehen, beschreiben. Ein Dokument dieser Datenbank könnte wie in Listing 3 aussehen. Dieses JSONDokument ist { "_id": "0f637d20772ffc37d46489bbad000683", "_rev": "23b32efad4b1b07f5d0009d7c8c2fd632", "rasse": "0f637d20772ffc37d46489bbad000b74", "type": "Hund", "alter": "Welpe", "preis in ": 450 ein JSONObjekt mit verschiedenen Strings zur Beschreibung des Tieres. Die Rasse verweist auf ein anderes Dokument, in dem man mehr Informationen zu Listing 3 : Beispielhaftes JSONDokument dieser Rasse erhält. Dieses JSONDokument enthält keine JSONArrays oder weitere JSONObjekte. Wie die einzelnen Strings ausgelesen werden können wird in einem späteren Kapitel zur Implementierung im Android-SDK beschrieben. Um das Beispiel effektiv nutzen zu können, werden 10 Dokumente genutzt. 3 Dokumente zur Beschreibung einer Rasse und 7 um das Tier zu beschreiben. In diesem Beispiel 4 Hunde und 3 Katzen. Bei den Rassen werden Schaeferhund, Perser Katze und Dackel genutzt. Nun werden sogenannte Views erstellt, die bestimmte Dokumente herausfiltern sollen. Diese Views werden durch die Map und Reduce Funktionen, die mit CouchDB genutzt werden können, erstellt. Zunächst mal wird ein View erstellt, der alle unterschiedlichen Rassen auflistet. Zwei weitere Views sollen nach Hund bzw. Katze unterscheiden. Ein letzter View listet die Preise alle Hunde auf und summiert diese auf. 10

function(doc){ function(doc){ if(doc.type == Rasse ){ if(doc.type == Hund ){ emit(doc._id, doc.type); emit(doc._id, (doc.type, doc.rasse); function(doc){ if(doc.type == Katze ){ emit(doc._id, doc.type); function(doc){ function(keys, values){ if(doc.type == Hund ){ emit(doc.type, doc.preis); return sum(values); Listing 4 : Verscheidene Map und Reduce Funktionen zum Beispiel Listing 4 zeigt die Funktionen, welche die Views erstellen. Rechts unten ist eine Reduce Funktion. Die restlichen sind Map Funktionen. Abbildung 2: Dokumente der Datenbank In der Abbildung 2 werden alle Dokumente der Datenbank angezeigt. Wird nun ein View ausgewählt, können die Daten nach einem bestimmten Kriterium angezeigt werden. Abbildung 3 zeigt alle Daten nach dem Typ Hund und gibt dazu alle Preise mit an. 11

Abbildung 3: Dokumente nach einer Map Funktion 12

2.2 Android-SDK 2.2.1 Eigenschaften des Android SDK Das Android-SDK [16] erweitert Java um einige Funktionen. In Eclipse können durch das Android-SDK Emulatoren für ein Android Gerät erstellt werden. Des weiteren können Layouts per Drag & Drop in das graphische Interface eines Gerätes gezogen werden, um so einfach und schnell ein Design für eine Applikation zu erstellen. Eine erstellte Activity für Android beinhaltet automatisch die Basisfunktionen, damit eine App laufen kann. Eine weitere Erneuerung sind die XML Dateien für die Designs, die automatisch beim Generieren einer Activity erstellt werden. Eine Activity ist ein Fenster für eine App, das Funktionen ausführt und Widgets wiedergibt. Ohne eine Activity kann eine App für Android nicht laufen. Wisgets sind die einzelnen graphischen Elemente des Designs einer App. Eine Genauere Beschreibung dazu im nächsten Kapitel. 2.2.2 Layouts Das Android-SDK bringt von Haus aus viele verschiedene Möglichkeiten mit, die App graphisch zu gestalten. Zunächst einmal werden die verschiedenen Layouts erläutert, wie Relative Layout oder Linear Layout erläutert. Beim Relative Layout kann man die Widgets frei in der App anordnen. Die Abbildung 4 beschreibt einen schematischen Aufbau für ein relative Layout. Im Linear Layout werden alle Widgets Textfeld entweder horizontal oder vertikal zueinander Button Angeordnet. In der Abbildung 5 kann ein schematischer Aufbau für ein Linear Layout gesehen werden. Das Table Layout ordnet die Widgets in Table Rows an, die wiederum in Spalten angeordnet sind. Demnach kann Radio Button 1 Radio Button 2 man mehrere Table Rows einfügen, die eine unterschiedliche Anzahl an Spalten haben können. Die Abbildung 6 beschreibt einen schematischen Aufbau für Abbildung 4: Schematischer Aufbau ein Table Layout. eines relative Layouts 13

Um diese Layouts zu füllen gibt es eine gute Textfeld Textfeld Button Anzahl an verschiedenen Widgets. Zum einen gibt es Textfelder. Bei diesen gibt es ebenfalls eine Auswahl an verschiedenen Textfeldern. Die einen kann man gut für Button Adresszeilen nutzen, andere sind für einen längeren Text geeignet, wiederum andere sind für Passwörter geeignet. Weitere Widgets sind Knöpfe. Diese gibt es in Abbildung 5: Schematischer Aufbau eines Linear Aufbau Abbildung 6: unterschiedlichen Großen. Außerdem gibt Schematischer Aufbau es Checkboxen oder Radio Buttons. Eine eines Table Layout weitere Möglichkeit die App graphisch zu gestalten ist ein Grid View. Dieser eignet sich besonders gut zu einer Miniaturdarstellung von mehreren Fotos. Listen können Inhalte von Arrays einfach und sauber darstellen. Expandable Lists enthalten Oberpunkte die beim Klick aufgeklappt werden, um die darunterliegenden Informationen anzuzeigen. Weitere Views gibt es zur Datums- und Zeitanzeige, zur Wiedergabe von Medien, Inhalten fürs Web und noch einige andere. Eine liste aller Layout Möglichkeiten findet man auf [15]. Um diese Layouts zu implementieren wird ein XML Dokument für eine Activity benötigt. Diese enthält Informationen zu den einzelnen Widgets, die im Layout benutzt werden sollen. Das Listing 5 zeigt eine solche XML Datei. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello, I am a Button" /> </LinearLayout> Listing 5 : Beispielhaftes XML Dokument für ein Layout (Quelle [14]) Dieses XML Dokument fügt ein TextView und einen Button in das Layout ein. Diesen sollte immer eine ID mitgegeben werden, damit später auf sie zugergriffen werden kann. In der Breite und Höhe sind diese so breit und hoch wie der Inhalt. 14

2.2.3 Beispiel In diesem Abschnitt wird ein kurzes Einführungsbeispiel zur App Entwicklung für Android beschrieben. Als erstes sollte ein Emulator eingerichtet werden, sofern kein reales Android Gerät zum Testen der Applikation zur Verfügung steht. Wie man einen solchen Emulator einrichtet kann bei [6] nachgelesen werden. Nachdem dies abgeschlossen ist, muss ein Android Application Project erstellt werden. Wie dies funktioniert steht auf [ 7]. Dieses Android Projekt bekommt den Namen HelloWorld. Nun wird die XML Datei activity_main.xml geöffnet. In dieser wird der HelloWorld textview entfernt. Als nächstes werden per Drag & Drop ein EditText Feld, ein Button und ein TextView in die graphische Oberfläche gezogen. Die IDs sollten zur Erkennung der einzelnen Widgets dienen. Ist dies abgeschlossen wird die Java Datei geöffnet. Das Grundgerüst für eine Android Activity ist in Listing 6 beschrieben. Dieses Grundgerüst wird automatisch beim Erstellen einer public class Classname extends Activity{ protected void oncreate(bundle savedinstancestate){ Android Activity generiert. Als nächstes super.oncreate(savedinstancestate); müssen der Button, der setcontentview(r.layout.activity_klassenname); textview und das EditText Feld erstellt und initialisiert werden. Die Listing 6 : Grundgerüst einer Android Activity Initialisierung erfolgt in der oncreate Methode und kann in Listing 7 betrachtet werden. Die Widgets werden als View über ihre ID Button = (Button)findViewById(R.id.ButtonIDausXMLDokument); initialisiert. Die App soll am Ende den Listing 7 : Beispiel zur Initialisierung von Widgets Text, der in das EditText Feld eingegeben wurde, nach einem Klick auf den Knopf, in den TextView übertragen. Dazu muss ein onclicklistener für den Button erstellt werden. Button.setOnClickListener(new View.OnClickListener(){ public void onclick(view v){ textview.settext(edittext.gettext()); ; Listing 8 : Beispielhafter onclicklistener Dieser kann überprüfen welcher Knopf gedrückt wurde und fügt dann den text in das TextView. Wie dies genau auszusehen hat, ist in Listing 8 beschrieben. Diese Applikation ist nun fertig geschrieben. Eine fertige Ansicht der App, ist in Abbildung 7 zu sehen. 15

Abbildung 7: Fertige Beispiel App 3 Konzept 3.1 Grundidee Diese Applikation soll als erstes ein Startmenü anzeigen. In diesem soll eine Unterscheidung zwischen einem Administrator und einem Benutzer erfolgen. Diese Unterscheidung soll gemacht werden, damit später der Bauherr oder der Chef der Baufirma Daten zu ändern, zu entfernen oder zu erstellen ohne an einem PC oder Laptop setzen zu müssen. Diese Änderungen sollen auch von der Baustelle aus mit einem Smartphone oder Tablet getätigt werden können. Um zwischen einem Administrator und Benutzer zu unterscheiden, wird beim Administrator Modus eine Benutzer und Passwort Abfrage getätigt. Der Administrator Modus soll die Views der Datenbank und dann die Dokumente im JSONFormat anzeigen. Des weiteren soll der Administrator Modus zunächst mal alle vorhandenen Datenbanken anzeigen. Diese können in einer Liste angezeigt werden. Es kann nun eine Datenbank aus der Liste ausgewählt werden. Danach soll eine Auswahl der verfügbaren Views angezeigt werden. Am besten auch in einer Liste oder etwas ähnlichem, damit man sie anklicken kann. Die nächste Activity soll dann eine Liste aller Dokument IDs anzeigen. Klickt man auf eines dieser Dokumente wird das JSONDokument angezeigt. Der Administrator Modus wird in dieser Arbeit aber nur bis zur Benutzer und Passwort Abfrage implementiert. Aus der zeitlichen Begrenzung für die Arbeit, wurde sich für den Benutzermodus als Hauptaufgabe der App entschieden. Der Benutzermodus zeigt zunächst eine Liste aller verfügbaren Filter. Diese wären zum Beispiel Bodeninformationen oder Tunnelbohrmaschine. Der Benutzer kann nun also einen der Filter auswählen. Im der nachfolgenden Activity werden dann alle Dokumente, passend zum Filter, mit ihrer ID oder einem key in einem GridView angezeigt. Nachdem 16

auf eines der Dokumente geklickt wurde, wird eine ExpandableList mit Oberbegriffen des Dokumentes angezeigt. Ein Klick auf so einen Oberpunkt klappt die Liste aus und zeigt alle darunterliegenden Informationen zu dem Oberbegriff an. Das Hauptaugenmerk dieser Arbeit liegt im Benutzermodus und den Bodeninformationen. 3.2 Anforderungen : Lastenheft 1 Visionen und Ziele /LV10/ Smartphone App erleichtert Arbeiten am Tunnel /LZ10/ Weniger Suchaufwand auf Papier 2 Rahmenbedingungen /LR10/ Anwendungsbereich im Tunnelbau /LR20/ Bauherr, Arbeiter, Systemadministrator 3 Kontext und Überblick /LK10/ Applikation für ein Android fähiges mobiles Endgerät /LK20/ Programmierung in Java via Android-SDK /LK30/ Minimales Android Betriebssystem Android Gingerbread 2.3 /LK40/ Endgerät muss Internetfähig sein 4 Funktionale Anforderungen /LF10/ Der Benutzer muss sich über alle Tunnelbauspezifischen Daten informieren können /LF20/ Der Benutzer muss leicht finden können was er sucht /LF30/ Die App muss Zugriff zur Datenbank haben /LF40/ Die App muss Internetzugang erlauben /LF50/ Die App muss in der Lage sein Änderungen an der Datenbank schnell zu übernehmen /LF50/ Die App muss erweiterbar sein /LF60/ Die App soll zwischen Benutzer und Administrator unterscheiden können 5 Qualitätsanforderungen Systemqualität Funktionalität Zuverlässigkeit Benutzbarkeit Effizienz Wartbarkeit Portabilität 17 sehr gut Gut X normal X X X X X nicht relevant

/LQB10/ Die App muss gut Bedienbar und Übersichtlich sein /LQE10/ Die App darf nicht zu viele Zwischenscreens besitzen, sonst dauert Suche nach Daten zu lange 3.3 Systemarchitektur : UML UserMainActivity AdminMainActivity Util AdminActivity2 StartActivity MaterialDocumentView LoadDocument Bodeninformationen LoadfilteredDocs ParentUtil DroidCouch MyCustomExpandableListAdapter Zeichnung 2: UML Klassendiagramm Diese Arbeit verwendet zehn verschiedene Klassen. In der nachfolgenden Zeichnung 2 sieht man alle verwendeten Klassen, mit ihren Verbindungen, in einem UML Diagramm.Die Klassen UserMainActivity, AdminMainActivity und MaterialDocumentView greifen auf Methoden aus der Util Klasse zu. Bodeninformationen und MaterialDocumentView importieren die inneren Klassen. Der MyCustomExpandableListAdapter und MaterialDocumentView importieren die ParentUtil Klasse. 18

4 Implementierung 4.1 Applikation Design In diesem Projekt wird ausschließlich das Linear Layout verwendet, welches die Widgets vertikal zueinander anordnet. Dieses erlaubt eine gleichmäßige Anordnung der Widgets. Auf dem Startbildschirm werden 2 RadioButtons und ein Button genutzt. Die RadioButtons dienen zur Auswahl eines Modus. Wohingegen der Button die Auswahl bestätigt und die entsprechende Activity öffnet. Zeichnung 3 zeigt schematisch den Aufbau des Startmenüs. Administrator Modus Benutzer Modus Wird hier nun der Administartor Modus ausgewählt gelangt man auf die AdministratorMainActivity. In dieser gibt es zwei EditText Textfelder. Das erste dient der Eingabe des Benutzernamens. Weiter Das zweite ist zur Eingabe des Passwortes. Das Benutzername Feld ist ein einfaches Zeichnung 3: Startmenü der App Textfeld. Für die Passwortabfrage wird ein Passwort Feld eingefügt, welches die eingegeben Zeichen verschlüsselt als Punkte anzeigt. Ein Button dient dann zur Bestätigung der Eingaben. Sind Username Benutzername Passwort Passwort Log IN diese korrekt, soll man auf eine Activity gelangen, in der Einloggen alle Datenbanken angezeigt werden. Eine Schematische Ansicht zu diesem Fenster zeigt Zeichnung 4. Der Administrator Modus wurde aus Zeitgründen Zeichnung 4: Schematischer zur Aufbau AdminmainActivity Bearbeitung des Projektes nicht weiter berücksichtigt. Wird im Startmenü der Benutzermodus ausgewählt, wird eine Activity mit einem ListView geöffnet. Die Elemente in diesem ListView repräsentieren die Views der CouchDB. 1 Zeichnung 5 zeigt diese Activity schematisch. In dieser List Item List Element 1 Activity kann einer der List Elemente angeklickt werden. Die Elemente repräsentieren Filter, wie Bodeninformationen, Tunnelbohrmaschine oder Tunnel. List Item 2 List Element 2 List Item 3 List Element 3 Nach Klick auf eines dieser Elemente wird die nächste List Item 4 List Element 4 Activity des Benutzer Modus gestartet. In dieser neu Zeichnung 5: UserMainActivity geöffneten Activity werden dann die Dokumente mit den schematisch keys in einem GridView wiedergegeben. In Zeichnung 6 wird diese Activity beschrieben. 19

In der Bodeninformationen Activity kann nun ein Dokument angeklickt werden. Die einzelnen Grids sind List Item 1 Sub Item 1 mit den keys des Dokumentes gefüllt. Nach einem Klick auf Zeichnung 6: Bodeninformationen Die MaterialDocumentView. List Item 2 Sub Item 2 ein Grid öffnet sich die letzte Activity des Benutzermodus. Diese Activity enthält List Item 3 eine Sub Item 3 ExpandableList. Diese Liste ist mit Oberbegriffen aus dem List Item 4 Sub Item 4 Material Feld des Dokumentes gefüllt. Einige von denen sind density, ucs, type, discontinuities und noch einige mehr. Die Zeichnung 7: ExpandableList kann angeklickt werden um die Informationen MaterialDocumentView zu den einzelnen Oberbegriffen anzuzeigen. Zeichnung 7 zeigt diese Activity. 4.2 Klassenarchitektur In dieser Appliaktion werden externe Klassen von Nutzern aus dem Internet verwendet. Die DroidCouch Klasse [13] implementiert Methode für die HTTP-Request, um auf die CouchDB Daten zugreifen zu können. Diese Klasse ist von der Seite [13]. Die nächste importierte Klasse ist die ParentUtil Klasse [8]. Diese implementiert Getter und Setter für Childarrays und für den Titel der Parents. Parents sind die Oberbegriffe der ExpandableList und die Children sind die Informationen zu diesen begriffen. Damit diese Klasse ExpandableListAdapter genutzt werden verwendet MycustomExpandableListAdapter Klasse kann, muss werden. implementiert. ein Dieser Diese selbstgeschriebener ist Klasse in wurde der von folgender Quelle [8] übernommen. Diese Klasse implementiert Methoden zur Wiedergabe von Parents und Children in einer ExpandableList. Diese Klassen benötigen dann noch Layouts. Also musste auch passende XMLDokumente dafür erstellt werden. Diese XML-Dokumente wurden von Seite [8] übernommen. 20

4.2.1 Util Diese Klasse macht alle vorab wichtigen Informationen, Util wie Host URL oder die Filter, für alle anderen Klassen addbodenersteebene() addbodenmaterial() addlogindata() addusermodefilter() getbodenersteebene() getbodenmaterial() getlogindata() getusermodefilter() gethosturl() setbodenersteebene() setbodenmaterial() setlogindata() setusermodefilter() sethosturl() Zeichnung 8: UML zur Util Klasse zugänglich. Des Methoden, um weiteren die enthält diese Applikation Klasse für eine Weiterentwicklung vorzubereiten. In dieser Klasse wird eine HashMap für die Log In Daten, für den Administrator Modus, verwendet. Diese HashMap muss später neue Log In Informationen aufnehmen können. Dazu wird eine Methode add implementiert die ein key:value paar in die AdministratorMainActivity HashMap muss aufnimmt. Zugriff auf Die die HashMap haben, deshalb sind ebenfalls Getter und Setter implementiert. Für alle anderen Objekte wie einer ArrayList für Filter sind ebenfalls eine add, eine Getter und eine Setter Methode implementiert. Die Zeichnung 8 zeigt alle implementierten Methoden der Util Klasse. Alle diese Methoden sind static, damit kein neues Objekt dieser Klasse erzeugt werden muss, um auf die Methoden zuzugreifen. Des weiteren werden die Listen und Strings im static Konstruktor initialisiert. 4.2.2 StartActivity Das Layout dieser Activity <RadioGroup android:layout_width="wrap_content" besteht aus 2 RadioButtons, android:layout_height="wrap_content" > angeordnet <RadioButton android:id="@+id/radiobuttonadmin" android:layout_width="wrap_content" einer RadioGroup, einem Button, und einem TextView. Das android:layout_height="wrap_content" XML-Dokument ist in Listing android:text="@string/radioadmin" /> 9 angebildet. <RadioButton android:id="@+id/radiobuttonuser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/radiouser" /> </RadioGroup> 21 in