@startuml
!include style.puml

mainframe **sd** EditGradeCommandExecute

participant "command:EditGradeCommand" as EditGradeCommand LOGIC_COLOR

participant "model:Model" as Model MODEL_COLOR

participant ":List<Person>" as Persons MODEL_COLOR_T4

participant "xyz:List<XYZ>" as List MODEL_COLOR_T2

participant "entry:XYZ" as XYZ MODEL_COLOR_T3



[-> EditGradeCommand : execute()
activate EditGradeCommand

EditGradeCommand -> Model : getFilteredPersonList()
activate Model

Model ---> EditGradeCommand
deactivate Model

EditGradeCommand -> Persons : get(targetIndex)
activate Persons

Persons ---> EditGradeCommand
deactivate Persons

EditGradeCommand -> EditGradeCommand : createGradedPerson(personToEdit)
activate EditGradeCommand

EditGradeCommand ---> EditGradeCommand
deactivate EditGradeCommand

EditGradeCommand -> Model : setPerson(target, editedPerson)
activate Model

Model -> List : setStudent(target, editedPerson)
activate List

loop for all entries in xyz
    alt entry contains target
        List -> XYZ : replaceStudent(target, editedPerson)
        activate XYZ

        XYZ ---> List
        deactivate XYZ
        end

    List -> List : newList.add(entry)
    activate List

    List ---> List
    deactivate List
    end

List -> List : replace(newList)
activate List

List ---> List
deactivate List

List ---> Model
deactivate List

Model -> Model : updateFilteredPersonList()
activate Model

Model ---> Model
deactivate Model

Model ---> EditGradeCommand
deactivate Model

[<-- EditGradeCommand
deactivate EditGradeCommand

@enduml
