Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 86
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
ModeleToAnalyseConverter
0.00% covered (danger)
0.00%
0 / 86
0.00% covered (danger)
0.00%
0 / 6
420
0.00% covered (danger)
0.00%
0 / 1
 createFromModeleAnalyse
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 convertCriteres
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
12
 convertQuestionsConformite
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
6
 convertScenariosMenace
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
72
 convertMesuresProtections
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
6
 convertDistinctMesureProtections
0.00% covered (danger)
0.00%
0 / 16
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3declare(strict_types=1);
4
5namespace App\Domain\AIPD\Converter;
6
7use App\Domain\AIPD\Dictionary\ReponseCritereFondamentalDictionary;
8use App\Domain\AIPD\Model\AnalyseImpact;
9use App\Domain\AIPD\Model\AnalyseMesureProtection;
10use App\Domain\AIPD\Model\AnalyseQuestionConformite;
11use App\Domain\AIPD\Model\AnalyseScenarioMenace;
12use App\Domain\AIPD\Model\CriterePrincipeFondamental;
13use App\Domain\AIPD\Model\ModeleAnalyse;
14use App\Domain\AIPD\Model\ModeleQuestionConformite;
15use 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 */
22class 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}