Innehåll

1 Inledning *

2 Klasser *

2.1 Mapp *

2.2 Adress *

2.3 Fil I/O *

2.4 Rådata *

2.5 Regelhanterare *

2.6 Regel *

2.7 Kodningshanterare *

2.8 Avkodare *

2.9 Kodare *

2.10 Postkontor *

2.11 Brevlåda *

2.12 Attachment *

2.13 Brev *

2.14 Header *

3 GUI *

3.1 Gränssnittets uppbyggnad *

3.2 Anropssekvenser *

4 Användningsfall *

4.1 Visa brev *

4.2 Skriva brev *

4.3 Editera brev *

4.4 Skicka brev *

4.5 Ta emot brev *

 

    1. Inledning
    2. Vi har så långt det är möjligt försökt skapa ett system i analogi med ett verkligt postsystem. I analysen av brevsystemet har vi utgått från brevet och mappen som grund. Vi har slagit sönder brevet i dels huvud som innehåller adressater och annan statusinfo och dels rådata som är en binärreprestantion av brevet i lämpligt format. För att kapsla in alla I/O har vi lagt alla sådana metoder i ett Fil I/O objekt som kan vara dels ex. ett filsystem men lika gärna en databas.

      Huvudobjektet i systemet är postkontoret som tillhandahåller tjänster för kommunikation med det grafiska gränssnittet. Det objekt som sköter kommunikation med servrar av olika slag, både in- och utgående post kallas brevlådan.

      Vi har två sorters moduler som handhar regler och kodning. Kodningshanteraren hanterar generering och extraktion av rådata. Regelhanteraren handhar sysslor som kan definieras fritt (inom gränser) av användaren exempelvis flytta brev till en viss mapp. Både dessa ligger som underobjekt till postkontoret.

      Adressboken vi tänkt använda är redan inbyggd i vår plattform varför vi inte i detalj analyserat denna.

    3. Klasser
    4. Här följer klassbeskrivningar av de ingående klasserna.

      1. Mapp
      2. Syfte: Att "lagra" brev uppdelat i olika mappar.

        Tjänster:

        LaddaMapp() . Laddar mapp. Anropar Fil I/O.

        SparaMapp() . Sparar alla brev och mappar i den aktuella mappen. Tar hänsyn till "modified-bit" hos breven. Anropar Fil I/O-objektet.

        BytNamn() . Byter namn på mappen, men ändrar inte på disken.

        LäggTillBrev(Brev) . Lägger till brev i mapp och sätter brevets mappID om brevet inte redan finns. Finns brevet genereras "exception".

        TaBortBrev() . Tar bort breven ur mappen. Anropar Fil I/O så att brevet tas bort från disk.

        ListaMappar() .Ger en lista på alla barnmappar, men bara en nivå ned.

        ListaBrev() . Ger en lista på alla brev i mappen, ej rekursivt.

        LäggTillMapp(Mapp) .Lägger till en barnmapp.

        TaBortMapp(Mapp) . Tar bort mappen och innehåll rekursivt. Anropar Fil I/O.

        SkapaMapp(Namn) . Skapar en ny barnmapp.

        ListaAllaBrev() . Listar alla brev i delträdet.

        HämtaFörälder() . Ger föräldermappen.

        FlyttaBrev(Mapp [från],Mapp [till]) . Flyttar brev från en mapp till en annan.

        FlyttaMapp(Mapp [från],Mapp [till]) . Flyttar mapp från en mapp till en annan.

        Kunskaper:

        Namn

        Mappar

        Brev

        ID

        Förälder

      3. Adress
      4. Syfte: Att tillhandahålla information om addressat samt mallinformation.

        Tjänster:

        HämtaAdress() . Ger adressen som en sträng.

        SkapaAdress(email,[namn]) . Konstruktor.

        HämtaNamn() . Ger namnet som en sträng.

        Kunskaper:

        Mailadress

        Fullständigt namn

      5. Fil I/O
      6. Syfte: Att abstrahera bort filsystemet/filhanteringen.

        Tjänster:

        LaddaRådata(ID) . Ger rådata

        LaddaHeader(ID) . Ger en Header

        SparaBrev (brev) . Hela brevet

        LaddaMapp (mapp) . Laddar allt som ligger i mappen

        LaddaBrevhuvud (ID) . Hämtar brevhuvud från disk.

        TaBortBrev (ID)

        SparaMapp (ID)

        TaBortMapp

        SparaAttachment (rådata, filnamn)

        LaddaMappar (ID) . Ger en lista av oladdade, men skapade mappar

        Kunskaper:

        Implementationsberoende.

      7. Rådata
      8. Syfte: Att kapsla in filhantering av data.

        Tjänster:

        SättRådata()

        LämnaRådata()

        Kunskaper:

        Textmassa

        ID

      9. Regelhanterare
      10. Syfte: Att hantera och applicera regler på brev.

        Tjänster:

        AppliceraAllaRegler(Brev)

        AppliceraRegel(Brev,Regel)

        ListaRegler()

        AdderaRegel(Regel)

        TaBortRegel(Regel)

        Kunskaper:

        Regler

      11. Regel
      12. Syfte: Att utföra "något" på ett brev eller lista av brev (överlagring).

        Tjänster:

        Applicera (brev)

        Lämna beskrivning ()

      13. Kodningshanterare
      14. Syfte: Att hantera kodning/avkodning av innehållet I brevet, samt sköta "utplockning" av attachments och header.

        Tjänster:

        AvkodaRådata(rådata) ® läsbar text

        AvkodaHeader (rådata) ® läsbar header {tar fram Headern ur brevet som är representerst I rådata}

        FullHeaderTillText(rådata) ® läsbar text {tar fram Bla bla mm}

        KodaSkrivetBrev(Text,Header) ® rådata{kodar av ett skrivet brev till rådata }

        LämnaAttachment(Attachment,rådata)

        Kunskaper:

        Avkodare/kodare

      15. Avkodare
      16. Syfte: Att avkoda t.ex. MIME-kodning till Header/Text

        Tjänster:

        Avkoda(rådata) ® returnerar läsbar text

        LämnaAttachment(Attachment,rådata) ® attachment I binärform

        Beskrivning() ® textuell beskrivning

         

      17. Kodare
      18. Syfte: Att koda text + övrig data till t.ex. MIME

        Tjänster:

        Koda(text,header) ® rådata

        Beskrivning() ® textuell beskrivning

      19. Postkontor
      20. Syfte: Huvudobjekt som hanterar alla in/utgående brev och mappsystemet

        Tjänster:

        LaddaRotmapp()

        LämnaRotmapp()

        Initiera()

        ListaBrevAttSkicka() . Används av brevlådan.

        LämnaUtmapp() . Det mapp som utgående brev läggs in.

        TaEmotBrev() . Används när man vill skicka ett brev.

        TaEmotRådata() . Används när ett nytt brev har kommit in från brevlådan.

        TaHandOmUtmappsBrev() . ??

        LämnaRegelhanterare()

        LämnaKodningshanterare()

        HittaMapp(ID) . Leta reda på en mapp.

        Kunskaper:

        Regelhanterare

        Brevlåda

        Rotmapp

        Utmapp

        Fil I/O

        Kodningshanterare

        Inmapp

      21. Brevlåda
      22. Syfte: Ta emot/skicka brev. Kontrollerar om ny post finns att hämta på servern med jämna mellanrum.

        Tjänster:

        HanteraUtgåendeBrev()

        SkapaBrevlåda()

        ÄndraInställning()

        HämtaIngåendeBrev()

      23. Attachment
      24. Syfte: Att Representera information om attachment.

        Kunskaper:

        Filnamn

        Position i rådata

      25. Brev
      26. Syfte: Att representera innehållet i ett elektroniskt brev: Avsändare, mottagare, brödtext, attachments mm.

        Tjänster:

        Lämna och sätta övergripande mapp.

        Lämna brödtext, blablabla i läsbar form

        Lämna Header, rådata, attachments

        Skapa en kopia av sig själv

        Spara ner till sekundärminne

        Kunskaper:

        Header (med avsändare, mottagare osv)

        Rådata (dvs den datan som direkt kan skickas ut på nätet)

        Kodningshanterare (ett objekt som kan använda kodningsstandarder, typ MIME)

        Fil-I/O-objekt (som sköter sekundärminneshanteringen)

        ID (som ger en koppling till sekundärminnet)

        Ägarmapp (Den mapp som brevet ligger i)

        Objektet sköter själv hantering om när den behöver anropa sekundärminnet för att få sin information. Däremot är det upp till användaren att se till att brevet sparas.

        blablabla betyder den kompletta headern som följer enligt sendmail-standarden, där bl.a. information om vilka datorer som brevet har passerat genom finns med.

      27. Header

      Syfte: Att representera kortfattad information om ett brevs adressat och avsändare mm

      Tjänster:

      Lämna Avsändare, mottagare osv

      Ändra statusflaggor

      Kunskaper:

      Mottagare (kan vara flera)

      Avsändare

      CC (carbon copy, dvs mottagare som skall få en kopia av brevet)

      Statusflaggor (Som håller reda på ifall brevet är läst/besvarat/vidarebefodrat osv)

      Attachment (de filer som är bifogade)

      Objektet är ett aggregat till brev

    5. GUI
    6. Vi har valt att skapa systemet på ett sådant sätt att grundfunktionerna ska vara så lite beroende av gränssnittet som möjligt. Detta är dock svårt med tanke på den utvecklingsmiljö som använts. Vi har valt att kapsla in vårt email-system och låta GUIn sedan anropa våra öppna funktioner. Det är alltså upp till programmeraren av gränssnittet att känna till hur de interna objekten fungerar och att själva mail-programmet vet så lite som möjligt om gränssnittet.

      På så sätt gör vi det någorlunda möjligt att porta applikationen, även om det betyder att hela GUI-biten måste programmeras om. Vi slipper i alla fall göra några större ändringar i brevhanteringen.

       

      Sammanfattningsvis kan sägas att gränssnittet anropar de interna objekten, men helst inte tvärtom!

       

      1. Gränssnittets uppbyggnad

