# clone *.dmp files
        for dmp_file in glob(os.path.join(original_saved_data_path, "*.dmp")):
            filename = os.path.basename(dmp_file)
            dst = os.path.join(new_saved_data_path, filename)
            copy2(dmp_file, dst)
            os.chmod(dst, 0777)
            os.chown(dst, config.file_owner_uid, config.file_owner_gid)
    except IOError, e:
        raise Exception("Cannot copy file into %s. %s" % (dst, e))
    except OSError, e:
        raise Exception("Cannot copy file into  %s. %s" % (dst, e))

    # Restore validation files from saved_data and run validation to create all required files.
    jfile = JFileValidator(config.report_root, new_element_id, None)
    jfile.restore_validation_data()
    reportValidator = ReportValidator()
    reportValidator.init(new_element_id)
    reportValidator.report_generation()

#        print simplejson.dumps({'status': 'OK', 'message': 'report %s duplicated to %s successfully' % (original_element_id, new_element_id)})
#    except Exception, message:
#        _logger.error("Report duplication. Report %s duplication failed. Exception %s" % (original_element_id, message))
#        log_traceback(_logger, traceback)
#        print simplejson.dumps({'status':'ERROR', 'message':'report %s duplication failed. %s' % (original_element_id, message)})


def _clone_relation_data(_db, object_id, tables, table_info, select_info, update_values):
    """
    Clone relation data.
    @param object_id: root record id, for example element_id
    @param tables: list of tables to copy (order is respected)
        try:
            res = self._db.Query("""SELECT dashboard_element.element_id
                            FROM dashboard_element
                        WHERE
                            dashboard_element.`type`='internal report'
                            AND element_id = %s""", (element_id, ))
        except MySQLdb.Error, message:
            self._logger.error("Report validator. Try to get element %s. SQL error %s" % (element_id, message))
            log_traceback(self._logger, traceback)
            print simplejson.dumps({'status':'ERROR', 'message':'SQL error %s' % message, 'fetched_rows': ''})
            sys.exit()
        if not res:
            print simplejson.dumps({'status':'ERROR', 'message':'incorrect report element id', 'fetched_rows':''})
            sys.exit()
        try:
            report = ReportValidator()
            report.set_logger(self._logger)
            #report.init(element_id)
#            validator_commands = {'data_fetch': report.data_fetch,
#                                'metadata_update': report.metadata_update,
#                                'saving_chart': report.saving_chart,
#                                'data_generation': report.data_generation,
#                                'report_generation': report.report_generation,
#                                'pivot_generation': report.pivot_generation,
#                                'chart_generation': report.chart_generation,
#                                'restore_data': report.restore_data,
#                                'saving_report': report.saving_report
#                                }
#            fetched_rows = validator_commands.get(validator_command, self.unknown_command)(id1)
            command = None
            params = None