public function prepareMetaDataColumn(RecordMetaData $recordMetaData, ColumnMetaData $column, $originalColumnName) {
        parent::prepareMetaDataColumn($recordMetaData, $column, $originalColumnName);

        $columnPublicName = isset($originalColumnName) ? $this->publicNameGenerator->generate($originalColumnName) : $column->name;

        $column->publicName = $columnPublicName;
    }
    final public function doAfterProcessingRecords(RecordMetaData $recordMetaData, $fileProcessedCompletely) {
        parent::doAfterProcessingRecords($recordMetaData, $fileProcessedCompletely);

        // we need to process 'minimum' number of records or process whole file to proceed with data detection result finalization
        if (!isset($this->minimumRecordCount) || ($fileProcessedCompletely || ($this->processedRecordCount >= $this->minimumRecordCount))) {
            $this->doAfterProcessingRecordsImpl($recordMetaData, $fileProcessedCompletely);
        }
    }
    public function doAfterLineParsed(array &$record) {
        parent::doAfterLineParsed($record);

        foreach ($record as &$columnValue) {
            $columnValue = mb_convert_encoding($columnValue, $this->newEncoding, $this->oldEncoding);
        }
        unset($columnValue);
    }
    public function submitRecord(RecordMetaData $recordMetaData, $recordNumber, array &$record) {
        parent::submitRecord($recordMetaData, $recordNumber, $record);

        echo t("record[@recordNumber]:\n", array('@recordNumber' => $recordNumber));
        foreach ($record as $columnName => $columnValue) {
            echo "  $columnName = $columnValue\n";
        }
    }
    public function doBeforeRecordSubmitted(RecordMetaData $recordMetaData, $recordNumber, array &$record) {
        $result = parent::doBeforeRecordSubmitted($recordMetaData, $recordNumber, $record);

        if ($result) {
            $isEmpty = $this->checkIfRecordEmpty($recordMetaData, $record);
            if ($isEmpty) {
                drupal_set_message(t('Empty record in line @lineNumber was ignored', array('@lineNumber' => $recordNumber)), 'warning');

                $result = FALSE;
            }
        }

        return $result;
    }
    public function doBeforeRecordSubmitted(RecordMetaData $recordMetaData, $recordNumber, array &$record) {
        $result = parent::doBeforeRecordSubmitted($recordMetaData, $recordNumber, $record);

        if ($result) {
            foreach ($record as &$columnValue) {
                if (!is_string($columnValue)) {
                    continue;
                }

                if (strlen($columnValue) > $this->maxValueLength) {
                    $columnValue = substr($columnValue, 0, MathHelper::max($this->maxValueLength - 3, 0)) . '...';
                }
            }
            unset($columnValue);
        }

        return $result;
    }
    public function prepareMetaDataColumn(RecordMetaData $recordMetaData, ColumnMetaData $column, $originalColumnName) {
        parent::prepareMetaDataColumn($recordMetaData, $column, $originalColumnName);

        // at first we try to prepare public name ...
        $columnPublicName = isset($originalColumnName) ? $this->publicNameGenerator->generate($originalColumnName) : NULL;

        // ... then we use that 'cleaned' public name to generate column name
        $columnName = isset($columnPublicName) ? $this->nameGenerator->generate($columnPublicName) : NULL;

        // checking if the name is too long
        $adjustedColumnName = $this->adjustColumnName($recordMetaData, $columnName);
        if (isset($adjustedColumnName)) {
            if ($adjustedColumnName === FALSE) {
                // there is nothing can be done to support meaningful name
                $columnName = NULL;
            }
            else {
                // the name was adjusted and is ready to be used
                $columnName = $adjustedColumnName;
            }
        }
        else {
            // trying to add numeric suffix
            $nameIndex = 2;
            while (TRUE) {
                $adjustedColumnName = $this->adjustColumnName($recordMetaData, $columnName . '_' . $nameIndex);
                if (isset($adjustedColumnName)) {
                    if ($adjustedColumnName === FALSE) {
                        // there is nothing can be done to support meaningful name
                        $columnName = NULL;
                    }
                    else {
                        // the name was adjusted and is ready to be used
                        $columnName = $adjustedColumnName;
                    }
                    break;
                }

                $nameIndex++;
            }
        }

        // generating indexed column name
        if (!isset($columnName)) {
            $index = 0;
            do {
                $index++;
                $columnName = (isset($this->columnPrefixName) ? $this->columnPrefixName : 'c') . $index;
            }
            while ($recordMetaData->findColumn($columnName) != NULL);

            // if length of 'hardcoded' name is greater than allowed we cannot proceed any further
            if (isset($this->maximumColumnNameLength) && (strlen($columnName) > $this->maximumColumnNameLength)) {
                throw new UnsupportedOperationException(t(
                    'System name cannot be generated for %columnName column. Maximum allowed length is %maximumColumnNameLength',
                    array('%columnName' => $originalColumnName, '%maximumColumnNameLength' => $this->maximumColumnNameLength)));
            }
        }

        $column->name = $columnName;
    }
    public function abort() {
        parent::abort();

        $this->publishExceptions(FALSE);
    }
    public function abort() {
        $transaction = TransactionManager::getInstance()->getTransaction($this->datasourceName);
        $transaction->rollback();

        parent::abort();
    }
 public function __construct($skipRecordCount = 0, $limitRecordCount = NULL) {
     parent::__construct();
     $this->skipRecordCount = $skipRecordCount;
     $this->limitRecordCount = $limitRecordCount;
 }