/**
  *
  * @return \Gems_Task_TaskRunnerBatch
  */
 protected function getImportMergeBatch()
 {
     $batch = $this->loader->getTaskRunnerBatch('track_import_create_' . $this->formData['importId']);
     $import = $this->loadImportData();
     $batch->setVariable('import', $import);
     $batch->setVariable('trackEngine', $this->trackEngine);
     if ($batch->isFinished()) {
         return $batch;
     }
     if (!$batch->isLoaded()) {
         $batch->addTask('Tracker\\Merge\\MergeTrackImportTask', $this->formData);
         $fieldDef = $this->trackEngine->getFieldsDefinition();
         foreach ($import['fields'] as $lineNr => &$fieldData) {
             $field = $fieldDef->getFieldByOrder($fieldData['gtf_id_order']);
             if ($field instanceof FieldInterface) {
                 $fieldData['gtf_id_field'] = $field->getFieldId();
             }
             $batch->addTask('Tracker\\Import\\CreateTrackFieldImportTask', $lineNr, $fieldData);
         }
         foreach ($import['rounds'] as $lineNr => $roundData) {
             $batch->addTask('Tracker\\Import\\CreateTrackRoundImportTask', $lineNr, $roundData);
         }
         if (isset($import['deactivateRounds'])) {
             foreach ($import['deactivateRounds'] as $roundId => $roundDescription) {
                 $batch->addTask('Tracker\\Merge\\DeactivateTrackFieldTask', $roundId, $roundDescription);
             }
         }
         $batch->addTask('AddTask', 'Tracker\\Import\\FinishTrackImport');
     }
     return $batch;
 }
 /**
  * Processes the field values and returns the new complete field data
  *
  * @param array $newFieldData The new field values, may be partial, field set by code overwrite field set by key
  * @param array $oldFieldData The old field values
  * @param \Gems_Tracker_Engine_TrackEngineInterface $trackEngine
  * @return array The processed data in the format key1 => val1, code1 => val1, key2 => val2
  */
 protected function _mergeFieldValues(array $newFieldData, array $oldFieldData, \Gems_Tracker_Engine_TrackEngineInterface $trackEngine)
 {
     $fieldMap = $trackEngine->getFieldsDefinition()->getFieldCodes();
     $output = array();
     foreach ($fieldMap as $key => $code) {
         if ($code) {
             if (isset($newFieldData[$code])) {
                 $output[$key] = $newFieldData[$code];
                 $output[$code] = $newFieldData[$code];
             } elseif (isset($newFieldData[$key])) {
                 $output[$key] = $newFieldData[$key];
                 $output[$code] = $newFieldData[$key];
             } elseif (isset($oldFieldData[$code])) {
                 $output[$key] = $oldFieldData[$code];
                 $output[$code] = $oldFieldData[$code];
             } elseif (isset($oldFieldData[$key])) {
                 $output[$key] = $oldFieldData[$key];
                 $output[$code] = $oldFieldData[$key];
             } else {
                 $output[$key] = null;
                 $output[$code] = null;
             }
         } else {
             if (isset($newFieldData[$key])) {
                 $output[$key] = $newFieldData[$key];
             } elseif (isset($oldFieldData[$key])) {
                 $output[$key] = $oldFieldData[$key];
             } else {
                 $output[$key] = null;
             }
         }
     }
     return $output;
 }