```mermaid
sequenceDiagram
participant UI
participant Controller
participant User
participant UniversityFileSystem
participant Student
participant Advisor
participant Course
participant Grade
participant Transcript
participant Lecturer
participant Assistant
participant CourseSection
%% SON EDİTİ YAPARKEN Kİ YAPILACAKLAR :
%% Createler ileride değişmesi şeklinde hazırlandı
%% Abstract methodları ayırmak
%% Sistemden çıkma opsiyonunu göstermek
%% Bütün methodlara not eklenicek ki hoca method isimlerinden tahmin etmeye çalışıp sorun çıkartmasın
activate Controller
Controller->>UniversityFileSystem: create()
activate UniversityFileSystem
deactivate UniversityFileSystem
%% heralde
%% LİNK OLARAK GİRİNCE DİREK TEK OLARAK GİRİOR SANIRIM
%% KNK CONTROLLERA STRİNG ARRAY DÖNDÜKTENS SONRA O VERİYİ PERSONA VERCEZ BİDE SANIRIM RETURN OLCAK ORDA GALİBA
%% düzelttim
activate Controller
Controller->>UI: create()
activate UI
deactivate UI
Controller->>UniversityFileSystem: loadFiles()
activate UniversityFileSystem
UniversityFileSystem->>Lecturer: create()
activate Lecturer
deactivate Lecturer
UniversityFileSystem->>Assistant: create()
activate Assistant
deactivate Assistant
UniversityFileSystem->>Course: create(String courseCode, String courseName, int courseCredit, int courseYear, int section1, int section2, Lecturer lecturer, Assistant assistant, List<Course> preRequisite, int capacity)
activate Course
Course->>CourseSection: create(int dayNumber, int sectionNumber)
activate CourseSection
deactivate CourseSection
deactivate Course
UniversityFileSystem->>Grade: create(int numericalGrade)
activate Grade
deactivate Grade
UniversityFileSystem->>Transcript: create(List<Course> listOfCourses, List<Grade> listOfGrades)
activate Transcript
deactivate Transcript
UniversityFileSystem->>Advisor: create()
activate Advisor
deactivate Advisor
UniversityFileSystem->>Student: create(String name, String lastName, String username, String password, String studentID, Transcript currentTranscript, Advisor currentAdvisor)
activate Student
deactivate Student
UniversityFileSystem->>Advisor: create(String name, String lastName, String username, String password, String lecturerID, ArrayList<Student> studentList)
activate Advisor
deactivate Advisor
UniversityFileSystem->>Lecturer: create(String name, String lastName, String lecturerID)
activate Lecturer
deactivate Lecturer
UniversityFileSystem->>Assistant: create(String name, String lastName, String assistantID)
activate Assistant
deactivate Assistant
loop forEveryCourse
UniversityFileSystem->>Course: setLecturer(Lecturer lecturer)
activate Course
Course-->>UniversityFileSystem: return
deactivate Course
UniversityFileSystem->>Course: setAssistant(Assistant assistant)
activate Course
Course-->>UniversityFileSystem: return
deactivate Course
UniversityFileSystem->>Course: setPreRequisite(List<Course> preRequisite)
activate Course
Course-->>UniversityFileSystem: return
deactivate Course
end
loop forEveryStudent
UniversityFileSystem->>Student: setCurrentAdvisor(Advisor currentAdvisor)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
UniversityFileSystem->>Student: setRegistrationWaitingCourses(List<Course> registrationWaitingCourses)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
UniversityFileSystem->>Student: setRegistrationCompleteCourses(List<Course> registrationCompleteCourses)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
UniversityFileSystem->>Student: setCancelWaitingCourses(List<Course> cancelWaitingCourses)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
UniversityFileSystem->>Student: setCurrentAvailableCourses(List<Course> currentAvailableCourses)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
UniversityFileSystem->>UniversityFileSystem: updateStudentsAvailableCourses()
activate UniversityFileSystem
loop goingThroughEverySystemCourse
UniversityFileSystem->>Student:checkCourseAvailability(Course course)
activate Student
Student->>Course: getType()
activate Course
Course-->>Student: return String
deactivate Course
alt ifTypeNotEqualsNT(Non Technical)
Student->>Course: checkYearMatching(int year)
activate Course
Course-->>Student: return boolean
deactivate Course
end
Student->>Course: checkPreRequisite(List<Course> completedCourses, List<Grade> gradeList)
activate Course
Course-->>Student: return boolean
deactivate Course
Student->>Transcript: checkPassedCourses(Course checkedCourse)
activate Transcript
Transcript-->>Student: return boolean
deactivate Transcript
Student->>Course: Course.isFull()
activate Course
Course-->>Student: return boolean
deactivate Course
Student->>UniversityFileSystem: return isAvailableCourse
deactivate Student
deactivate UniversityFileSystem
end
UniversityFileSystem->>Student: setCurrentAvailableCourses(List<Course> currentAvailableCourses)
activate Student
Student-->>UniversityFileSystem: return
deactivate Student
end
loop forEachCourse
loop forEachStudent
UniversityFileSystem->>Course: increaseStudentNumber()
activate Course
deactivate Course
end
end
loop forEachAdvisor
loop forEachStudentCheckIfIDMatchesInAdvisor
UniversityFileSystem->>Student: getStudentID()
activate Student
deactivate Student
end
UniversityFileSystem->>Advisor: setStudentList(ArrayList<Student> studentList)
activate Advisor
deactivate Advisor
end
UniversityFileSystem-->>Controller:return
deactivate UniversityFileSystem
loop whileUserNotLoggedIn
Controller->>UI: printConsoleListReturnSelection(String[] stringList, int errorInt)
activate UI
UI-->>Controller:return: int
deactivate UI
Controller->>UI: requestCredentials()
activate UI
UI-->>Controller:return:StringArray[2]
deactivate UI
Controller->>UniversityFileSystem: getSignedPerson(String[] userInfo, Controller currentController)
activate UniversityFileSystem
UniversityFileSystem-->>Controller: return User
deactivate UniversityFileSystem
Controller->>User:runUserActions()(Abstract)
activate User
User-->>Controller:return
deactivate User
Controller->>Student:startActions()
activate Student
loop actionsUntilExit
Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt)
activate UI
UI-->>Controller: return
deactivate UI
end
Controller-->>Student:return actionNumber:int
deactivate Controller
Student->>Student: runUserAction()
activate Student
alt 1
loop forAllCourseInAvailableCourses
Student->>Course: toString()
activate Course
Course-->>Student: return String
deactivate Course
end
Student->>Controller: printListReturnSelection(String[] availableCoursesStr, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printConsoleListReturnSelection(String[] availableCoursesStr, int errorInt)
activate UI
UI-->>Controller: return int
deactivate UI
end
Controller-->>Student: return int
deactivate Controller
Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt)
activate Controller
Controller-->>Student: return int
deactivate Controller
alt 2
Student->>Course: checkCourseSection(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses)
activate Course
loop for every course
Course->>CourseSection: compareAvailability(CourseSection sectionToCompare)
activate CourseSection
CourseSection-->>Course: return boolean
deactivate CourseSection
end
Course-->>Student: return String
deactivate Course
Student->>Course: checkTechnicalElectiveCount(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses)
activate Course
Course-->>Student: return String
deactivate Course
Student->>Course: checkNonTechnicalElectiveCount(List<Course> registrationCompleteCourses, List<Course> registrationWaitingCourses, List<Course> cancelWaitingCourses)
activate Course
Course-->>Student: return String
deactivate Course
alt noErrorMessageReturned
Student->>Controller: printSuccessMessage(String successMessage)
activate Controller
Controller->>UI: printConsoleSuccessMessage(String successMessage)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
else
Student->>Controller: printErrorMessage(String successMessage)
activate Controller
Controller->>UI: printConsoleErrorMessage(String successMessage)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
end
else 3
Student->>Course: getLecturer()
activate Course
Course-->>Student: return Lecturer
deactivate Course
Student->>Lecturer: toString()
activate Lecturer
Lecturer-->>Student: return String
deactivate Lecturer
Student->>Controller: printList(String[] stringList)
activate Controller
Controller->>UI: printConsoleList(String[] stringList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
else 4
Student->>Course: getAssistant()
activate Course
Course-->>Student: return Lecturer
deactivate Course
Student->>Assistant: toString()
activate Assistant
Assistant-->>Student: return String
deactivate Assistant
Student->>Controller: printList(String[] stringList)
activate Controller
Controller->>UI: printConsoleList(String[] stringList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
end
else 2
loop forAllCourseInRegisteredCourses
Student->>Course: getCourseString()
activate Course
Course-->>Student: return String
deactivate Course
end
Student->>Controller: printListReturnSelection(String[] RegisteredCoursesStr, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printConsoleListReturnSelection(String[] RegisteredCoursesStr, int errorInt)
activate UI
UI-->>Controller: return int
deactivate UI
end
Controller-->>Student: return int
deactivate Controller
else 3
loop forAllCourseInRegisterationWaitingCourses
Student->>Course: getCourseString()
activate Course
Course->>Lecturer: getCourseLecturerString()
activate Lecturer
Lecturer-->>Course: return String
deactivate Lecturer
Course->>CourseSection: getCourseSectionString()
activate CourseSection
CourseSection-->>Course: return String
deactivate CourseSection
Course-->>Student: return String
deactivate Course
end
Student->>Controller: printList(String[] registerationWaitingCoursesStr)
activate Controller
Controller->>UI: printConsoleList(String[] registerationWaitingCoursesStr)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
else 4
loop forAllCourseInCancelWaitingCourses
Student->>Course: getCourseString()
activate Course
Course->>Lecturer: getCourseLecturerString()
activate Lecturer
Lecturer-->>Course: return String
deactivate Lecturer
Course->>CourseSection: getCourseSectionString()
activate CourseSection
CourseSection-->>Course: return String
deactivate CourseSection
Course-->>Student: return String
deactivate Course
end
Student->>Advisor: toString()
activate Advisor
Advisor-->>Student: return String
deactivate Advisor
Student->>Controller: printList(String[] registerationWaitingCoursesStr)
activate Controller
Controller->>UI: printConsoleList(String[] registerationWaitingCoursesStr)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
else 5
Student->>Transcript:getTranscriptString()
activate Transcript
loop everyCourseInTranscript
Transcript->>Grade: toString()
activate Grade
Grade-->>Transcript: return String
deactivate Grade
Transcript->>Course: toString()
activate Course
Course-->>Transcript: return String
deactivate Course
end
Transcript-->>Student:return TranscriptString:String
deactivate Transcript
Student->>Controller: printList(String[] transcriptStr)
activate Controller
Controller->>UI: printConsoleList(String[] transcriptStr)
activate UI
UI-->>Controller: return
deactivate UI
deactivate Controller
Controller-->>Student: return
else 6
Student->>Advisor:getAdvisorString()
activate Advisor
Advisor-->>Student:return AdvisorString:String
deactivate Advisor
Student->>Controller: printList(String[] advisorStr)
activate Controller
Controller->>UI: printConsoleList(String[] advisorStr)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Student: return
deactivate Controller
else 7
loop whileInsideMessageSection
Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt)
activate UI
UI-->>Controller: return int
deactivate UI
Controller-->>Student: return int
deactivate Controller
alt 1
loop everyMessageInRecievedMessages
Student->>Message: toString()
activate Message
Message-->>Student:return String
deactivate Message
end
Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt)
activate UI
UI-->>Controller: return int
deactivate UI
Controller-->>Student: return int
deactivate Controller
Student->>Message: toString()
activate Message
Message-->>Student:return String
deactivate Message
Student->>Message: readMessage()
activate Message
Message-->>Student:return
deactivate Message
else 2
loop everyMessageInSentMessages
loop everyMessageInRecievedMessages
Student->>Message: toString()
activate Message
Message-->>Student:return String
deactivate Message
end
Student->>Controller: printListReturnSelection(String[] stringsList, int errorInt)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] stringsList, int errorInt)
activate UI
UI-->>Controller: return int
deactivate UI
Controller-->>Student: return int
deactivate Controller
Student->>Message: toString()
activate Message
Message-->>Student:return String
deactivate Message
end
else 3
Student->>Controller: requestMessageString()
activate Controller
Controller->>UI: requestMessageStringFromUser()
activate UI
UI-->>Controller: return String
deactivate UI
Controller-->>Student: return String
deactivate Controller
Student->>Message: create(String title, String message, User sender, User receiver)
activate Message
deactivate Message
Student->>Advisor: receiveMessage(Message message)
activate Advisor
Advisor-->>Student: return
deactivate Advisor
end
end
end
deactivate Student
Student-->>Controller: return
deactivate Student
end
Controller->>Advisor:runUserActions()
activate Advisor
loop actionsUntilExit
Advisor->>Controller:printListReturnSelection(String actionString, int errorInt)
activate Controller
loop IncorrectAction
Controller-->>UI:printConsoleListReturnSelection(String actionString, int errorInt)
activate UI
UI-->>Controller:return ActionNumber:int
end
deactivate UI
Controller-->>Advisor:return actionNumber:int
deactivate Controller
alt 1
loop forEveryStudentInAdvisor
Advisor->>Student: toString()
activate Student
Student-->>Advisor: return String
end
Advisor->>Controller:printListReturnSelection(String[] studentMenuList, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printLUseristReturnSelection(String[] studentMenuList, int errorInt)
activate UI
UI-->>Controller: return(int CourseChoice)
deactivate UI
end
Controller-->>Advisor: return (int CourseChoice)
deactivate Controller
loop forAllCourseInAvailableCoursesOfCurrentStudent
Advisor->>Student: getRegistrationWaitingCourses
activate Student
Student-->>Advisor: return Course
deactivate Student
Advisor->>Course: getCourseString()
activate Course
Course->>Lecturer: getCourseLecturerString()
activate Lecturer
Lecturer-->>Course: return String
deactivate Lecturer
Course->>CourseSection: getCourseSectionString()
activate CourseSection
CourseSection-->>Course: return String
deactivate CourseSection
Course-->>Advisor: return String
deactivate Course
end
Advisor->>Controller:printListReturnSelection(String[] courseMenuList, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printConsoleListReturnSelection(String[] courseMenuList, int errorInt)
activate UI
UI-->>Controller: return: int
deactivate UI
end
Controller-->>Advisor: return: int
deactivate Controller
Advisor->>Controller:printListReturnSelection(String[] courseActionMenuList, int errorInt)
activate Controller
loop incorrectCourseSelection
Controller->>UI: printConsoleListReturnSelection(String[] courseActionMenuList, int errorInt)
activate UI
UI-->>Controller: return: int
deactivate UI
end
Controller-->>Advisor: return: int
deactivate Controller
alt registerWaitingCourse
Advisor->>Student: removeElementFromRegistrationWaitingCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor->>Student: addElementToRegistrationCompleteCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
else reject
Advisor->>Student: removeElementFromRegistrationWaitingCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor->>Student: addElementToCurrentAvailableCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
else cancelWaitingCourse
Advisor->>Student: removeElementFromCancelWaitingCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor->>Student: addElementToCurrentAvailableCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor ->>Course: increaseStudentNumber()
activate Course
Course-->>Advisor: return
deactivate Course
Advisor->>Student: removeElementFromCancelWaitingCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor->>Student: addElementToRegistrationCompleteCourses(Course selectedCourse)
activate Student
Student-->>Advisor: return
deactivate Student
Advisor ->>Course: decreaseStudentNumber()
activate Course
Course-->>Advisor: return
deactivate Course
end
else isActionNumber2
Advisor ->>Controller: printListReturnSelection(String[] messageMenuList, int errorCode)
activate Controller
loop incorrectDecision
Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode)
activate UI
UI-->>Controller: return int:
deactivate UI
end
Controller-->>Advisor: return int:
deactivate Controller
alt 1
loop everySentMessage
Advisor->>Message: toString()
activate Message
Message-->>Advisor: return String
deactivate Message
end
Advisor ->>Controller: printListReturnSelection(String[] receivedMessagesList, int errorCode)
activate Controller
loop incorrectDecision
Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode)
activate UI
UI-->>Controller: return int:
deactivate UI
end
Controller-->>Advisor: return int:
deactivate Controller
Advisor->>Message: toString()
activate Message
Message-->>Advisor: return String
deactivate Message
Advisor->>Message: getMessage()
activate Message
Message-->>Advisor: return String
deactivate Message
Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode)
activate UI
UI-->>Controller: return int:
deactivate UI
Controller-->>Advisor: return int:
deactivate Controller
Advisor->>Controller: printList(String[] messageList)
activate Controller
Controller->>UI: printConsoleList(String[] messageList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Advisor: return
deactivate Controller
opt ifNoMessagePrintMessage
Advisor->>Controller: printList(String[] messageList)
activate Controller
Controller->>UI: printConsoleList(String[] messageList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Advisor: return
deactivate Controller
end
else 2
loop everyRecievedMessage
Advisor->>Message: toString()
activate Message
Message-->>Advisor: return String
deactivate Message
end
Advisor ->>Controller: printListReturnSelection(String[] receivedMessagesList, int errorCode)
activate Controller
loop incorrectDecision
Controller->>UI: printConsoleListReturnSelection(String[] messageMenuList, int errorCode)
activate UI
UI-->>Controller: return int:
deactivate UI
end
Controller-->>Advisor: return int:
deactivate Controller
Advisor->>Message: toString()
activate Message
Message-->>Advisor: return String
deactivate Message
Advisor->>Message: getMessage()
activate Message
Message-->>Advisor: return String
deactivate Message
Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode)
activate UI
UI-->>Controller: return int:
deactivate UI
Advisor->>Message: readMesssage()
activate Message
Message-->>Advisor: return %% reddit??????????
deactivate Message
Controller-->>Advisor: return int:
deactivate Controller
Advisor->>Controller: printList(String[] messageList)
activate Controller
Controller->>UI: printConsoleList(String[] messageList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Advisor: return
deactivate Controller
opt ifNoMessagePrintMessage
Advisor->>Controller: printList(String[] messageList)
activate Controller
Controller->>UI: printConsoleList(String[] messageList)
activate UI
UI-->>Controller: return
deactivate UI
Controller-->>Advisor: return
deactivate Controller
end
else 3
loop everyStudentInAdvisor
Advisor->>Student: toString()
activate Student
Student-->>Advisor: return
deactivate Student
end
Advisor->>Controller: printListReturnSelection(String[] messageList, int errorCode)
activate Controller
Controller->>UI: printConsoleListReturnSelection(String[] messageList, int errorCode)
activate UI
UI-->>Controller: return int
deactivate UI
Controller-->>Advisor: return int
deactivate Controller
Advisor->>Controller: requestMessageString()
activate Controller
Controller->>UI: requestMessageStringFromUser()
activate UI
UI-->>Controller: return String[]
deactivate UI
Controller-->>Advisor: return String[]
deactivate Controller
Advisor->>Message: Message(String title, String message, User sender, User receiver)
activate Message
deactivate Message
Advisor->>Student: receiveMessage(Message message)
activate Student
Student-->>Advisor: return
deactivate Student
end
end
deactivate Advisor
end
end
Controller->>UniversityFileSystem: saveFiles()
activate UniversityFileSystem
loop forEveryStudent
UniversityFileSystem->>Student: getStudentID()
Student-->>UniversityFileSystem: return String
opt ifStudentIsFound
Note right of UniversityFileSystem: Get and write all the data of Student into the file
end
end
UniversityFileSystem->>Controller: return
deactivate UniversityFileSystem
deactivate Controller