1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#include "importmanager.h"
#include "services/pluginmanager.h"
#include "services/notifymanager.h"
#include "plugins/importplugin.h"
#include "importworker.h"
#include "db/db.h"
#include "common/unused.h"
#include <QThreadPool>
#include <QDebug>
ImportManager::ImportManager()
{
}
QStringList ImportManager::getImportDataSourceTypes() const
{
QStringList types;
for (ImportPlugin* plugin : PLUGINS->getLoadedPlugins<ImportPlugin>())
types << plugin->getDataSourceTypeName();
return types;
}
ImportPlugin* ImportManager::getPluginForDataSourceType(const QString& dataSourceType) const
{
for (ImportPlugin* plugin : PLUGINS->getLoadedPlugins<ImportPlugin>())
{
if (plugin->getDataSourceTypeName() == dataSourceType)
return plugin;
}
return nullptr;
}
void ImportManager::configure(const QString& dataSourceType, const ImportManager::StandardImportConfig& config)
{
plugin = getPluginForDataSourceType(dataSourceType);
importConfig = config;
}
void ImportManager::importToTable(Db* db, const QString& table, bool async)
{
this->db = db;
this->table = table;
if (importInProgress)
{
emit importFailed();
qCritical() << "Tried to import while other import was in progress.";
return;
}
if (!db->isOpen())
{
emit importFailed();
qCritical() << "Tried to import into closed database.";
return;
}
if (!plugin)
{
emit importFailed();
qCritical() << "Tried to import, while ImportPlugin was null.";
return;
}
importInProgress = true;
ImportWorker* worker = new ImportWorker(plugin, &importConfig, db, table);
connect(worker, SIGNAL(finished(bool, int)), this, SLOT(finalizeImport(bool, int)));
connect(worker, SIGNAL(createdTable(Db*,QString)), this, SLOT(handleTableCreated(Db*,QString)));
connect(this, SIGNAL(orderWorkerToInterrupt()), worker, SLOT(interrupt()));
if (async)
QThreadPool::globalInstance()->start(worker);
else
{
worker->run();
delete worker;
}
}
void ImportManager::interrupt()
{
emit orderWorkerToInterrupt();
}
bool ImportManager::isAnyPluginAvailable()
{
return PLUGINS->getLoadedPlugins<ImportPlugin>().size() > 0;
}
void ImportManager::finalizeImport(bool result, int rowCount)
{
importInProgress = false;
emit importFinished();
if (result)
{
notifyInfo(tr("Imported data to the table '%1' successfully. Number of imported rows: %2").arg(table, QString::number(rowCount)));
emit importSuccessful();
}
else
emit importFailed();
}
void ImportManager::handleTableCreated(Db* db, const QString& table)
{
UNUSED(table);
emit schemaModified(db);
}
|