Vi har tänkt oss ett fönster indelat i fyra delar.

 

Dessutom kan man få upp en redigeringsruta som man skriver sina brev i.

Nedan följer ett exempel på hur det ev. kommer att se ut.









    1. Anropssekvenser

Nedan följer några exempel på när GUIn och det interna systemet kommunicerar:

 

De få gånger då informationen måste gå åt andra hållet är då ett brev kommer in från mailservern. Detta bör ju användaren bli informerad om, t.ex. genom att en ikon tänds eller liknande.

    1. Användningsfall
    2. Här följer några användningsfall för programmet vilka i stora drag beskriver dialogen mellan användaren och systemet, men även hur objekten i systemet samverkar.

      1. Visa brev

Följande förlopp beskriver när ett brev ska öppnas och visas i editeringsfönstret.

    1. Användaren dubbelklickar på brevhuvudet.
    2. GUI frågar brevet efter text.
    3. Brevet ber postkontoret: avkoda mig!
    4. Postkontoret skickar brevet vidare till kodningshanteraren.
    5. Kodningshanteraren ® ¼ ® GUI.
    6. GUI frågar efter övrig info.
    7. GUI visar text och övrig info.
    1. Skriva brev

Följande förlopp beskriver när ett brev ska öppnas och visas i editeringsfönstret.

    1. Användaren klickar på "Ny"-knappen.
    2. GUI skapar ett nytt editeringsfönster.
    3. Användaren fyller i "Till","Från" mm.
    4. Användaren trycker på "Sänd"-knappen
    5. GUI skapar nytt brevobjekt.
    6. GUI lämnar över brevet till postkontoret.

