Powered by Rexx! Entwurf und Entwicklung
eines Web-basierten Terminkalenders


Inhalt

WML-Version

Hinweis: HTML-Version ist ebenfalls verfügbar bei Thomas Jungmann!

3. Klassensystem

Im weiteren Abschnitt werden die einzelnen Klassen und deren Beziehungen näher erläutert. Systemtechnisch ist jede Klasse für sich in einer separaten Datei abgelegt. Alle Dateinamen (fast alle, ;)) entsprechen dem Klassennamen mit dem Zusatz "...lib.rxx", d.h. die Datei "sessionlib.rxx" enthält die Klasse session.

    Bsp.:

    Datei: "cgilib.rxx" beinhaltet nur eine öffentliche Klasse
  • ::CLASS cgi PUBLIC


  • Datei: "sessionlib.rxx" beinhaltet nur eine öffentliche Klasse
  • ::CLASS session PUBLIC


  • und so weiter
  • ...

3.1 UseCase-Notation

    Die Abbildung zeigt das Klassensystem, sowie alle Methoden und Attribute, die eine Klasse bereitstellt.

    Die öffentlichen Klassen (in der Abbildung: Viereck)
  • ::CLASS [name_of_the_classlib] PUBLIC

    • die Attribute der Klasse
      (in der Abbildung: mittlere Spalte des Vierecks)
    • ::METHOD [name_of_the_method] ATTRIBUTE


    • die dadurch bereitgestellten Methoden
      (in der Abbildung: untere Spalte des Vierecks mit "+" gekennzeichnet)
    • ::METHOD [name_of_the_method] PUBLIC


    • das Klassensystem
      (in der Abbildung mit Pfeil und verwendet gekennzeichnet)
    • ::REQUIRES "[name_of_the_classlib]"

UML-Notation of the Class-System

Abbildung des Klassensystems


3.2 Klassendokumentation

    Die Klassen werden einzeln dokumentiert, d.h.:

    Die einzelnen Methodenaufrufe,
  • [a_instance_of_the_class]~[method]()


  • die erwarteten Argumente
  • [a_instance_of_the_class]~[method](ARG(1),...ARG(n))


  • und die Rückgabewerte
  • [a_instance_of_the_class]~[method]()
    RESULT


  • , die sie liefern.

Eigene Klassen:

CGILIB.rxx

CLASS cgi PUBLIC
Beschreibung:
Die Klasse CGI soll den Zugriff auf Umgebungsvariablen vereinfachen.
Die Klasse erlaubt es ferner eine Instanz zu erzeugen, also ein Objekt zu bilden und dann die Methoden aufzurufen. Die Methoden "getenv" und "putenv" vereinfachen das Auslesen und Setzen von Umgebungsvariablen.
Im Falle, dass die gewünschte Umgebungvariable der QUERY_STRING ist kann sie mit der Methode "cgiparse" url-decodiert, geparst und anschliessend in dem einzigen Attribut der Klasse "cgi.", einer Stemvariable, gespeichert werden (siehe auch die Dokumentation im Quell-Code).

Als Ausgangspunkt für diese Klasse diente die in classic-Rexx geschriebene Prozedur:

CgiParse()
von
Sascha Prins


REQUIRES

ATTRIBUTE
cgi.

METHOD
INIT()
  • RETURN:

  • CGI-OBJECT: An instance of cgi
cgiparse()
  • RETURN:

  • CGI.: Stem-variable containig the values of the parsed QueryString - e.g. value of user is stored in cgi.user
  • EXPOSE:

  • CGI.
URLDecode(ARG1)
  • ARGUMENTS:

  • ARG1: An url-encoded string
  • RETURN:

  • decoded ARG1: The url-decoded string
getEnv(ARG1)
  • ARGUMENTS:

  • ARG1: Name of the environment variable
  • RETURN:

  • value of ARG1: Value of the environment variable
putEnv(ARG1, ARG2)
  • ARGUMENTS:

  • ARG1: the name of the environment variable
    ARG2: the value of the environment variable


SQLLIB.rxx

CLASS SQLInterface PUBLIC
Beschreibung:
Die Klasse soll den Zugriff auf die Datenbank regeln. Neben dem Zugriff werden auch Methoden zur Manipulation von Datenbankinhalten, der Datenbank "Calendar-Store", bereitgestellt. (siehe auch die Dokumentation im Quell-Code)
Diese Klasse benutzt das Rexx/SQL - Interface von Mark Hessling

REQUIRES

ATTRIBUTE

METHOD
INIT()
  • RETURN:

  • SQL-OBJECT establishing the DB-Connection
UNINIT()
  • RETURN:

  • closing the DB-Connection
createNewUser(ARG1,ARG2)
  • ARGUMENTS:

  • ARG1: Username
    ARG2: Users password
  • RETURN:

  • -1 : on Error while DB-Access
    -2 : bad username or password
    UserID : when successful
