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]"
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 |
|
|
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 |
|
|
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" |
|
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). |
|
|
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 |
|
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:
|