@startuml
!include style.puml
skinparam ArrowFontStyle plain

scale 2.0

box Logic LOGIC_COLOR_T1
participant ":LogicManager" as LogicManager LOGIC_COLOR
participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR
participant ":FindCommandParser" as FindCommandParser LOGIC_COLOR
participant "f:FindCommand" as FindCommand LOGIC_COLOR
participant ":CommandResult" as CommandResult LOGIC_COLOR
participant "n:NameContainsKeywordPredicate" as NameContainsKeywordPredicate LOGIC_COLOR
participant "s:StatusContainsKeywordPredicate" as StatusContainsKeywordPredicate LOGIC_COLOR
participant "t:TagContainsKeywordPredicate" as TagContainsKeywordPredicate LOGIC_COLOR

end box

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

[-> LogicManager : execute("search st/offered")
activate LogicManager

LogicManager -> AddressBookParser : parseCommand("search st/offered")
activate AddressBookParser

create FindCommandParser
AddressBookParser -> FindCommandParser
activate FindCommandParser

FindCommandParser --> AddressBookParser
deactivate FindCommandParser

AddressBookParser -> FindCommandParser : parse("search st/offered")
activate FindCommandParser

create NameContainsKeywordPredicate
FindCommandParser -> NameContainsKeywordPredicate
activate NameContainsKeywordPredicate
NameContainsKeywordPredicate --> FindCommandParser : n
deactivate NameContainsKeywordPredicate

create StatusContainsKeywordPredicate
FindCommandParser -> StatusContainsKeywordPredicate
activate StatusContainsKeywordPredicate
StatusContainsKeywordPredicate --> FindCommandParser : s
deactivate StatusContainsKeywordPredicate

create TagContainsKeywordPredicate
FindCommandParser -> TagContainsKeywordPredicate
activate TagContainsKeywordPredicate
TagContainsKeywordPredicate --> FindCommandParser : t
deactivate TagContainsKeywordPredicate

FindCommandParser -> FindCommandParser: getPredicatesList(n, s, t)
activate FindCommandParser
return predicatesList

create FindCommand
FindCommandParser -> FindCommand : findCommand(predicatesList)
activate FindCommand


FindCommand --> FindCommandParser : f
deactivate FindCommand

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

AddressBookParser --> LogicManager : f
deactivate AddressBookParser

LogicManager -> FindCommand  : execute()
activate FindCommand

FindCommand -> Model : updateFilteredPersonList(predicatesList)
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