deleteUser(ARG1)
  • ARGUMENTS:

  • ARG1: UserID
  • RETURN:

  • 0: success
    other: success
getUserID(ARG1)
  • ARGUMENTS:

  • ARG1: Users Nickname
  • RETURN:

  • -1 : on Error while DB-Access
    -2 : User not found
    UserID : when Nickname was found
getUserName(ARG1)
  • ARGUMENTS:

  • ARG1: UserID
  • RETURN:

  • -1 : on Error
    userName : when uID exists
getUserPwd(ARG1)
  • ARGUMENTS:

  • ARG1: UserID
  • RETURN:

  • -1 : on Error while DB-Access
    -2 : when userID not found
    password : when there is one
setUserPwd(ARG1,ARG2)
  • ARGUMENTS:

  • ARG1: userID
    ARG2: users password
  • RETURN:

  • <0 : error
    0 : password changed
createSID(ARG1)
  • ARGUMENTS:

  • ARG1: User ID
  • RETURN:

  • sID: a session identifier, valid for n minutes
getUID4SID(ARG1)
  • ARGUMENTS:

  • ARG1: session ID
  • RETURN:

  • uID: userID for user who owns the session (if still valid)
closeSession(ARG1)
  • ARGUMENTS:

  • ARG1: sessionID of session to delete
  • RETURN:

  • -1 : on error
    0 : on success
updateSessionExpire(ARG1)
  • ARGUMENTS:

  • ARG1: session identifier of session to be prolonged
  • RETURN:

  • -1 : on error
    0 : on success
deleteAllExpiredSID()
  • RETURN:

  • 0 : on success
    else : on error
createEvent(ARG1,ARG2, ARG3, ARG4, ARG5, ARG6)
  • ARGUMENTS:

  • ARG1: userID
    ARG2: number according to the category definition table
    ARG3: eventDescription -not more than 100 characters
    ARG4: eventDate - in MySQL-Date-Format: 'yyyy-mm-dd'
    ARG5: eventTime - in MySQL-Time-Format: 'hh:mm:ss'
    ARG6: eventDuration - in MySQL-Time-Format: 'hh:mm:ss'
  • RETURN:

  • 0 : on success
    else : on error
deleteEvent(ARG1)
  • ARGUMENTS:

  • ARG1: event to be deleted
  • RETURN:

  • 0 : on success
    else : on error
updateEvent(ARG1,ARG2, ARG3, ARG4, ARG5, ARG6)
  • ARGUMENTS:

  • ARG1: eventID
    ARG2: number according to the category definition table
    ARG3: eventDescription -not more than 100 characters
    ARG4: eventDate - in MySQL-Date-Format: 'yyyy-mm-dd'
    ARG5: eventTime - in MySQL-Time-Format: 'hh:mm:ss'
    ARG6: eventDuration - in MySQL-Time-Format: 'hh:mm:ss'
  • RETURN:

  • 0 : on success
    else : on error
retrieveEvent(ARG1)
  • ARGUMENTS:

  • ARG1: Unique identifier of event
  • RETURN:

  • SQLout. : Stemvariable with all columns of the event the database supplies
findEvent(ARG1,ARG2)
  • ARGUMENTS:

  • ARG1: userID
    ARG2: identifier of the category
  • RETURN:

  • SQLout. : Stemvariable with all events of a category
getEventsOfDay(ARG1,ARG2)
  • ARGUMENTS:

  • ARG1: userID
    ARG2: date of event
  • RETURN:

  • SQLout. : Stemvariable with all events of a category
    SQLout.eventID.0=0 : when no event found
getCategory(ARG1)
  • ARGUMENTS:

  • ARG1: categoryID
  • RETURN:

  • SQLout.category.1 : Name of category
    -1 : DB-Error
    -2 : no such category
getMaxCategory()
  • RETURN:

  • SQLout.category.1 : max. Indexnumber of category
    -1 : DB-Error


WMLLIB.rxx

CLASS wmldeck PUBLIC
Beschreibung:
Die Klasse WML-Deck soll den dynamischen Aufbau der Seiten vereinfachen.
Häufig benötigte Komponenten werden in dieser Klasse zentral verwaltet, wie z.B. die Processing Instructions "<?xml version="1.0"?>", die mit jedem weiteren Dokument generiert werden müssen (siehe auch die Dokumentation im Quell-Code).

REQUIRES
"sqllib.rxx"
"calendarlib.rxx"

ATTRIBUTE

METHOD
INIT()
  • RETURN:

  • wmldeck-OBJECT containing following header-elements:
    STDOUT:
    1. content-type (e.g. 'content-type:text/vnd.wap.wml')
    2. Processing Instructions for the xml-parser
    3. related DTD
PrintTemplate()
  • RETURN:

  • STDOUT: Creates a back-button
PrintBottom()
  • RETURN:

  • STDOUT: Closes the wml-dokument
