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 <QtGui/QMessageBox>
47 m_ui(new Ui::PostGISConnectorDialogForm)
53 m_ui->m_advancedConnectionOptionsGroupBox->hide();
62 m_ui->m_portLineEdit->setValidator(
new QIntValidator(0, 9999,
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(
TR_QT_WIDGETS(
"Sorry! No data access driver loaded for PostgreSQL + PostGIS data sources!"));
105 std::map<std::string, std::string> dsInfo;
107 getConnectionInfo(dsInfo);
111 ds->setConnectionInfo(dsInfo);
113 m_driver.reset(ds.release());
115 if(m_driver.get() == 0)
116 throw te::qt::widgets::Exception(
TR_QT_WIDGETS(
"Could not open PostgreSQL + PostGIS data source due to an unknown error!"));
118 QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
121 title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_databaseComboBox->currentText().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
123 if(m_datasource.get() == 0)
128 m_datasource->setConnInfo(dsInfo);
130 boost::uuids::basic_random_generator<boost::mt19937> gen;
131 boost::uuids::uuid u = gen();
132 std::string dsId = boost::uuids::to_string(u);
134 m_datasource->setId(dsId);
135 m_driver->setId(dsId);
136 m_datasource->setTitle(title.toStdString());
137 m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toStdString());
138 m_datasource->setAccessDriver(
"POSTGIS");
139 m_datasource->setType(
"POSTGIS");
143 m_driver->setId(m_datasource->getId());
144 m_datasource->setConnInfo(dsInfo);
145 m_datasource->setTitle(title.toStdString());
146 m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toStdString());
149 catch(
const std::exception& e)
151 QMessageBox::warning(
this,
152 tr(
"TerraLib Qt Components"),
158 QMessageBox::warning(
this,
159 tr(
"TerraLib Qt Components"),
160 tr(
"Unknown error while opening PostgreSQL database!"));
173 throw te::qt::widgets::Exception(
TR_QT_WIDGETS(
"Sorry! No data access driver loaded for PostgreSQL + PostGIS data sources!"));
176 std::map<std::string, std::string> dsInfo;
178 getConnectionInfo(dsInfo);
184 throw te::qt::widgets::Exception(
TR_QT_WIDGETS(
"Could not open PostgreSQL + PostGIS database!"));
186 ds->setConnectionInfo(dsInfo);
189 QMessageBox::information(
this,
190 tr(
"TerraLib Qt Components"),
191 tr(
"Data source is ok!"));
195 catch(
const std::exception& e)
197 QMessageBox::warning(
this,
198 tr(
"TerraLib Qt Components"),
203 QMessageBox::warning(
this,
204 tr(
"TerraLib Qt Components"),
205 tr(
"Unknown error while testing PostgreSQL + PostGIS data source!"));
215 QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
218 connInfo[
"PG_HOST"] = qstr.toStdString();
221 qstr = m_ui->m_portLineEdit->text().trimmed();
224 connInfo[
"PG_PORT"] = qstr.toStdString();
227 qstr = m_ui->m_databaseComboBox->currentText().trimmed();
230 connInfo[
"PG_DB_NAME"] = qstr.toStdString();
233 qstr = m_ui->m_clientEncodingComboBox->currentText().trimmed();
236 connInfo[
"PG_CLIENT_ENCODING"] = qstr.toStdString();
239 qstr = m_ui->m_userNameLineEdit->text().trimmed();
242 connInfo[
"PG_USER"] = qstr.toStdString();
245 qstr = m_ui->m_passwordLineEdit->text().trimmed();
248 connInfo[
"PG_PASSWORD"] = qstr.toStdString();
251 qstr = m_ui->m_tablesToHideLineEdit->text().trimmed();
254 connInfo[
"PG_HIDE_TABLES"] = qstr.toStdString();
256 connInfo[
"PG_HIDE_SPATIAL_METADATA_TABLES"] = m_ui->m_hideMetadataTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
258 connInfo[
"PG_HIDE_RASTER_TABLES"] = m_ui->m_hideRasterTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
261 qstr = m_ui->m_connectTimeoutSpinBox->text().trimmed();
264 connInfo[
"PG_CONNECT_TIMEOUT"] = qstr.toStdString();
267 qstr = m_ui->m_minPoolSizeSpinBox->text().trimmed();
270 connInfo[
"PG_MIN_POOL_SIZE"] = qstr.toStdString();
273 qstr = m_ui->m_maxPoolSizeSpinBox->text().trimmed();
276 connInfo[
"PG_MAX_POOL_SIZE"] = qstr.toStdString();
279 qstr = m_ui->m_optionsLineEdit->text().trimmed();
282 connInfo[
"PG_OPTIONS"] = qstr.toStdString();
287 std::map<std::string, std::string>::const_iterator it = connInfo.find(
"PG_HOST");
288 std::map<std::string, std::string>::const_iterator itend = connInfo.end();
291 m_ui->m_hostNameLineEdit->setText(QString::fromStdString(it->second));
293 it = connInfo.find(
"PG_HOST_ADDR");
296 m_ui->m_hostNameLineEdit->setText(QString::fromStdString(it->second));
298 it = connInfo.find(
"PG_PORT");
301 m_ui->m_portLineEdit->setText(QString::fromStdString(it->second));
303 it = connInfo.find(
"PG_DB_NAME");
307 int pos = m_ui->m_databaseComboBox->findText(QString::fromStdString(it->second));
310 m_ui->m_databaseComboBox->setCurrentIndex(pos);
313 m_ui->m_databaseComboBox->addItem(QString::fromStdString(it->second));
314 m_ui->m_databaseComboBox->setCurrentIndex(0);
318 it = connInfo.find(
"PG_CLIENT_ENCODING");
322 int pos = m_ui->m_clientEncodingComboBox->findText(QString::fromStdString(it->second));
325 m_ui->m_clientEncodingComboBox->setCurrentIndex(pos);
328 m_ui->m_clientEncodingComboBox->addItem(QString::fromStdString(it->second));
329 m_ui->m_clientEncodingComboBox->setCurrentIndex(0);
333 it = connInfo.find(
"PG_USER");
336 m_ui->m_userNameLineEdit->setText(QString::fromStdString(it->second));
338 it = connInfo.find(
"PG_PASSWORD");
341 m_ui->m_passwordLineEdit->setText(QString::fromStdString(it->second));
343 it = connInfo.find(
"PG_CONNECT_TIMEOUT");
346 m_ui->m_connectTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
348 it = connInfo.find(
"PG_MIN_POOL_SIZE");
351 m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
353 it = connInfo.find(
"PG_MAX_POOL_SIZE");
356 m_ui->m_maxPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
358 it = connInfo.find(
"PG_OPTIONS");
361 m_ui->m_optionsLineEdit->setText(QString::fromStdString(it->second));
363 it = connInfo.find(
"PG_HIDE_SPATIAL_METADATA_TABLES");
365 m_ui->m_hideMetadataTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
367 it = connInfo.find(
"PG_HIDE_RASTER_TABLES");
369 m_ui->m_hideRasterTablesCheckBox->setChecked((it != itend) && (boost::to_upper_copy(it->second) ==
"TRUE"));
371 it = connInfo.find(
"PG_HIDE_TABLES");
374 m_ui->m_tablesToHideLineEdit->setText(QString::fromStdString(it->second));
379 m_ui->m_advancedConnectionOptionsGroupBox->setVisible(t);
384 if(m_ui->m_userNameLineEdit->text() !=
"" || m_ui->m_passwordLineEdit->text() !=
"")
387 std::map<std::string, std::string> dsInfo;
388 getConnectionInfo(dsInfo);
394 m_ui->m_databaseComboBox->clear();
395 for(std::size_t i = 0; i < dbNames.size(); i++)
396 m_ui->m_databaseComboBox->addItem(dbNames[i].c_str());
400 m_ui->m_clientEncodingComboBox->addItem(
"");
402 if(!encodings.empty())
404 for(std::size_t i = 0; i < encodings.size(); i++)
405 m_ui->m_clientEncodingComboBox->addItem(encodings[i].c_str());
409 idx = m_ui->m_clientEncodingComboBox->findText(
"WIN1252");
411 idx = m_ui->m_clientEncodingComboBox->findText(
"UTF8");
413 m_ui->m_clientEncodingComboBox->setCurrentIndex(idx);
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.
void set(const te::da::DataSourceInfoPtr &ds)
void getConnectionInfo(std::map< std::string, std::string > &connInfo) const
const te::da::DataSourcePtr & getDriver() const
void openPushButtonPressed()
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.
std::auto_ptr< Ui::PostGISConnectorDialogForm > m_ui
static std::auto_ptr< DataSource > make(const std::string &dsType)
static std::vector< std::string > getEncodings(const std::string &dsType, const std::map< std::string, std::string > &info)
It gets the encoding names of the data source.
static bool find(const std::string &dsType)
boost::shared_ptr< DataSource > DataSourcePtr
void advancedConnectionOptionsCheckBoxToggled(bool t)
~PostGISConnectorDialog()
#define TR_QT_WIDGETS(message)
It marks a string in order to get translated. This is a special mark used in the TerraLib Qt Widgets ...
void passwordLineEditEditingFinished()
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
const te::da::DataSourceInfoPtr & getDataSource() const