@startuml
!include style.puml

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
participant ":FindCommandParser" as FindCommandParser LOGIC_COLOR
participant "a:FindCommand" as FindCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
participant "person:NameContainsKeywordsPredicate" as NameContainsKeywordsPredicate LOGIC_COLOR
end box


box Model MODEL_COLOR_T1
participant ":Model" as Model MODEL_COLOR
end box

[-> LogicManager : execute("find XYZ")
activate LogicManager

LogicManager -> AddressBookParser : parseCommand("find XYZ")
activate AddressBookParser

create FindCommandParser
AddressBookParser -> FindCommandParser
activate FindCommandParser

FindCommandParser --> AddressBookParser
deactivate FindCommandParser

AddressBookParser -> FindCommandParser : parse("XYZ")
activate FindCommandParser

create NameContainsKeywordsPredicate
FindCommandParser --> NameContainsKeywordsPredicate
activate NameContainsKeywordsPredicate
NameContainsKeywordsPredicate --> FindCommandParser : person
deactivate NameContainsKeywordsPredicate

create FindCommand
FindCommandParser -> FindCommand : FindCommand(person)
activate FindCommand

FindCommand --> FindCommandParser : a
deactivate FindCommand

FindCommandParser --> AddressBookParser : a
deactivate FindCommandParser
'Hidden arrow to position the destroy marker below the end of the activation bar.
FindCommandParser -[hidden]-> AddressBookParser
destroy FindCommandParser

AddressBookParser --> LogicManager : a
deactivate AddressBookParser

LogicManager -> FindCommand : execute()
activate FindCommand

FindCommand -> Model : updateFilteredPersonList(namePredicate)
activate Model

Model --> FindCommand
deactivate Model

create CommandResult
FindCommand -> CommandResult
activate CommandResult

CommandResult --> FindCommand
deactivate CommandResult

FindCommand --> LogicManager : result
deactivate FindCommand

[<--LogicManager
deactivate LogicManager
@enduml