PrintMainMenu(ARG1)
  • ARGUMENTS:

  • ARG1: the session identifier (sID)
  • RETURN:

  • STDOUT: Creates the card "Main-Menu"
PrintErrMsg(ARG1, ARG2)
  • ARGUMENTS:

  • ARG1:
    the type of Error (0,1,...)
    0 - User not in database
    1 - Password incorrect
    ... - System error!
    ARG2:
    timer for displaying the massage in seconds
    e.g. deck~PrintErrMsg(1, 10)
    displays 10 seconds "User not found!"
  • RETURN:

  • STDOUT: Creates the card "Error"
PrintContent(ARG1,ARG2,ARG3,ARG4)
  • ARGUMENTS:

  • ARG1: SessionID = the session identifier
    ARG2: Category = what category of events (All, birthday...)
    ARG3: view = what type of view (Day,Week,Month,Year)
    ARG4: date = the date of the requested event
  • RETURN:

  • STDOUT: Returns the card "View". This card displays userspecific contents from the database by the selected viewoption.


SESSIONLIB.rxx

CLASS session PUBLIC
Beschreibung:
Die Klasse ist eine ausgelagerte Funktion, die die Authentifizierung der Benutzer übernimmt.
Desweiteren wird nach einer erfolgreichen Authentifizierung auch eine SessionID generiert und im Attribut "status" gespeichert. Das Auslogen und das anschliessende Löschen der SessionID aus der Datenbank werden ebenfalls von der Klasse bereitgestellt. Die Klasse wird demnach für das initiieren sowie beenden einer Session benötigt (siehe auch die Dokumentation im Quell-Code).

REQUIRES
"sqllib.rxx"

ATTRIBUTE
status

METHOD
authent(ARG1, ARG2)
  • ARGUMENTS:

  • ARG1: Login-Name of the current user!
    ARG2: Password of the current user!
  • RETURN:

  • status:
    sID~status= "0" - User not found!
    sID~status= "1" - Password failure!
    sID~status= "SessionID" - OK!
  • EXPOSE:

  • status:
quitSession(ARG1)
  • ARGUMENTS:

  • ARG1: The session Identifier
  • RETURN:

  • status:
    sID~status= "2" - Login out!
  • EXPOSE:

  • status:


CALENDARLIB.rxx

CLASS calendar PUBLIC
Beschreibung:
Die Klasse ist eine ausgelagerte Funktion, die helfen soll mit Daten zu rechnen, d.h. die Klasse mit ihrer einzigen Methode DATE(ARG(1),ARG(2)) liefert ausgehend vom übergebenen Datum in ARG(2) und der entsprechenden Operation, übergeben in ARG(1), als Ergebnis ebenfalls ein Datum oder eine Datumskomponente (Wochennummer, Monatsname,...). Beachtet werden sowohl der Julianische als auch der gregorianische Kalender (siehe auch die Dokumentation im Quell-Code).

Als Ausgangspunkt für diese Klasse diente die in classic-Rexx prozedural geschriebene:

datergf.cmd (version: 1.6 - 1996-04-30)
von
Rony G. Flatscher, Rony.Flatscher@wu-wien.ac.at


REQUIRES

ATTRIBUTE
monthdays.1
monthdays.2
monthdays.3
monthdays.4
monthdays.5
monthdays.6
monthdays.7
monthdays.8
monthdays.9
monthdays.10
monthdays.11
monthdays.12

METHOD
INIT()
  • RETURN:

  • calendar-OBJECT containing the monthdays array.
  • EXPOSE:

  • monthdays.
DATE(ARG1, ARG2)
  • ARGUMENTS:


  • ARG1:

    EXAMPLE of the accepted parameters:
    IF ARG(2) is the 1./March/2001 then required value of
    ARG(2)=20010301 and the RESULT accords to the following flags as
    ARG(1):

    yb - the year begins on 20010101
    ye - the year ends on 20011231
    y - yearnumber: 2001
    ny - next year: 2002010
    py - previous year: 20000101
    mb - the month begins on 20010301
    me - the month ends on 20010331
    m - monthnumber: 3
    nm - next monthnumber: 4
    pm - previous monthnumber: 2
    mn - monthname is March
    wb - the week begins on 20010226
    pwb - he week begins on 20010219
    nwb - the week begins on 20010305
    we - the week ends on 20010304
    w - weeknumber: 9
    pw - previous weeknumber: 8
    nw - next weeknumber: 10
    d - daynumber in month: 1
    nd - next daynumber in month: 20010302
    pd - previous daynumber in month: 20010228
    dn - dayname is Thursday
    di - daynumber in week: 4

    ARG2: a date [YYYYMMDD]

  • RETURN:

  • String - [YYYYMMDD, YYYY, MM, DD, WORD, DIGIT,...]
    the type of the returned value is according to ARG(1)


Vorgegebene Klassen:

Rexx/SQL


Ednan Masovic
Last modified: November 2000