@startuml rdcu_ajouterQuestionnaire
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - ajouterQuestionnaire(nom : String)
participant ":ControleurQuestionnaire" as cq
participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Cours<String, Cours>" as lc
participant "cours:Cours" as cours
participant "listeQuestionnaires:Questionnaire[]" as carray
participant "questionnaire:Questionnaire" as q

->cq : ajouterQuestionnaire(\n courriel: string,\n nom: String,\n description: String,\n etat: String,\n nomQuestions: string[])
note right : selon Contrôleur\n(ControleurQuestionnaire est un sous-système)
cq -> sing: enseignant = getUtilisateur(courriel : string)
note right : selon Expert\n(Utilisateur détient enseignant)
cq -> ens: ajouterQuestionnaire(nom: string, description: string, etat: boolean, nomQuestions: string[])
note right : selon Expert\n(Enseignant connait sa liste de cours auxquelles ajouter les questions)
ens -> lc: cours = find(sigleGroupe: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> cours: ajouterQuestionnaire(nom: string, description: string, etat: boolean, nomQuestions: string[])
note right : selon Expert\n(Cours connait sa liste de Questionnaire)
cours --> q ** : creer(nom: string, description: string, etat: boolean)
note left : selon Créateur\n(Cours crée ses questionnaire)
loop pour chaque nomQuestion à ajouter
  cours -> q : ajouterQuestion(nomQuestion: string)
  note left of q : selon Expert\n(Cours connait sa liste de Questionnaire)
end
cours --> carray : add(questionnaire: Questionnaire)
note right : selon Expert\n(Questionnaire connait la façon d'associer une nouvelle question)
cours --> ens: questionnaire
ens --> cq: questionnaire
<-- cq : questionnaire
@enduml

@startuml rdcu_recupererCategoriesQuestions
skinparam style strictuml
skinparam defaultfontname Verdana
title CU05a - RDCU - recupererCategoriesQuestions(enseignant :String)

participant ":QuestionControleur" as cq
participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Cours<String, Cours>" as lc
participant "cours:Cours" as cours

->cq : recupererCategoriesQuestions(courriel :String)
note right : selon Contrôleur\n(QuestionControleur est un sous-système)
cq -> sing: enseignant = getUtilisateur(courriel : string)
note right : selon Expert\n(Utilisateur détient enseignant)
cq -> ens: listeCategorie = recupererCategoriesQuestions(courriel :String)
note right : selon Expert\n(Enseignant connait sa liste de cours)
participant "listeCategories:String[]" as cat
ens --> cat **: créer()
note left : selon Créateur\n Enseignant créer une liste de catégories
loop for sigle in listeCours
ens -> lc: cours = get(sigle: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> cours: questions = recupererQuestions()
note left : selon Expert\n(le cours contient la liste des questions)
loop for q in questions
ens -> cat: push(q.categorie)
note left : selon Expert, listeCategories contient les catégories
end
end
ens --> cq: listeCategories
<--cq : listeCategories
@enduml

@startuml rdcu_recupererQuestionsDansCategorie
skinparam style strictuml
skinparam defaultfontname Verdana
title CU05a - RDCU - recupererQuestionsDansCategorie(categorie : String)

participant ":QuestionControleur" as cq
participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Cours<String, Cours>" as lc
participant "cours:Cours" as cours
participant "listeQuestions:Question[]" as qarray

->cq : recupererQuestionsDansCategorie(categorie : String)
note right : selon Contrôleur\n(QuestionControleur est un sous-système)

cq -> sing: enseignant = getUtilisateur(courriel : string)
note right : selon Expert\n(Utilisateur détient enseignant)
cq -> ens: listeCours = getCours()
note right : selon Expert\n(Enseignant connait sa liste de cours)
ens -> lc: cours = find(sigle: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> cours: recupererQuestionsDansCategorie(categorie : String)
note right : selon Expert\n(Cours connait sa liste de Questions)
cours -> qarray: questions = filter(categorie : String)
note right : selon Expert\n(Cours connait sa liste de Questions)
cours --> ens: questions
ens --> cq: questions
<--cq : questions
@enduml

@startuml rdcu_ajouterQuestionsAuQuestionnaire
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - ajouterQuestionsAuQuestionnaire(questionnaire : Questionnaire, questions : Question[])

participant ":QuestionnaireControleur" as cq
participant "quest:Questionnaire" as q
participant "listeQuestions:Question[]" as lq

->cq : ajouterQuestionsAuQuestionnaire\n(questionnaire : Questionnaire, questions : Question[])
note right : selon Contrôleur\n(QuestionnaireControleur est un sous-système)
loop for q in questions
cq -> q: quest.ajouterQuestion(q)
q -> lq: listeQuestions.push(q)
end
@enduml 

@startuml rdcu_recupererQuestionnaire
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - recupererQuestionnaire(nom : String)
participant ":ControleurQuestionnaire" as cq
participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Cours<String, Cours>" as lc
participant "cours:Cours" as cours

->cq : recupererQuestionnaire(nom : String)
note right : selon Contrôleur\n(ControleurQuestionnaire est un sous-système)
cq -> sing: enseignant = getUtilisateur(courriel : string)
note right : selon Expert\n(Utilisateur détient enseignant)
cq -> ens: listeCours = getCours()
note right : selon Expert\n(Enseignant connait sa liste de cours)
ens -> lc: cours = find(sigleGroupe: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> cours: listeQuestionnaires = getQuestionnaires()
note right : selon Expert\n(Cours connait sa liste de Questionnaire)
cours --> ens: listeQuestionnaires
ens --> cq: listeQuestionnaires
<-- cq : questionnaire
@enduml

@startuml rdcu_modifierQuestionnaire
skinparam style strictuml
skinparam defaultfontname Verdana
title CU05c - RDCU - modifierQuestionnaire(nom: string, description: string, etat: string, nomQuestionAssociee: string, nomQuestionDissociee: string, ordreQuestion: string[])
participant ":ControleurQuestionnaire" as cq
->cq : modifierQuestionnaire(\n courriel: string,\n sigle: string,\n descriptionQuestionnaire : JSON)
note right : selon Contrôleur\n(ControleurQuestionnaire est un sous-système)
note left of cq : descriptionQuestionnaire = { \n nom: string,\n description: string,\n etat: boolean,\n nomQuestionAssociee: string,\n nomQuestionDissociee: string,\n ordreQuestion: string[]\n}

participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Cours<String, Cours>" as lc
participant "cours:Cours" as cours
participant "listeQuestionnaires:Questionnaire[]" as carray
participant "questionnaireAModifier:Questionnaire" as q
cq -> sing: enseignant = getUtilisateur(courriel : string)
note right : selon Expert\n(Utilisateur détient enseignant)
cq -> ens: modifierQuestionnaire(\n sigle: string,\n descriptionQuestionnaire : JSON)
note right : selon Expert\n(Enseignant connait sa liste de cours)
ens -> lc: cours = find(sigle: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> cours: modifierQuestionnaire(descriptionQuestionnaire : JSON)
note right : selon Expert\n(Cours connait sa liste de Questionnaire)
cours -> carray: questionnaireAModifier = find(nom: string)
note right : selon Expert\n(Questionnaire[] contient les Questionnaire)
cours -> q: questionnaireAModifier = questionnairemodifierQuestionnaire(descriptionQuestionnaire : JSON)
note left of q : selon Expert\n(Questionnaire connait la façon de se modifier)
q -> q: reordonnerQuestionnaires(\n  ordreQuestions: string[])
note left of q : selon Expert\n(Questionnaire connait la façon de réordonner ses questions)
q -> q: ajouterQuestion(\n  nomQuestionAssociee: string)
note left of q : selon Expert\n(Questionnaire connait la façon d'associer une nouvelle question)
q -> q: retirerQuestion(\n  nomQuestionDissociee: string)
note left of q : selon Expert\n(Questionnaire connait la façon de dissocier une question existante)
ens <-- cours: questionnaireAModifier
cq <-- ens: questionnaireAModifier
<-- cq: questionnaireAModifier
@enduml

@startuml rdcu_retirerQuestionnaire
skinparam style strictuml
skinparam defaultfontname Verdana
title RDCU - retirerQuestionnaire()
participant ":ControleurQuestionnaire" as cc
->cc : retirerQuestionnaire(courriel : String,\n sigle: String,\n nomQuestionnaire: String)
note right : selon Contrôleur\n(ControleurQuestionnaire est un sous-système)
participant ":Utilisateur" as sing
participant "enseignant:Enseignant" as ens
participant "listeCours:Map<String, Cours>" as lc
participant "listeQuestionnaires:Questionnaire[]" as carray
cc -> sing: enseignant = getUtilisateur(courriel : String)
note right : selon Expert\n(Utilisateur détient enseignant)
cc -> ens: retirerQuestionnaire(sigle: String,\n nomQuestionnaire: String)
note right : selon Expert\n (Enseignant possède les cours)
ens -> lc: cours = get(sigle: String)
note right : selon Expert\n(listeCours contient les Cours)
ens -> carray: questionnaireAEnlever = find(id: string)
note right : selon Expert\n(Enseignant possède les informations du cours)
ens -> carray: index = indexOf(questionnaireAEnlever)
note right : selon Expert\n(Enseignant possède les informations du cours)
ens -> carray: splice(index, 1)
note left of carray : selon Expert\n(Questionnaire[] contient les Questionnaire)
@enduml
