Research and Development 1/2010-11/project/AppCetera/Documentatie fase 1

Uit Werkplaats
Ga naar: navigatie, zoeken

Specificaties

Integrated Use Case Diagram

AppCetera integrated use case diagram.png

Use Cases

UC1 - Teken nieuwe polygoon

Use Case identifier UC1
Use Case Teken nieuwe polygoon
Omschrijving De gebruiker tekent een polygoon (veelhoek) om een bepaald gebied te markeren
Aannames
  • De gebruiker is succesvol ingelogd
Precondities
  • Er staat geen polygoon op exact de zelfde plek als de te tekenen polygoon
Postcondities
  • Een nieuwe polygoon is getekend
Primaire actor
  • Gebruiker
Secundaire actor(s)
  • Mapp Server
Trigger

Gebruiker wil nieuw gebied markeren

Basic course of Events
  1. Gebruiker selecteert eerste punt
  2. Mapp App tekent punt
  3. Gebruiker selecteert volgende punt
  4. Mapp App tekent punt en trekt een lijn tussen de twee punten
  5. Gebruiker herhaalt stap 3 indien nodig
  6. Systeem herhaalt stop 4 indien gebruiker stap 3 herhaalt
  7. Gebruiker selecteert begin punt
  8. Mapp App trekt een lijn tussen laatste punt en startpunt en vult het gebied binnen de polygoon
  9. Mapp App bewaart polygoon lokaal en synchroniseert naar de Mapp Server
Exception path
  • Stap 1 en 3 - Gebruiker tekent een verkeerd punt. De gebruiker kan dit corrigeren door op de "terug" knop te drukken.
  • Stap 1 tot en met 9 - De gebruikt wordt gebeld. De huidige onvoltooide staat wordt opgeslagen en opgeroepd wanneer de gebruiker terug keert
  • Stap 9 - Dataverbinding valt weg en de polygoon kan niet worden gesynchroniseerd met de server. De synchronisatie vindt plaats wanneer de verbinding weer terug komt.

UC2 - Pas punt polygoon aan

Use Case identifier UC2
Use Case Pas punten polygoon aan
Omschrijving De gebruiker verandert de locatie van een punt van een polygoon
Aannames
  • De gebruiker is succesvol ingelogd
Precondities
  • Er is minsten één polygoon aanwezig
Postcondities
  • Één punt van de polygoon heeft een gewijzigde plek
Primaire actor
  • Gebruiker
Secundaire actor(s)
  • Mapp Server
Trigger

Gebruiker wil gemarkeerd gebied aanpassen

Basic course of Events
  1. Gebruiker activeert een punt
  2. Systeem laat zien dat punt actief is
  3. Gebruiker sleept het punt naar de nieuwe plek
  4. Systeem verplaatst punt naar nieuwe plek en zorgt dat de lijnen tussen dit punt en de twee aangrenzende punten, intact blijft
  5. Mapp App bewaart polygoon lokaal en synchroniseert naar de Mapp Server
Alternative path
  • Stap 3 - Indien de gebruiker een punt wil verwijderen sleept hij/zij het te verwijderen punt naar een bestaand punt toe.
Exception path
  • Stap 1 tot en met 3 - De gebruikt wordt gebeld. Het punt wordt gedeactiveerd.
  • Stap 5 - Dataverbinding valt weg en de polygoon kan niet worden gesynchroniseerd met de Mapp server. De synchronisatie vindt plaats wanneer de verbinding weer terug komt.

UC3 - Voeg metadata toe

Use Case identifier UC3
Use Case Gebruiker voegt metadata toe
Omschrijving De gebruiker voegt/past het label, de naam of bekijkt de auteurs van een polygoon
Aannames
  • De gebruiker is succesvol ingelogd
Precondities
  • Er is minsten één polygoon aanwezig
Postcondities
  • Één polygoon heeft gewijzigde metadata
Primaire actor
  • Gebruiker
Secundaire actor(s)
  • Mapp Server
Trigger

Gebruiker wil meta data inzien/wijzigen

