protected function buildResponseDeclaration($responseIdentifier, $validation)
 {
     $responseDeclaration = new ResponseDeclaration($responseIdentifier);
     $responseDeclaration->setCardinality(Cardinality::MULTIPLE);
     $responseDeclaration->setBaseType(BaseType::DIRECTED_PAIR);
     /** @var clozeassociation_validation $validation */
     $validationValues = $validation->get_valid_response()->get_value();
     $validationScore = $validation->get_valid_response()->get_score();
     // Build correct response
     // Try to handle `null` values in `valid_response` `value`s
     $values = new ValueCollection();
     foreach ($validationValues as $index => $validResponse) {
         if (!isset($this->possibleResponsesMap[$validResponse])) {
             throw new MappingException('Invalid or missing missing valid response `' . $validResponse . '``');
         }
         if (!empty($validResponse)) {
             $first = ClozeassociationMapper::GAP_IDENTIFIER_PREFIX . $index;
             $second = ClozeassociationMapper::GAPCHOICE_IDENTIFIER_PREFIX . $this->possibleResponsesMap[$validResponse];
             $values->attach(new Value(new QtiDirectedPair($first, $second)));
         }
     }
     if ($values->count() > 0) {
         $correctResponse = new CorrectResponse($values);
         $responseDeclaration->setCorrectResponse($correctResponse);
     }
     return $responseDeclaration;
 }