@startuml

activate Duke

hide footbox

Duke -> UserStorageParser : getSavedLists()
activate UserStorageParser

UserStorageParser --> Duke : userUniversityListManager :UserUniversityListManager
deactivate UserStorageParser

Duke -> UserStorageParser : getSavedTimeTables()
activate UserStorageParser

UserStorageParser --> Duke : timetableManager :TimetableManager
deactivate UserStorageParser

Duke -> Ui : getUserInput()
activate Ui

Ui --> Duke : userInput : String
deactivate Ui

Duke -> CommandParser : CommandParser.getUserCommand(userInput)
activate CommandParser

CommandParser -> CommandParser : parseUserCommand(userInput)
activate CommandParser

alt user command with comments
    CommandParser -> CommandParser : parseUserCommandWithComments(userInput)
    activate CommandParser

    CommandParser --> CommandParser : userInputTokenized : String[]
    deactivate CommandParser

else
    CommandParser -> CommandParser : parseUserCommandWithoutComments(userInput)
    activate CommandParser

    CommandParser --> CommandParser : userInputTokenized : String[]
    deactivate CommandParser 
end

CommandParser --> CommandParser : userInputTokenized : String[]
deactivate CommandParser

alt exit command

    CommandParser -> CommandParser : isValidExitCommand(userInputTokenized)
    activate CommandParser

    CommandParser --> CommandParser : :boolean
    deactivate CommandParser

    opt is valid exit command

        create ExitCommand
        CommandParser -> ExitCommand : ExitCommand(userInputTokenized, CommandType.EXIT)
        activate ExitCommand

        ExitCommand --> CommandParser : newExitCommand :ExitCommand
        deactivate ExitCommand
    end

else other command

end

CommandParser --> Duke : newUserCommand : Command
deactivate CommandParser

alt exit command

Duke -> Duke : executeExitCommand()
activate Duke

   Duke -> Ui : sayByeToUser()
   activate Ui

   deactivate Ui

   Duke -> Duke : setShouldExit()
   activate Duke

   deactivate Duke

deactivate Duke
else other command
end
deactivate Duke

@enduml