27 #include "../../../../common/Translator.h"
28 #include "../../../../dataaccess/datasource/DataSource.h"
29 #include "../../../../dataaccess/datasource/DataSourceFactory.h"
30 #include "../../../../dataaccess/datasource/DataSourceInfo.h"
31 #include "../../../../dataaccess/datasource/DataSourceManager.h"
32 #include "../../../widgets/Exception.h"
34 #include "Ui_MySQLConnectorDialogForm.h"
37 #include <boost/algorithm/string/case_conv.hpp>
38 #include <boost/lexical_cast.hpp>
39 #include <boost/uuid/random_generator.hpp>
40 #include <boost/uuid/uuid_io.hpp>
43 #include <QtGui/QMessageBox>
47 m_ui(new Ui::MySQLConnectorDialogForm)
53 m_ui->m_advancedConnectionOptionsGroupBox->hide();
82 if(m_datasource.get() != 0)
84 setConnectionInfo(m_datasource->getConnInfo());
86 m_ui->m_datasourceTitleLineEdit->setText(QString::fromStdString(m_datasource->getTitle()));
88 m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromStdString(m_datasource->getDescription()));
98 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Sorry! No data access driver loaded for MySQL data sources!"));
101 std::map<std::string, std::string> dsInfo;
103 getConnectionInfo(dsInfo);
106 m_driver.reset(te::da::DataSourceFactory::open(
"MYSQL", dsInfo));
108 if(m_driver.get() == 0)
109 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Could not open MySQL data source due to an unknown error!"));
111 QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
114 title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_schemaNameComboBox->currentText().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
116 if(m_datasource.get() == 0)
121 m_datasource->setConnInfo(dsInfo);
123 boost::uuids::basic_random_generator<boost::mt19937> gen;
124 boost::uuids::uuid u = gen();
125 std::string dsId = boost::uuids::to_string(u);
127 m_datasource->setId(dsId);
128 m_driver->setId(dsId);
129 m_datasource->setTitle(title.toStdString());
130 m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toStdString());
131 m_datasource->setAccessDriver(
"MYSQL");
132 m_datasource->setType(
"MYSQL");
136 m_driver->setId(m_datasource->getId());
137 m_datasource->setConnInfo(dsInfo);
138 m_datasource->setTitle(title.toStdString());
139 m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toStdString());
142 catch(
const std::exception& e)
144 QMessageBox::warning(
this,
145 tr(
"TerraLib Qt Components"),
151 QMessageBox::warning(
this,
152 tr(
"TerraLib Qt Components"),
153 tr(
"Unknown error while opening MySQL database!"));
166 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Sorry! No data access driver loaded for MySQL data sources!"));
169 std::map<std::string, std::string> dsInfo;
171 getConnectionInfo(dsInfo);
174 std::auto_ptr<te::da::DataSource> ds(te::da::DataSourceFactory::open(
"MYSQL", dsInfo));
177 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Could not open MySQL database!"));
179 QMessageBox::warning(
this,
180 tr(
"TerraLib Qt Components"),
181 tr(
"Data source is ok!"));
183 catch(
const std::exception& e)
185 QMessageBox::warning(
this,
186 tr(
"TerraLib Qt Components"),
191 QMessageBox::warning(
this,
192 tr(
"TerraLib Qt Components"),
193 tr(
"Unknown error while testing MySQL data source!"));
199 QMessageBox::warning(
this,
200 tr(
"TerraLib Qt Components"),
201 tr(
"Not implemented yet!\nWe will provide it soon!"));
210 QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
213 connInfo[
"MY_HOST_NAME"] = qstr.toStdString();
216 qstr = m_ui->m_portLineEdit->text().trimmed();
219 connInfo[
"MY_PORT"] = qstr.toStdString();
222 qstr = m_ui->m_userNameLineEdit->text().trimmed();
225 connInfo[
"MY_USER_NAME"] = qstr.toStdString();
228 qstr = m_ui->m_passwordLineEdit->text().trimmed();
231 connInfo[
"MY_PASSWORD"] = qstr.toStdString();
234 qstr = m_ui->m_schemaNameComboBox->currentText().trimmed();
238 connInfo[
"MY_SCHEMA"] = qstr.toStdString();
241 qstr = m_ui->m_charsetComboBox->currentText().trimmed();
244 connInfo[
"MY_OPT_CHARSET_NAME"] = qstr.toStdString();
247 qstr = m_ui->m_spatialTableEngineComboBox->currentText().trimmed();
250 connInfo[
"MY_DEFAULT_ENGINE_FOR_SPATIAL_TABLES"] = qstr.toStdString();
253 qstr = m_ui->m_tablesToHideLineEdit->text().trimmed();
256 connInfo[
"MY_HIDE_TABLES"] = qstr.toStdString();
259 connInfo[
"MY_CREATE_TERRALIB_RASTER_METADATA_TABLES"] = m_ui->m_createRasterMetadataCheckBox->isChecked() ?
"TRUE" :
"FALSE";
262 connInfo[
"MY_HIDE_METADATA_TABLES"] = m_ui->m_hideMetadataTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
265 connInfo[
"MY_HIDE_RASTER_TABLES"] = m_ui->m_hideRasterTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
268 qstr = m_ui->m_maxPoolSizeSpinBox->text().trimmed();
271 connInfo[
"MY_MAX_POOL_SIZE"] = qstr.toStdString();
274 qstr = m_ui->m_minPoolSizeSpinBox->text().trimmed();
277 connInfo[
"MY_MIN_POOL_SIZE"] = qstr.toStdString();
280 qstr = m_ui->m_maxIdleTimeSpinBox->text().trimmed();
283 connInfo[
"MY_MAX_IDLE_TIME"] = qstr.toStdString();
286 qstr = m_ui->m_connectTimeoutSpinBox->text().trimmed();
289 connInfo[
"MY_OPT_CONNECT_TIMEOUT"] = qstr.toStdString();
292 qstr = m_ui->m_readTimeoutSpinBox->text().trimmed();
295 connInfo[
"MY_OPT_READ_TIMEOUT"] = qstr.toStdString();
298 qstr = m_ui->m_writeTimeoutSpinBox->text().trimmed();
301 connInfo[
"MY_OPT_WRITE_TIMEOUT"] = qstr.toStdString();
304 qstr = m_ui->m_sslKeyLineEdit->text().trimmed();
307 connInfo[
"MY_SSL_KEY"] = qstr.toStdString();
309 qstr = m_ui->m_sslCertLineEdit->text().trimmed();
312 connInfo[
"MY_SSL_CERT"] = qstr.toStdString();
314 qstr = m_ui->m_sslCALineEdit->text().trimmed();
317 connInfo[
"MY_SSL_KEY"] = qstr.toStdString();
319 qstr = m_ui->m_sslCAPathLineEdit->text().trimmed();
322 connInfo[
"MY_SSL_CA"] = qstr.toStdString();
324 qstr = m_ui->m_sslChiperLineEdit->text().trimmed();
327 connInfo[
"MY_SSL_CA_PATH"] = qstr.toStdString();
330 qstr = m_ui->m_socketLineEdit->text().trimmed();
333 connInfo[
"MY_SOCKET"] = qstr.toStdString();
336 qstr = m_ui->m_pipeLineEdit->text().trimmed();
339 connInfo[
"MY_PIPE"] = qstr.toStdString();
342 connInfo[
"MY_CLIENT_COMPRESS"] = m_ui->m_clientCompressCheckBox->isChecked() ?
"TRUE" :
"FALSE";
343 connInfo[
"MY_CLIENT_LOCAL_FILES"] = m_ui->m_clientLocalFilesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
344 connInfo[
"MY_CLIENT_MULTI_STATEMENTS"] = m_ui->m_clientMultiStatementsCheckBox->isChecked() ?
"TRUE" :
"FALSE";
345 connInfo[
"MY_CLIENT_MULTI_RESULTS"] = m_ui->m_clientMultiResultsCheckBox->isChecked() ?
"TRUE" :
"FALSE";
346 connInfo[
"MY_OPT_RECONNECT"] = m_ui->m_reconnectCheckBox->isChecked() ?
"TRUE" :
"FALSE";
347 connInfo[
"MY_CLIENT_IGNORE_SPACE"] = m_ui->m_ignoreSpaceCheckBox->isChecked() ?
"TRUE" :
"FALSE";
348 connInfo[
"MY_OPT_REPORT_DATA_TRUNCATION"] = m_ui->m_reportDataTruncationCheckBox->isChecked() ?
"TRUE" :
"FALSE";
349 connInfo[
"MY_CLIENT_NO_SCHEMA"] = m_ui->m_noSchemaCheckBox->isChecked() ?
"TRUE" :
"FALSE";
350 connInfo[
"MY_CLIENT_INTERACTIVE"] = m_ui->m_clientInterativeCheckBox->isChecked() ?
"TRUE" :
"FALSE";
355 std::map<std::string, std::string>::const_iterator it = connInfo.find(
"MY_HOST_NAME");
356 std::map<std::string, std::string>::const_iterator itend = connInfo.end();
359 m_ui->m_hostNameLineEdit->setText(QString::fromUtf8(it->second.c_str()));
361 it = connInfo.find(
"MY_PORT");
364 m_ui->m_portLineEdit->setText(QString::fromUtf8(it->second.c_str()));
366 it = connInfo.find(
"MY_USER_NAME");
369 m_ui->m_userNameLineEdit->setText(QString::fromUtf8(it->second.c_str()));
371 it = connInfo.find(
"MY_PASSWORD");
374 m_ui->m_passwordLineEdit->setText(QString::fromUtf8(it->second.c_str()));
376 it = connInfo.find(
"MY_SCHEMA");
380 int pos = m_ui->m_schemaNameComboBox->findText(QString::fromUtf8(it->second.c_str()));
383 m_ui->m_schemaNameComboBox->setCurrentIndex(pos);
386 m_ui->m_schemaNameComboBox->addItem(QString::fromUtf8(it->second.c_str()));
387 m_ui->m_schemaNameComboBox->setCurrentIndex(0);
391 it = connInfo.find(
"MY_OPT_CHARSET_NAME");
395 int pos = m_ui->m_charsetComboBox->findText(QString::fromUtf8(it->second.c_str()));
398 m_ui->m_charsetComboBox->setCurrentIndex(pos);
401 it = connInfo.find(
"MY_DEFAULT_ENGINE_FOR_SPATIAL_TABLES");
405 int pos = m_ui->m_spatialTableEngineComboBox->findText(QString::fromUtf8(it->second.c_str()));
408 m_ui->m_spatialTableEngineComboBox->setCurrentIndex(pos);
411 it = connInfo.find(
"MY_HIDE_TABLES");
414 m_ui->m_tablesToHideLineEdit->setText(QString::fromUtf8(it->second.c_str()));
416 it = connInfo.find(
"MY_CREATE_TERRALIB_RASTER_METADATA_TABLES");
418 m_ui->m_createRasterMetadataCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
420 it = connInfo.find(
"MY_HIDE_METADATA_TABLES");
422 m_ui->m_hideMetadataTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
424 it = connInfo.find(
"MY_HIDE_RASTER_TABLES");
426 m_ui->m_hideRasterTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
428 it = connInfo.find(
"MY_MAX_POOL_SIZE");
431 m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
433 it = connInfo.find(
"MY_MIN_POOL_SIZE");
436 m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
438 it = connInfo.find(
"MY_MAX_IDLE_TIME");
441 m_ui->m_maxIdleTimeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
443 it = connInfo.find(
"MY_OPT_CONNECT_TIMEOUT");
446 m_ui->m_connectTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
448 it = connInfo.find(
"MY_OPT_READ_TIMEOUT");
451 m_ui->m_readTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
453 it = connInfo.find(
"MY_OPT_WRITE_TIMEOUT");
456 m_ui->m_writeTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
458 it = connInfo.find(
"MY_SSL_KEY");
461 m_ui->m_sslKeyLineEdit->setText(QString::fromUtf8(it->second.c_str()));
463 it = connInfo.find(
"MY_SSL_CERT");
466 m_ui->m_sslCertLineEdit->setText(QString::fromUtf8(it->second.c_str()));
468 it = connInfo.find(
"MY_SSL_CA");
471 m_ui->m_sslCALineEdit->setText(QString::fromUtf8(it->second.c_str()));
473 it = connInfo.find(
"MY_SSL_CA_PATH");
476 m_ui->m_sslCAPathLineEdit->setText(QString::fromUtf8(it->second.c_str()));
478 it = connInfo.find(
"MY_SSL_CIPHER");
481 m_ui->m_sslChiperLineEdit->setText(QString::fromUtf8(it->second.c_str()));
483 it = connInfo.find(
"MY_SOCKET");
486 m_ui->m_socketLineEdit->setText(QString::fromUtf8(it->second.c_str()));
488 it = connInfo.find(
"MY_PIPE");
491 m_ui->m_pipeLineEdit->setText(QString::fromUtf8(it->second.c_str()));
493 it = connInfo.find(
"MY_CLIENT_COMPRESS");
495 m_ui->m_clientCompressCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
497 it = connInfo.find(
"MY_CLIENT_LOCAL_FILES");
500 m_ui->m_clientLocalFilesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
502 it = connInfo.find(
"MY_CLIENT_MULTI_STATEMENTS");
505 m_ui->m_clientMultiStatementsCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
507 it = connInfo.find(
"MY_CLIENT_MULTI_RESULTS");
509 m_ui->m_clientMultiResultsCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
511 it = connInfo.find(
"MY_OPT_RECONNECT");
513 m_ui->m_reconnectCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
515 it = connInfo.find(
"MY_CLIENT_IGNORE_SPACE");
517 m_ui->m_ignoreSpaceCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
519 it = connInfo.find(
"MY_OPT_REPORT_DATA_TRUNCATION");
521 m_ui->m_reportDataTruncationCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
523 it = connInfo.find(
"MY_CLIENT_NO_SCHEMA");
525 m_ui->m_noSchemaCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
527 it = connInfo.find(
"MY_CLIENT_INTERACTIVE");
529 m_ui->m_clientInterativeCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
534 m_ui->m_advancedConnectionOptionsGroupBox->setVisible(t);
539 if(m_ui->m_userNameLineEdit->text() !=
"" && m_ui->m_passwordLineEdit->text() !=
"")
543 std::map<std::string, std::string> dsInfo;
544 getConnectionInfo(dsInfo);
547 std::vector<std::string> dbNames = te::da::DataSource::getDataSources(
"MYSQL", dsInfo);
549 for(std::size_t i = 0; i < dbNames.size(); i++)
550 m_ui->m_schemaNameComboBox->addItem(dbNames[i].c_str());
553 m_ui->m_charsetComboBox->addItem(
"");
555 if(!encodings.empty())
557 for(std::size_t i = 0; i < encodings.size(); i++)
558 m_ui->m_charsetComboBox->addItem(encodings[i].c_str());
562 idx = m_ui->m_charsetComboBox->findText(
"latin1");
564 idx = m_ui->m_charsetComboBox->findText(
"utf8");
566 m_ui->m_charsetComboBox->setCurrentIndex(idx);
static bool find(const std::string &dsType)
void passwordLineEditEditingFinished()
boost::shared_ptr< DataSource > DataSourcePtr
void set(const te::da::DataSourceInfoPtr &ds)
void advancedConnectionOptionsCheckBoxToggled(bool t)
void openPushButtonPressed()
const te::da::DataSourcePtr & getDriver() const
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
void testPushButtonPressed()
MySQLConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
static std::vector< te::common::CharEncoding > getEncodings(const std::string &dsType, const std::map< std::string, std::string > &info)
It gets the encoding names of the data source.
const te::da::DataSourceInfoPtr & getDataSource() const
A class that represents a data source component.
void getConnectionInfo(std::map< std::string, std::string > &connInfo) const
void helpPushButtonPressed()
std::auto_ptr< Ui::MySQLConnectorDialogForm > m_ui
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr