: LibrarianTerminal : Librarian
: TitleControl
: ItemControl
: libItemProxy
: SubCommunicationSystem
1: requestTitleInfo(isbn ) 1.1: create( ) 1.2: requestTitleInfo(isbn)
1.2.1: [self.title=Null] titleNotExist(isbn) 1.2.1.1: titleNotExist( )
Refer to Find Title Use Case
1.2.2: [self.title!=Null] displayTitleInfo(title) 1.2.2.1: displayTitleInfo( )
2: requestAddTitle(isbn) Refer to Add Title Use Case
2.1: titleAdded( )
3: addItem(isbn) 3.1: create( )
3.2: addItem(title) 3.2.1: item:=create(title) 3.2.1.1: item:=load(title)
3.2.2: displayItemId(item )
3.2.2.1: displayItem Id(item.*)
4: exit()
4.1: destroy( ) 4.1.1: destroy()
4.2: destroy( )
Figure 5: Add Item Collaboration Diagram1
1
The objects in the collaboration diagrams refer to the object proxies.
: LibrarianTerminal
: TitleControl
: libTitleProxy
: SubCommunicationSystem
: Librarian 1: requestAddTitle(isbn) 1.1: create( ) 1.2: requestAddTitle (isbn) 1.2.1: title:=create(isbn,bookName,author) 1.2.1.1: title:=load(isbn,bookName,author) 1.2.2: [self.title!=Null] titleExist(isbn)
1.2.2.1: titleExist(isbn)
1.2.2: [self.title=Null]titleAdded()
1.2.2.1: titleAdded( )
2: exit()
2.1: destroy( )
Figure 6: Add Title Collaboration Diagram
: LibrarianTerminal : Librarian
: UserControl
: libUserProxy
: SubCommunicationSystem
1: requestAddUser(name, address) 1.1: create( )
1.2: requestAddUser(name,address)
1.2.1: user:=create(name,address) 1.2.1.1: user:=load(name,address) 1.2.2: [self.user!=Null] userExist(name,address)
1.2.2.1: userExist(name,address)
1.2.2: [self.user=Null]userAdded( )
1.2.2.1: userAdded()
2: exit( )
2.1: destroy( )
Figure 7: Add User Collaboration Diagram
: LibrarianTerminal : Librarian
: UserControl
: TitleControl
: LoanControl
: ReservationControl
: libLoanCopyProxy
: SubCommunicationSystem
1: requestUserInfo(userId ) 1.1: create( )
Refer to Search User Use Case
1.2: requestUserInfo(userId)
1.2.1: [self.user=Null] userNotExist(userId) 1.2.1.1: userNotExist(userId) 1.2.2: [self.user!=Null] displayUserInfo(user, reservation[], loan[] )
1.2.2.1: *[i:= 1 .. user.reservation->size] displayUserInfo(userId, reservation[i].*) 1.2.2.2: *[i:= 1 .. user.loan->size] displayUserInfo(userId, loan[i].*) 1.2.2.3: displayUserInfo(user.*) Refer to Find Title Use Case
2: requestTitleInfo(isbn) 2.1: create( )
2.2: requestTitleInfo(isbn)
2.2.1: [self.title=Null] titleNotExist(isbn) 2.2.1.1: titleNotExist( ) 2.2.1: displayTitleInfo(title,item[])
2.2.1.1: *[i:= 1 .. title.item->size] displayTitleInfo(isbn,item[i].*)
3: [user.privilege=true and user.borrowPrivilege=true] requestAddLoan (userId,isbn,itemId) 3.1: create( ) 3.2: requestAddLoan (userId,isbn,itemId ) 3.2.1: [self.user.privileges=False]PrivilegeRevoked(user) 3.2.1.1: privilegeRevoked(userId,user.totalFine) 3.2.1: [self.referencecopy->exists(ref:ReferenceCopy|ref.itemId=item.itemId)] isReferenceCopy(item) 3.2.1.1: isReferenceCopy(item.itemId, item.title.bookName) 3.2.1: [self.user.loanCounter=library.user.loanLimit]countFull(user)
3.2.1.1: countFull(user.usrId, user.name ) 3.2.1: create( )
3.2.2: requestCheckReservation( ) Refer to Check Reservation Use Case 3.2.3: requestDenied( ) 3.2.3.1: requestDenied( ) 3.2.3.1.1: requestDenied( ) 3.2.3: requestPermitted( ) 3.2.3.1: requestPermitted( ) 3.2.3.1.1: requestPermitted( ) 3.2.3: requestAddLoan(userId,itemId) 3.2.3.1: requestAddLoan(userId,itemId) Refer to Remove Reservation Use Case 3.3: create( ) 3.2.3.2: updateLoanCopyStatus()
3.4: requestRemoveReservation(title)
4: exit( )
4.1: destroy( )
4.2: destroy()
4.3: destroy( ) 4.3.1: destroy()
4.4: destroy( )
Figure 8: Borrow Loancopy Collaboration Diagram
: LibrarianTerminal
: LoanControl
: ReservationControl
: libTitleProxy
: ReservationProxy
: libLoanCopyProxy
: SubCommunicationSystem
1: create( )
2: requestCheckReservation(userId,isbn) 2.1: title:=create(isbn) 2.1.1: title:=load(isbn)
2.2:reservation[]:=getReservation() 2.2.1: reservation[]:=getReservation()
2.2.2: *[i:=1..self.reservation->size] reservation[]:=create(reservation[i]) 2.3: item[]:=getItem() 2.3.1: item[]:=getItem()
2.3.2: *[i:=1..self.loancopy->size] loancopy[]:=create(loancopy[i])
[self.title.loancopy->select(loancopyStatus=onshelf)->size > self.title.reservation->size or (self.title.loancopy->select(loancopyStatus=onshelf)->size <= self.title.reservation->size and self.user.reservation.title.reservation.reservationOrder<=self.title.loancopy->select(loancopyStatus=onshelf)->size)] 2.4: requestPermitted(title,user)
2.4.1: requestPermitted( ) [self.title.loancopy->select(loancopyStatus=onshelf)->size<=self.title.reservation->size and (Not self.user.reservation.title->exists(u:User|u.reservation.title.isbn=user.reservation.title.isbn) or self.user.reservation.title.reservation.reservationOrder > self.title.loancopy->select(loancopyStatus=onshelf)->size)] 2.4: requestDenied(title,user)
2.4.1 requestDenied( )
3: destroy( )
3.1: destroy( )
3.1.2: destroy()
Figure 9: Check Reservation Collaboration Diagram
: LibrarianTerminal : Li brarian
: UserControl
: libUserProxy
: SubCommunicationSystem
1: requestUserInfo(userId) 1.1: create() 1.2: requestUerInfo(userId) 1.2.1: [self.user=Nul l] userNotExists(userId) 1.2.1.1: userNotExi st(userId) 1.2.1: [sel f.user!=Null] displayUserInfo(user,reservation[], l oan[])
Refer to Search User Use Case
1.2.1.1: *[i :=1..user.reservation->si ze] displ ayUserInfo(userId,reservation[i].*)
1.2.1.2: *[i:=1..user.l oan->size] displayUserInfo(userId, loan[i].*)
1.2.1.3: displ ayUserInfo(user.*)
2: fineCollected(userId, totalFine) 2.1: fineCollected(userId, totalFine) 2.1.1: updateFineInfo(userId,totalFine) 2.1.1.1: updateFineInfo(userId,totalFine)
2.1.1.2: [self.user.totalFine=0 and self.user.privil eges=False] upatePrivileges()
2.1.2: [self.user.totalFine=0]privil esgeRetai ned(user)
2.1.2.1: privil egesRetai ned(user.userId)
3: exist() 3.1: destroy()
Figure 10: Collect Fine Collaboration Diagram
: Librarian 1: requestLoanInfo(itemId )
: LibrarianTerminal
: LoanControl
: libLoanCopyProxy
: LoanProxy
: libUserProxy
: SubCommunicationSystem
1.1: create( )
1.2: requestLoanInfo(itemId ) 1.2.1: loancopy:=create(itemId) 1.2.1.1: loancopy:=load(itemId)
1.2.2: [self.loancopy!=Null] loan:=getLoan() 1.2.2: [self.loancopy=Null] loancopyNotExist(itemId ) 1.2.2.1: loan:=getLoan()
1.2.2.1: loancopyNotExist(itemId)
1.2.2.2: loan:=create(itemId)
1.2.3: [self.loan!=Null and Date.now-loan.dueDate>3]calculateFine(loan) 1.2.3: [self.loan=Null] loanNotExist(loancopy) 1.2.3.1: loanNotExist(itemId ) 1.2.4: user:=getUser(loan) 1.2.4.1: user:=getUser(loan) 1.2.3.1: calculateFine(loan)
1.2.4.2: user:=create(loan) 1.2.5: [self.loan!=Null] displayLoanInfo(loancopy,loan,user )
1.2.5.1: displayLoanInfo(itemId,loan.*,user.userId,user.privilege)
2: exit( ) 2.1: destroy( )
Figure 11: Find Loan Collaboration Diagram
: UserTerminal : User
: TitleControl
: TitleProxy
: ItemProxy
: SubCommunicationSystem
1: requestTitleInfo(isbn) 1.1: create( )
1.2: requestTitleInfo(isbn) 1.2.1: title:=create(isbn) 1.2.1.1: title:=load(isbn)
1.2.2: [self.title!=Null] item[]:=getItem() 1.2.2: [self.title=Null]titleNotExist(isbn) 1.2.2.1: item[]:=getItem() 1.2.2.1: titleNotExist(isbn) 1.2.2.2: *[i:=1..item->size] item[]:=create(item[i])
1.2.3: [self.title!=Null] displayTitleInfo(title,item[])
1.2.3.1: *[i:= 1 .. title.item ->size] displayTitleInfo(isbn,item [i].*)
2: exit( )
2.1: destroy( )
Figure 12: Find Title Collaboration Diagram2
2
Title can also be searched by bookName or author.
: UserTerminal
: ReservationControl
: TitleProxy
: SubCommunicationSystem
: User
1: requestTitleInfo (isbn) Refer to Find Title Use Case
1.1: titleNotExists(isbn)
1.1.1: *[i:=1..self.title.item->size] displayTitleInfo(isbn,item[i].*)
2: requestUserInfo(userId)
2.1: userNotExist(userId) Refer to Search User Use Case 2.1.1: *[i:=1..user.reservation->size] displayUserInfo(userId, reservation[i].*)
2.1.2: *[i:=1..luser.loan->size] displayUserInfo(userId, loan[i].*) 2.1.3: displayUserInfo(user.*)
3: [self.user.privilege=true and self.user.reservePrivilege=true]requestMakeReservation(isbn,userId) 3.1: create( ) 3.2: requestMakeReservation(title,user) 3.2.1: [self.user.privilege=false]privilegeRevoked(user) 3.2.1.1: privilegeRevoked(user.userId, user.totalFine)
3.2.1: [self.reservation->exists(r:Reservation|r.title.isbn=reservation.title.isbn)] reservationExist(reservation) 3.2.1.1: reservationExist(isbn,userId)
3.2.1: [self.user.numberofReservation=library.user.reserveLimit] countFull(user) 3.2.1.1: countFull(userId)
[self.title!=Null and self.user!=Null and Not self.user.reservation->exists(u:User|u.reservation.title.isbn=title.isbn) and Not self.user.numberofReservation=library.user.reserveLimit] 3.2.1: requestMakeReservation(title,user)
3.2.1.1: requestMakeReservation(title,user) 4: exit( ) 4.1: destroy( ) 4.1.1: destroy()
Figure 13: Make Reservation Collaboration Diagram
: LibrarianTerminal : Librarian 1: requestM onitorSystem() 1.1: create( )
: MonitorContol
: LibraryProxy
: SubCommunicationSystem
: libUserProxy
: libTitleProxy
1.2: requestMonitorSystem( ) 1.2.1: library:=create() 1.2.1.1: library:=load()
1.2.2: user[]:=getUser( ) 1.2.2.1: user[]:=getUser()
1.2.2.2: *[i:=1..self.library.user->size] user[]:=create(user[i])
1.2.3: title[]:=getTitle( ) 1.2.3.1: title[]:=getTitle()
1.2.3.2: *[i:=1..self.library.title->size] create(title[i])
1.2.4: displaySystemInfo(user[],title[])
1.2.4.1: *[i:=1..self.library.user->size]displaySystem Info(user[i].*)
1.2.4.2: *[i:=1..self.library.title->size] displaySystemInfo(title[i].*)
2: exit( ) 2.1: destroy( )
Figure 14: Monitor System Collaboration Diagram
: LibrarianTerminal : Librarian 1: requestTitleInfo(isbn ) 1.1: create( ) 1.2: requestTitleInfo(isbn)
: TitleControl
: ItemControl
: ItemProxy
: SubCommunicationSystem
1.2.1: [self.title=Null] titleNotExist(isbn) 1.2.1.1: titleNotExist(isbn) 1.2.1: [self.title!=Null] displayTitleInfo(title,item[]) 1.2.1.1: *[i:= 1 .. title.item->size] displayTitleInfo(isbn,item [i].*)
Refer to Find Title Use Case
2: removeItem(itemId) 2.1: create( )
2.2: removeItem (item ) 2.2.1: [Not self.loancopy.loancopyStatus=onloan] destroy() 2.2.1.1: destroy() 2.2.1.1: loanORreservationExist(itemId)
2.2.1: [self.loancopy.loancopyStatus=onloan]loanORreservationExist(item )
3: exit() 3.1: destroy( ) 3.2: destroy( )
Figure 15: Remove Item Collaboration Diagram
: UserTerminal
: UserControl
: ReservationControl
: ReservationProxy
: TitleProxy
: SubCommunicationSystem
: User
1: requestUserInfo(userId ) 1.1: create( ) 1.2: requestUserInfo(userId ) Refer to Search User Use Case
1.2.1: [self.user=Null] userNotExist(userId) 1.2.1.1: userNotExist(userId)
1.2.1: [self.user!=Null] displayUserInfo(user, reservation[], loan[] )
1.2.1.1: *[i:= 1 .. user.reservation->size] displayUserInfo(userId, reservation[i].*)
1.2.1.2: *[i:= 1 .. user.loan->size] displayUserInfo(userId, loan[i].*) 1.2.1.3: displayUserInfo(user.*)
2: [self.user.pirvilege=true] requestRemoveReservation (isbn,userId) 2.1: create( )
2.2: requestRemoveReservation(reservation,user) 2.2.1: [self.user.privilege=false]prililegeRevoked(user) 2.2.1.1: privilegeRevoked(user.userId, user.totalFine)
2.2.1: [ self.reservation=Null] reservationNotExist() 2.2.1: [self.reservation!=Null] title:=getTitle(reservation) 2.2.1.1: reservationNotExist(isbn) 2.2.1.1: title:=getTitle(reservation)
2.2.1.2: title:=create(title)
2.2.2: [self.reservation!=Null] destroy(reservation)
2.2.2.1: destroy()
2.2.3: *[i:=1..self.reservation->select(reservation.title.isbn=isbn)->size] updateReservationOrder(isbn)
2.2.3.1: updateReservationOrder(isbn) 3: exit()
3.1: destroy( ) 3.2: destroy( ) 3.2.1: destroy() 3.2.2: destroy()
Figure 16: Remove Reservation Collaboration Diagram
: LibrarianTerminal : Librarian 1: requestTitleInfo(isbn) 1.1: create( ) 1.2: requestTitleInfo(isbn) 1.2.2: [self.title=Null] titleNotExist(isbn) 1.2.2.1: titleNotExist(isbn) 1.2.3: [self.title!=Null] displayTitleInfo(title,item[]) 1.2.3.1: *[i:=1..title.item->size] displayTitleInfo(title.*,item[i].*)
: TitleControl
: libTitleProxy
: ItemControl
: ItemProxy
: SubCommunicationSystem
Refer to Find Title Use Case
2: removeTitle(isbn) 2.1: removeTitle(title)
2.1.1: [self.loancopy->select(loancopyStatus=onloan)->size>0 or self.title.numberofTitleReservation>0] loanORreservationExist(title,loancopy) 2.1.1.1: loanORreservationExist(isbn)
2.1.1: [self.loancopy->select(loancopyStatus=onloan)->size=0 and self.title.titleReservationCounter=0] destroy(title) 2.1.1.1: destroy(title)
2.1.2: create() 2.1.3: *[i:=1..self.item->size] removeItem(item[i]) 2.1.3.1: destroy(item[i]) 2.1.3.1.1: destroy(item[i]) 3: exit( ) 3.1: destroy( ) 3.1.1: destroy()
3.2: destroy() 3.2.1: destroy()
Figure 17: Remove Title Collaboration Diagram
: LibrarianTerminal : Librarian
: UserControl
: ReservationControl
: libUserProxy
: ReservationProxy
: SubCommunicationSystem
1: requestUserInfo(userId) 1.1: create( ) 1.2: requestUserInfo(userId) Refer to Search User Use Case
1.2.1: [self.user=Null] userNotExist(userId) 1.2.1.1: userNotExist(userId)
1.2.1: [self.user!=Null] displayUserInfo(user,reservation[],loan[]) 1.2.1.1: *[i:= 1..user.reservation->size] displayUserInfo(userId,reservation[i].*)
1.2.1.2: *[i:=1..user.loan->size] displayUserInfo(userId,loan[i].*) 1.2.1.3: displayUserInfo(user.*)
2: [self.user.privilege=true] removeUser(userId) 2.1: removeUser(user )
2.1.1: [self.user.privilege=false]privilegeRevoked(user) 2.1.1.1: privilegeRevoked(user.userId,user.totalFine)
2.1.1: [self.user.numberofLoan>0]userHasLoan(user )
2.1.1.1: userHasLoan(userId)
2.1.1: [self.user!=Null and self.user.privileges=true and self.user.loanCounter=0] create()
2.1.2: requestRemoveReservation(reservation[]) 2.1.2.1: *[i:=1..self.reservation->size] destroy(reservation[i])
2.1.2.1.1: destroy(reservation[i]) 2.1.3: destroy() 2.1.3.1: destroy()
3: exit() 3.1: destroy( ) 3.1.1: destroy()
3.2: destroy() 3.2.1: destroy()
Figure 18: Remove User Collaboration Diagram
: LibrarianTerminal : Li brarian
: LoanControl
: ReservationControl
: UserControl
: l ibLoanCopyProxy
: SubCommunicationSystem
1: requestLoanInfo(itemId) 1.1: l oancopyNotExi st(itemId) Refer to Find Loan Use Case
1.2: loanNotExi st(itemId)
1.3: displayLoanInfo(itemId,l oan.*,user.userId,user.privilege)
2: [self.user.totalFine>0] fi neColl ected(userId, user.totalFine)
Refer to Coll ect Fi ne Use Case
2.1: create()
2.2: fineCol lected(user.userId, user.totalFine)
2.2.1: privilegesRetained (user)
2.2.1.1: pri vi legeRetained(userId)
3: [user.privil ege=true]renewLoan(isbn,itemId) 3.1: create( )
3.2: renewLoan(i sbn,l oan,l oancopy)
3.2.1: [user.pri vi leges=false]privil egeRevoked(user) 3.2.1.1: pri vi legeRevoked(user.userId, user.totalFine) 3.2.1: [user.pri vi leges=false] create( )
3.2.2: requestCheckReservation(i sbn,userId)
3.2.2.1: requestPermi tted( )
Refer to the Check Reservati on Use Case
3.2.2.1.1: requestPermi tted( )
3.2.2.1: requestDenied( )
3.2.2.1.1: requestDenied( )
3.2.3: [Date.now>self.loan.dueDate] loanOverdue(loancopy ) 3.2.3.1: l oanOverdue(i temId,l oan.l oanStatus)
3.2.3: [ self.l oancopy.loan.renewT i me=library.user.loan.renewLi mit] renewFull (l oancopy) [self.loancopy->select(l oancopyStatus=onloan) includes (loancopy) and self.loan.renewT i mesize]reservation[]:=create(reservation[i]) 1.2.2: [self.user=Null] userNotExist(userId) 1.2.2.1: userNotExist(userId ) 1.2.3: [self.user!=Null] loan[]:=getLoan() 1.2.3.1: loan[]:=getLoan()
1.2.3.2: *[i:=1..self.loan->size] loan[]:=create(loan[i]) [self.loan->exists(l:Loan|l.user.userId=user.userId) and Date.now>loan.dueDate] *[1..self.user.loan->select(loan.loanStatus=overdue)->size] 1.2.4: fine:=calculateFine(loan) 1.2.4.1: fine:=calculateFine(loan) 1.2.4.1.1: calculateFine(loan)
1.2.5: *[i:=1..self.user.loan->size] updateFineInfo(userId,loan[i].fine) 1.2.5.1: *[i:=1..self.loan->size]updateFineInfo(userId,loan[i].fine)
1.2.5.2: [Date.now-loan.dueDate>3 and user.privileges=true] updatePrivileges()
1.2.5.3: updatePrivileges() 1.2.6: [self.user!=Null] displayUserInfo(user, reservation[], loan[] )
1.2.6.1: *[i:= 1 .. user.reservation->size] displayUserInfo(userId, reservation[i].*)
1.2.6.2: *[i:= 1 .. user.loan->size] displayUserInfo(userId, loan[i].*)
1.2.6.3: displayUserInfo(user.*)
2: exit( ) 2.1: destroy( ) 2.1.1: destroy()
2.1.2: destroy()
2.1.3: destroy()
2.2: destroy()
Figure 21: Search User Collaboration Diagram