@startuml
!include style.puml

mainframe sd Execution of DeleteCommand for Product

box Logic LOGIC_COLOR_T1
participant ":DeleteCommand" as DeleteCommand LOGIC_COLOR
participant "lastShownSupplierList:List" as lastShownSupplierList LOGIC_COLOR
participant "lastShownWarehouseList:List" as lastShownWarehouseList LOGIC_COLOR
participant "supplierToUpdate:Supplier" as supplierToUpdate LOGIC_COLOR
participant "warehouseToUpdate:Warehouse" as warehouseToUpdate LOGIC_COLOR
participant "result:CommandResult" as CommandResult LOGIC_COLOR
end box

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

alt SUPPLIER
activate DeleteCommand
DeleteCommand -> Model : getFilteredSupplierList()
activate Model
Model --> DeleteCommand  : lastShownSupplierList
deactivate Model

DeleteCommand -> lastShownSupplierList : get(index)
activate lastShownSupplierList
create supplierToUpdate
lastShownSupplierList --> supplierToUpdate
activate supplierToUpdate
supplierToUpdate --> lastShownSupplierList
deactivate supplierToUpdate
lastShownSupplierList --> DeleteCommand : supplierToUpdate
deactivate lastShownSupplierList



DeleteCommand -> supplierToUpdate : removeProduct
activate supplierToUpdate
supplierToUpdate --> DeleteCommand : updatedSupplier
deactivate supplierToUpdate
destroy supplierToUpdate

DeleteCommand -> Model : setSupplier(supplierToUpdate, updatedSupplier)
activate Model
deactivate Model

DeleteCommand -> Model : updateFilteredSupplierList()
activate Model
deactivate Model

deactivate Model
create CommandResult
DeleteCommand -> CommandResult
activate CommandResult

CommandResult --> DeleteCommand
deactivate CommandResult
DeleteCommand --> DeleteCommand


else WAREHOUSE

DeleteCommand -> Model : getFilteredWarehouseList()
activate Model
Model --> DeleteCommand  : lastShownWarehouseList
deactivate Model

DeleteCommand -> lastShownWarehouseList : get(index)
activate lastShownWarehouseList
create warehouseToUpdate
lastShownWarehouseList -> warehouseToUpdate
activate warehouseToUpdate
warehouseToUpdate --> lastShownWarehouseList
deactivate warehouseToUpdate
lastShownWarehouseList --> DeleteCommand : warehouseToUpdate
deactivate lastShownWarehouseList


DeleteCommand -> warehouseToUpdate : removeProduct
activate warehouseToUpdate
warehouseToUpdate --> DeleteCommand : updatedWarehouse
deactivate warehouseToUpdate
destroy warehouseToUpdate


DeleteCommand -> Model : setWarehouse(warehouseToUpdate, updatedWarehouse)
activate Model
deactivate Model

DeleteCommand -> Model : updateFilteredWarehouseList()
activate Model
deactivate Model

deactivate Model
create CommandResult
DeleteCommand -> CommandResult
activate CommandResult

CommandResult --> DeleteCommand
deactivate CommandResult
DeleteCommand --> DeleteCommand

end
deactivate DeleteCommand

@enduml