Basic course of Events
  1. Gebruiker selecteert een polygoon
  2. Mapp App geeft metadata menu weer
  3. Gebruiker kiest de aan te passen metadata
  4. Mapp App geeft waarde van de gekozen metadata weer
  5. Gebruiker selecteert de aan te passen metadata
  6. Mapp App geeft de aan te passen data weer
  7. Gebruiker bewerkt metadata en bevestigt
  8. Mapp slaat wijziging lokaal op en synchroniseert naar de Mapp Server en sluit de dialoog
Alternative path
  • Stap 6 - Indien de gebruiker de polygoon historie bekijkt is deze metadata niet aan te passen en kan de gebruiker terug keren met de "terug" knop
  • Stap 7 - Indien de polygoon kleur wordt gekozen moeten er verschillend kleuropties worden weergegeven
Exception path
  • Stap 1 tot en met 7 - De gebruikt wordt gebeld. Alle dialogen worden gesloten en de gebruiker gaat terug naar de kaart
  • Stap 8 - Dataverbinding valt weg en de polygoon kan niet worden gesynchroniseerd met de Mapp server. De synchronisatie vindt plaats wanneer de verbinding weer terug komt.

UC4 - Groep samenstellen

Use Case identifier UC3
Use Case Groep samenstellen
Omschrijving Het samenstellen van een groep gebruikers waartussen data gedeeld wordt.
Aannames
  • De gebruiker is succesvol ingelogd
Precondities
  • Er is minstens één andere gebruiken geregistreerd waar de gebruiker het e-mail adres van kent
Postcondities
  • Een groepssamenstelling is gewijzigd
Primaire actor
  • Gebruiker
Secundaire actor(s)
  • Secundaire gebruiker
Trigger

Gebruiker wil de samenstelling van een groep wijzigen

Basic course of Events
  1. Primaire gebruiker selecteer groepsinstellingen
  2. Mapp App geeft groepen weer waar gebruiker lid van is, plus de mogelijkheid om een nieuwe groep te maken
  3. Primaire gebruiker selecteert een groep
  4. Mapp App geeft leden van de groep weer
  5. Primaire gebruiker selecteer de mogelijkheid om een nieuw lid toe te voegen
  6. Mapp App geeft een invoer veld weer voor e-mail adres
  7. Primaire gebruiker geeft e-mail adres van Secundaire gebruiker op
  8. Mapp App bevestigt en stuurt melding naar Secundaire gebruiker via de Mapp Server en Primaire gebruiker gaat terug naar de kaart
  9. Mapp App geeft melding van uitnodiging op telefoon Secundaire gebruiker
  10. Secundaire gebruiker accepteert uitnodiging
Alternative path
  • Stap 5 - Indien de gebruiker geen eigenaar is van de groep heeft deze alleen de mogelijkheid om de leden te bekijken
  • Stap 7 - Indien de polygoon kleur wordt gekozen moeten er verschillend kleuropties worden weergegeven
  • Stap 10 - De gebruiker accepteert de uitnodiging niet en wordt geen lid van de groep
Exception path
  • Stap 1 tot en met 7 - De gebruikt wordt gebeld. Alle dialogen worden gesloten en de gebruiker gaat terug naar de kaart
  • Stap 8 tot en met 10 - Dataverbinding valt weg en de operatie kan niet worden gesynchroniseerd met de Mapp server. De synchronisatie vindt plaats wanneer de verbinding weer terug komt.

UC5 - Gebruiker registreren

Use Case identifier UC5
Use Case Gebruiker registreren
Omschrijving Gebruiker registreert zich voor het gebruik van de applicatie
Aannames

-

Precondities
  • Er is geen gebruiker ingelogd
Postcondities
  • Gebruiker is ingelogd
Primaire actor
  • Gebruiker
Secundaire actor(s)
  • Mapp Server
Trigger

Gebruiker wil de applicatie gebruiken

Basic course of Events
  1. Mapp App geeft registratie scherm weer
  2. Gebruiker geeft e-mail adres en wachtwoord op
  3. Mapp App stuurt registratie gegevens naar Mapp Server en logt gebruiker in en stuurt de gebruiker naar kaart pagina
Alternative path
  • Stap 2 - Indien de e-mail/wachtwoord combinatie bekend is, dan logt de gebruiker in, zonder te registreren
