Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 86 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
ModeleToAnalyseConverter | |
0.00% |
0 / 86 |
|
0.00% |
0 / 6 |
420 | |
0.00% |
0 / 1 |
createFromModeleAnalyse | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
convertCriteres | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
12 | |||
convertQuestionsConformite | |
0.00% |
0 / 10 |
|
0.00% |
0 / 1 |
6 | |||
convertScenariosMenace | |
0.00% |
0 / 25 |
|
0.00% |
0 / 1 |
72 | |||
convertMesuresProtections | |
0.00% |
0 / 14 |
|
0.00% |
0 / 1 |
6 | |||
convertDistinctMesureProtections | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace App\Domain\AIPD\Converter; |
6 | |
7 | use App\Domain\AIPD\Dictionary\ReponseCritereFondamentalDictionary; |
8 | use App\Domain\AIPD\Model\AnalyseImpact; |
9 | use App\Domain\AIPD\Model\AnalyseMesureProtection; |
10 | use App\Domain\AIPD\Model\AnalyseQuestionConformite; |
11 | use App\Domain\AIPD\Model\AnalyseScenarioMenace; |
12 | use App\Domain\AIPD\Model\CriterePrincipeFondamental; |
13 | use App\Domain\AIPD\Model\ModeleAnalyse; |
14 | use App\Domain\AIPD\Model\ModeleQuestionConformite; |
15 | use App\Domain\AIPD\Model\ModeleScenarioMenace; |
16 | |
17 | /** |
18 | * This class is meant to create an AnalyseImpact object from a ModeleAnalyse |
19 | * It populates every information designed by the ModeleAnalyse to the AnalyseImpact |
20 | * so that it's complety independant from the ModeleAnalyse at the moment it is created. |
21 | */ |
22 | class ModeleToAnalyseConverter |
23 | { |
24 | public static function createFromModeleAnalyse(ModeleAnalyse $modeleAnalyse): AnalyseImpact |
25 | { |
26 | $analyseImpact = new AnalyseImpact(); |
27 | $analyseImpact->setModeleAnalyse($modeleAnalyse->getNom()); |
28 | $analyseImpact->setLabelAmeliorationPrevue($modeleAnalyse->getLabelAmeliorationPrevue()); |
29 | $analyseImpact->setLabelInsatisfaisant($modeleAnalyse->getLabelInsatisfaisant()); |
30 | $analyseImpact->setLabelSatisfaisant($modeleAnalyse->getLabelSatisfaisant()); |
31 | $analyseImpact->setCriterePrincipeFondamentaux(self::convertCriteres($analyseImpact, $modeleAnalyse->getCriterePrincipeFondamentaux())); |
32 | $analyseImpact->setQuestionConformites(self::convertQuestionsConformite($analyseImpact, $modeleAnalyse->getQuestionConformites())); |
33 | |
34 | $mesuresProtections = self::convertDistinctMesureProtections($modeleAnalyse, $analyseImpact); |
35 | $analyseImpact->setMesureProtections($mesuresProtections); |
36 | $analyseImpact->setScenarioMenaces(self::convertScenariosMenace($analyseImpact, $modeleAnalyse->getScenarioMenaces(), $mesuresProtections)); |
37 | |
38 | return $analyseImpact; |
39 | } |
40 | |
41 | private static function convertCriteres(AnalyseImpact $analyseImpact, $criteres): array |
42 | { |
43 | $res = []; |
44 | foreach ($criteres as $criterePrincipeFondamental) { |
45 | /** @var CriterePrincipeFondamental $clone */ |
46 | $clone = clone $criterePrincipeFondamental; |
47 | $clone->setAnalyseImpact($analyseImpact); |
48 | $clone->setModeleAnalyse(null); |
49 | |
50 | $clone->setCanBeModified(true); |
51 | if (ReponseCritereFondamentalDictionary::REPONSE_NON_RENSEIGNE !== $clone->getReponse()) { |
52 | $clone->setCanBeModified(false); |
53 | } |
54 | $res[] = $clone; |
55 | } |
56 | |
57 | return $res; |
58 | } |
59 | |
60 | private static function convertQuestionsConformite(AnalyseImpact $analyseImpact, $questionsConformite): array |
61 | { |
62 | $res = []; |
63 | /** @var ModeleQuestionConformite $questionModele */ |
64 | foreach ($questionsConformite as $questionModele) { |
65 | $question = new AnalyseQuestionConformite($questionModele->getQuestion(), $questionModele->getPosition()); |
66 | $question->setAnalyseImpact($analyseImpact); |
67 | $question->setTexteConformite($questionModele->getTexteConformite()); |
68 | $question->setTexteNonConformiteMajeure($questionModele->getTexteNonConformiteMajeure()); |
69 | $question->setTexteNonConformiteMineure($questionModele->getTexteNonConformiteMineure()); |
70 | $question->setIsJustificationObligatoire($questionModele->isJustificationObligatoire()); |
71 | $res[] = $question; |
72 | } |
73 | |
74 | return $res; |
75 | } |
76 | |
77 | private static function convertScenariosMenace(AnalyseImpact $analyseImpact, $scenariosMenaces, array $mesuresProtections): array |
78 | { |
79 | $res = []; |
80 | /** @var ModeleScenarioMenace $scenarioModele */ |
81 | foreach ($scenariosMenaces as $scenarioModele) { |
82 | $scenario = new AnalyseScenarioMenace(); |
83 | $scenario->setNom($scenarioModele->getNom()); |
84 | $scenario->setIsVisible($scenarioModele->isVisible()); |
85 | $scenario->setIsDisponibilite($scenarioModele->isDisponibilite()); |
86 | $scenario->setIsIntegrite($scenarioModele->isIntegrite()); |
87 | $scenario->setIsConfidentialite($scenarioModele->isConfidentialite()); |
88 | $scenario->setVraisemblance($scenarioModele->getVraisemblance()); |
89 | $scenario->setGravite($scenarioModele->getGravite()); |
90 | $scenario->setCanGraviteBeModified('vide' === $scenarioModele->getGravite()); |
91 | $scenario->setCanVraisemblanceBeModified('vide' === $scenarioModele->getVraisemblance()); |
92 | $scenario->setPrecisions($scenarioModele->getPrecisions()); |
93 | $scenario->setAnalyseImpact($analyseImpact); |
94 | |
95 | foreach ($scenarioModele->getMesuresProtections() as $scenarioMesures) { |
96 | /** @var AnalyseMesureProtection $mesuresProtection */ |
97 | foreach ($mesuresProtections as $mesuresProtection) { |
98 | if ($scenarioMesures->getId()->toString() === $mesuresProtection->getOriginId()) { |
99 | $mesuresProtection->addScenarioMenace($scenario); |
100 | $scenario->addMesureProtection($mesuresProtection); |
101 | continue; |
102 | } |
103 | } |
104 | } |
105 | // $scenario->setMesuresProtections(self::convertMesuresProtections($scenarioModele, $scenario, $analyseImpact)); |
106 | if ($scenarioModele->isDisponibilite() || $scenarioModele->isIntegrite() || $scenarioModele->isConfidentialite()) { |
107 | $scenario->setCanDicBeModified(false); |
108 | } else { |
109 | $scenario->setCanDicBeModified(true); |
110 | } |
111 | $res[] = $scenario; |
112 | } |
113 | |
114 | return $res; |
115 | } |
116 | |
117 | private static function convertMesuresProtections(ModeleScenarioMenace $modeleScenarioMenace, AnalyseScenarioMenace $analyseScenarioMenace, AnalyseImpact $analyseImpact): array |
118 | { |
119 | $res = []; |
120 | foreach ($modeleScenarioMenace->getMesuresProtections() as $mesureProtection) { |
121 | $analyseMesure = new AnalyseMesureProtection(); |
122 | $analyseMesure->setNom($mesureProtection->getNom()); |
123 | $analyseMesure->setNomCourt($mesureProtection->getNomCourt()); |
124 | $analyseMesure->setLabelLivrable($mesureProtection->getLabelLivrable()); |
125 | $analyseMesure->setPhrasePreconisation($mesureProtection->getPhrasePreconisation()); |
126 | $analyseMesure->setDetail($mesureProtection->getDetail()); |
127 | $analyseMesure->setPoidsVraisemblance($mesureProtection->getPoidsVraisemblance()); |
128 | $analyseMesure->setPoidsGravite($mesureProtection->getPoidsGravite()); |
129 | |
130 | // $analyseMesure->setScenarioMenace($analyseScenarioMenace); |
131 | $analyseMesure->setOriginId($mesureProtection->getId()->toString()); |
132 | $analyseMesure->setAnalyseImpact($analyseImpact); |
133 | |
134 | $res[] = $analyseMesure; |
135 | } |
136 | |
137 | return $res; |
138 | } |
139 | |
140 | private static function convertDistinctMesureProtections(ModeleAnalyse $modeleAnalyse, AnalyseImpact $analyseImpact) |
141 | { |
142 | $res = []; |
143 | foreach ($modeleAnalyse->getScenarioMenaces() as $scenario) { |
144 | foreach ($scenario->getMesuresProtections() as $mesureProtection) { |
145 | if (!array_key_exists((string) $mesureProtection->getId(), $res)) { |
146 | $analyseMesure = new AnalyseMesureProtection(); |
147 | $analyseMesure->setNom($mesureProtection->getNom()); |
148 | $analyseMesure->setNomCourt($mesureProtection->getNomCourt()); |
149 | $analyseMesure->setLabelLivrable($mesureProtection->getLabelLivrable()); |
150 | $analyseMesure->setPhrasePreconisation($mesureProtection->getPhrasePreconisation()); |
151 | $analyseMesure->setDetail($mesureProtection->getDetail()); |
152 | $analyseMesure->setPoidsVraisemblance($mesureProtection->getPoidsVraisemblance()); |
153 | $analyseMesure->setPoidsGravite($mesureProtection->getPoidsGravite()); |
154 | $analyseMesure->setOriginId($mesureProtection->getId()->toString()); |
155 | $analyseMesure->setAnalyseImpact($analyseImpact); |
156 | $res[$mesureProtection->getId()->toString()] = $analyseMesure; |
157 | } |
158 | } |
159 | } |
160 | |
161 | // Set d'abord le tableau de mesure protection, puis set les scenario avec leur mesure et les faire pointer sur celles du tableau |
162 | |
163 | return array_values($res); |
164 | } |
165 | } |