Im folgenden soll eine Grundlage fr ein Benutzerverwaltungssystem in Java implementiert
werden. Das System soll drei Benutzergruppen untersttzen:
registrierte Benutzer Super-user (dmins! sowie einige "un#tionalit$ten fr ni%&t-registrierte Benutzer. Die Benutzerdaten sollen persistent a'gespei%&ert und a'gefragt werden #(nnen. Implementieren Sie fr die Benutzerverwaltung folgende )omponenten:
1. Abstrakte Klasse AbstractUser Implementieren Sie eine a'stra#te )lasse AbstractUser. Die )lasse dient zum Spei%&ern von Informationen 'er *egistrierte- und Superuser-typen. Da'ei sollen folgende Daten als private Instanzvaria'len erfasst+ sowie (ffentli%&e ,ugriffsmet&oden erstellt werden:
username vom -yp String mit den .et&oden getUsername und setUsername password vom -yp String mit den .et&oden setPassword und getPassword fullName vom -yp String mit den .et&oden getFullName und getFullName email vom -yp String mit den .et&oden getEmail und setEmail sex vom -yp %&ar mit den .et&oden getSex und setSex. Der Default-/ert fr diesen 0arameter soll 1 1 (2eeres ,ei%&en! sein. birthday vom -yp Date mit den .et&oden getBirthday und setBirthday 3e'en dem Default-)onstru#tor soll ein voller )onstru#ton die entspre%&enden Instanzvaria'len setzen. 0rfen Sie 'eim 4intragen des 0asswords (.et&ode setPassword! o' die l$nge der 4inga'e 5 6 ist und #ein 2eerzei%&en ent&$lt. 0rfen Sie 'eim 4intragen des Ges%&le%&ts (.et&ode setSex! o' die 4inga'e 1m1 oder 1f1 ist. /andeln sie da'ei Gro7- in )lein'u%&sta'en 'ei der 4inga'e um. 0rfen Sie 'eim 4intragen des Ge'urtsdatums (.et&ode setBirthday! o' die 4inga'e vor dem &eutigem Datum ist. Sollten die Bedingungen ni%&t erfllt sein+ werfen Sie 8eweils eine IllegalArgumentException mit einem sinnvollen "e&lerte9t. ,us$tzli%& soll die )lasse eine #on#rete .et&ode verifyPasswordString! implementieren. 1verify0assword1 prft o' das 'erge'ene 0assword mit dem in der )lasse 'ereinstimmt. Die .et&ode soll 8e na%& 0rfzustand einen 'oolean-/ert zur%#liefern. Die )lasse soll zudem eine a'stra#te .et&ode toString de#larieren+ die in den 8eweils a'leitenden )lassen implementiert wird.
2. Klasse RegistredUser und Superuser Implementieren Sie nun die zwei #on#rete (ni%&t-a'stra#te! :nter#lassen fr Benutzer wel%&e von der a'stra#ten )lasse 'stra%t:ser a'leiten. Die #on#rete )lasse "egisteredUser repr$sentiert registrierte Benutzer. Diese &at die zus$tzli%&e Instanzvaria'le registered#ate vom -yp #ate mit der entspre%&enden ,ugriffsmet&ode get"egistered#ate. Diese spei%&ert das Datum der *egistrierung und wird 'eim ;'8e#t#onstru#tor automatis%& gesetzt. 4s sollen wieder zwei )onstru#toren+ einerseits ein Default und andererseits ein voller )onstru#tor in Bezug auf Instanzvaria'len+ implementiert werden. Die )lasse ent&$lt zus$tzli%& die .et&ode 1verifyge(!1+ wel%&e prft o' ein Benutzer <oll8$&rig ist und einen 'oolean /ert zur%#gi't. ,udem sollen die 'eiden )lassen die toString .et&ode ausimplementieren. In dieser sollen alle Benutzerinformationen (ausser 0asswort!+ als String zur%#gege'en werden.
Die #on#rete )lasse SuperUser repr$sentiert einen System-dministrator. Superuser #(nnen 'er vers%&iedene *e%&te verfgen. Diese werden in drei zus$tzli%&en 'ools%&en Instanzvaria'len gespei%&ert.
can#eleteUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t Benutzer zu l(s%&en canEditUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t Benutzerinformationen zu editieren can$iewUsers - (in#l. get- und set-.et&oden! repr$sentiert das *e%&t Benutzerinformationen zu se&en Die Default-/erte der drei Instanzvaria'len sollen false sein. Das &eisst+ wenn sie ni%&t e9plizit auf true gesetzt werden+ 'lei't ein Superuser machtlos. u%& in dieser )lasse sollen zwei )onstru#toren implementiert werden. 3utzen Sie 'eim vollen )onstru#tor die super!-.et&od um den )onstru#tor der ='er#lasse aufzurufen. Die )lasse SuperUser soll die toString .et&ode entspre%&end implementieren.
0a%#en Sie die )lassen AbstractUser+ "egisteredUser und SuperUser in das 0a%#age swe%&'()um)users.
3. Interface UserDAO Dieses Interfa%e definiert die Data %%ess ;'8e%t (D;! .et&oden fr persistente Benutzer ;'8e#te. Das D;-programmier 0attern erm(gli%&t es+ Benutzer auf vers%&iedene Daten>uellen-typen 'er eine S%&nittstelle generis%& zu spei%&ern. "r me&r Information und einem #on#reten Beispiel zu D;+ lesen Sie 'itte ?&ier@ na%&. Das D; Interfa%e soll generis%&e .et&oden zum 4inlesen und zum uslesen von Benutzero'8e#ten de#larieren. Die .et&ode getUser*ist! soll eine 2isten(+ava)util)*ist!-interfa%e 'enutzen um alle persistent gespei%&erten Benutzer zur%#ge'en. Die .et&ode getUserbyUsernameString username! soll einen AbstractUser ;'8e#t an&and seines :sernamen zur%#ge'en. "all der user ni%&t gefunden wird+ soll diese .et&ode den /ert null zur%#liefern. Die .et&ode saveUserAbstractUser! soll ein neuen Benutzer persistent a'spei%&ern. Stellen Sie si%&er+ dass 'eim a'spei%&ern eines neuen Benutzers ni%&t ein 'ereits gespei%&erter 3ame verwendet wird. /erfen Sie ein IllegalArgumentException von der .et&ode aus+ wenn es einen :ser mit dem sel'en :sernamen s%&on gi't. Die .et&ode deleteUserAbstractUser! soll ein 'este&enden Benutzer l(s%&en. "alls es #einen sol%&en Benutzer gi't+ soll IllegalArgumentException geworfen werden. Die .et&ode updateUserAbstractUser! soll Daten eines 'este&enden Benutzers $ndern. Da'ei soll die .et&ode ein :sero'8e#t su%&en+ wel%&es mit der :sername des 'erge'enen AbstractUser 'ereinstimmt. lle Daten des Input-'stra%t:sers werden da'ei 'ernommen ausser seinen :sername. u%& diese .et&ode soll IllegalArgumentException werfen+ falls es #einen sol%&en Benutzer gi't.
A. Klassen SerializedSuperUserDAO und CSVRegisteredUserDAO "r diese ='ung+ sollen Sie+ ausser die standard Java "ile-serialisierung+ einen zweiten -yp einer Daten>uelle simulieren. Der zweite -yp soll zwar au%& die Daten in ein "ile spei%&ern+ allerings in einem )larte9t BS< (Bomma Separated <alue! "ormat. Je na%& /uns%&+ drfen Sie allerdings statt BS<-serialisierung+ eine e%&te Daten'an# 'enutzen+ so wie im o'igen 2in# 'es%&rie'en. Dafr wrde si%& ?SC2ite@ (eine einfa%&e Java-SC2-Daten'an#! wegen der se&r simplen integration ins program gut eignen. Diese )lassen Seriali-edSuperUser#A. und /S$"egisteredUser#A. sind Implementierungen des Interfa%e User#A. mssen au%& die de#larierten .et&oden des D; Interfa%es implementieren. ;'wo&l 'eide )lassen in wir#li%&#eit 'eide Benutzertypen spei%&ern wrden+ ge&en wir einfa%&&eits&al'er davon aus+ dass Seriali-edSuperUser#A. Super:ser ;'8e#te spei%&ert und /S$"egisteredUser#A. *egistered:ser ;'8e#te. Diese )lassen sollen im )onstru#tor ein String mit dem "ile-namen 'erge'en #riegen. Implementieren Sie die .et&oden in den 8eweiligen D;s und a%&ten Sie darauf+ dass 'ei .et&oden wel%&e in das "ile s%&rei'en alle Instanzvaria'len der :sero'8e#te vor&anden und ni%&t-leer sind. Sollte eines der 0arameter fe&len+ soll wieder eine IllegalArgumentException geworfen werden. lle m(gli%&en (ni%&t-ppli#ations-spezifis%&e! System-"e&ler+ 'eispielsweise der "e&ler aus einer Datei zu lesen+ #(nnen in den .et&oden a'gefangen und auf die System-)onsole rausges%&rie'en werden und mssen ni%&t un'edingt weitergeleitet werden.
0a%#en Sie das Interfa%e User#A.+ als au%& die )lassen Seriali-edSuperUser#A. und /S$"egisteredUser#A. ins 0a%#age swe%&'()um)users)dao.
D. Klasse UserManagement Diese )lasse User0anagement soll .et&oden zum 4inlesen+ sowie zum uslesen von Benutzero'8e#ten aus den persistenten Dateien (unter <erwendung der )lassen Seriali-edSuperUser#A.+ /S$"egisteredUser#A. und des Interfa%es User#A.! sowie die 2ogi# der :serverwaltung implementieren. Die )lasse soll eine 2iste von D;s als instanzvaria'le 'esitzen. Die .et&ode add#A. #ann da'ei dymanis%& weitere rten von D;s aufne&men und 'edienen. ,us$tzli%& soll die )lasse eine Instanzevaria'le session vom -yp AbstractUser &a'en. Diese repr$sentiert den momentan eingeloggten user. Benutzen Sie auss%&liessli%& die 2iste von D;s und die session <aria'len um+ 8e na%& Benutzer-typ+ folgende fun#tionalit$t zu implementieren:
Dafr gilt das folgende *egelwer#.
3i%&t registrierte Bentuzer (alle!: *egistrierung (nur fr *egistered:ser! Gesamtza&l der erfassten Benutzer Gesamtza&l der registrierten Benutzer Gesamtza&l der dministratoren 2ogin (:sero'8e#t rauslesen und 0asswort 'erprfen!. "alls das 2ogin erfolgrei%& ist+ soll eine Instanzvaria'le 1session1 gesetzt werden *egistrierte Benutzer: lle "un#tionen ausf&ren wel%&e au%& ni%&t-registrierte Benutzer ausf&ren drfen. 2ogout - das session ;'8e#t auf null setzten nzeigen und $ndern (in#l. a'spei%&ern! von Daten vom eingeloggten Benutzer (au7er *e%&te fr Super:ser! Superuser: lle "un#tionen ausf&ren wel%&e au%& registrierte Benutzer ausf&ren drfen. lle "un#tionen wel%&e in den drei Bere%&tigungsvaria'len de#lariert wurden /enn ein Super:ser die view 'ere%&tigung &at+ #ann er entweder einen 'estimmte user oder alle user informationen ans%&auen. usga'e wie viele registrierte :ser 'er EF Ja&re alt sind Die :nters%&eidung des :ser--yps #ann mittels instanceof-;peratoren dur%&gef&rt werden. *ealisieren Sie mittels 49%eption-&andling die "e&ler (z.B. un'e#annter :ser 'eim 2ogin+G! der Systemoperationen.
0a%#en Sie die )lassen User0anagement ins 0a%#age swe%&'()um.
Abgabemdalit!ten" 'ga'etermin: .ittwo%&+ HI.EI.JIEJ in den ='ungsein&eiten und 'er den lmig&ty server
E. Demonstration des lauff$&igen 0rogramms mit sinnvollen "e&lermeldungen und sinnvollen usga'en. J. usf&rli%& do#umentierter (8avado%! Cuellte9t mit 3ame und .atri#elnummer. H. 4rstellung eines :.2 )lassendiagramms das alle implementierten )lassen (mit <aria'len und .et&oden und deren Si%&t'ar#eit! sowie deren Bezie&ungen 'ein&altet. A. .it 8avado% erstellte K-.2 Do#umentation. ufruf von 8avado% z.B.: 8avado% -d do%s -aut&or L.8ava Anmerkung" ,ur 'ga'e des fertigen Java-0rogramms (in#lusive Do#umentation! erstellen Sie in I&rem almig&ty-a%%ount Kome-<erzei%&nis ein <erzei%&nis 'ga'eE+ das alle Sour%e- und Blass-"iles sowie ein :nterverzei%&nis do%s mit der K-.2 Do#umentation und dem :.2 )lassendiagramm ent&$lt.