Men om man i stället trycker på "Avbryt"- eller "Spara"-knappen blir förloppet följande

    1. Användaren klickar på "Ny"-knappen.
    2. GUI skapar ett nytt editeringsfönster.
    3. Användaren fyller i "Till","Från" mm.
    4. Användaren trycker på "Avbryt"- eller "Spara"-knappen.
    5. GUI skapar nytt brevobjekt.
    6. GUI placerar brevet i mappen.
    7. Stäng editeringsfönstret.
    1. Editera brev

Följande förlopp beskriver låsningen av ett brev när det editeras.

    1. Användaren dubbelklickar på brevet.
    2. Brevet markeras "låst".
    3. Brevet editerat och ska sparas.
    4. Sätt ny data.
    5. "Lås" tas bort.
    1. Skicka brev

När ett brev ska skickas i väg sker följande förlopp

    1. Postkontoret lägger brev i "OUTBOX".
    2. Postkontoret talar om för brevlådan att brev finns.
    3. Brevlådan kopplar upp sig mot SMTP-servern.

Vid lyckad uppkoppling:

    1. Brevlådan begär lista på brev.
    2. Postkontoret tar bort dem ur utmapp.
    3. Brevlådan skickar breven
    4. Brevlådan skickar tillbaka listan med statusflaggor satta.
    5. Postkontoret flyttar dessa till rätt mapp.

Vid misslyckad uppkoppling:

    1. Gör inget.

 

    1. Ta emot brev

När programmet kopplat upp sig mot en server och sker följande

    1. Brev kommer till brevlådan.
    2. Brevlådan skickar breven till Postkontoret.
    3. Postkontoret skickar brevet till regelhanteraren.
    4. Postkontoret "glömmer" brevet.