public function finish() {
        parent::finish();
        if ($this->isRowActionsEnabled() && !$this->hasValueViewer(static::ROW_ACTIONS_COLUMN_NAME)) {
            $this->addValueViewer(static::ROW_ACTIONS_COLUMN_NAME, null);
        }
        if ($this->isNestedViewEnabled() && !$this->hasValueViewer($this->getColumnNameForNestedView())) {
            $this->addValueViewer($this->getColumnNameForNestedView(), DataGridColumn::create()->setIsVisible(false));
        }
        if ($this->isRowsReorderingEnabled()) {
            $reorderingColumns = $this->getRowsPositioningColumns();
            $allowedColumnTypes = [Column::TYPE_INT, Column::TYPE_FLOAT, Column::TYPE_UNIX_TIMESTAMP];
            foreach ($reorderingColumns as $columnName) {
                if (!$this->hasValueViewer($columnName)) {
                    throw new NotFoundException(
                        "Column '$columnName' provided for reordering was not found within declared data grid columns"
                    );
                }
                $valueViewer = $this->getValueViewer($columnName);
                if (!$valueViewer->isLinkedToDbColumn() && $valueViewer->getTableColumn()->isItExistsInDb()) {
                    throw new \UnexpectedValueException(
                        "Column '$columnName' provided for reordering must be linked to a column that exists in database"
                    );
                }
                $colType = $valueViewer->getTableColumn()->getType();
                if (!in_array($colType, $allowedColumnTypes, true)) {
                    throw new \UnexpectedValueException(
                        "Column '$columnName' provided for reordering should be of a numeric type (int, float, unix ts)."
                        . "'{$colType}' type is not acceptable'"
                    );
                }
                $valueViewer->setIsSortable(true);
            }
        }
    }