27 #include "../../../../common/Translator.h" 
   28 #include "../../../../dataaccess/datasource/DataSource.h" 
   29 #include "../../../../dataaccess/datasource/DataSourceFactory.h" 
   30 #include "../../../../dataaccess/datasource/DataSourceManager.h" 
   31 #include "../../../../dataaccess/datasource/DataSourceInfo.h" 
   32 #include "../../../widgets/Exception.h" 
   34 #include "ui_PostGISConnectorDialogForm.h" 
   37 #include <boost/algorithm/string/case_conv.hpp> 
   38 #include <boost/uuid/random_generator.hpp> 
   39 #include <boost/uuid/uuid_io.hpp> 
   40 #include <boost/lexical_cast.hpp> 
   43 #include <QMessageBox> 
   47     m_ui(new Ui::PostGISConnectorDialogForm)
 
   53   m_ui->m_advancedConnectionOptionsGroupBox->hide();
 
   62   m_ui->m_portLineEdit->setValidator(
new QIntValidator(0, 99999, 
this));
 
   64   m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
 
   65   m_ui->m_helpPushButton->setPageReference(
"plugins/pgis/pgis.html");
 
   86   if(m_datasource.get() != 0)
 
   88     setConnectionInfo(m_datasource->getConnInfo());
 
   90     m_ui->m_datasourceTitleLineEdit->setText(QString::fromStdString(m_datasource->getTitle()));
 
   92     m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromStdString(m_datasource->getDescription()));
 
  102       throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for PostgreSQL + PostGIS data sources!"));
 
  106     ds->setConnectionInfo(getConnectionInfo(
true));
 
  108     m_driver.reset(ds.release());
 
  110     if(m_driver.get() == 0)
 
  111       throw te::qt::widgets::Exception(
TE_TR(
"Could not open PostgreSQL + PostGIS data source due to an unknown error!"));
 
  113     QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
 
  116       title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_databaseComboBox->currentText().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
 
  118     if(m_datasource.get() == 0)
 
  123       m_datasource->setConnInfo(getConnectionInfo(m_ui->m_savePasswordCheckBox->isChecked()));
 
  125       boost::uuids::basic_random_generator<boost::mt19937> gen;
 
  126       boost::uuids::uuid u = gen();
 
  127       std::string dsId = boost::uuids::to_string(u);
 
  129       m_datasource->setId(dsId);
 
  130       m_driver->setId(dsId);
 
  131       m_datasource->setTitle(title.toStdString());
 
  132       m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().toStdString());
 
  133       m_datasource->setAccessDriver(
"POSTGIS");
 
  134       m_datasource->setType(
"POSTGIS");
 
  138       m_driver->setId(m_datasource->getId());
 
  139       m_datasource->setConnInfo(getConnectionInfo(m_ui->m_savePasswordCheckBox->isChecked()));
 
  140       m_datasource->setTitle(title.toStdString());
 
  141       m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().toStdString());
 
  144   catch(
const std::exception& e)
 
  146     QMessageBox::warning(
this,
 
  147                          tr(
"TerraLib Qt Components"),
 
  153     QMessageBox::warning(
this,
 
  154                          tr(
"TerraLib Qt Components"),
 
  155                          tr(
"Unknown error while opening PostgreSQL database!"));
 
  168       throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for PostgreSQL + PostGIS data sources!"));
 
  174       throw te::qt::widgets::Exception(
TE_TR(
"Could not open PostgreSQL + PostGIS database!"));
 
  176     ds->setConnectionInfo(getConnectionInfo(
true));
 
  179     QMessageBox::information(
this,
 
  180                              tr(
"TerraLib Qt Components"),
 
  181                              tr(
"Data source is ok!"));
 
  185   catch(
const std::exception& e)
 
  187     QMessageBox::warning(
this,
 
  188                          tr(
"TerraLib Qt Components"),
 
  193     QMessageBox::warning(
this,
 
  194                          tr(
"TerraLib Qt Components"),
 
  195                          tr(
"Unknown error while testing PostgreSQL + PostGIS data source!"));
 
  201   std::map<std::string, std::string> connInfo;
 
  204   QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
 
  207     connInfo[
"PG_HOST"] = qstr.toStdString();
 
  210   qstr = m_ui->m_portLineEdit->text().trimmed();
 
  213     connInfo[
"PG_PORT"] = qstr.toStdString();
 
  216   qstr = m_ui->m_databaseComboBox->currentText().trimmed();
 
  219     connInfo[
"PG_DB_NAME"] = qstr.toStdString();
 
  222   qstr = m_ui->m_clientEncodingComboBox->currentText().trimmed();
 
  225     connInfo[
"PG_CLIENT_ENCODING"] = qstr.toStdString();
 
  228   qstr = m_ui->m_userNameLineEdit->text().trimmed();
 
  231     connInfo[
"PG_USER"] = qstr.toStdString();
 
  236     qstr = m_ui->m_passwordLineEdit->text().trimmed();
 
  239       connInfo[
"PG_PASSWORD"] = qstr.toStdString();
 
  243   qstr = m_ui->m_tablesToHideLineEdit->text().trimmed();
 
  246     connInfo[
"PG_HIDE_TABLES"] = qstr.toStdString();
 
  248   connInfo[
"PG_HIDE_SPATIAL_METADATA_TABLES"] = m_ui->m_hideMetadataTablesCheckBox->isChecked() ? 
"TRUE" : 
"FALSE";
 
  250   connInfo[
"PG_HIDE_RASTER_TABLES"] = m_ui->m_hideRasterTablesCheckBox->isChecked() ? 
"TRUE" : 
"FALSE";
 
  253   qstr = m_ui->m_connectTimeoutSpinBox->text().trimmed();
 
  256     connInfo[
"PG_CONNECT_TIMEOUT"] = qstr.toStdString();
 
  259   qstr = m_ui->m_minPoolSizeSpinBox->text().trimmed();
 
  262     connInfo[
"PG_MIN_POOL_SIZE"] = qstr.toStdString();
 
  265   qstr = m_ui->m_maxPoolSizeSpinBox->text().trimmed();
 
  268     connInfo[
"PG_MAX_POOL_SIZE"] = qstr.toStdString();
 
  271   qstr = m_ui->m_optionsLineEdit->text().trimmed();
 
  274     connInfo[
"PG_OPTIONS"] = qstr.toStdString();
 
  281   std::map<std::string, std::string>::const_iterator it = connInfo.find(
"PG_HOST");
 
  282   std::map<std::string, std::string>::const_iterator itend = connInfo.end();
 
  285     m_ui->m_hostNameLineEdit->setText(QString::fromStdString(it->second));
 
  287   it = connInfo.find(
"PG_HOST_ADDR");
 
  290     m_ui->m_hostNameLineEdit->setText(QString::fromStdString(it->second));
 
  292   it = connInfo.find(
"PG_PORT");
 
  295     m_ui->m_portLineEdit->setText(QString::fromStdString(it->second));
 
  297   it = connInfo.find(
"PG_DB_NAME");
 
  301     int pos = m_ui->m_databaseComboBox->findText(QString::fromStdString(it->second));
 
  304       m_ui->m_databaseComboBox->setCurrentIndex(pos);
 
  307       m_ui->m_databaseComboBox->addItem(QString::fromStdString(it->second));
 
  308       m_ui->m_databaseComboBox->setCurrentIndex(0);
 
  312   it = connInfo.find(
"PG_CLIENT_ENCODING");
 
  316     int pos = m_ui->m_clientEncodingComboBox->findText(QString::fromStdString(it->second));
 
  319       m_ui->m_clientEncodingComboBox->setCurrentIndex(pos);
 
  322       m_ui->m_clientEncodingComboBox->addItem(QString::fromStdString(it->second));
 
  323       m_ui->m_clientEncodingComboBox->setCurrentIndex(0);
 
  327   it = connInfo.find(
"PG_USER");
 
  330     m_ui->m_userNameLineEdit->setText(QString::fromStdString(it->second));
 
  332   it = connInfo.find(
"PG_PASSWORD");
 
  335     m_ui->m_passwordLineEdit->setText(QString::fromStdString(it->second));
 
  337   it = connInfo.find(
"PG_CONNECT_TIMEOUT");
 
  340     m_ui->m_connectTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
 
  342   it = connInfo.find(
"PG_MIN_POOL_SIZE");
 
  345     m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
 
  347   it = connInfo.find(
"PG_MAX_POOL_SIZE");
 
  350     m_ui->m_maxPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
 
  352   it = connInfo.find(
"PG_OPTIONS");
 
  355     m_ui->m_optionsLineEdit->setText(QString::fromStdString(it->second));
 
  357   it = connInfo.find(
"PG_HIDE_SPATIAL_METADATA_TABLES");
 
  359   m_ui->m_hideMetadataTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == 
"TRUE"));
 
  361   it = connInfo.find(
"PG_HIDE_RASTER_TABLES");
 
  363   m_ui->m_hideRasterTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) == 
