public function testResolveForNewData()
 {
     $customFieldsInstructionData = new CustomFieldsInstructionData();
     $instructionsData[CustomFieldsInstructionData::ADD_MISSING_VALUES] = array('a', 'b', 'c');
     $instructionsData[CustomFieldsInstructionData::MAP_MISSING_VALUES] = array('d' => 'dx', 'e' => 'ex', 'f' => 'fx');
     $customFieldsInstructionData->addByInstructionsDataAndColumnName($instructionsData, 'column_0');
     $newCustomFieldsInstructionData = new CustomFieldsInstructionData();
     $instructionsData[CustomFieldsInstructionData::ADD_MISSING_VALUES] = array('a2', 'b', 'c2');
     $instructionsData[CustomFieldsInstructionData::MAP_MISSING_VALUES] = array('d2' => 'd2x', 'e' => 'ex', 'f2' => 'f2x');
     $newCustomFieldsInstructionData->addByInstructionsDataAndColumnName($instructionsData, 'column_0');
     $customFieldsInstructionData->resolveForNewData($newCustomFieldsInstructionData);
     $compareData = array('column_0' => array('a', 'b', 'c', 'a2', 'c2'));
     $this->assertEquals($compareData, $customFieldsInstructionData->getMissingValuesToAdd());
     $compareData = array('column_0' => array('d' => 'dx', 'd2' => 'd2x', 'e' => 'ex', 'f' => 'fx', 'f2' => 'f2x'));
     $this->assertEquals($compareData, $customFieldsInstructionData->getMissingValuesToMap());
     $this->assertTrue($customFieldsInstructionData->hasDataByColumnName('column_0'));
     $this->assertFalse($customFieldsInstructionData->hasDataByColumnName('column_1'));
     $compareData = array(CustomFieldsInstructionData::ADD_MISSING_VALUES => array('a', 'b', 'c', 'a2', 'c2'), CustomFieldsInstructionData::MAP_MISSING_VALUES => array('d' => 'dx', 'd2' => 'd2x', 'e' => 'ex', 'f' => 'fx', 'f2' => 'f2x'));
     $this->assertEquals($compareData, $customFieldsInstructionData->getDataByColumnName('column_0'));
 }
 /**
  * Given an array of import instructions data, merge this data into the mapping data.
  * @param array $mappingData
  * @param CustomFieldsInstructionData $customFieldsInstructionData
  */
 protected static function resolveMappingData(&$mappingData, CustomFieldsInstructionData $customFieldsInstructionData)
 {
     assert('is_array($mappingData)');
     foreach ($customFieldsInstructionData->getMissingValuesToAdd() as $columnName => $columnData) {
         foreach ($columnData as $missingValueToAdd) {
             if (!isset($mappingData[$columnName])) {
                 $mappingData[$columnName] = array();
             }
             if (!isset($mappingData[$columnName]['customFieldsInstructionData'])) {
                 $mappingData[$columnName]['customFieldsInstructionData'] = array();
             }
             if (!isset($mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::ADD_MISSING_VALUES])) {
                 $mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::ADD_MISSING_VALUES] = array();
             }
             if (!in_array($missingValueToAdd, $mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::ADD_MISSING_VALUES])) {
                 $mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::ADD_MISSING_VALUES][] = $missingValueToAdd;
             }
         }
     }
     foreach ($customFieldsInstructionData->getMissingValuesToMap() as $columnName => $columnData) {
         foreach ($columnData as $missingValueToMap => $mapToValue) {
             if (!isset($mappingData[$columnName])) {
                 $mappingData[$columnName] = array();
             }
             if (!isset($mappingData[$columnName]['customFieldsInstructionData'])) {
                 $mappingData[$columnName]['customFieldsInstructionData'] = array();
             }
             if (!isset($mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::MAP_MISSING_VALUES])) {
                 $mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::MAP_MISSING_VALUES] = array();
             }
             if (!isset($mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::MAP_MISSING_VALUES][$missingValueToMap])) {
                 $mappingData[$columnName]['customFieldsInstructionData'][CustomFieldsInstructionData::MAP_MISSING_VALUES][$missingValueToMap] = $mapToValue;
             }
         }
     }
 }
 /**
  * Appends missingValuesToAdd and missingValuesToMap with new data
  * @param CustomFieldsInstructionData $newInstructionsData
  */
 public function resolveForNewData(CustomFieldsInstructionData $newInstructionsData)
 {
     foreach ($newInstructionsData->getMissingValuesToAdd() as $columnName => $columnData) {
         foreach ($columnData as $missingValueToAdd) {
             $this->resolveMissingValueToAdd($missingValueToAdd, $columnName);
         }
     }
     foreach ($newInstructionsData->getMissingValuesToMap() as $columnName => $columnData) {
         foreach ($columnData as $missingValueToMap => $mapToValue) {
             $this->resolveMissingValueToMap($missingValueToMap, $mapToValue, $columnName);
         }
     }
 }