@startuml
'http://plantuml.com/skinparam.html
skinparam handwritten true
skinparam monochrome true
skinparam packageStyle rect
skinparam defaultFontName FG Virgil
skinparam shadowing false

Actor "Gestor de Serviços de Help Desk" as Actor
participant NovoCatalogoUI as UI <<presentation>>
participant NovoCatalogoCTRL as Controller <<application>>
participant PersistenceContext as Persistence <<persistence>>
participant RepositoryFactory as Factory <<factory>>
participant Catalogo as Catalogo <<Domain>>
database ColaboradorRepository as URepository <<repository>>
database EquipaRepository as ERepository <<repository>>
database CatalogoRepository as CRepository <<repository>>


activate Actor
    Actor -> UI: Inicia a criação de um novo catálogo
    activate UI
      UI -> Controller: create
      UI -> Controller: getListColaboradores()
    activate Controller
        Controller -> Persistence: repositories()
    activate Persistence
        Persistence -> Factory: create
    activate Factory
        Factory -> URepository: create
    activate URepository
    deactivate Persistence
    deactivate Factory
    deactivate URepository
        Controller -> URepository: listColaboradores = findAll()
    activate URepository
        Controller --> UI: listColaboradores
    deactivate URepository
    deactivate Controller
        UI --> Actor : Apresenta listColaboradores e pergunta qual quer escolher
    deactivate UI
      Actor -> UI: Escolher o colaborador
    activate UI
    UI -> Controller: getEquipas()
    activate Controller
    Controller -> Persistence: repositories()
    activate Persistence
        Persistence -> Factory: create
    activate Factory
        Factory -> ERepository: create
    activate ERepository
    deactivate Persistence
    deactivate Factory
      Controller -> ERepository : listEquipas=listEquipas()
      Controller -> UI: listEquipas
    deactivate Controller
    deactivate ERepository
    loop até não escolher mais equipas
      UI -> Actor: Apresenta as equipas e solicita as equipa(s) a que vão ser atribuidas o catalogo
    deactivate UI
      Actor -> UI: Escolhe
    end loop
    activate UI
      UI -> Controller: novoCatalogo(titulo,descricaoBreve,descricaoCompleta,icone,listEquipas)
    activate Controller
      Controller -> Catalogo: cat = Catalogo(titulo,descricaoBreve,descricaoCompleta,icone,listEquipas)
    activate Catalogo
    deactivate Catalogo
      Controller -> Persistence: repositories()
    activate Persistence
      Persistence -> Factory: create
    activate Factory
      Factory -> CRepository: create
    activate CRepository
    deactivate Persistence
    deactivate Factory
    deactivate CRepository
      Controller -> CRepository: save(cat)
    activate CRepository
    deactivate CRepository
    deactivate Controller
    deactivate UI

deactivate Actor
@enduml