Exception path
  • Stap 2 - Indien de gebruiker een ongeldig e-mail adres heeft ingevuld, geeft het systeem een foutmelding
  • Stap 2 - Indien de gebruiker een e-mail adres heeft ingevuld dat al in gebruiker is, geeft het systeem een foutmelding
  • Stap 2 - Indien de e-mail/wachtwoord combinatie bekend is

Ontwerp

System Architecture

Architectural Design

ArchitectualDesign AppCetera.png

Decomposition Description

Android Device

DecompositionDescription AppCetera.png

Server

DecompositionDescriptionServer AppCetera.png

Design Rationale

Een gemeenschappelijke server die via internet bereikt wordt kan eventueel vervangen worden door een mesh- of lokaal netwerk om polygonen mee te delen. Dit heeft natuurlijk als nadeel dat gebruikers altijd in elkaars geografische nabijheid moeten zijn wanneer ze de app samen gebruiken. Bovendien is dit technisch ook een stuk ingewikkelder - het is veel eenvoudiger door middel van PHP en MySQL een externe server op te zetten.

We hebben gekozen een synchronisatiesysteem/service in te bouwen, om te voorkomen dat gebruikers altijd online moeten zijn. Het is natuurlijk eenvoudiger als gebruikers alleen polygonen kunnen tekenen wanneer ze online zijn - hiermee voorkom je dat twee gebruikers tegelijk een polygoon willen toevoegen die eenzelfde lokaal identificatienummer zou hebben. Dit moeten we nu oplossen met een synchronisatiesysteem. Zodra een gebruiker verbinding maakt met de server wordt gecontroleerd of deze gebruiker nog nieuwe polygonen heeft gemaakt in de tijd dat hij geen verbinding had met de server.

Data Design

Data Description

Onze app zal grote hoeveelheden data bevatten, die op een gestructureerde manier moet worden opgeslagen. Wij zijn van plan deze data lokaal op te slaan in een SQLite database. Omdat een groot deel van onze data zal bestaan uit geografische gegevens, gaan we gebruik maken van een R-tree index. Daarnaast slaan we informatie op over groepen waar een gebruiker lid van is, meta informatie over de verschillende polygonen en gebruikersdata. We hebben het onderstaande datamodel ontworpen voor onze lokale opslag.

AppCetera Datamodel.png

Alle informatie in ons datamodel zal ook gesynchroniseerd moeten worden met onze server applicatie, zodat er in feite een 1 op 1 kopie ontstaat. Lokaal en op de server.

Data Dictionary

Entiteit Attribuut Type Commentaar
Polygoon ID Integer Unieke identificatie voor polygoon
Coördinaten Punt Combinatie een lengte- en breedte graaf
Laatst aangepast Integer Seconden sinds Unix epoch
Kleurcode Integer HEX waarde
Auteurs Integer ID van gebruikers die de polygoon bewerkt hebben
Groep ID Integer Unieke identificatie voor groep
Naam Varchar Naam van de groep
Beheerder Integer ID van de de beheerder van de groep
Leden Integer IDs van de leden van de groep
Gebruiker ID Integer Naam van de groep
E-mail Varchar E-mail adres van de gebruiker
Wachtwoord Char Gehashed wachtwoord van de gebruiker

Component Design

Polygonen

PolygonManager

Klasse die precies één polygoon beheert.

  • Een punt toevoegen aan de polygoon
  • Een punt tussen twee bestaande punten toevoegen
  • Een punt verwijderen
  • Een punt verplaatsen (coördinaten veranderen)
  • Door de punten itereren
  • Details van specifieke punten opvragen
  • Aantal punten opvragen
  • Boolean opvragen die aangeeft of de polygoon gesloten is of niet
  • Metadata opslaan

PolygonData

Algemene klasse om de communicatie met de database te beheren wat betreft polygonen.

  • Toevoegen van nieuwe polygonen aan de database
  • Verwijderen van polygonen
  • Aanpassen van polygoon-hoekpunt-coördinaten
  • Aanpassen van polygoon-metadata
  • Toevoegen van polygoon-metadata
  • Verwijderen van polygoon-metadata

PolygonOverlay

Klasse die de grafische vormgeving van een polygoon beheert

  • Reageren op touchevents
    • Polygoon in editmode zetten na één tap
    • Polygoon punten laten verplaatsen / toevoegen
    • Vorm van polygoon veranderen
  • Polygonen op het scherm tekenen
  • Meta-popup op het scherm tekenen