"TRUE"));
 
  365   it = connInfo.find(
"PG_HIDE_TABLES");
 
  368     m_ui->m_tablesToHideLineEdit->setText(QString::fromStdString(it->second));
 
  373   m_ui->m_advancedConnectionOptionsGroupBox->setVisible(t);
 
  378   if(m_ui->m_userNameLineEdit->text() != 
"" || m_ui->m_passwordLineEdit->text() != 
"")
 
  381       std::map<std::string, std::string> dsInfo = getConnectionInfo(
true);
 
  384       std::string curDb = 
"";
 
  386       if(!m_ui->m_databaseComboBox->currentText().isEmpty())
 
  387         curDb = m_ui->m_databaseComboBox->currentText().toStdString();
 
  389       std::string curCE = 
"";
 
  391       if(!m_ui->m_clientEncodingComboBox->currentText().isEmpty())
 
  392         curCE = m_ui->m_clientEncodingComboBox->currentText().toStdString();
 
  394       m_ui->m_databaseComboBox->clear();
 
  395       m_ui->m_clientEncodingComboBox->clear();
 
  402         setDatabasesNames(dbNames);
 
  406           int idx =  m_ui->m_databaseComboBox->findText(curDb.c_str(), Qt::MatchExactly);
 
  409             m_ui->m_databaseComboBox->setCurrentIndex(idx);
 
  414       m_ui->m_clientEncodingComboBox->addItem(
"");
 
  416       if(!encodings.empty())
 
  418         for(std::size_t i = 0; i < encodings.size(); i++)
 
  423         idx = m_ui->m_clientEncodingComboBox->findText(
"CP1252");
 
  425         idx = m_ui->m_clientEncodingComboBox->findText(
"UTF-8");
 
  429           idx =  m_ui->m_clientEncodingComboBox->findText(curCE.c_str(), Qt::MatchExactly);
 
  432             m_ui->m_clientEncodingComboBox->setCurrentIndex(idx);
 
  436           m_ui->m_clientEncodingComboBox->setCurrentIndex(idx);
 
  447   std::sort(names.begin(), names.end());
 
  449   for(std::size_t i = 0; i < names.size(); ++i)
 
  451     m_ui->m_databaseComboBox->addItem(names[i].c_str());
 
static bool find(const std::string &dsType)
 
void set(const te::da::DataSourceInfoPtr &ds)
 
void advancedConnectionOptionsCheckBoxToggled(bool t)
 
boost::shared_ptr< DataSource > DataSourcePtr
 
~PostGISConnectorDialog()
 
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
 
void passwordLineEditEditingFinished()
 
const te::da::DataSourcePtr & getDriver() const 
 
#define TE_TR(message)
It marks a string in order to get translated. 
 
std::map< std::string, std::string > getConnectionInfo(bool getPrivateKeys) const 
 
static std::auto_ptr< DataSource > make(const std::string &dsType)
 
void openPushButtonPressed()
 
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 
 
static std::vector< std::string > getDataSourceNames(const std::string &dsType, const std::map< std::string, std::string > &info)
It returns the data source names available in the driver. 
 
PostGISConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
 
void testPushButtonPressed()
 
A class that represents a data source component. 
 
A dialog window for showing the PostGIS connector widget. 
 
static std::string getCharEncodingName(const CharEncoding &code)
It returns the name of the given charset. 
 
void setDatabasesNames(std::vector< std::string > names)
 
std::auto_ptr< Ui::PostGISConnectorDialogForm > m_ui
 
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr