in the Summer Term 2010 Software Technology (Master) The following persons hae contribute! to this project" #a!hi$a Mohan Priya Swaminathan Matthias #us%ala &le'an!er (eic$mann 1 Data Model for the Car Rental System Database 1.1 Explanation of the Data and the Application )ur software can manage !ifferent agencies that are able to proi!e cars to customers* +ustomers can rent cars for a gien time perio!* The releant !ata contains information about the customers, the boo$ings, a!!resses, agencies, cars, branches of agencies an! logging* 1.2 The Data Model 1.2.1 ER Model 1.2.2 UML Model 2 Relational Desin 2.1 Table Schemas See 1*2*1 2.2 !ormali"ation Table# Aency This table is in Third !ormal $orm (-./) where the ID is the primary $ey an! the other attribute is the Name* 0ere the !ata is !epen!ent only on the primary $ey* 0ence, 1./ is satisfie!* There are no concatenate!1composite primary $eys an! the other is the non2$ey attribute of the table which !epen!s wholly on the primary $ey* 0ence 2
./ is also satisfie!* Moreoer, there are no transitie !epen!encies on other tables* Table# C%stomer This table is in Third !ormal $orm (-./) where the Customer_ID is the primary $ey an! it aoi!s transitie !epen!encies* This eliminates !uplication across multiple rows* 3t also satisfies 2./* Table# C%stomer&Address Since it has two primary $eys cannot !etermine the normal form44 Table# 'oo(in This table is in Third !ormal $orm (-./) where the Booking_Number_ID is the primary $ey an! booking _date an! the return _date cannot e'ist in!epen!ently* There are also foreign $ey attributes that come from another table to aoi! !uplication of !ata* Table# Car This table is in Second !ormal $orm (2./) where !ata store! in a table must be !epen!ent only on the primary $ey an! not on any other fiel! in the table* 0ere we hae !eclare! foreign $eys which help establish another table 5+arType5* Table# CarType This table is in Third !ormal $orm (-./) where !ata store! in a table is !epen!ent only on the primary $ey an! not on any other fiel! in the table* 0ere all the non2$ey attributes in the table are fully !etermine! by the primary $ey* Table# 'ranch This table is in Third !ormal $orm (-./) where the 6ranch73! is the primary $ey an! !ata of the a!!ress is store! in a !ifferent table to aoi! re!un!ancy* #eason same as aboe for -./" Table# Address# This table is in Third !ormal $orm (-./) where the ID is the primary $ey* This eliminates !uplication across multiple rows* 3t also satisfies 2./* 2.) *nterity Constraints Table Constraint +n Delete Rationale +8ST)M9#7&DD#9SS +asca!e 9ach a!!ress entry is boun! to a specific customer by the phone number* 3t:s lifetime is therefore boun! to the lifetime the customer it belongs to* 6));3.< #estrict This applies to all - foreign $eys* Since an or!er is a central piece of information for a car rental system it shoul! not be able to be !elete! acci!entally (casca!e) by !eleting either of the associate! customer, car or agency* 6efore any of these can be !one outstan!ing or!ers hae to be resole! first* 6#&.+07&DD#9SS +asca!e Same rationale as for table +8ST)M9#7&DD#9SS +&# #estrict This applies to both foreign $eys* & specific car shoul! obiously not be !elete! when its !etails are !elete!* &lso cars shoul! not be !elete! automatically when the associate! branch is !elete! as cars coul! be reassigne! to other branches beforehan!* ) System Re,%irements /or this project a MyS=> ?*1 !atabase was use!* Since the 0/T !i! not manage to set up a !atabase for us an! we !o not hae a serer aailable, each !eeloper ha! to set up a local !atabase on his computer* That lea! to a lot of !ifferent operating systems in use, e*g* M&+ )S, (in!ows @P an! (in!ows A also !iffering in -2bit to BCbit architecture* &!!itionally, the +ar #ental System reDuires an installe! Eaa #untime 9nironment B* - .se Cases / Transactions / Triers -.1 .se Cases 0oin & customer may log in to the system* /or this he nee!s to proi!e his user name* Show c%rrent boo(ins & customer may reiew his current boo$ings* The current boo$ings are liste! in a table showing the most important information* Cancel boo(in & customer may cancel each in!ii!ual boo$ing at any time* /or this he proi!es the boo$ing number of the boo$ing to cancel* Search cars & customer may search for cars that he:s intereste! in renting* & table shows all the search results* 'oo( car & customer may boo$ a car* (hen !oing so, the car is resere! for a gien time perio! for that customer* Edit personal data & customer may e!it his personal !ata* This inclu!es changing his email a!!ress an! a!!ing an! e!iting personal a!!resses* -.2 Transactions 9'planation of the transactions not necessary as state! in the Database 2 lecture of 10*0B*2010* )ur Dueries can be foun! in section A*2 =uery 9'amples an! Transactions howeer* -.) Triers 4.3.1 Logging (hen !oing any !atabase action li$e inserting a new boo$ing or canceling a boo$ing this action is logge! as a log entry in a special table shortly !escribing the transaction* /ires upon" 3.S9#T 1 D9>9T9 Table" 6oo$ings 4.3.2 Server Timestamps (hen a!!ing a new boo$ing a boo$ing, the current time stamp shoul! be inserte! into the !atabase entry* This time stamp shall correspon! to the serer cloc$, not to the client cloc$* /ires upon" 3.S9#T Table" 6oo$ings 1 2hysical Desin The +ar #ental !atabase consists of the following tables" 1. +ustomer Table 2 +ontains information about the customers 2. +ustomer7&!!ress Table 2 +ontains the foreign $eys customer7i! an! a!!ress7i! to lin$ the customer an! a!!ress tables &!!ress Table 2 +ontains information about the a!!ress !etails of the customer* 6oo$ing Table 2 +ontains the customer boo$ing !etails for cars* &gency Table 2 +ontains the information about car rental agencies 6ranch Table 2 +ontains the information about the !ifferent agencies at arious branch locations* +ar Table 2 +ontains the information about the cars an! agencies associate! with cars* +ar7Type Table 2 +ontains the information about the types of car aailable* This table below lists some columns in the car rental !atabase" Table .ame +olumns Data type Details +ustomer 3D 3.T Primary ;ey,.ot null, &uto 3ncremente! >ogin7.ame,9mail,. ame Farchar(length) D)6 Date Passwor! 4 9ery table has columns an! has a !ata type associate! with it* /or e'ample, in the +ustomer table we choose the !ata type 3.T for +ustomer7i! (primary $ey)G by choosing 3.T 2 the column can hae numeric alues which are uniDue for eery customer* +olumns li$e .ame, 9mail can hae any length of aluesG to effectiely use the !is$ space we use the !atatype Farchar Missin 3al%es" +ertain columns cannot hol! missing alues an! hence those are a!!e! a .ot .ull constraint* 4%antity of Data" (e assume each table will hol! 100 recor!s initially* Types of access" The !atabase supports the following types of access" 3nsert,8p!ate, Mo!ify an! Delete for all tables* 9'amples" 1* +reating a new customer will insert new customer recor!s into the customer table* 2* 8p!ating the a!!ress !etails of a e'isting customer will access the customer an! a!!ress tables* /ile )rgani%ations" =uery1" To list the current boo$ings for a gien customer* S9>9+T 6));3.<*6));3.<7.8M69#, 6));3.<*6));3.<7D&T9, 6));3.<*#9T8#.7D&T9, &<9.+H*.&M9, +&#*#9<3ST#&T3).7.8M69#, +THP9*.&M9 /#)M 6));3.< E)3. &<9.+H ). 6));3.<*&<9.+H73D I &<9.+H*3D E)3. +&# ). +&#*3D I 6));3.<*+ID E)3. +THP9 ). +THP9*3D I +&#*+THP973D (09#9 6));3.<*+8ST)M9#73D I 4 The aboe Duery inoles !ata access from many tables an! hence a E)3. between the tables an! setting in!e'es on the primary $ey columns will help in fast !ata retrieal* 5 0ist of References .o a!!itional references were use!* 6 Appendix 6.1 Database Tables with Data 7.1.1 AGEN! 7.1.2 "##$%NG 7.1.3 "RAN& 7.1.4 "RAN&'A((RESS 7.1.) AR 3D &<9.+H73D .&M9 1 1 Spain 2 1 <ermany - 2 <ermany C 2 8S& 6#&.+073D ST#99T7.&M9 +3TH7.&M9 ST#99T7.8M69# P)ST&>7+)D9 +)8.T#H P0).97.8M69# 1 Spain Street Ma!ri! -2 CC-020S Spain 2020 1 2-JJ 2 .ew Street 0amburg C- -C-02- <ermany J0-C0- - )ther Street /ran$furt --a JC02 <ermany 2-2-J- C >iberty Street .ew Hor$ ?-a 12--CC 8S& KC-JK 3D +THP973D 6#&.+073D #9<3ST#&T3).7.8M69# +)>)# D&T97)/7M&.8/&+T8#3.< 6&S97P#3+97P9#7D&H 1 1 1 @2-22-C green 01*02*JJ 20 2 2 2 6+2-C- re! 21*02*02 1? - - - T(2C-? blue 11*0-*01 2- C C C 2-22CCC pin$ 0-*0C*C? 100 6));3.<7.8M69# +8ST)M9#73D &<9.+H73D +ID 6));3.<7D&T9 #9T8#.7D&T9 T3M97ST&MP 1 1 1 1 01*01*02 01*02*02 1?*0B*10 20"10 2 2 1 2 22*0C*0J 2-*0C*0J 1?*0B*10 20"10 - - 2 1 02*02*0- 20*02*0- 1?*0B*10 20"10 C C 2 2 20*0?*C? 21*0?*C? 1?*0B*10 20"10 K 1 1 C 0-*02*00 0-*0-*02 1?*0B*10 20"10 J 1 2 - 02*02*02 0-*02*02 1?*0B*10 20"10 10 1 2 C 0-*02*02 0C*02*02 1?*0B*10 20"12 3D .&M9 1 /irst &gency 2 &gency 6on! 7.1.* AR'T!+E 7.1.7 UST#MER 7.1., UST#MER'A((RESS 7.1.- L#GG%NG 6.2 4%ery Examples and Transactions 7.2.1 List all availa.le /ars 0or a given date and lo/ation S9>9+T +THP9*.&M9, +THP9*THP9, +&#*6&S97P#3+97P9#7D&H, +&#*#9<3ST#&T3).7.8M69#, &<9.+H*.&M9 &S &<9.+H7.&M9, 6#&.+0*.&M9 &S 6#&.+07.&M9 /#)M +&# E)3. +THP9 ). +THP9*3D I +&#*+THP973D E)3. 6#&.+0 ). 6#&.+0*3D I +&#*6#&.+073D E)3. 6#&.+07&DD#9SS ). 6#&.+07&DD#9SS*6#&.+073D I 6#&.+0*3D E)3. &<9.+H ). &<9.+H*3D I 6#&.+0*&<9.+H73D (09#9 +&#*3D .)T 3. (S9>9+T 6));3.<*+ID /#)M 6));3.< (09#9 6));3.<*6));3.<7D&T9 LI :20022 02201: &.D 6));3.<*#9T8#.7D&T9 MI :20022022-0:) &.D 6#&.+07&DD#9SS*+3TH7.&M9 I :.ew Hor$: 3D .&M9 P#)D8+9# THP9 &8T)M&T3+ 1 ;aefer F( P;( 0 2 9J0 6M( P;( 1 - /iesta /or! P;( 0 C Tan$ &rmy Military 0 3D ST#99T7.&M9 +3TH7.&M9 ST#99T7.8M69# P)ST&>7+)D9 +)8.T#H P0).97.8M69# +8ST)M9#73D 2 Matthias Street Matthias +ity 11 -2?C <ermany 2-CC- 2 - Priya Street Priya +ity 2- -CABKA 3n!ia BC-B?CA - C #a!hi$a Street #a!hi$a +ity CC- KBA- 3n!ia ?C-C C ? 0/T Street 0/T +ity -2a B-C2 <ermany -C2- 1 -C-2 ? A &le' Street &le' Town CJ CJ0- &le' +ountry J0-C0 1 3D >)<3.7.&M9 #9<3ST9#7D&T9 9M&3> +8ST)M9#7THP9 /3#ST7.&M9 S8#.&M9 D&T97)/763#T0 P&SS()#D +)MP&.H7.&M9 1 &le' 0B*0B*10 ale'Nhft*!e priate &le'an!er (eic$mann 01*01*00 none 2 Matthias 02*02*0K mat%eNhft*!e priate Matthias #us%ala 02*01*00 none - Priya 0-*0B*JJ priyaNhft*com priate Priya S 0?*0-*JJ none C #a!hi$a 0?*0C*0- ra!hi$aNhft*com priate #a!hi$a Mohan 22*0C*-K none ? 0/T 0C*02*01 hftNstuttgart*!e company none 0/T Stuttgart 3D M9SS&<9 1 6oo$ing was !elete!* 2 .ew boo$ing was inserte!* - .ew boo$ing was inserte!* .&M9 THP9 6&S97P#3+97P9#7D&H #9<3ST#&T3).7.8M69# &<9.+H7.&M9 6#&.+07.&M9 Tan$ Military 100 2-22CCC &gency 6on! 8S& 7.2.2 List all /1rrent .oo2ings 0or a given /1stomer S9>9+T 6));3.<*6));3.<7.8M69#, 6));3.<*6));3.<7D&T9, 6));3.<*#9T8#.7D&T9, &<9.+H*.&M9, +&#*#9<3ST#&T3).7.8M69#, +THP9*.&M9 /#)M 6));3.< E)3. &<9.+H ). 6));3.<*&<9.+H73D I &<9.+H*3D E)3. +&# ). +&#*3D I 6));3.<*+ID E)3. +THP9 ). +THP9*3D I +&#*+THP973D (09#9 6));3.<*+8ST)M9#73D I :1: 7.2.3 Retrieve details 0or a given /1stomer S9>9+T O /#)M +8ST)M9# (09#9 +8ST)M9#*3D I 1 7.2.4 List all addresses 0or a given /1stomer S9>9+T +8ST)M9#*/3#ST7.&M9, +8ST)M9#*S8#.&M9, +8ST)M9#7&DD#9SS*ST#99T7.&M9, +8ST)M9#7&DD#9SS*ST#99T7.8M69# /#)M +8ST)M9# E)3. +8ST)M9#7&DD#9SS ). +8ST)M9#7&DD#9SS*+8ST)M9#73D I +8ST)M9#*3D (09#9 +8ST)M9#*3D I 1 7.2.) List all /ar t3pes S9>9+T +THP9*.&M9, +THP9*P#)D8+9# /#)M +THP9 6));3.<7.8M69# 6));3.<7D&T9 #9T8#.7D&T9 .&M9 #9<3ST#&T3).7.8M69# .&M9 1 01*01*02 01*02*02 /irst &gency @2-22-C ;aefer K 0-*02*00 0-*0-*02 /irst &gency 2-22CCC Tan$ J 02*02*02 0-*02*02 &gency 6on! T(2C-? /iesta 10 0-*02*02 0C*02*02 &gency 6on! 2-22CCC Tan$ 3D >)<3.7.&M9 #9<3ST9#7D&T9 9M&3> +8ST)M9#7THP9 /3#ST7.&M9 S8#.&M9 D&T97)/763#T0 P&SS()#D +)MP&.H7.&M9 1 &le' 0B*0B*10 ale'Nhft*!e priate &le'an!er (eic$mann 01*01*00 none .&M9 P#)D8+9# ;aefer F( 9J0 6M( /iesta /or! Tan$ &rmy /3#ST7.&M9 S8#.&M9 ST#99T7.&M9 ST#99T7.8M69# &le'an!er (eic$mann &le' Street CJ 7.2.* List all agen/ies S9>9+T &<9.+H*.&M9 /#)M &<9.+H 7.2.7 List all .oo2ings 0or a given date and .ran/4 S9>9+T +&#*#9<3ST#&T3).7.8M69#, +8ST)M9#*/3#ST7.&M9, +8ST)M9#*S8#.&M9, +8ST)M9#*9M&3>, 6));3.<*6));3.<7D&T9, 6));3.<*#9T8#.7D&T9 /#)M 6));3.< E)3. +8ST)M9# ). 6));3.<*+8ST)M9#73D I +8ST)M9#*3D E)3. +&# ). 6));3.<*+ID I +&#*3D E)3. 6#&.+0 ). +&#*6#&.+073D I 6#&.+0*3D (09#9 6#&.+0*3D I 1 &.D 6));3.<*6));3.<7D&T9 I :2002201201: 6.) Description of the Application and .ser *nterface 7.3.1 SessionManager.5ava package de.hft.carrental.database; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.hibernate.Session; import org.hibernate.SessionFactor; import org.hibernate.cfg.!nnotationConfig"ration; #$$ $ %he session &anager is a singleton that enables clients to retrieve sessions $ fro& ever'here in the code. $ $ @author !lexander (eic)&ann $# public final class SessionManager * private static final SessionManager instance + new SessionManager,-; private final !nnotationConfig"ration config"ration; private final SessionFactor sessionFactor; private Session session; private SessionManager,- * config"ration + new !nnotationConfig"ration,- .config"re,.hibernate.cfg.x&l.-; sessionFactor + config"ration.b"ildSessionFactor,-; .&M9 /irst &gency &gency 6on! #9<3ST#&T3).7.8M69# /3#ST7.&M9 S8#.&M9 9M&3> 6));3.<7D&T9 #9T8#.7D&T9 @2-22-C &le'an!er (eic$mann ale'Nhft*!e 01*01*02 01*02*02 openSession,-; / public static SessionManager get0nstance,- * return instance; / public Session openSession,- * if ,,session ++ null- 11 2session.is3pen,-- * if ,2,isDatabaseConnection!vailable,--- * return null; / session + sessionFactor.openSession,-; / return session; / public void closeSession,- * if ,session ++ null- * return; / session.fl"sh,-; session.close,-; session + null; / public void dispose,- * sessionFactor.close,-; / private boolean isDatabaseConnection!vailable,- * String "rl + config"ration.get4ropert,.hibernate.connection."rl.-; String db"ser + config"ration .get4ropert,.hibernate.connection."serna&e.-; String dbpass'ord + config"ration .get4ropert,.hibernate.connection.pass'ord.-; try * Connection connection + DriverManager.getConnection,"rl5 db"ser5 dbpass'ord-; return ,connection ++ null- 6 false 7 true; / catch ,SQLException e- * return false; / / / 7.3.2 Agen/3.5ava package de.hft.carrental.do&ain; import java."til.Set; import javax.persistence.Cascade%pe; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.3ne%oMan; import javax.persistence.%able; :Entit :%able,na&e + .!8E;C<.- public final class !genc * private 0nteger id; private String na&e; private Set=>ranch? branches; private Set=>oo)ing? boo)ings; :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false5 length + @A- public 0nteger get0d,- * return id; / :Col"&n,na&e + .;!ME.5 "pdatable + true5 n"llable + false- public String get;a&e,- * return na&e; / :3ne%oMan,cascade + Cascade%pe.ALL5 &apped> + .agenc.5 orphanBe&oval + true5 targetEntit + >ranch.class- public Set=>ranch? get>ranches,- * return branches; / :3ne%oMan,cascade + Cascade%pe.ALL5 &apped> + .agenc.5 orphanBe&oval + true5 targetEntit + >oo)ing.class- public Set=>oo)ing? get>oo)ings,- * return boo)ings; / public void set0d,0nteger id- * this.id + id; / public void set;a&e,String na&e- * this.na&e + na&e; / public void set>ranches,Set=>ranch? branches- * this.branches + branches; / public void set>oo)ings,Set=>oo)ing? boo)ings- * this.boo)ings + boo)ings; / / 7.3.3 "oo2ing.5ava package de.hft.carrental.do&ain; import java."til.Date; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.CoinCol"&n; import javax.persistence.Man%o3ne; import javax.persistence.%able; :Entit :%able,na&e + .>33D0;8.- public final class >oo)ing * private Date boo)ingDate; private 0nteger boo)ing;"&ber; private Date ret"rnDate; private C"sto&er c"sto&er; private !genc agenc; private Car car; :Col"&n,na&e + .>33D0;8ED!%E.5 "pdatable + true5 n"llable + false- public Date get>oo)ingDate,- * return boo)ingDate; / :0d :8enerated9al"e :Col"&n,na&e + .>33D0;8E;FM>EB.5 "pdatable + false5 n"llable + false- public 0nteger get>oo)ing;"&ber,- * return boo)ing;"&ber; / :Col"&n,na&e + .BE%FB;ED!%E.5 "pdatable + true5 n"llable + false- public Date getBet"rnDate,- * return ret"rnDate; / :Man%o3ne,optional + false5 targetEntit + C"sto&er.class- :CoinCol"&n,na&e + .CFS%3MEBE0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public C"sto&er getC"sto&er,- * return c"sto&er; / :Man%o3ne,optional + false5 targetEntit + !genc.class- :CoinCol"&n,na&e + .!8E;C<E0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public !genc get!genc,- * return agenc; / :Man%o3ne,optional + false5 targetEntit + Car.class- :CoinCol"&n,na&e + .C!BE0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public Car getCar,- * return car; / public void set>oo)ingDate,Date boo)ingDate- * this.boo)ingDate + boo)ingDate; / public void set>oo)ing;"&ber,0nteger boo)ing;"&ber- * this.boo)ing;"&ber + boo)ing;"&ber; / public void setBet"rnDate,Date ret"rnDate- * this.ret"rnDate + ret"rnDate; / public void setC"sto&er,C"sto&er c"sto&er- * this.c"sto&er + c"sto&er; / public void set!genc,!genc agenc- * this.agenc + agenc; / public void setCar,Car car- * this.car + car; / / 7.3.4 "ran/4.5ava package de.hft.carrental.do&ain; import javax.persistence.Cascade%pe; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.CoinCol"&n; import javax.persistence.Man%o3ne; import javax.persistence.3ne%o3ne; import javax.persistence.%able; :Entit :%able,na&e + .>B!;CG.- public final class >ranch * private 0nteger id; private String na&e; private !genc agenc; private >ranch!ddress branch!ddress; :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .;!ME.5 "pdatable + true5 n"llable + false5 length + @A- public String get;a&e,- * return na&e; / :Man%o3ne,optional + false5 targetEntit + !genc.class- :CoinCol"&n,na&e + .!8E;C<E0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public !genc get!genc,- * return agenc; / :3ne%o3ne,cascade + Cascade%pe.ALL5 &apped> + .branch.5 optional + false5 orphanBe&oval + true5 targetEntit + >ranch!ddress.class- public >ranch!ddress get>ranch!ddress,- * return branch!ddress; / public void set0d,0nteger id- * this.id + id; / public void set;a&e,String na&e- * this.na&e + na&e; / public void set!genc,!genc agenc- * this.agenc + agenc; / public void set>ranch!ddress,>ranch!ddress address- * branch!ddress + address; / / 7.3.) "ran/4Address.5ava package de.hft.carrental.do&ain; import javax.persistence.Cascade%pe; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.CoinCol"&n; import javax.persistence.3ne%o3ne; import javax.persistence.%able; :Entit :%able,na&e + .>B!;CGE!DDBESS.- public final class >ranch!ddress * private String cit;a&e; private String co"ntr; private 0nteger id; private String phone;"&ber; private String postalCode; private String street;a&e; private String street;"&ber; private >ranch branch; :Col"&n,na&e + .C0%<E;!ME.5 "pdatable + false5 n"llable + false5 length + @A- public String getCit;a&e,- * return cit;a&e; / :Col"&n,na&e + .C3F;%B<.5 "pdatable + false5 n"llable + false5 length + @A- public String getCo"ntr,- * return co"ntr; / :0d :8enerated9al"e :Col"&n,na&e + .>B!;CGE0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .4G3;EE;FM>EB.5 "pdatable + true5 n"llable + false5 length + @A- public String get4hone;"&ber,- * return phone;"&ber; / :Col"&n,na&e + .43S%!LEC3DE.5 "pdatable + true5 n"llable + false5 length + HI- public String get4ostalCode,- * return postalCode; / :Col"&n,na&e + .S%BEE%E;!ME.5 "pdatable + true5 n"llable + false5 length + @A- public String getStreet;a&e,- * return street;a&e; / :Col"&n,na&e + .S%BEE%E;FM>EB.5 "pdatable + true5 n"llable + false5 length + A- public String getStreet;"&ber,- * return street;"&ber; / :3ne%o3ne,cascade + Cascade%pe.ALL5 optional + false5 targetEntit + >ranch.class- :CoinCol"&n,na&e + .>B!;CGE0D.5 "niq"e + true5 "pdatable + false5 n"llable + false- public >ranch get>ranch,- * return branch; / public void setCit;a&e,String cit;a&e- * this.cit;a&e + cit;a&e; / public void setCo"ntr,String co"ntr- * this.co"ntr + co"ntr; / public void set0d,0nteger id- * this.id + id; / public void set4hone;"&ber,String phone;"&ber- * this.phone;"&ber + phone;"&ber; / public void set4ostalCode,String postalCode- * this.postalCode + postalCode; / public void setStreet;a&e,String street;a&e- * this.street;a&e + street;a&e; / public void setStreet;"&ber,String street;"&ber- * this.street;"&ber + street;"&ber; / public void set>ranch,>ranch branch- * this.branch + branch; / / 7.3.* ar.5ava package de.hft.carrental.do&ain; import java."til.Date; import java."til.Set; import javax.persistence.Cascade%pe; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.CoinCol"&n; import javax.persistence.Man%o3ne; import javax.persistence.3ne%oMan; import javax.persistence.%able; :Entit :%able,na&e + .C!B.- public final class Car * private Float base4rice4erDa; private String color; private Date date3fMan"fact"ring; private 0nteger id; private String registration;"&ber; private Car%pe car%pe; private >ranch branch; private Set=>oo)ing? boo)ings; :Col"&n,na&e + .>!SEE4B0CEE4EBED!<.5 "pdatable + true5 n"llable + false- public Float get>ase4rice4erDa,- * return base4rice4erDa; / :Col"&n,na&e + .C3L3B.5 "pdatable + true5 n"llable + false5 length + JI- public String getColor,- * return color; / :Col"&n,na&e + .D!%EE3FEM!;FF!C%FB0;8.5 "pdatable + false5 n"llable + false- public Date getDate3fMan"fact"ring,- * return date3fMan"fact"ring; / :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .BE80S%B!%03;E;FM>EB.5 "pdatable + false5 n"llable + false- public String getBegistration;"&ber,- * return registration;"&ber; / :Man%o3ne,optional + false5 targetEntit + Car%pe.class- :CoinCol"&n,na&e + .C!BE%<4EE0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public Car%pe getCar%pe,- * return car%pe; / :Man%o3ne,optional + false5 targetEntit + >ranch.class- :CoinCol"&n,na&e + .>B!;CGE0D.5 "pdatable + true5 n"llable + false5 referencedCol"&n;a&e + .0D.- public >ranch get>ranch,- * return branch; / :3ne%oMan,cascade + Cascade%pe.ALL5 &apped> + .car.5 targetEntit + >oo)ing.class- public Set=>oo)ing? get>oo)ings,- * return boo)ings; / public void set>ase4rice4erDa,Float base4rice4erDa- * this.base4rice4erDa + base4rice4erDa; / public void setColor,String color- * this.color + color; / public void setDate3fMan"fact"ring,Date date3fMan"fact"ring- * this.date3fMan"fact"ring + date3fMan"fact"ring; / public void set0d,0nteger id- * this.id + id; / public void setBegistration;"&ber,String registration;"&ber- * this.registration;"&ber + registration;"&ber; / public void setCar%pe,Car%pe car%pe- * this.car%pe + car%pe; / public void set>ranch,>ranch branch- * this.branch + branch; / public void set>oo)ings,Set=>oo)ing? boo)ings- * this.boo)ings + boo)ings; / / 7.3.7 arT3pe.5ava package de.hft.carrental.do&ain; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.%able; :Entit :%able,na&e + .C!BE%<4E.- public final class Car%pe * private >oolean a"to&atic; private 0nteger id; private String na&e; private String prod"cer; private String tpe; :Col"&n,na&e + .!F%3M!%0C.5 "pdatable + true5 n"llable + false- public >oolean get!"to&atic,- * return a"to&atic; / :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .;!ME.5 "pdatable + true5 n"llable + false- public String get;a&e,- * return na&e; / :Col"&n,na&e + .4B3DFCEB.5 "pdatable + true5 n"llable + false- public String get4rod"cer,- * return prod"cer; / :Col"&n,na&e + .%<4E.5 "pdatable + true5 n"llable + false- public String get%pe,- * return tpe; / public void set!"to&atic,>oolean a"to&atic- * this.a"to&atic + a"to&atic; / public void set0d,0nteger id- * this.id + id; / public void set;a&e,String na&e- * this.na&e + na&e; / public void set4rod"cer,String prod"cer- * this.prod"cer + prod"cer; / public void set%pe,String tpe- * this.tpe + tpe; / / 7.3., 1stomer.5ava package de.hft.carrental.do&ain; import java."til.Date; import java."til.Set; import javax.persistence.Cascade%pe; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.3ne%oMan; import javax.persistence.%able; :Entit :%able,na&e + .CFS%3MEB.- public final class C"sto&er * public static final String CUSTOMER_TYPE_PRIVATE + .private.; public static final String CUSTOMER_TYPE_COMPANY + .co&pan.; private String co&pan;a&e; private String c"sto&er%pe; private Date date3f>irth; private String e&ail; private String first;a&e; private 0nteger id; private String login;a&e; private String pass'ord; private Date registerDate; private String s"rna&e; private Set=C"sto&er!ddress? c"sto&er!ddresses; private Set=>oo)ing? boo)ings; :Col"&n,na&e + .C3M4!;<E;!ME.5 "pdatable + true5 n"llable + true- public String getCo&pan;a&e,- * return co&pan;a&e; / :Col"&n,na&e + .CFS%3MEBE%<4E.5 "pdatable + true5 n"llable + false- public String getC"sto&er%pe,- * return c"sto&er%pe; / :Col"&n,na&e + .D!%EE3FE>0B%G.5 "pdatable + true5 n"llable + true- public Date getDate3f>irth,- * return date3f>irth; / :Col"&n,na&e + .EM!0L.5 "pdatable + true5 n"llable + false5 length + @A- public String getE&ail,- * return e&ail; / :Col"&n,na&e + .F0BS%E;!ME.5 "pdatable + true5 n"llable + true5 length + @A- public String getFirst;a&e,- * return first;a&e; / :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .L380;E;!ME.5 "pdatable + false5 n"llable + false5 length + @A- public String getLogin;a&e,- * return login;a&e; / :Col"&n,na&e + .4!SS(3BD.5 "pdatable + true5 n"llable + false5 length + @A- public String get4ass'ord,- * return pass'ord; / :Col"&n,na&e + .BE80S%EBED!%E.5 "pdatable + false5 n"llable + false- public Date getBegisterDate,- * return registerDate; / :Col"&n,na&e + .SFB;!ME.5 "pdatable + true5 n"llable + true5 length + @A- public String getS"rna&e,- * return s"rna&e; / :3ne%oMan,cascade + Cascade%pe.ALL5 &apped> + .c"sto&er.5 orphanBe&oval + true5 targetEntit + C"sto&er!ddress.class- public Set=C"sto&er!ddress? getC"sto&er!ddresses,- * return c"sto&er!ddresses; / :3ne%oMan,cascade + Cascade%pe.ALL5 &apped> + .c"sto&er.5 orphanBe&oval + true5 targetEntit + >oo)ing.class- public Set=>oo)ing? get>oo)ings,- * return boo)ings; / public void setCo&pan;a&e,String co&pan;a&e- * this.co&pan;a&e + co&pan;a&e; / public void setC"sto&er%pe,String c"sto&er%pe- * this.c"sto&er%pe + c"sto&er%pe; / public void setDate3f>irth,Date date3f>irth- * this.date3f>irth + date3f>irth; / public void setE&ail,String e&ail- * this.e&ail + e&ail; / public void setFirst;a&e,String first;a&e- * this.first;a&e + first;a&e; / public void set0d,0nteger id- * this.id + id; / public void setLogin;a&e,String login;a&e- * this.login;a&e + login;a&e; / public void set4ass'ord,String pass'ord- * this.pass'ord + pass'ord; / public void setBegisterDate,Date registerDate- * this.registerDate + registerDate; / public void setS"rna&e,String s"rna&e- * this.s"rna&e + s"rna&e; / public void set>oo)ings,Set=>oo)ing? boo)ings- * if ,this.boo)ings ++ null- * this.boo)ings + boo)ings; / else * this.boo)ings.clear,-; this.boo)ings.add!ll,boo)ings-; / / public void setC"sto&er!ddresses,Set=C"sto&er!ddress? c"sto&er!ddresses- * if ,this.c"sto&er!ddresses ++ null- * this.c"sto&er!ddresses + c"sto&er!ddresses; / else * this.c"sto&er!ddresses.clear,-; this.c"sto&er!ddresses.add!ll,c"sto&er!ddresses-; / / / 7.3.- 1stomerAddress.5ava package de.hft.carrental.do&ain; import javax.persistence.Col"&n; import javax.persistence.Entit; import javax.persistence.8enerated9al"e; import javax.persistence.0d; import javax.persistence.CoinCol"&n; import javax.persistence.Man%o3ne; import javax.persistence.%able; :Entit :%able,na&e + .CFS%3MEBE!DDBESS.- public final class C"sto&er!ddress * private String cit;a&e; private String co"ntr; private 0nteger id; private String phone;"&ber; private String postalCode; private String street;"&ber; private String street;a&e; private C"sto&er c"sto&er; :Col"&n,na&e + .C0%<E;!ME.5 "pdatable + true5 n"llable + false5 length + @A- public String getCit;a&e,- * return cit;a&e; / :Col"&n,na&e + .C3F;%B<.5 "pdatable + true5 n"llable + false5 length + @A- public String getCo"ntr,- * return co"ntr; / :0d :8enerated9al"e :Col"&n,na&e + .0D.5 "pdatable + false5 n"llable + false- public 0nteger get0d,- * return id; / :Col"&n,na&e + .4G3;EE;FM>EB.5 "pdatable + true5 n"llable + false5 length + @A- public String get4hone;"&ber,- * return phone;"&ber; / :Col"&n,na&e + .43S%!LEC3DE.5 "pdatable + true5 n"llable + false5 length + HI- public String get4ostalCode,- * return postalCode; / :Col"&n,na&e + .S%BEE%E;!ME.5 "pdatable + true5 n"llable + false5 length + @A- public String getStreet;a&e,- * return street;a&e; / :Col"&n,na&e + .S%BEE%E;FM>EB.5 "pdatable + true5 n"llable + false5 length + A- public String getStreet;"&ber,- * return street;"&ber; / :Man%o3ne,optional + false5 targetEntit + C"sto&er.class- :CoinCol"&n,na&e + .CFS%3MEBE0D.5 "pdatable + false5 n"llable + false5 referencedCol"&n;a&e + .0D.- public C"sto&er getC"sto&er,- * return c"sto&er; / public void setCit;a&e,String cit;a&e- * this.cit;a&e + cit;a&e; / public void setCo"ntr,String co"ntr- * this.co"ntr + co"ntr; / public void set0d,0nteger id- * this.id + id; / public void set4hone;"&ber,String phone;"&ber- * this.phone;"&ber + phone;"&ber; / public void set4ostalCode,String postalCode- * this.postalCode + postalCode; / public void setStreet;"&ber,String street;"&ber- * this.street;"&ber + street;"&ber; / public void setStreet;a&e,String street;a&e- * this.street;a&e + street;a&e; / public void setC"sto&er,C"sto&er c"sto&er- * this.c"sto&er + c"sto&er; / / 7.3.16 Main.5ava package de.hft.carrental.&ain; import de.hft.carrental."i.splash.Splash(indo'; #$$ $ %his class contains the &ain ðod allo'ing the progra& to be exec"ted. $ $ @author !lexander (eic)&ann $# public final class Main * #$$ $ %his &ain ðod opens "p the splash 'indo'. $# public static void &ain,StringKL args- * new Splash(indo',-; / / 7.3.11 7indo8.5ava package de.hft.carrental."i; import java.a't.Di&ension; import java.a't.8rid>agConstraints; import java.a't.8rid>agLao"t; import java.a't.0nsets; import java.a't.%ool)it; import javax.s'ing.CFra&e; import javax.s'ing.F0Manager; import javax.s'ing.Fns"pportedLoo)!ndFeelException; import de.hft.carrental."i."til.8rid>agFtil; #$$ $ %his class represents an application 'indo'. 0n addition to a nor&al $ *:lin) CFra&e/ it "ses the native loo) and feel of the "sed 3S. %he 'indo' $ 'ill also be positioned in the center of the screen b defa"lt. %he title of $ the 'indo' as 'ell as the defa"lt close operation 'ill be alread set. $ =p? $ F"rther&ore5 a grid lao"t is assigned to the 'indo'. ! convenience ðod is $ offered to s"bclasses that enables rapid creation of $ *:lin) 8rid>agConstraints/. $ =p? $ !lso5 the concept of a c"rrent *:lin) (indo'4age/ is introd"ced. Fsing the $ ðod *:lin) Ms'itch4age%o,(indo'4age-/ s"bclasses can s'itch to another $ 'indo' page at an ti&e. $ $ @author !lexander (eic)&ann $# public abstract class (indo' extends CFra&e * private static final String WINDOW_TITLE + .Car Bental Sste&.; private static final long serialVersionUID + AIAIHNA@IJNNNOPQ@J@L; #$$ $ %he *:lin) (indo'4age/ that is c"rrentl displaed. $# private (indo'4age c"rrent4age; protected (indo',- * set;ativeLoo)!ndFeel,-; setDefa"ltClose3peration,EXIT_ON_CLOSE-; set%itle,WINDOW_TITLE-; center3nScreen,-; createLao"t,-; / private void center3nScreen,- * %ool)it toolDit + %ool)it.getDefaltTool!it,-; Di&ension screenSiRe + toolDit.getScreenSiRe,-; int screenGeight + screenSiRe.height; int screen(idth + screenSiRe.'idth; int x + ,screen(idth # S- T ,getMin(idth,- # S-; int + ,screenGeight # S- T ,getMinGeight,- # S-; setMini&"&SiRe,new Di&ension,getMin(idth,-5 getMinGeight,---; setLocation,x5 -; / private void createLao"t,- * 8rid>agLao"t lao"t + new 8rid>agLao"t,-; setLao"t,lao"t-; / #$$ $ S'itches to the provided *:lin) (indo'4age/. Ca"ses the 'indo' to be $ repainted so the contents of the ne' page are sho'n i&&ediatel. $ $ @param page $ %he *:lin) (indo'4age/ to s'itch to. $# protected final void s'itch4age%o,(indo'4age page- * if ,c"rrent4age 2+ null- * re&ove,c"rrent4age-; / add,page5 8rid>agFtil.create"ri#$agConstraints,I5 H5 H5 H5 8rid>agConstraints.$OT%5 new 0nsets,HI5 I5 I5 I-5 8rid>agConstraints.&IRST_LINE_START5 I5 I--; c"rrent4age + page; c"rrent4age.refresh,-; validate,-; repaint,-; / #$$ $ M"st ret"rn the &ini&"& 'idth this 'indo' shall have. $# protected abstract int getMin(idth,-; #$$ $ M"st ret"rn the &ini&"& height this 'indo' shall have. $# protected abstract int getMinGeight,-; private void set;ativeLoo)!ndFeel,- * try * F0Manager.setLoo!An#&eel,F0Manager.getS'ste(Loo!An#&eelClassNa(e,--; / catch ,Class;otFo"ndException e- * e.printStac)%race,-; / catch ,0nstantiationException e- * e.printStac)%race,-; / catch ,0llegal!ccessException e- * e.printStac)%race,-; / catch ,Fns"pportedLoo)!ndFeelException e- * e.printStac)%race,-; / / / 7.3.12 7indo8+age.5ava package de.hft.carrental."i; import java.a't.Container; import java.a't.8ridLao"t; import java."til.!rraList; import java."til.List; #$$ $ (indo' pages are "sed b the class *:lin) (indo'/. 3ne 'indo' page b"ndles $ together a n"&ber of *:lin) (indo'4ageSection/s. For exa&ple5 there co"ld $ exist a 'indo' page 'ith t'o 'indo' page sections. 3ne section sho's a search $ for&"la5 'hile the second section sho's a table 'ith the search res"lts. $ $ @see (indo' $ $ @author !lexander (eic)&ann $# public abstract class (indo'4age extends Container * private static final long serialVersionUID + TOJOHHQSQOPANSHQSOAIL; #$$ %he *:lin) (indo'/ this 'indo' page belongs to. $# private final (indo' 'indo'; private final List=(indo'4ageSection? sections; #$$ $ @param 'indo' $ %he *:lin) (indo'/ this 'indo' page 'ill belong to. $ @param lao"tBo's $ Specifies the n"&ber of ho' &an ro's the pageUs grid lao"t $ consists of. $ @param lao"tCol"&ns $ Specifies the n"&ber of ho' &an col"&ns the pageUs grid $ lao"t consists of. $# protected (indo'4age,(indo' 'indo'5 int lao"tBo's5 int lao"tCol"&ns- * super,-; this.'indo' + 'indo'; sections + new !rraList=(indo'4ageSection?,-; createLao"t,lao"tBo's5 lao"tCol"&ns-; addSections,-; / private void createLao"t,int ro's5 int col"&ns- * 8ridLao"t lao"t + new 8ridLao"t,ro's5 col"&ns-; setLao"t,lao"t-; / #$$ $ Besponsible for adding the necessar *:lin) (indo'4ageSection/s to this $ page. $# protected abstract void addSections,-; #$$ $ !dds the given *:lin) (indo'4ageSection/ to this 'indo' page. $ $ @param section $ %he 'indo' page section to add. $# protected final void addSection,(indo'4ageSection section- * add,section-; sections.add,section-; / #$$ $ Bet"rns the *:lin) (indo'/ this 'indo' page belongs to. $# public final (indo' get(indo',- * return 'indo'; / #$$ $ Befreshes the contents of this page b refreshing all of itUs sections. $# public final void refresh,- * for ,(indo'4ageSection section 7 sections- * section.refresh,-; / / / 7.3.13 7indo8+ageSe/tion.5ava package de.hft.carrental."i; import java.a't.Font; import javax.s'ing.>orderFactor; import javax.s'ing.C4anel; import javax.s'ing.border.%itled>order; #$$ $ %his class is li)e a *:lin) C4anel/. 0n addition5 it has a title and a $ border. %he title is displaed at the top left of the border. ! 'indo' page $ section al'as belongs to a specific *:lin) (indo'4age/. %he contents of the $ section can be refreshed "sing the ðod *:lin) Mrefresh,-/. $ $ @author !lexander (eic)&ann $# public abstract class (indo'4ageSection extends C4anel * private static final long serialVersionUID + OSJOOIAQISQPJIJHNQJL; #$$ $ %he *:lin) (indo'4age/ this 'indo' page section belongs to. $# private final (indo'4age 'indo'4age; #$$ $ @param 'indo'4age $ %he *:lin) (indo'4age/ this 'indo' page sections belongs to. $ @param title $ %he title of this 'indo' page section that 'ill be displaed $ at the top left of the sectionUs border. $# protected (indo'4ageSection,(indo'4age 'indo'4age5 String title- * this.'indo'4age + 'indo'4age; create>order,title-; / private void create>order,String title- * %itled>order border + >orderFactor.createTitle#$or#er,title V .7.-; border.set%itleFont,new Font,.!rial.5 Font.$OLD5 HH--; set>order,border-; / #$$ $ Bet"rns the *:lin) (indo'4age/ this 'indo' page section belongs to. $# public final (indo'4age get(indo'4age,- * return 'indo'4age; / #$$ $ Befreshes the contents of this 'indo' page section. $# protected abstract void refresh,-; / 7.3.14 Main7indo8.5ava package de.hft.carrental."i.&ain; import java.a't.8rid>agConstraints; import java.a't.0nsets; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import javax.s'ing.0&age0con; import javax.s'ing.C>"tton; import javax.s'ing.C4anel; import de.hft.carrental.database.SessionManager; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental."i.(indo'; import de.hft.carrental."i.&ain.boo)ings.C"rrent>oo)ings4age; import de.hft.carrental."i.&ain.cars.Cars4age; import de.hft.carrental."i.&ain.personal.4ersonal4age; import de.hft.carrental."i.splash.Splash(indo'; import de.hft.carrental."i."til.8rid>agFtil; #$$ $ %he &ain 'indo' is the applicationUs 'indo' that appears after the login 'as $ s"ccessf"l. 0t provides a &en" at the top of the 'indo' 'hich allo's $ navigating to the different "se cases. 0n addition5 it provides a h"ge area $ of space belo' that &en"5 'here the contents of the c"rrent 'indo' page are $ displaed. $ $ @author !lexander (eic)&ann $# public final class Main(indo' extends (indo' implements !ctionListener * private static final long serialVersionUID + THIP@SAQAH@ON@HSNNIAL; private static final int MINIMUM_WIDT% + Q@I; private static final int MINIMUM_%EI"%T + @II; #$$ %his action co&&and triggers the UC"rrent >oo)ingsU "se case. $# private static final String AC_CURRENT_$OO)IN"S + .c"rrentEboo)ings.; #$$ %his action co&&and triggers the USearch CarsU "se case. $# private static final String AC_SEARC%_CARS + .searchEcars.; #$$ %his action co&&and triggers the UEdit 4ersonal DataU "se case. $# private static final String AC_EDIT_PERSONAL_DATA + .editEpersonalEdata.; #$$ %his action co&&and triggers the logo"t. $# private static final String AC_LO"OUT + .logo"t.; private final C"rrent>oo)ings4age c"rrent>oo)ings4age; private final Cars4age searchCars4age; private final 4ersonal4age edit4ersonalData4age; private final C"sto&er logged0nFser; public Main(indo',C"sto&er "ser- * super,-; logged0nFser + "ser; String title + get%itle,-; set%itle,title V . Klogged in as7 . V "ser.getLogin;a&e,- V .L.-; c"rrent>oo)ings4age + new C"rrent>oo)ings4age,this-; searchCars4age + new Cars4age,this-; edit4ersonalData4age + new 4ersonal4age,this-; createMen",-; sho'C"rrent>oo)ings4age,-; set9isible,true-; / #$$ $ Creates the &en" that is sho'n at the top of the 'indo'. $# private void createMen",- * C4anel &en"4anel + new C4anel,-; C>"tton c"rrent>oo)ings>"tton + new C>"tton,.C"rrent >oo)ings.-; c"rrent>oo)ings>"tton.set!ctionCo&&and,AC_CURRENT_$OO)IN"S-; c"rrent>oo)ings>"tton.add!ctionListener,this-; c"rrent>oo)ings>"tton.set0con,new 0&age0con, .i&ages#c"rrentEboo)ings.png.--; &en"4anel.add,c"rrent>oo)ings>"tton-; C>"tton searchCars>"tton + new C>"tton,.Search Cars.-; searchCars>"tton.set!ctionCo&&and,AC_SEARC%_CARS-; searchCars>"tton.add!ctionListener,this-; searchCars>"tton.set0con,new 0&age0con,.i&ages#searchEcars.png.--; &en"4anel.add,searchCars>"tton-; C>"tton edit4ersonalData>"tton + new C>"tton,.Edit 4ersonal Data.-; edit4ersonalData>"tton.set!ctionCo&&and,AC_EDIT_PERSONAL_DATA-; edit4ersonalData>"tton.add!ctionListener,this-; edit4ersonalData>"tton.set0con,new 0&age0con, .i&ages#editEpersonalEdata.png.--; &en"4anel.add,edit4ersonalData>"tton-; C>"tton logo"t>"tton + new C>"tton,.Logo"t.-; logo"t>"tton.set!ctionCo&&and,AC_LO"OUT-; logo"t>"tton.add!ctionListener,this-; logo"t>"tton.set0con,new 0&age0con,.i&ages#logo"t.png.--; &en"4anel.add,logo"t>"tton-; add,&en"4anel5 8rid>agFtil.create"ri#$agConstraints,I5 I5 H5 I5 8rid>agConstraints.$OT%5 new 0nsets,I5 I5 I5 I-5 8rid>agConstraints.&IRST_LINE_START5 I5 I--; / public void sho'C"rrent>oo)ings4age,- * s'itch4age%o,c"rrent>oo)ings4age-; / public void sho'SearchCars4age,- * s'itch4age%o,searchCars4age-; / public void sho'Edit4ersonalData4age,- * s'itch4age%o,edit4ersonalData4age-; / :3verride protected int getMinGeight,- * return MINIMUM_%EI"%T; / :3verride protected int getMin(idth,- * return MINIMUM_WIDT%; / :3verride public void action4erfor&ed,!ctionEvent e- * String co&&and + e.get!ctionCo&&and,-; if ,co&&and.eq"als,AC_CURRENT_$OO)IN"S-- * sho'C"rrent>oo)ings4age,-; / else if ,co&&and.eq"als,AC_SEARC%_CARS-- * sho'SearchCars4age,-; / else if ,co&&and.eq"als,AC_EDIT_PERSONAL_DATA-- * sho'Edit4ersonalData4age,-; / else if ,co&&and.eq"als,AC_LO"OUT-- * logo"t,-; / / public C"sto&er getLogged0nFser,- * return logged0nFser; / #$$ $ Logs the c"rrent "ser o"t and sho's the login screen et again. $# private void logo"t,- * SessionManager.getInstance,-.closeSession,-; set9isible,false-; new Splash(indo',-; / / 7.3.1) Main7indo8+age.5ava package de.hft.carrental."i.&ain; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental."i.(indo'4age; #$$ $ ! page belonging to the *:lin) Main(indo'/. 0n addition to a nor&al 'indo' $ page5 this class provides a ðod to retrieve the c"rrentl logged in "ser. $ $ @author !lexander (eic)&ann $# public abstract class Main(indo'4age extends (indo'4age * private static final long serialVersionUID + SPASPSQOIPSOAHHIHHIL; protected Main(indo'4age,Main(indo' &ain(indo'5 int lao"tBo's5 int lao"tCol"&ns- * super,&ain(indo'5 lao"tBo's5 lao"tCol"&ns-; / protected final C"sto&er getLogged0nFser,- * return ,,Main(indo'- get(indo',--.getLogged0nFser,-; / / 7.3.1* Main7indo8+ageSe/tion.5ava package de.hft.carrental."i.&ain; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental."i.(indo'4ageSection; #$$ $ ! 'indo' page section that belongs to a *:lin) Main(indo'4age/. 0n addition $ to a nor&al page it offers a ðod that enables s"bclasses to retrieve the $ c"rrentl logged in "ser. $ $ @author !lexander (eic)&ann $# public abstract class Main(indo'4ageSection extends (indo'4ageSection * private static final long serialVersionUID + THSI@HNSAAQQP@SPJI@NL; protected Main(indo'4ageSection,Main(indo'4age &ain(indo'4age5 String title- * super,&ain(indo'4age5 title-; / protected final C"sto&er getLogged0nFser,- * return ,,Main(indo'4age- get(indo'4age,--.getLogged0nFser,-; / / 7.3.17 Ta.leSe/tion.5ava package de.hft.carrental."i.&ain; import java.a't.8rid>agConstraints; import java.a't.8rid>agLao"t; import java.a't.0nsets; import javax.s'ing.C%able; import javax.s'ing.table.Defa"lt%ableModel; import javax.s'ing.table.C%ableGeader; import de.hft.carrental."i."til.8rid>agFtil; #$$ $ %his abstract class provides a section that contains a table. %his table can $ be config"red as necessar b s"bclasses5 for exa&ple 'hich col"&ns the table $ has. $ $ @author !lexander (eic)&ann $# public abstract class %ableSection extends Main(indo'4ageSection * private static final long serialVersionUID + NONQ@IJJNJQNIA@PPHSL; #$$ %he S'ing table F0 'idget. $# private C%able table; #$$ %he table &odel that &anages the data of the table. $# private Defa"lt%ableModel tableModel; #$$ $ @param page $ %he 'indo' page this section belongs to. $ @param title $ %he title for this section that 'ill be sho'n in the title $ area of the section. $ @param col"&n;a&es $ %he na&es of the col"&ns this table shall have. $ @param col"&n(idths $ %he 'idth of each col"&n. $# protected %ableSection,Main(indo'4age page5 String title5 StringKL col"&n;a&es5 intKL col"&n(idths- * super,page5 title-; createLao"t,-; beforeCreate%able,-; create%able,col"&n;a&es5 col"&n(idths-; / protected void beforeCreate%able,- * ## E&pt defa"lt i&ple&entation. / private void create%able,StringKL col"&n;a&es5 intKL col"&n(idths- * tableModel + new Defa"lt%ableModel,-; for ,String col"&n;a&e 7 col"&n;a&es- * tableModel.addCol"&n,col"&n;a&e-; / table + new C%able,tableModel-; int col"&nMargin + A; table.getCol"&nModel,-.setCol"&nMargin,col"&nMargin-; for ,int i + I; i = col"&n(idths.length; iVV- * table.getCol"&n,col"&n;a&esKiL-.set4referred(idth,col"&n(idthsKiL-; / C%ableGeader tableGeader + table.get%ableGeader,-; tableGeader.getCol"&nModel,-.setCol"&nMargin,col"&nMargin-; add,tableGeader5 8rid>agFtil.create"ri#$agConstraints,I5 H5 H5 I5 8rid>agConstraints.%ORI*ONTAL5 new 0nsets,I5 I5 I5 I-5 8rid>agConstraints.&IRST_LINE_START5 I5 I--; add,table5 8rid>agFtil.create"ri#$agConstraints,I5 S5 H5 H5 8rid>agConstraints.%ORI*ONTAL5 new 0nsets,I5 I5 I5 I-5 8rid>agConstraints.&IRST_LINE_START5 I5 I--; / protected void createLao"t,- * 8rid>agLao"t lao"t + new 8rid>agLao"t,-; setLao"t,lao"t-; / #$$ $ Clears the table b re&oving all data fro& the table so that it is e&pt $ after a call to this operation. $# protected final void clear%able,- * tableModel.getData9ector,-.clear,-; / #$$ $ !dds one ro' of data to the table. $ $ @param ro'Data $ %he arra containing the ro' data. $# protected final void addDataBo',3bjectKL ro'Data- * tableModel.addBo',ro'Data-; / / 7.3.1, 1rrent"oo2ings+age.5ava package de.hft.carrental."i.&ain.boo)ings; import de.hft.carrental."i.&ain.Main(indo'; import de.hft.carrental."i.&ain.Main(indo'4age; #$$ $ %his page belongs to the *:lin) Main(indo'/ and enables the "ser to revie' $ his c"rrent boo)ings. $ $ @author !lexander (eic)&ann $# public final class C"rrent>oo)ings4age extends Main(indo'4age * private static final long serialVersionUID + AJQS@POSH@SHJSP@S@JL; public C"rrent>oo)ings4age,Main(indo' &ain(indo'- * super,&ain(indo'5 H5 H-; / :3verride protected void addSections,- * addSection,new C"rrent>oo)ings%ableSection,this--; / / 7.3.1- 1rrent"oo2ingsTa.leSe/tion.5ava package de.hft.carrental."i.&ain.boo)ings; import java.a't.Flo'Lao"t; import java.a't.Font; import java.a't.8rid>agConstraints; import java.a't.0nsets; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java.a't.event.Foc"sEvent; import java.a't.event.Foc"sListener; import java.a't.event.DeEvent; import java.a't.event.DeListener; import java."til.Date; import java."til.0terator; import java."til.Set; import javax.s'ing.C>"tton; import javax.s'ing.CLabel; import javax.s'ing.C4anel; import javax.s'ing.C%extField; import org.hibernate.Session; import org.hibernate.%ransaction; import de.hft.carrental.database.SessionManager; import de.hft.carrental.do&ain.>oo)ing; import de.hft.carrental.do&ain.>ranch!ddress; import de.hft.carrental."i.&ain.%ableSection; import de.hft.carrental."i."til.8rid>agFtil; #$$ $ %his section belongs to the *:lin) C"rrent>oo)ings4age/. 0t sho's a table $ 'ith all the infor&ation relevant to the "serUs c"rrent boo)ings. $ $ @author !lexander (eic)&ann $# public final class C"rrent>oo)ings%ableSection extends %ableSection implements !ctionListener * private static final long serialVersionUID + PIQQHSQJQPN@@PQQSNNL; private static final String AC_CANCEL + .Cancel.; private static final intKL COLUMN_WIDT%S + new intKL * AA5 PA5 PA5 NI5 QI5 QI5 HPI /; private static final StringKL COLUMN_NAMES + new StringKL * .>oo)ing ;r..5 .>oo)ing Date.5 .Bet"rn Date.5 .Car %pe.5 .Begistration ;"&ber.5 .!genc.5 .Location. /; private C%extField cancelField; #$$ $ @param c"rrent>oo)ings4age $ %he *:lin) C"rrent>oo)ings4age/ this section belongs to. $# protected C"rrent>oo)ings%ableSection, C"rrent>oo)ings4age c"rrent>oo)ings4age- * super,c"rrent>oo)ings4age5 .C"rrent >oo)ings.5 COLUMN_NAMES5 COLUMN_WIDT%S-; / :3verride protected void refresh,- * clear%able,-; fill%able(ithData,-; / :3verride protected void beforeCreate%able,- * C4anel cancel4anel + new C4anel,-; cancel4anel.setLao"t,new Flo'Lao"t,--; CLabel cancelLabel + new CLabel,.Cancel >oo)ing7 .-; cancelLabel.setFont,new Font,.!rial.5 Font.$OLD5 HH--; cancel4anel.add,cancelLabel-; cancelField + new C%extField,HI-; cancelField.set%ext,.>oo)ing ;r..-; cancelField.addFoc"sListener,new Foc"sListener,- * :3verride public void foc"s8ained,Foc"sEvent e- * cancelField.set%ext,..-; / :3verride public void foc"sLost,Foc"sEvent e- * if ,cancelField.get%ext,-.length,- ++ I- * cancelField.set%ext,.>oo)ing ;r..-; / / /-; cancelField.addDeListener,new DeListener,- * :3verride public void )e4ressed,DeEvent e- * ## ;othing to do. / :3verride public void )eBeleased,DeEvent e- * if ,e.getDeCode,- ++ DeEvent.V)_ENTER- * cancel>oo)ing,-; / / :3verride public void )e%ped,DeEvent e- * ## ;othing to do. / /-; cancel4anel.add,cancelField-; C>"tton cancel>"tton + new C>"tton,.Cancel2.-; cancel>"tton.add!ctionListener,this-; cancel>"tton.set!ctionCo&&and,AC_CANCEL-; cancel4anel.add,cancel>"tton-; add,cancel4anel5 8rid>agFtil.create"ri#$agConstraints,I5 I5 H5 I5 8rid>agConstraints.$OT%5 new 0nsets,I5 I5 I5 I-5 8rid>agConstraints.&IRST_LINE_START5 I5 I--; / private void fill%able(ithData,- * 0terator=>oo)ing? it + getLogged0nFser,-.get>oo)ings,-.iterator,-; for ,int i + I; it.has;ext,-; iVV- * 3bjectKL ro'Data + new 3bjectKOL; >oo)ing boo)ing + it.next,-; ro'DataKIL + boo)ing.get>oo)ing;"&ber,-; Date boo)ingDate + boo)ing.get>oo)ingDate,-; String boo)ingDateString + boo)ingDate.toString,-; ro'DataKHL + boo)ingDateString.s"bstring,I5 boo)ingDateString .index3f,. .--; Date ret"rnDate + boo)ing.getBet"rnDate,-; String ret"rnDateString + ret"rnDate.toString,-; ro'DataKSL + ret"rnDateString.s"bstring,I5 ret"rnDateString .index3f,. .--; ro'DataKJL + boo)ing.getCar,-.getCar%pe,-.get;a&e,-; ro'DataK@L + boo)ing.getCar,-.getBegistration;"&ber,-; ro'DataKAL + boo)ing.get!genc,-.get;a&e,-; >ranch!ddress branch!ddress + boo)ing.getCar,-.get>ranch,- .get>ranch!ddress,-; ro'DataKPL + branch!ddress.get4ostalCode,- V . . V branch!ddress.getCit;a&e,- V .5 . V branch!ddress.getStreet;a&e,- V . . V branch!ddress.getStreet;"&ber,-; addDataBo',ro'Data-; / / :3verride public void action4erfor&ed,!ctionEvent e- * String co&&and + e.get!ctionCo&&and,-; if ,co&&and.eq"als,AC_CANCEL-- * cancel>oo)ing,-; / / private void cancel>oo)ing,- * String nr%oCancel + cancelField.get%ext,-; for ,Character c 7 nr%oCancel.toChar!rra,-- * if ,2,Character.isDigit,c--- * return; / / 0nteger boo)ing;"&ber + 0nteger.+aleOf,nr%oCancel-; >oo)ing toDelete + null; Set=>oo)ing? boo)ings + getLogged0nFser,-.get>oo)ings,-; for ,>oo)ing boo)ing 7 boo)ings- * if ,boo)ing.get>oo)ing;"&ber,-.eq"als,boo)ing;"&ber-- * toDelete + boo)ing; break; / / if ,toDelete ++ null- * return; / boo)ings.re&ove,toDelete-; Session session + SessionManager.getInstance,-.openSession,-; %ransaction transaction + session.begin%ransaction,-; session.delete,toDelete-; transaction.co&&it,-; refresh,-; / / 7.3.26 ars+age.5ava package de.hft.carrental."i.&ain.cars; import de.hft.carrental."i.&ain.Main(indo'; import de.hft.carrental."i.&ain.Main(indo'4age; ## TODO BM5 4S7 Class et to be i&ple&ented. public final class Cars4age extends Main(indo'4age * private static final long serialVersionUID + N@HPJQONAAOOHOAQAIJL; public Cars4age,Main(indo' &ain(indo'- * super,&ain(indo'5 S5 H-; / :3verride protected void addSections,- * addSection,new SearchCarsSection,this--; addSection,new Cars%ableSection,this--; / / 7.3.21 arsTa.leSe/tion.5ava package de.hft.carrental."i.&ain.cars; import de.hft.carrental."i.&ain.Main(indo'4age; import de.hft.carrental."i.&ain.%ableSection; public final class Cars%ableSection extends %ableSection * private static final long serialVersionUID + PQSJI@PAI@@@QHHJPHNL; protected Cars%ableSection,Main(indo'4age page- * super,page5 .0;SEB% %0%LE.5 new StringKL */5 new intKL */-; / :3verride protected void refresh,- * ## TODO BM5 4S7 Method et to be i&ple&ented. / / 7.3.22 Sear/4arsSe/tion.5ava package de.hft.carrental."i.&ain.cars; import javax.s'ing.C>"tton; import javax.s'ing.CLabel; import javax.s'ing.C%extField; import de.hft.carrental."i.&ain.Main(indo'4ageSection; ##TODO BM5 4S7 Class et to be i&ple&ented. public final class SearchCarsSection extends Main(indo'4ageSection * private static final long serial9ersionF0D + TNPIOS@@OJO@@J@OP@NL; ## Labels for search page private final CLabel Car;a&e + new CLabel,.Car ;a&e7.-; private final CLabel 4ic)"p + new CLabel,.4ic) "p Location7.-; private final CLabel Fro&Date + new CLabel,.Fro&7.-; private final CLabel %oDate + new CLabel,.%o7.-; ## %extfields for search page private final C%extField Car;a&eField + new C%extField,-; private final C%extField 4ic)"pField + new C%extField,-; private final C%extField Fro&DateField + new C%extField,-; private final C%extField %oDateField + new C%extField,-; ## >"tton for search private final C>"tton search>"tton + new C>"tton,.Search.-; protected SearchCarsSection,Cars4age cars4age- * super,cars4age5 .Search Cars.-; / :3verride protected void refresh,- * ## Car;a&eField.set%ext,"ser.getCar;a&e,--; ## 4ic)"pField.set%ext,"ser.get4ic)"p,--; ## Fro&DateField.set%ext,"ser.getFro&Date,--; ## %oDateField.set%ext,"ser.get%oDate,--; ## ## DateFor&at df + DateFor&at.get0nstance,-; ## Fro&DateField.set%ext,df.for&at,"ser.getFro&Date,---; ## %oDateField.set%ext,df.for&at,"ser.get%oDate,---; ## search>"tton.setEnabled,false-; / private void addListeners,- * ## search>"tton.add!ctionListener,this-; / ## :3verride ## p"blic void action4erfor&ed,!ctionEvent e- * ## search>"tton.setEnabled,%r"e-; ## Cars%ableSection,-; ## / / 7.3.23 AddAddress(ialog.5ava package de.hft.carrental."i.&ain.personal; import java.a't.%ool)it; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java.a't.event.DeEvent; import java.a't.event.DeListener; import javax.s'ing.C>"tton; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental.do&ain.C"sto&er!ddress; public class !dd!ddressDialog extends >ase!ddressDialog implements DeListener5 !ctionListener * private static final long serialVersionUID + HL; private C>"tton add>"tton + new C>"tton,.!dd.-; private C>"tton close>"tton + new C>"tton,.Close.-; private boolean address!dded + false; private C"sto&er c"sto&er; private static final String AC_ADD_ADDRESS + .addEaddress.; private static final String AC_CLOSE_DIALO" + .closeEdialog.; public !dd!ddressDialog,C"sto&er c"sto&er- * this.c"sto&er + c"sto&er; set%itle,.!dd ne' address7.-; add>"ttons,-; addListeners,-; pac),-; int posW + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.'idth # S T get(idth,- # S; int pos< + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.height # S T getGeight,- # S; setLocation,posW5 pos<-; add>"tton.setEnabled,false-; set9isible,true-; / public C"sto&er!ddress get;e'C"sto&er!ddress,- * C"sto&er!ddress ne'!ddress + new C"sto&er!ddress,-; ne'!ddress.setStreet;a&e,streetField.get%ext,--; ne'!ddress.setStreet;"&ber,n"&berField.get%ext,--; ne'!ddress.set4ostalCode,postalField.get%ext,--; ne'!ddress.setCit;a&e,citField.get%ext,--; ne'!ddress.setCo"ntr,co"ntrField.get%ext,--; ne'!ddress.set4hone;"&ber,phoneField.get%ext,--; ne'!ddress.setC"sto&er,c"sto&er-; return ne'!ddress; / public boolean address!dded,- * return address!dded; / private void add>"ttons,- * add,add>"tton5 .align left.-; add,close>"tton5 .align right.-; / private void addListeners,- * add>"tton.set!ctionCo&&and,AC_ADD_ADDRESS-; add>"tton.add!ctionListener,this-; close>"tton.set!ctionCo&&and,AC_CLOSE_DIALO"-; close>"tton.add!ctionListener,this-; streetField.addDeListener,this-; n"&berField.addDeListener,this-; postalField.addDeListener,this-; citField.addDeListener,this-; co"ntrField.addDeListener,this-; phoneField.addDeListener,this-; / :3verride public void )e4ressed,DeEvent e- * #$ nothing to do $# / :3verride public void )eBeleased,DeEvent e- * #$ nothing to do $# / :3verride public void )e%ped,DeEvent e- * if ,allFieldsFilled,-- * add>"tton.setEnabled,true-; / else * add>"tton.setEnabled,false-; / / :3verride public void action4erfor&ed,!ctionEvent e- * String actionCo&&and + e.get!ctionCo&&and,-; if ,actionCo&&and.eq"als,AC_ADD_ADDRESS-- * address!dded + true; set9isible,false-; / else if ,actionCo&&and.eq"als,AC_CLOSE_DIALO"-- * set9isible,false-; / / / 7.3.24 AddressesSe/tion.5ava package de.hft.carrental."i.&ain.personal; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java."til.GashSet; import java."til.Set; import javax.s'ing.C>"tton; import org.hibernate.Session; import org.hibernate.%ransaction; import de.hft.carrental.database.SessionManager; import de.hft.carrental.do&ain.C"sto&er!ddress; import de.hft.carrental."i.&ain.Main(indo'4age; import de.hft.carrental."i.&ain.%ableSection; public final class !ddressesSection extends %ableSection implements !ctionListener * private static final String AC_ADD_ADDRESS + .addEaddress.; private static final String AC_EDIT_ADDRESS + .editEaddress.; private static final long serialVersionUID + THPSONQ@OI@NQOJ@NNA@L; private static final StringKL COLUMN_NAMES + * .Street.5 .;"&ber.5 .4ostal code.5 .Cit.5 .Co"ntr.5 .4hone n"&ber. /; private static final intKL COLUMN_WIDT%S + new intKL * HHI5 HII5 HII5 HJI5 H@I5 HAI /; private C>"tton add + new C>"tton,.!dd.-; private C>"tton edit + new C>"tton,.Edit.-; protected !ddressesSection,Main(indo'4age page- * super,page5 .!ddress,es-.5 COLUMN_NAMES5 COLUMN_WIDT%S-; add,add-; add,edit-; addListeners,-; / :3verride protected void refresh,- * clear%able,-; fill%able,-; / private void addListeners,- * add.set!ctionCo&&and,AC_ADD_ADDRESS-; add.add!ctionListener,this-; edit.set!ctionCo&&and,AC_EDIT_ADDRESS-; edit.add!ctionListener,this-; / private void fill%able,- * for ,C"sto&er!ddress address 7 getLogged0nFser,-.getC"sto&er!ddresses,-- * 3bjectKL ro' + new 3bjectKPL; ro'KIL + address.getStreet;a&e,-; ro'KHL + address.getStreet;"&ber,-; ro'KSL + address.get4ostalCode,-; ro'KJL + address.getCit;a&e,-; ro'K@L + address.getCo"ntr,-; ro'KAL + address.get4hone;"&ber,-; addDataBo',ro'-; / / :3verride public void action4erfor&ed,!ctionEvent e- * String actionCo&&and + e.get!ctionCo&&and,-; if ,actionCo&&and.eq"als,AC_ADD_ADDRESS-- * !dd!ddressDialog ad + new !dd!ddressDialog,getLogged0nFser,--; if ,ad.address!dded,-- * Session session + SessionManager.getInstance,-.openSession,-; %ransaction transaction + session.begin%ransaction,-; getLogged0nFser,-.getC"sto&er!ddresses,-.add, ad.get;e'C"sto&er!ddress,--; session.save,getLogged0nFser,--; transaction.co&&it,-; refresh,-; / / else if ,actionCo&&and.eq"als,AC_EDIT_ADDRESS-- * Edit!ddressDialog ed + new Edit!ddressDialog,getLogged0nFser,- .getC"sto&er!ddresses,--; if ,ed.get!ddresses,-.siRe,- ++ getLogged0nFser,- .getC"sto&er!ddresses,-.siRe,-- * Session session + SessionManager.getInstance,-.openSession,-; %ransaction transaction + session.begin%ransaction,-; getLogged0nFser,-.setC"sto&er!ddresses,ed.get!ddresses,--; transaction.co&&it,-; / else * Session session + SessionManager.getInstance,-.openSession,-; %ransaction transaction + session.begin%ransaction,-; Set=C"sto&er!ddress? c"sto&er!ddresses + new GashSet=C"sto&er!ddress?, getLogged0nFser,-.getC"sto&er!ddresses,--; c"sto&er!ddresses.re&ove!ll,ed.get!ddresses,--; C"sto&er!ddressKL arra + c"sto&er!ddresses .to!rra,new C"sto&er!ddressKHL-; C"sto&er!ddress address + arraKIL; getLogged0nFser,-.getC"sto&er!ddresses,-.re&ove,address-; transaction.co&&it,-; / refresh,-; / / / 7.3.2) "aseAddress(ialog.5ava package de.hft.carrental."i.&ain.personal; import javax.s'ing.CDialog; import javax.s'ing.CLabel; import javax.s'ing.C%extField; import net.&iginfoco&.s'ing.MigLao"t; public abstract class >ase!ddressDialog extends CDialog * private static final long serialVersionUID + HL; private CLabel streetLabel + new CLabel,.Street7.-; private CLabel n"&berLabel + new CLabel,.Street ;"&ber7.-; private CLabel postalLabel + new CLabel,.4ostal code7.-; private CLabel citLabel + new CLabel,.Cit7.-; private CLabel co"ntrLabel + new CLabel,.Co"ntr7.-; private CLabel phoneLabel + new CLabel,.4hone n"&ber.-; protected C%extField streetField + new C%extField,@A-; protected C%extField n"&berField + new C%extField,A-; protected C%extField postalField + new C%extField,HI-; protected C%extField citField + new C%extField,@A-; protected C%extField co"ntrField + new C%extField,@A-; protected C%extField phoneField + new C%extField,@A-; protected >ase!ddressDialog,- * setModalit%pe,Modalit%pe.APPLICATION_MODAL-; b"ildLao"t,-; / private void b"ildLao"t,- * setLao"t,new MigLao"t,..5 .KLKgro'L.--; add,streetLabel-; add,streetField5 .gro'x5 'rap.-; add,n"&berLabel-; add,n"&berField5 .gro'x5 'rap.-; add,postalLabel-; add,postalField5 .gro'x5 'rap.-; add,citLabel-; add,citField5 .gro'x5 'rap.-; add,co"ntrLabel-; add,co"ntrField5 .gro'x5 'rap.-; add,phoneLabel-; add,phoneField5 .gro'x5 'rap.-; / protected boolean allFieldsFilled,- * if ,,streetField.get%ext,-.length,- ++ I- 11 ,n"&berField.get%ext,-.length,- ++ I- 11 ,postalField.get%ext,-.length,- ++ I- 11 ,citField.get%ext,-.length,- ++ I- 11 ,co"ntrField.get%ext,-.length,- ++ I- 11 ,phoneField.get%ext,-.length,- ++ I-- * return false; / return true; / / 7.3.2* EditAddress(ialog.5ava package de.hft.carrental."i.&ain.personal; import java.a't.%ool)it; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java.a't.event.DeEvent; import java.a't.event.DeListener; import java."til.!rraList; import java."til.GashSet; import java."til.List; import java."til.Set; import javax.s'ing.C>"tton; import de.hft.carrental.do&ain.C"sto&er!ddress; public class Edit!ddressDialog extends >ase!ddressDialog implements !ctionListener5 DeListener * private static final long serialVersionUID + HL; private C>"tton close + new C>"tton,.Close.-; private C>"tton previo"s + new C>"tton,.4revio"s.-; private C>"tton next + new C>"tton,.;ext.-; private C>"tton save + new C>"tton,.Save.-; private C>"tton delete + new C>"tton,.Delete.-; private static final String AC_CLOSE_DIALO" + .closeEdialog.; private static final String AC_PREVIOUS_ADDRESS + .previo"sEaddress.; private static final String AC_NEXT_ADDRESS + .nextEaddress.; private static final String AC_SAVE_C%AN"ES + .saveEchanges.; private static final String AC_DELETE_ADDRESS + .deleteEaddress.; private List=C"sto&er!ddress? addressList + new !rraList=C"sto&er!ddress?,-; private int pos + I; public Edit!ddressDialog,Set=C"sto&er!ddress? addresses- * addressList.add!ll,addresses-; set%itle,.Edit address details7.-; add>"ttons,-; addListeners,-; fillFields,pos-; if ,addressList.siRe,- ++ H- * delete.setEnabled,false-; / pac),-; int posW + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.'idth # S T get(idth,- # S; int pos< + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.height # S T getGeight,- # S; setLocation,posW5 pos<-; save.setEnabled,false-; set9isible,true-; / public Set=C"sto&er!ddress? get!ddresses,- * Set=C"sto&er!ddress? t&p + new GashSet=C"sto&er!ddress?,-; t&p.add!ll,addressList-; return t&p; / private void add>"ttons,- * add,previo"s5 .split S5 align left.-; add,next-; add,save5 .split J5 align right.-; add,delete-; add,close-; / private void fillFields,int pos- * streetField.set%ext,addressList.get,pos-.getStreet;a&e,--; n"&berField.set%ext,addressList.get,pos-.getStreet;"&ber,--; postalField.set%ext,addressList.get,pos-.get4ostalCode,--; citField.set%ext,addressList.get,pos-.getCit;a&e,--; co"ntrField.set%ext,addressList.get,pos-.getCo"ntr,--; phoneField.set%ext,addressList.get,pos-.get4hone;"&ber,--; chec)4revio"s;ext,-; / private void chec)4revio"s;ext,- * if ,pos T H = I- * previo"s.setEnabled,false-; / else * previo"s.setEnabled,true-; / if ,pos V H ++ addressList.siRe,-- * next.setEnabled,false-; / else * next.setEnabled,true-; / / private void addListeners,- * close.set!ctionCo&&and,AC_CLOSE_DIALO"-; close.add!ctionListener,this-; previo"s.set!ctionCo&&and,AC_PREVIOUS_ADDRESS-; previo"s.add!ctionListener,this-; next.set!ctionCo&&and,AC_NEXT_ADDRESS-; next.add!ctionListener,this-; save.set!ctionCo&&and,AC_SAVE_C%AN"ES-; save.add!ctionListener,this-; delete.set!ctionCo&&and,AC_DELETE_ADDRESS-; delete.add!ctionListener,this-; streetField.addDeListener,this-; n"&berField.addDeListener,this-; postalField.addDeListener,this-; citField.addDeListener,this-; co"ntrField.addDeListener,this-; phoneField.addDeListener,this-; / :3verride public void action4erfor&ed,!ctionEvent e- * String actionCo&&and + e.get!ctionCo&&and,-; if ,actionCo&&and.eq"als,AC_CLOSE_DIALO"-- * set9isible,false-; / else if ,actionCo&&and.eq"als,AC_DELETE_ADDRESS-- * addressList.re&ove,pos-; set9isible,false-; / else if ,actionCo&&and.eq"als,AC_NEXT_ADDRESS-- * fillFields,VVpos-; / else if ,actionCo&&and.eq"als,AC_PREVIOUS_ADDRESS-- * fillFields,TTpos-; / else if ,actionCo&&and.eq"als,AC_SAVE_C%AN"ES-- * addressList.get,pos-.setStreet;a&e,streetField.get%ext,--; addressList.get,pos-.setStreet;"&ber,n"&berField.get%ext,--; addressList.get,pos-.set4ostalCode,postalField.get%ext,--; addressList.get,pos-.setCit;a&e,citField.get%ext,--; addressList.get,pos-.setCo"ntr,co"ntrField.get%ext,--; addressList.get,pos-.set4hone;"&ber,phoneField.get%ext,--; save.setEnabled,false-; / / :3verride public void )e4ressed,DeEvent e- * #$ nothing to do $# / :3verride public void )eBeleased,DeEvent e- * #$ nothing to do $# / :3verride public void )e%ped,DeEvent e- * if ,allFieldsFilled,-- * save.setEnabled,true-; / else * save.setEnabled,false-; / / / 7.3.27 General%n0oSe/tion.5ava package de.hft.carrental."i.&ain.personal; import java.a't.0&age; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java.a't.event.DeEvent; import java.a't.event.DeListener; import java.text.DateFor&at; import javax.s'ing.0&age0con; import javax.s'ing.C>"tton; import javax.s'ing.CLabel; import javax.s'ing.C%extField; import net.&iginfoco&.s'ing.MigLao"t; import org.hibernate.Session; import org.hibernate.%ransaction; import de.hft.carrental.database.SessionManager; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental."i.&ain.Main(indo'4age; import de.hft.carrental."i.&ain.Main(indo'4ageSection; public final class 8eneral0nfoSection extends Main(indo'4ageSection implements !ctionListener5 DeListener * private static final long serial9ersionF0D + SQSHN@HPNJN@NH@QNNHL; private final CLabel loginLabel + new CLabel,.Login na&e7.-; private final CLabel registerDateLabel + new CLabel,.Begister date7.-; private final CLabel e&ailLabel + new CLabel,.E&ail7.-; private final CLabel first;a&eLabel + new CLabel,.First na&e7.-; private final CLabel s"r;a&eLabel + new CLabel,.S"rna&e7.-; private final CLabel birthDateLabel + new CLabel,.Date of birth7.-; private final CLabel co&pan;a&eLabel + new CLabel,.Co&pan na&e7 .-; private final C%extField loginField + new C%extField,-; private final C%extField registerField + new C%extField,-; private final C%extField e&ailField + new C%extField,-; private final C%extField first;a&eField + new C%extField,-; private final C%extField s"r;a&eField + new C%extField,-; private final C%extField birthDateField + new C%extField,-; private final C%extField co&pan;a&eField + new C%extField,-; private final C>"tton saveChanges>"tton + new C>"tton,.Save changes.-; private static final String !CES!9EECG!;8ES + .saveEchanges.; private final C"sto&er "ser; protected 8eneral0nfoSection,Main(indo'4age page- * super,page5 .4ersonal details.-; setLao"t,new MigLao"t,..5 .KLKgro'LKLKgro'L.5 ..--; "ser + getLogged0nFser,-; if ,"ser.getC"sto&er%pe,-.eq"als,C"sto&er.CFS%3MEBE%<4EE4B09!%E-- * create4rivateFserContents,-; / else * createCo&panFserContents,-; / addListeners,-; 0&age i&age + new 0&age0con,.i&ages#save.png.-.get0&age,-; i&age + i&age.getScaled0nstance,SI5 SI5 0&age.SC!LEESM33%G-; saveChanges>"tton.set0con,new 0&age0con,i&age--; / :3verride protected void refresh,- * loginField.set%ext,"ser.getLogin;a&e,--; first;a&eField.set%ext,"ser.getFirst;a&e,--; s"r;a&eField.set%ext,"ser.getS"rna&e,--; co&pan;a&eField.set%ext,"ser.getCo&pan;a&e,--; e&ailField.set%ext,"ser.getE&ail,--; DateFor&at df + DateFor&at.get0nstance,-; registerField.set%ext,df.for&at,"ser.getBegisterDate,---; birthDateField.set%ext,df.for&at,"ser.getDate3f>irth,---; saveChanges>"tton.setEnabled,false-; / private void create4rivateFserContents,- * add,loginLabel-; add,loginField5 .gro'x.-; loginField.setEditable,false-; add,first;a&eLabel-; add,first;a&eField5 .gro'x5 'rap.-; first;a&eField.setEditable,false-; add,registerDateLabel-; add,registerField5 .gro'x.-; registerField.setEditable,false-; add,s"r;a&eLabel-; add,s"r;a&eField5 .gro'x5 'rap.-; s"r;a&eField.setEditable,false-; add,e&ailLabel-; add,e&ailField5 .gro'x.-; add,birthDateLabel-; add,birthDateField5 .gro'x5 'rap.-; birthDateField.setEditable,false-; add,saveChanges>"tton5 .span @5 align right.-; / private void createCo&panFserContents,- * add,loginLabel5 .span H J5 gro'x.-; add,loginField-; loginField.setEditable,false-; add,registerDateLabel-; add,registerField5 .gro'x.-; registerField.setEditable,false-; add,e&ailLabel-; add,e&ailField5 .gro'x5 'rap.-; add,co&pan;a&eLabel-; add,co&pan;a&eField5 .gro'x.-; co&pan;a&eField.setEditable,false-; / private void addListeners,- * saveChanges>"tton.set!ctionCo&&and,!CES!9EECG!;8ES-; saveChanges>"tton.add!ctionListener,this-; e&ailField.addDeListener,this-; / :3verride public void action4erfor&ed,!ctionEvent e- * String actionCo&&and + e.get!ctionCo&&and,-; if ,actionCo&&and.eq"als,!CES!9EECG!;8ES-- * Session session + SessionManager.get0nstance,-.openSession,-; %ransaction transaction + session.begin%ransaction,-; "ser.setE&ail,e&ailField.get%ext,--; session.save,"ser-; transaction.co&&it,-; saveChanges>"tton.setEnabled,false-; / / :3verride public void )e4ressed,DeEvent e- * #$ nothing to do $# / :3verride public void )eBeleased,DeEvent e- * #$ nothing to do $# / :3verride public void )e%ped,DeEvent e- * saveChanges>"tton.setEnabled,true-; / / 7.3.2, +ersonal+age.5ava package de.hft.carrental."i.&ain.personal; import de.hft.carrental."i.&ain.Main(indo'; import de.hft.carrental."i.&ain.Main(indo'4age; public final class 4ersonal4age extends Main(indo'4age * private static final long serialVersionUID + TASHANOP@JIPIJH@SPH@L; public 4ersonal4age,Main(indo' &ain(indo'- * super,&ain(indo'5 S5 H-; / :3verride protected void addSections,- * addSection,new 8eneral0nfoSection,this--; addSection,new !ddressesSection,this--; / / 7.3.2- Splas47indo8.5ava package de.hft.carrental."i.splash; import de.hft.carrental."i.(indo'; import de.hft.carrental."i.splash.login.Login4age; #$$ $ %he splash 'indo' is the application 'indo' that is sho'n right after the $ progra& starts. >asicall it allo's the "ser to login. $ $ @author !lexander (eic)&ann $# public final class Splash(indo' extends (indo' * private static final long serialVersionUID + TASHIONQNJAS@PIPOPN@L; private static final int MINIMUM_WIDT% + JII; private static final int MINIMUM_%EI"%T + HSI; private Login4age login4age; public Splash(indo',- * super,-; login4age + new Login4age,this-; sho'Login4age,-; set9isible,true-; / public void sho'Login4age,- * s'itch4age%o,login4age-; / :3verride protected int getMinGeight,- * return MINIMUM_%EI"%T; / :3verride protected int getMin(idth,- * return MINIMUM_WIDT%; / / 7.3.36 Login+age.5ava package de.hft.carrental."i.splash.login; import de.hft.carrental."i.(indo'4age; import de.hft.carrental."i.splash.Splash(indo'; #$$ $ %his page is "sed b the *:lin) Splash(indo'/ to enable the "ser to login. $ $ @author !lexander (eic)&ann $# public final class Login4age extends (indo'4age * private static final long serialVersionUID + TSAQIPHQSNAQSHQAOPJJL; #$$ $ @param splash(indo' $ %he *:lin) Splash(indo'/ this page belongs to. $# public Login4age,Splash(indo' splash(indo'- * super,splash(indo'5 H5 H-; / :3verride protected void addSections,- * addSection,new LoginSection,this--; / / 7.3.31 LoginSe/tion.5ava package de.hft.carrental."i.splash.login; import java.a't.%ool)it; import java.a't.Dialog.Modalit%pe; import java.a't.event.!ctionEvent; import java.a't.event.!ctionListener; import java.a't.event.DeEvent; import java.a't.event.DeListener; import javax.s'ing.0&age0con; import javax.s'ing.C>"tton; import javax.s'ing.CDialog; import javax.s'ing.CLabel; import javax.s'ing.C%extField; import net.&iginfoco&.s'ing.MigLao"t; import org.hibernate.Session; import org.hibernate.%ransaction; import de.hft.carrental.database.SessionManager; import de.hft.carrental.do&ain.C"sto&er; import de.hft.carrental."i.(indo'4ageSection; import de.hft.carrental."i.&ain.Main(indo'; #$$ $ %his section contains a text field allo'ing the "ser to tpe in his login $ na&e. 0t also sho's a b"tton that allo's the "ser to event"all perfor& the $ login. $ $ @author !lexander (eic)&ann $# public final class LoginSection extends (indo'4ageSection implements !ctionListener * private static final long serialVersionUID + HIP@ASHHHQOJAPA@@JOL; private static final String TITLE + .Login.; #$$ !ction co&&and that is triggered "pon activation of the login b"tton. $# private static final String AC_LO"IN + .login.; private C%extField login%extField; #$$ $ @param login4age $ %he *:lin) Login4age/ this section belongs to. $# public LoginSection,Login4age login4age- * super,login4age5 TITLE-; createContents,-; / private void createContents,- * login%extField + new C%extField,HN-; login%extField.req"estFoc"s0n(indo',-; login%extField.addDeListener,new DeListener,- * :3verride public void )e4ressed,DeEvent e- * ## ;othing to do. / :3verride public void )eBeleased,DeEvent e- * if ,e.getDeCode,- ++ DeEvent.V)_ENTER- * perfor&Login,-; / / :3verride public void )e%ped,DeEvent e- * ## ;othing to do. / /-; add,login%extField-; C>"tton login>"tton + new C>"tton,.Login2.-; login>"tton.set!ctionCo&&and,AC_LO"IN-; login>"tton.add!ctionListener,this-; login>"tton.set0con,new 0&age0con,.i&ages#login.png.--; add,login>"tton-; / :3verride public void action4erfor&ed,!ctionEvent e- * String co&&and + e.get!ctionCo&&and,-; if ,co&&and.eq"als,AC_LO"IN-- * perfor&Login,-; / / #$$ $ 4erfor&s the login. Sho's the &ain 'indo' on s"ccess and displas an $ appropriate error &essage on fail"re. $# private void perfor&Login,- * C"sto&er "ser + null; String "serna&e + login%extField.get%ext,-; Session session + SessionManager.getInstance,-.openSession,-; if ,session ++ null- * sho'ErrorDialog,.;o connection to database..-; return; / %ransaction tr + session.begin%ransaction,-; String q"er + .fro& C"sto&er 'here login;a&e + U. V "serna&e V .U.; 3bject res"lt + session.createQ"er,q"er-."niq"eBes"lt,-; if ,res"lt ++ null- * sho'ErrorDialog,.Fserna&e not fo"nd..-; return; / "ser + ,C"sto&er- res"lt; tr.co&&it,-; get(indo'4age,-.get(indo',-.set9isible,false-; new Main(indo',"ser-; / :3verride protected void refresh,- * ## ;othing to do. / private void sho'ErrorDialog,String error%ext- * final CDialog errorDialog + new CDialog,-; errorDialog.set%itle,.Error.-; MigLao"t lao"t + new MigLao"t,..5 .KcenterL.5 .KcenterL.-; errorDialog.setLao"t,lao"t-; errorDialog.setModalit%pe,Modalit%pe.APPLICATION_MODAL-; CLabel errorLabel + new CLabel,error%ext-; errorDialog.add,errorLabel5 .spanx5 'rap.-; final C>"tton close>"tton + new C>"tton,.3).-; close>"tton.add!ctionListener,new !ctionListener,- * :3verride public void action4erfor&ed,!ctionEvent e- * errorDialog.set9isible,false-; / /-; errorDialog.add,close>"tton-; errorDialog.pac),-; errorDialog.setBesiRable,false-; int posW + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.'idth # S; int pos< + %ool)it.getDefaltTool!it,-.getScreenSiRe,-.height # S; errorDialog.setLocation,posW5 pos<-; errorDialog.set9isible,true-; login%extField.set%ext,..-; login%extField.req"estFoc"s,-; / / 7.3.32 Grid"agUtil.5ava package de.hft.carrental."i."til; import java.a't.8rid>agConstraints; import java.a't.0nsets; #$$ $ $ $ @author !lexander (eic)&ann $# public final class 8rid>agFtil * #$$ $ Convenience ðod provided to s"bclasses allo'ing for rapid $ *:lin) 8rid>agConstraints/ creation. $ $ @param gridx $ %he ReroTbased xTposition of the co&ponent inside the grid. $ @param grid $ %he ReroTbased Tposition of the co&ponent inside the grid. $ @param 'eightx $ 9al"e bet'een I.I and H.I indicating ho' &"ch priorit the $ co&ponent has 'hen it co&es to filling "p e&pt horiRontal $ space. $ @param 'eight $ 9al"e bet'een I.I and H.I indicating ho' &"ch priorit the $ co&ponent has 'hen it co&es to filling "p e&pt vertical $ space. $ @param fill $ 0ndicates 'hether additional space sho"ld be "sed b the $ co&ponent ,both5 horiRontal5 vertical or none-. $ @param insets $ Specifies the external padding of the co&ponent. $ @param anchor $ Specifies 'here to anchor the co&ponent. $ @param ipadx $ Specifies the internal padding in x direction. $ @param ipad $ Specifies the internal padding in direction. $# public static 8rid>agConstraints create8rid>agConstraints,int gridx5 int grid5 int 'eightx5 int 'eight5 int fill5 0nsets insets5 int anchor5 int ipadx5 int ipad- * 8rid>agConstraints constraints + new 8rid>agConstraints,-; constraints.gridx + gridx; constraints.grid + grid; constraints.'eightx + 'eightx; constraints.'eight + 'eight; constraints.fill + fill; constraints.insets + insets; constraints.anchor + anchor; constraints.ipadx + ipadx; constraints.ipad + ipad; return constraints; / / 7.3.33 4i.ernate./0g.9ml =2D3C%<4E hibernateTconfig"ration 4F>L0C .T##Gibernate#Gibernate Config"ration D%D J.I##E;. .http7##hibernate.so"rceforge.net#hibernateTconfig"rationTJ.I.dtd.? =hibernateTconfig"ration? =sessionTfactor? =&apping class+.de.hft.carrental.do&ain.!genc. #? =&apping class+.de.hft.carrental.do&ain.>oo)ing. #? =&apping class+.de.hft.carrental.do&ain.>ranch. #? =&apping class+.de.hft.carrental.do&ain.>ranch!ddress. #? =&apping class+.de.hft.carrental.do&ain.Car. #? =&apping class+.de.hft.carrental.do&ain.Car%pe. #? =&apping class+.de.hft.carrental.do&ain.C"sto&er. #? =&apping class+.de.hft.carrental.do&ain.C"sto&er!ddress. #? =#sessionTfactor? =#hibernateTconfig"ration? 7.3.34 4i.ernate.properties hibernate.dialectorg.hibernate.dialect.MSQL0nnoD>Dialect hibernate.connection.driverEclass co&.&sql.jdbc.Driver hibernate.connection."rl jdbc7&sql7###carrental hibernate.connection."serna&e root hibernate.connection.pass'ord root hibernate.sho'Esql tr"e hibernate.cache.providerEclass org.hibernate.cache.GashtableCache4rovider 6.- 7oole Code So%rce Repository .R0 https"11co!e*google*com1p1carrentalhft1