MetaDataPopup

Klasse die de metadata-popup beheert

  • Huidige instellingen bij de huidige polygoon
  • Instellingen opslaan in een specifieke polygoon
  • Instellingen aanpassen
    • Kleur aanpassen
    • Beschrijvende tekst aanpassen

Gebruikers

Gebruikersgroep

Klasse die een gebruikersgroep beheert

  • Gebruiker toevoegen
  • Controleren of een gebruiker onderdeel is van de groep
  • Rechten van een gebruiker opvragen
  • Rechten van een gebruiker aanpassen
  • Gebruiker verwijderen uit de groep
  • Polygonen bijhouden die bij de groep horen

Gebruiker

Klasse die een individuele gebruiker beheert

  • Gebruiker laten inloggen
  • Wachtwoord laten wijzigen
  • Nieuwe gebruiker registreren

Sync

Klasse die servercommunicatie afhandelt

  • Data van de server opvragen
  • Data van de server vergelijken met lokale data
  • Data naar de server sturen
  • Gebruikers authenticeren

Human Interface Design

Overview of User Interface

De applicatie maakt het mogelijk om bepaalde gebieden te markeren op een landkaart. De gebruiker zal het grootste gedeelte van haar tijd doorbrengen in het scherm met een kaart, waar de door de gebruiker gedefinieerde polygonen op geprojecteerd zijn. Deze polygonen kan een gebruiker definiëren door punten aan te wijzen, waartussen de applicatie lijn trekt.

Een polygoon kan aangepast worden door één van de punten te selecteren, waarna een punt individueel te verplaatsen is. Ook kunnen twee punten naar elkaar toe bewogen worden, waarna één punt verdwijnt. De gebruiker kan meta data over de polygoon wijzigen of inzien. Wanneer de gebruiker een polygoon selecteert, wordt er een inline menu zichtbaar, die de gebruiker de mogelijkheid geeft de kleur en naam van de polygoon te wijzigen, de auteurs in te zien, of de polygoon compleet te verwijderen.

De polygonen kunnen worden gedeeld in groepen. De leden van deze groepen hebben de mogelijkheid om de polygonen van andere leden in te zien of te wijzigen. De eigenaar van de groep heeft de mogelijkheid mensen toe te voegen aan de groep, of te verwijderen. Deze gegevens zijn inzichtbaar door op de fysieke ‘menu’ knop te drukken op het toestel. Hierna kan de gebruiker kiezen tussen groepen en algemene instellingen.

Naast de ‘menu’ is er ook een ‘terug’ knop die een gebruiker de mogelijkheid geeft haar laatste wijziging ongedaan te maken.

Screen Images

AppCetera-Interface-1.png

Screen Objects and Actions

  • Polygonen

Punten kunnen gewijzigd worden door een afzonderlijk punt te selecteren en te verplaatsen. Algemene meta informatie kan worden gewijzigd door de polygoon zelf te selecteren, waarna een inline menu met 4 keuze mogelijkheden weergegeven wordt.

  • Menu

Wordt zichtbaar nadat de gebruiker de ‘menu’ knop heeft ingedrukt. Dit algemeen menu geeft de gebruiker de mogelijkheid om groepsinstelling of algemene instellingen aan te passen.

  • Dialogen

Dialogen in de menu’s geven de gebruiker de mogelijkheid bepaalde informatie te wijzigen of toe te voegen. Hierbij wordt gebruik gemaakt van standaard Android GUI elementen.

Planning

Gannt-diagram uit het PID:

Gantt AppCetera.png

Deliverables per week:

WeeknummerDeliverable
16De gebruiker moet lokaal meerdere polygonen kunnen tekenen en aanpassen
19De gebruiker moet Metadata (kleur, naam, etc..) kunnen toevoegen aan de polygonen en het geheel moet een bruikbare interface hebben
20De server moet in staat zijn polygonen op te slaan en polygonen moeten kunnen worden opgevraagd
23De app moet kunnen communiceren met de server en zo polygonen kunnen opslaan en delen
27De app moet er nu verzorgt uitzien en moet in principe helemaal klaar zijn voor gebruik