vi er her !!!

02120

DifferentielGPS
home

Server GUIen

Server GUIen består af hovedprogrammet: Server.java. Hertil kommer indstillingsvinduer til de serielle enheder og GPSNet samt MessageHandler.java, som viser popbeskeder.
Hovedprogrammet indeholder både grafiske elementer og noget datastyring. Ud fra et strengt objektorienteret syn, burde der ikke være noget datastyring, som burde være udlagt til Reciver klassen. Men da dette ville kræve en masse kommunikation mellem disse klasser, når indstillingerne ændres. Da dette kan undgås på denne måde, har vi valgt at lave noget af datastyringen i Server klassen.

Server.java

Layoutet af GUIen er bygget op over faneblade. Der et faneblad til MySQL indstillinger, et til serialport indstillinger og et til GPSNet indstillinger. Under fanebladene er placeret knapper til at starte og stoppe datamodtagelse samt at gemme indstillingerne. Startknappen - og stopkanpperne gøres først brugbar når der er oprettet forbindelse til databasen.
Programmet startes fra main metoden. Denne laver en Runnable, hvis run metode laver en instans af programmet. Runnablen køres med SwingUtilities.invokeLater. Dette vi, da det gøres i alle GUI eksempler fra Sun's torturial side ([i0803]), da grafisk tegning ikke skal foregå i hovedtråden.
Programmet skal kunne kaldes med argumenter, men disse kan ikke ses af den Runnable, som starter programmet. Derfor gemmer main metoden først argumenterne i en static variabel arguments, hvor de kan hentes af programmet.

Fanebladet med MySQL består af nogle editeringsfelter til indstillingerne med tilhørende labels samt en forbindknap. Når der trykkes på forbindknappen oprettes en forbindelse til databasen. Dette gøres ved at lave en instans af MySQL. Når denne forbindelse er oprettet gøres startknappen brugbar. Når startknappen trykkes startes datamodtagelsen og startknappen gøres ubrugbar mens stopknappen gøres brugbar.

Fanebladet med serielenheder indeholder en liste over alle tilgængelige serialporte. Denne liste er af typen JList. Den indeholder SerielSettingsGUI’er i stedet for tekststrenge. Den viste tekst på listen fremkommer ved, at SerielSettingsGUI har en toString metode, som angiver portnavnet. Således behøves ingen yderligere datastruktur til at opbevare SerielSettingsGUI’er, som også holder på portindstillingerne. Ud over listen er der to knapper. Den ene knap starter en PortScanner for hver port, som undersøger om der modtages data fra portene. Hvis det er tilfældet ændres den booleske variabel isActive i SerielSettingsGUI, hvilket får toString metoden til at tilføje ” -- port aktiv" til portnavnet. Således kan brugeren se om der er aktivitet fra porten. Den anden knap bringer den på listen markerede SerielSettingsGUI frem.

Fanebladet med GPSNet indstillinger indeholder også en JList med GPSNetSettingsGUI'er. Da der ikke er et fast antal GPSNet enheder man skal modtage fra, er der ingen på listen. Vi har en standardindstilling gemt i variablen gpsnetDefault og når der trykkes på Tilføjknappen bruges denne som skabelon. Som nævnt under Programoversigt - GPSNet er der brug for disse standardindstillinger for at modtage en stationsliste. Hvis man har trykket på Tilføjknappen, men trykker på annuller i dialogen, bliver variablen result sat til -1 i GPSNetSettingsGUI'en. Når det sker, bliver GPSNet enheden ikke tilføjet til listen.

Indstillinger

Indstillingerne gemmes i en instans af Javas indbyggede Properties klasse. Her gemmes de som tekststrenge. Så talværdier skal konverteres til deres rette format. Alle variable der gemmes, gemmes med et tekstindeks. Skal man hente en gemt variabel bruger man getProperty("tekstindex", data). Det er muligt at definere en standardværdi, hvilket vi har gjort. Ellers returneres null, hvis variablen ikke er gemt i Property instansen. Variable gemmes på samme måde med metoden setProperty. Når de skal lagres på harddisken bruges metoden metoden store, som gemmer indstillingerne i en OutputStream.
GPSNetSettings, SerielSettings og MySQLSettings har alle indbyggede en metode til at gemme og hente deres indstillinger med. Alle indstillinger gemmes i og hentes fra én fælles Properties instans. For hver serielport tilsluttet computeren gemmes der indstillinger. De gemmes med deres portnavn som præfiks, så de kan hentes ud fra portnavnene igen. Yderligere gemmes alle de brugervalgte navne for de serielle enheder. De aktive SerialSettingsGUI'er opdateres ikke med nye brugernavne under programmets kørsel.

Når programmet startes efter, at der er gemt indstillinger, indlæses de gemte indstillinger automatisk med metoden loadSettings. Hvis der opstår fejl under læsningen af indstillingerne kastes en exception af loadSettings metoden. Denne bliver fanget i constructoren, hvor loadSettings bliver kaldt fra, og der bruges standardindstillinger.
Indstillingerne gemmes med metoden saveSettings. For at komme frem til alle de brugervalgte enhedsnavne, må de ComboBoxe i SerialSettingsGUI, hvor navnene er undersøges. Vi samler alle navnene i en Vector. For at undgå, at man får det samme enhedsnavn gemt flere gange, har vi lavet metoden isInVector, som laver en simpel lineær søgning efter en streng i den Vector, som vi gemmer enhedsnavnene i. Kun hvis de ikke er i den, tilføjes de til Vectoren. Efterfølgende skrives til Properties instansen hvor mange navne der er. De gemmes så med tekstindekset: "devX" i Properties instansen hvor X er et indekstal. Således læses de igen ved at læse hvor mange navne, der er gemt, og bagefter læse dem ud fra tekstindekset.

Argumenter

Som beskrevet under Test Skemaer kan serveren køres i en speciel test tilstand, hvor fejlmeddelelser udskrives. Dette gøres ved at kalde programmet med argumenter. Argumenter undersøges når i Server's constructor. Følgende argumenter kan bruges:

  • -testalle: Alle testudskrifter bliver printet
  • -test: Giver mulighed for at vælge hvilke testudskrifter der skal printes. Brugeren bliver spurgt via en række ja/nej dialoger hvilke testudskrifter der ønskes.

Vi anser dette for værende til intern brug kun, og brugen af argumenter er ikke dokumenteret i brugermanualen.

MessageHandler.java

Denne klasse er en hjælpeklasse, som kan vise popup-dialoger. Vi har valgt at lave den, da det kræver urimeligt meget kode at lave en popup-dialog ellers, da man skal angive besked type. Vi har valgt at understøtte 3 typer popup-dialoger:

  • showMessage: Plane beskeder uden et ikon
  • showErrorMessage: Fejlbeskeder med fejlikon
  • showYesNoDialog: Ja/nej spørgsmål. Denne metode returnerer true hvis der er svaret "Ja" og false hvis der er svaret "Nej"
Plane dialoger uden ikon, fejlbeskedsdialoger og ja-nej dialoger.

home