/**
  * Méthode permettant de localiser la partie du JDD à lier à l'élément du block.
  *
  * TODO: Unifier les deux méthodes en une seule.
  * TODO: A vérifier
  *
  * Liée à EiTestSetBlockStack->getDataFromDataSet
  *
  * @param EiTestSet $testSet
  * @param EiVersionStructure $block
  * @param EiTestSetBlockStack $previousStack
  * @param EiTestSetBlockStack $parentStack
  * @return mixed|null
  */
 public function getDataFromDataSet(EiTestSet $testSet, EiVersionStructure $block, EiTestSetBlockStack $previousStack = null, EiTestSetBlockStack $parentStack = null)
 {
     /** @var EiTestSetDataSetTable $tableDSS */
     $tableDSS = Doctrine_Core::getTable("EiTestSetDataSet");
     $mapping = $block->getMappingDataSet(EiBlockDataSetMapping::$TYPE_IN);
     $dssStr = null;
     // Cas où il y a un mapping et que le parent est nul : On prend le premier élément que l'on trouve.
     if ($parentStack == null && $mapping != null) {
         $dssStr != null ? $tableDSS->getRelatedDataFromUniqueDataSetStructure($testSet->getId(), $mapping) : null;
     } elseif ($mapping != null) {
         // On vérifie que le block en question est une boucle.
         if ($block->isEiLoop()) {
             // On récupère le contexte du père.
             $contexte = $parentStack->getContext();
             $index = 1;
             //                var_dump("DataSet Père : " . $parentStack->getEiTestSetDatasetId());
             //                var_dump("Contexte DataSet Père : " . $contexte);
             // Si le block courant est de même nature que le block précédent
             if ($parentStack->getEiVersionStructureId() != $block->getId() && $block->getId() == $previousStack->getEiVersionStructureId()) {
                 //                    var_dump("DataSet Structure CAS 1");
                 // On vérifie s'il s'agit de la même boucle mais concerne une partie différente.
                 if ($previousStack->getPartIndex() < $previousStack->getPartsCount()) {
                     $index = $previousStack->getRepetitionIndex();
                     $contexte .= "-" . $index;
                 } else {
                     $index = $previousStack->getRepetitionIndex() + 1;
                     $contexte .= "-" . $index;
                 }
             } elseif ($parentStack->getEiVersionStructureId() != $block->getId()) {
                 //                    var_dump("DataSet Structure CAS 2");
                 $parentStr = $parentStack->getEiTestSetDataSet() != null ? $parentStack->getEiTestSetDataSet()->getEiDataSetStructure() : null;
                 if ($parentStr != null && $mapping->getEiDataSetStructureMapping()->getNode()->isDescendantOf($parentStr)) {
                     //                        var_dump("DataSet Structure CAS 2.1");
                     $parentMapping = $parentStr != null ? $parentStr->getId() : null;
                     $myMappingParent = $mapping->getEiDataSetStructureMapping()->getEiDatasetStructureParentId();
                     if ($parentMapping == null || $myMappingParent == $parentMapping) {
                         $contexte .= "-1";
                     } else {
                         if (preg_match("/([0-9]+)\$/", $contexte, $matched)) {
                             $length = strlen($matched[1]);
                         } else {
                             $length = 1;
                         }
                         $contexte = substr($contexte, 0, -$length) . 1;
                     }
                 } else {
                     //                        var_dump("DataSet Structure CAS 2.2");
                     $contexteArray = array();
                     for ($cpt = 0; $cpt <= $mapping->getEiDataSetStructureMapping()->getLevel(); $cpt++) {
                         $contexteArray[] = 1;
                     }
                     $contexte = implode("-", $contexteArray);
                     //                        var_dump("New context : " . $contexte);
                 }
             } else {
                 //                    var_dump("DataSet Structure CAS 3");
                 if (preg_match("/([0-9]+)\$/", $contexte, $matched)) {
                     $length = strlen($matched[1]);
                 } else {
                     $length = 1;
                 }
                 $contexte = substr($contexte, 0, -$length);
                 // On vérifie s'il s'agit de la même boucle mais concerne une partie différente.
                 if (!$parentStack->isComplete()) {
                     $index = $parentStack->getRepetitionIndex();
                 } else {
                     $index = $parentStack->getRepetitionIndex() + 1;
                 }
                 $contexte .= $index;
                 //                    var_dump($parentStack->getEiVersionStructureId(), $block->getId());
                 //                    var_dump($contexte);
             }
             $dssStr = $tableDSS->getDataFromContext($testSet->getId(), $mapping->getEiDatasetStructureId(), $contexte, $index);
         }
     }
     return $dssStr;
 }