All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
MySQLConnectorDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/qt/widgets/connector/mysql/MySQLConnectorDialog.cpp
22 
23  \brief ....
24 */
25 
26 // TerraLib
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"
33 #include "MySQLConnectorDialog.h"
34 #include "Ui_MySQLConnectorDialogForm.h"
35 
36 // Boost
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>
41 
42 // Qt
43 #include <QtGui/QMessageBox>
44 
46  : QDialog(parent, f),
47  m_ui(new Ui::MySQLConnectorDialogForm)
48 {
49 // add controls
50  m_ui->setupUi(this);
51 
52 // init controls
53  m_ui->m_advancedConnectionOptionsGroupBox->hide();
54 
55 // connect signal and slots
56  connect(m_ui->m_openPushButton, SIGNAL(pressed()), this, SLOT(openPushButtonPressed()));
57  connect(m_ui->m_testPushButton, SIGNAL(pressed()), this, SLOT(testPushButtonPressed()));
58  connect(m_ui->m_helpPushButton, SIGNAL(pressed()), this, SLOT(helpPushButtonPressed()));
59  connect(m_ui->m_userNameLineEdit, SIGNAL(editingFinished()), this, SLOT(passwordLineEditEditingFinished()));
60  connect(m_ui->m_passwordLineEdit, SIGNAL(editingFinished()), this, SLOT(passwordLineEditEditingFinished()));
61  connect(m_ui->m_advancedConnectionOptionsCheckBox, SIGNAL(toggled(bool)), this, SLOT(advancedConnectionOptionsCheckBoxToggled(bool)));
62 }
63 
65 {
66 }
67 
69 {
70  return m_datasource;
71 }
72 
74 {
75  return m_driver;
76 }
77 
79 {
80  m_datasource = ds;
81 
82  if(m_datasource.get() != 0)
83  {
84  setConnectionInfo(m_datasource->getConnInfo());
85 
86  m_ui->m_datasourceTitleLineEdit->setText(QString::fromStdString(m_datasource->getTitle()));
87 
88  m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromStdString(m_datasource->getDescription()));
89  }
90 }
91 
93 {
94  try
95  {
96 // check if driver is loaded
97  if(te::da::DataSourceFactory::find("MYSQL") == 0)
98  throw te::qt::widgets::Exception(TR_QT_WIDGETS("Sorry! No data access driver loaded for MySQL data sources!"));
99 
100 // get data source connection info based on form data
101  std::map<std::string, std::string> dsInfo;
102 
103  getConnectionInfo(dsInfo);
104 
105 // perform connection
106  m_driver.reset(te::da::DataSourceFactory::open("MYSQL", dsInfo));
107 
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!"));
110 
111  QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
112 
113  if(title.isEmpty())
114  title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString("@") + m_ui->m_schemaNameComboBox->currentText().trimmed() + QString::fromStdString("@") + m_ui->m_userNameLineEdit->text().trimmed();
115 
116  if(m_datasource.get() == 0)
117  {
118 // create a new data source based on form data
119  m_datasource.reset(new te::da::DataSourceInfo);
120 
121  m_datasource->setConnInfo(dsInfo);
122 
123  boost::uuids::basic_random_generator<boost::mt19937> gen;
124  boost::uuids::uuid u = gen();
125  std::string dsId = boost::uuids::to_string(u);
126 
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");
133  }
134  else
135  {
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());
140  }
141  }
142  catch(const std::exception& e)
143  {
144  QMessageBox::warning(this,
145  tr("TerraLib Qt Components"),
146  tr(e.what()));
147  return;
148  }
149  catch(...)
150  {
151  QMessageBox::warning(this,
152  tr("TerraLib Qt Components"),
153  tr("Unknown error while opening MySQL database!"));
154  return;
155  }
156 
157  accept();
158 }
159 
161 {
162  try
163  {
164 // check if driver is loaded
165  if(te::da::DataSourceFactory::find("MYSQL") == 0)
166  throw te::qt::widgets::Exception(TR_QT_WIDGETS("Sorry! No data access driver loaded for MySQL data sources!"));
167 
168 // get data source connection info based on form data
169  std::map<std::string, std::string> dsInfo;
170 
171  getConnectionInfo(dsInfo);
172 
173 // perform connection
174  std::auto_ptr<te::da::DataSource> ds(te::da::DataSourceFactory::open("MYSQL", dsInfo));
175 
176  if(ds.get() == 0)
177  throw te::qt::widgets::Exception(TR_QT_WIDGETS("Could not open MySQL database!"));
178 
179  QMessageBox::warning(this,
180  tr("TerraLib Qt Components"),
181  tr("Data source is ok!"));
182  }
183  catch(const std::exception& e)
184  {
185  QMessageBox::warning(this,
186  tr("TerraLib Qt Components"),
187  tr(e.what()));
188  }
189  catch(...)
190  {
191  QMessageBox::warning(this,
192  tr("TerraLib Qt Components"),
193  tr("Unknown error while testing MySQL data source!"));
194  }
195 }
196 
198 {
199  QMessageBox::warning(this,
200  tr("TerraLib Qt Components"),
201  tr("Not implemented yet!\nWe will provide it soon!"));
202 }
203 
204 void te::qt::plugins::mysql::MySQLConnectorDialog::getConnectionInfo(std::map<std::string, std::string>& connInfo) const
205 {
206 // clear input
207  connInfo.clear();
208 
209 // get host
210  QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
211 
212  if(!qstr.isEmpty())
213  connInfo["MY_HOST_NAME"] = qstr.toStdString();
214 
215 // get port
216  qstr = m_ui->m_portLineEdit->text().trimmed();
217 
218  if(!qstr.isEmpty())
219  connInfo["MY_PORT"] = qstr.toStdString();
220 
221 // get user
222  qstr = m_ui->m_userNameLineEdit->text().trimmed();
223 
224  if(!qstr.isEmpty())
225  connInfo["MY_USER_NAME"] = qstr.toStdString();
226 
227 // get password
228  qstr = m_ui->m_passwordLineEdit->text().trimmed();
229 
230  if(!qstr.isEmpty())
231  connInfo["MY_PASSWORD"] = qstr.toStdString();
232 
233 // get dbname
234  qstr = m_ui->m_schemaNameComboBox->currentText().trimmed();
235  //qstr = m_ui->m_schemaNameLineEdit->text().trimmed();
236 
237  if(!qstr.isEmpty())
238  connInfo["MY_SCHEMA"] = qstr.toStdString();
239 
240 // get charset
241  qstr = m_ui->m_charsetComboBox->currentText().trimmed();
242 
243  if(!qstr.isEmpty())
244  connInfo["MY_OPT_CHARSET_NAME"] = qstr.toStdString();
245 
246 // get the default table engine for spatial tables
247  qstr = m_ui->m_spatialTableEngineComboBox->currentText().trimmed();
248 
249  if(!qstr.isEmpty())
250  connInfo["MY_DEFAULT_ENGINE_FOR_SPATIAL_TABLES"] = qstr.toStdString();
251 
252 // get the list of tables to be hidden
253  qstr = m_ui->m_tablesToHideLineEdit->text().trimmed();
254 
255  if(!qstr.isEmpty())
256  connInfo["MY_HIDE_TABLES"] = qstr.toStdString();
257 
258 // check raster metadata creation
259  connInfo["MY_CREATE_TERRALIB_RASTER_METADATA_TABLES"] = m_ui->m_createRasterMetadataCheckBox->isChecked() ? "TRUE" : "FALSE";
260 
261 // check metadata tables visibility
262  connInfo["MY_HIDE_METADATA_TABLES"] = m_ui->m_hideMetadataTablesCheckBox->isChecked() ? "TRUE" : "FALSE";
263 
264 // check raster table visibility
265  connInfo["MY_HIDE_RASTER_TABLES"] = m_ui->m_hideRasterTablesCheckBox->isChecked() ? "TRUE" : "FALSE";
266 
267 // get MaxPoolSize
268  qstr = m_ui->m_maxPoolSizeSpinBox->text().trimmed();
269 
270  if(!qstr.isEmpty())
271  connInfo["MY_MAX_POOL_SIZE"] = qstr.toStdString();
272 
273 // get MinPoolSize
274  qstr = m_ui->m_minPoolSizeSpinBox->text().trimmed();
275 
276  if(!qstr.isEmpty())
277  connInfo["MY_MIN_POOL_SIZE"] = qstr.toStdString();
278 
279 // get idle time
280  qstr = m_ui->m_maxIdleTimeSpinBox->text().trimmed();
281 
282  if(!qstr.isEmpty())
283  connInfo["MY_MAX_IDLE_TIME"] = qstr.toStdString();
284 
285 // get connect_timeout
286  qstr = m_ui->m_connectTimeoutSpinBox->text().trimmed();
287 
288  if(!qstr.isEmpty())
289  connInfo["MY_OPT_CONNECT_TIMEOUT"] = qstr.toStdString();
290 
291 // get connect_timeout
292  qstr = m_ui->m_readTimeoutSpinBox->text().trimmed();
293 
294  if(!qstr.isEmpty())
295  connInfo["MY_OPT_READ_TIMEOUT"] = qstr.toStdString();
296 
297 // get connect_timeout
298  qstr = m_ui->m_writeTimeoutSpinBox->text().trimmed();
299 
300  if(!qstr.isEmpty())
301  connInfo["MY_OPT_WRITE_TIMEOUT"] = qstr.toStdString();
302 
303 // get ssl info
304  qstr = m_ui->m_sslKeyLineEdit->text().trimmed();
305 
306  if(!qstr.isEmpty())
307  connInfo["MY_SSL_KEY"] = qstr.toStdString();
308 
309  qstr = m_ui->m_sslCertLineEdit->text().trimmed();
310 
311  if(!qstr.isEmpty())
312  connInfo["MY_SSL_CERT"] = qstr.toStdString();
313 
314  qstr = m_ui->m_sslCALineEdit->text().trimmed();
315 
316  if(!qstr.isEmpty())
317  connInfo["MY_SSL_KEY"] = qstr.toStdString();
318 
319  qstr = m_ui->m_sslCAPathLineEdit->text().trimmed();
320 
321  if(!qstr.isEmpty())
322  connInfo["MY_SSL_CA"] = qstr.toStdString();
323 
324  qstr = m_ui->m_sslChiperLineEdit->text().trimmed();
325 
326  if(!qstr.isEmpty())
327  connInfo["MY_SSL_CA_PATH"] = qstr.toStdString();
328 
329 // get socket info
330  qstr = m_ui->m_socketLineEdit->text().trimmed();
331 
332  if(!qstr.isEmpty())
333  connInfo["MY_SOCKET"] = qstr.toStdString();
334 
335 // get pipe info
336  qstr = m_ui->m_pipeLineEdit->text().trimmed();
337 
338  if(!qstr.isEmpty())
339  connInfo["MY_PIPE"] = qstr.toStdString();
340 
341 // more options
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";
351 }
352 
353 void te::qt::plugins::mysql::MySQLConnectorDialog::setConnectionInfo(const std::map<std::string, std::string>& connInfo)
354 {
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();
357 
358  if(it != itend)
359  m_ui->m_hostNameLineEdit->setText(QString::fromUtf8(it->second.c_str()));
360 
361  it = connInfo.find("MY_PORT");
362 
363  if(it != itend)
364  m_ui->m_portLineEdit->setText(QString::fromUtf8(it->second.c_str()));
365 
366  it = connInfo.find("MY_USER_NAME");
367 
368  if(it != itend)
369  m_ui->m_userNameLineEdit->setText(QString::fromUtf8(it->second.c_str()));
370 
371  it = connInfo.find("MY_PASSWORD");
372 
373  if(it != itend)
374  m_ui->m_passwordLineEdit->setText(QString::fromUtf8(it->second.c_str()));
375 
376  it = connInfo.find("MY_SCHEMA");
377 
378  if(it != itend)
379  {
380  int pos = m_ui->m_schemaNameComboBox->findText(QString::fromUtf8(it->second.c_str()));
381 
382  if(pos != -1)
383  m_ui->m_schemaNameComboBox->setCurrentIndex(pos);
384  else
385  {
386  m_ui->m_schemaNameComboBox->addItem(QString::fromUtf8(it->second.c_str()));
387  m_ui->m_schemaNameComboBox->setCurrentIndex(0);
388  }
389  }
390 
391  it = connInfo.find("MY_OPT_CHARSET_NAME");
392 
393  if(it != itend)
394  {
395  int pos = m_ui->m_charsetComboBox->findText(QString::fromUtf8(it->second.c_str()));
396 
397  if(pos != -1)
398  m_ui->m_charsetComboBox->setCurrentIndex(pos);
399  }
400 
401  it = connInfo.find("MY_DEFAULT_ENGINE_FOR_SPATIAL_TABLES");
402 
403  if(it != itend)
404  {
405  int pos = m_ui->m_spatialTableEngineComboBox->findText(QString::fromUtf8(it->second.c_str()));
406 
407  if(pos != -1)
408  m_ui->m_spatialTableEngineComboBox->setCurrentIndex(pos);
409  }
410 
411  it = connInfo.find("MY_HIDE_TABLES");
412 
413  if(it != itend)
414  m_ui->m_tablesToHideLineEdit->setText(QString::fromUtf8(it->second.c_str()));
415 
416  it = connInfo.find("MY_CREATE_TERRALIB_RASTER_METADATA_TABLES");
417 
418  m_ui->m_createRasterMetadataCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
419 
420  it = connInfo.find("MY_HIDE_METADATA_TABLES");
421 
422  m_ui->m_hideMetadataTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
423 
424  it = connInfo.find("MY_HIDE_RASTER_TABLES");
425 
426  m_ui->m_hideRasterTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
427 
428  it = connInfo.find("MY_MAX_POOL_SIZE");
429 
430  if(it != itend)
431  m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
432 
433  it = connInfo.find("MY_MIN_POOL_SIZE");
434 
435  if(it != itend)
436  m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
437 
438  it = connInfo.find("MY_MAX_IDLE_TIME");
439 
440  if(it != itend)
441  m_ui->m_maxIdleTimeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
442 
443  it = connInfo.find("MY_OPT_CONNECT_TIMEOUT");
444 
445  if(it != itend)
446  m_ui->m_connectTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
447 
448  it = connInfo.find("MY_OPT_READ_TIMEOUT");
449 
450  if(it != itend)
451  m_ui->m_readTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
452 
453  it = connInfo.find("MY_OPT_WRITE_TIMEOUT");
454 
455  if(it != itend)
456  m_ui->m_writeTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
457 
458  it = connInfo.find("MY_SSL_KEY");
459 
460  if(it != itend)
461  m_ui->m_sslKeyLineEdit->setText(QString::fromUtf8(it->second.c_str()));
462 
463  it = connInfo.find("MY_SSL_CERT");
464 
465  if(it != itend)
466  m_ui->m_sslCertLineEdit->setText(QString::fromUtf8(it->second.c_str()));
467 
468  it = connInfo.find("MY_SSL_CA");
469 
470  if(it != itend)
471  m_ui->m_sslCALineEdit->setText(QString::fromUtf8(it->second.c_str()));
472 
473  it = connInfo.find("MY_SSL_CA_PATH");
474 
475  if(it != itend)
476  m_ui->m_sslCAPathLineEdit->setText(QString::fromUtf8(it->second.c_str()));
477 
478  it = connInfo.find("MY_SSL_CIPHER");
479 
480  if(it != itend)
481  m_ui->m_sslChiperLineEdit->setText(QString::fromUtf8(it->second.c_str()));
482 
483  it = connInfo.find("MY_SOCKET");
484 
485  if(it != itend)
486  m_ui->m_socketLineEdit->setText(QString::fromUtf8(it->second.c_str()));
487 
488  it = connInfo.find("MY_PIPE");
489 
490  if(it != itend)
491  m_ui->m_pipeLineEdit->setText(QString::fromUtf8(it->second.c_str()));
492 
493  it = connInfo.find("MY_CLIENT_COMPRESS");
494 
495  m_ui->m_clientCompressCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
496 
497  it = connInfo.find("MY_CLIENT_LOCAL_FILES");
498 
499  if(it != itend)
500  m_ui->m_clientLocalFilesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
501 
502  it = connInfo.find("MY_CLIENT_MULTI_STATEMENTS");
503 
504  if(it != itend)
505  m_ui->m_clientMultiStatementsCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
506 
507  it = connInfo.find("MY_CLIENT_MULTI_RESULTS");
508 
509  m_ui->m_clientMultiResultsCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
510 
511  it = connInfo.find("MY_OPT_RECONNECT");
512 
513  m_ui->m_reconnectCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
514 
515  it = connInfo.find("MY_CLIENT_IGNORE_SPACE");
516 
517  m_ui->m_ignoreSpaceCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
518 
519  it = connInfo.find("MY_OPT_REPORT_DATA_TRUNCATION");
520 
521  m_ui->m_reportDataTruncationCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
522 
523  it = connInfo.find("MY_CLIENT_NO_SCHEMA");
524 
525  m_ui->m_noSchemaCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
526 
527  it = connInfo.find("MY_CLIENT_INTERACTIVE");
528 
529  m_ui->m_clientInterativeCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == "TRUE"));
530 }
531 
533 {
534  m_ui->m_advancedConnectionOptionsGroupBox->setVisible(t);
535 }
536 
538 {
539  if(m_ui->m_userNameLineEdit->text() != "" && m_ui->m_passwordLineEdit->text() != "")
540  {
541  try
542  {
543  std::map<std::string, std::string> dsInfo;
544  getConnectionInfo(dsInfo);
545 
546  // Get DataSources
547  std::vector<std::string> dbNames = te::da::DataSource::getDataSources("MYSQL", dsInfo);
548  if(!dbNames.empty())
549  for(std::size_t i = 0; i < dbNames.size(); i++)
550  m_ui->m_schemaNameComboBox->addItem(dbNames[i].c_str());
551 
552  // Get Encodings
553  m_ui->m_charsetComboBox->addItem("");
554  std::vector<std::string> encodings = te::da::DataSource::getEncodings("MYSQL", dsInfo);
555  if(!encodings.empty())
556  {
557  for(std::size_t i = 0; i < encodings.size(); i++)
558  m_ui->m_charsetComboBox->addItem(encodings[i].c_str());
559 
560  int idx;
561 #ifdef WIN32
562  idx = m_ui->m_charsetComboBox->findText("latin1");
563 #else
564  idx = m_ui->m_charsetComboBox->findText("utf8");
565 #endif
566  m_ui->m_charsetComboBox->setCurrentIndex(idx);
567  }
568  }
569  catch(...)
570  {}
571  }
572 }
static bool find(const std::string &dsType)
boost::shared_ptr< DataSource > DataSourcePtr
Definition: DataSource.h:1435
void set(const te::da::DataSourceInfoPtr &ds)
const te::da::DataSourcePtr & getDriver() const
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
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.
Definition: DataSource.cpp:552
const te::da::DataSourceInfoPtr & getDataSource() const
A class that represents a data source component.
void getConnectionInfo(std::map< std::string, std::string > &connInfo) const
std::auto_ptr< Ui::MySQLConnectorDialogForm > m_ui
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr