@startuml
autonumber

actor Administrator as A
participant ":Adding\nOrganizacaoUI" as UI
participant ":AddingOrganizacao\nController" as CTRL
participant ":APP" as APP
participant "ro:Regist\nOrganization" as ORGS
participant "Organization" as _ORG
participant "org:Organization" as ORG
participant "manag:Manager" as MAN
participant "colab:Colaborador" as COLAB
participant ":Autorizacao\nFacade" as AUT


activate A
A -> UI : adding new organization
activate UI
UI --> A : requests organization data (i.e. name),\n the data of one manager of that organization (i.e. nameM, emailM, passwordM)\n and  the data of one collaborator of the same organization  (i.e. nameC, emailC, passwordC)
deactivate UI

A -> UI : enter the requested data
activate UI

UI -> CTRL : newOrganization( name, nameM, emailM, passwordM, nameC, emailC, passwordC)
activate CTRL

CTRL -> APP: ro = getRegistoOrganizacoes()
activate APP
deactivate APP

CTRL -> ORGS: org = newOrganization( name, nameM, emailM, passwordM, nameC, emailC, passwordC)
activate ORGS

ORGS -> _ORG: manag=newManager( nameM, emailM, passwordM)
activate _ORG
_ORG --> MAN ** : create( nameM, emailM, passwordM)
deactivate _ORG

ORGS -> _ORG: colab=newCollaborator( nameC, emailC, passwordC)
activate _ORG
_ORG --> COLAB ** : create( nameC, emailC, passwordC)
deactivate _ORG

ORGS --> ORG ** : create(name,manag,colab)
deactivate APP

CTRL -> ORGS : validatesOrganization(org)
activate ORGS
deactivate ORGS

deactivate CTRL
UI --> A : The system validates and presents the data, asking to confirm.
deactivate UI

A -> UI : confirms
activate UI

UI -> CTRL: addOrganization()
activate CTRL
CTRL -> ORGS: addOrganization(org)
activate ORGS

ORGS -> ORGS: validaOrganizao(org)
ORGS -> MAN: nameM = getName()
activate MAN
deactivate MAN
ORGS -> MAN: emailM = getEmail()
activate MAN
deactivate MAN
ORGS -> MAN: passwordM = getPassword()
activate MAN
deactivate MAN
ORGS -> AUT: addManager(nameM,emailM,passwordM)
activate AUT
deactivate AUT

ORGS -> COLAB: nameC = getName()
activate COLAB
deactivate COLAB
ORGS -> COLAB: emailC = getEmail()
activate COLAB
deactivate COLAB
ORGS -> COLAB: passwordC = getPassword()
activate COLAB
deactivate COLAB
ORGS -> AUT: addCollaborator(nameC,emailC,passwordC)
activate AUT
deactivate AUT

ORGS -> ORGS: addOrganization(org)


deactivate ORGS
deactivate CTRL
UI --> A : successful operation
deactivate UI

deactivate A
@enduml
@enduml
