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