27 #include "../../../../core/translator/Translator.h" 28 #include "../../../../core/uri/URI.h" 29 #include "../../../../core/uri/Utils.h" 30 #include "../../../../dataaccess/datasource/DataSource.h" 31 #include "../../../../dataaccess/datasource/DataSourceFactory.h" 32 #include "../../../../dataaccess/datasource/DataSourceManager.h" 33 #include "../../../../dataaccess/datasource/DataSourceInfo.h" 34 #include "../../../widgets/Exception.h" 36 #include "ui_PostGISConnectorDialogForm.h" 39 #include <boost/algorithm/string/case_conv.hpp> 40 #include <boost/uuid/random_generator.hpp> 41 #include <boost/uuid/uuid_io.hpp> 42 #include <boost/lexical_cast.hpp> 45 #include <QMessageBox> 49 m_ui(new
Ui::PostGISConnectorDialogForm)
55 m_ui->m_advancedConnectionOptionsGroupBox->hide();
64 m_ui->m_portLineEdit->setValidator(
new QIntValidator(0, 99999,
this));
66 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
67 m_ui->m_helpPushButton->setPageReference(
"plugins/pgis/pgis.html");
91 m_ui->m_datasourceTitleLineEdit->setText(QString::fromUtf8(
m_datasource->getTitle().c_str()));
93 m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromUtf8(
m_datasource->getDescription().c_str()));
103 throw te::qt::widgets::Exception(
TE_TR(
"No data access driver loaded for PostgreSQL + PostGIS data sources!"));
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::fromUtf8(
"@") +
m_ui->m_databaseComboBox->currentText().trimmed() + QString::fromUtf8(
"@") +
m_ui->m_userNameLineEdit->text().trimmed();
125 boost::uuids::basic_random_generator<boost::mt19937> gen;
126 boost::uuids::uuid u = gen();
127 std::string dsId = boost::uuids::to_string(u);
132 m_datasource->setDescription(
m_ui->m_datasourceDescriptionTextEdit->toPlainText().toUtf8().data());
141 m_datasource->setDescription(
m_ui->m_datasourceDescriptionTextEdit->toPlainText().toUtf8().data());
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!"));
172 if(ds.get() ==
nullptr)
173 throw te::qt::widgets::Exception(
TE_TR(
"Could not open PostgreSQL + PostGIS database!"));
177 QMessageBox::information(
this,
178 tr(
"TerraLib Qt Components"),
179 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 PostgreSQL + PostGIS data source!"));
201 std::string strURI =
"pgsql://";
204 qstr =
m_ui->m_userNameLineEdit->text().trimmed();
205 strURI += qstr.toUtf8().data();
211 qstr =
m_ui->m_passwordLineEdit->text().trimmed();
212 strURI += qstr.toUtf8().data();
217 qstr =
m_ui->m_hostNameLineEdit->text().trimmed();
218 strURI += qstr.isEmpty() ?
"localhost" : qstr.toUtf8().data();
222 qstr =
m_ui->m_portLineEdit->text().trimmed();
223 strURI += qstr.isEmpty() ?
"5432" : qstr.toUtf8().data();
227 qstr =
m_ui->m_databaseComboBox->currentText().trimmed();
229 strURI +=
"template1";
231 strURI += qstr.toUtf8().data();
236 qstr =
m_ui->m_tablesToHideLineEdit->text().trimmed();
239 strURI +=
"PG_HIDE_TABLES=";
240 strURI += qstr.toUtf8().data();
244 strURI +=
"PG_CONNECT_TIMEOUT=";
245 qstr = qstr.isEmpty() ?
"4" :
m_ui->m_connectTimeoutSpinBox->text().trimmed();
246 strURI += qstr.toUtf8().data();
249 strURI +=
"&PG_MAX_POOL_SIZE=";
250 qstr = qstr.isEmpty() ?
"50" :
m_ui->m_maxPoolSizeSpinBox->text().trimmed();
251 strURI += qstr.toUtf8().data();
254 strURI +=
"&PG_MIN_POOL_SIZE=";
255 qstr = qstr.isEmpty() ?
"2" :
m_ui->m_minPoolSizeSpinBox->text().trimmed();
256 strURI += qstr.toUtf8().data();
259 strURI +=
"&PG_HIDE_SPATIAL_METADATA_TABLES=";
260 strURI +=
m_ui->m_hideMetadataTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
263 strURI +=
"&PG_HIDE_RASTER_TABLES=";
264 strURI +=
m_ui->m_hideRasterTablesCheckBox->isChecked() ?
"TRUE" :
"FALSE";
266 qstr =
m_ui->m_optionsLineEdit->text().trimmed();
269 strURI +=
"&PG_OPTIONS=";
270 strURI += qstr.toUtf8().data();
280 std::map<std::string, std::string>::const_iterator it = kvp.begin();
281 std::map<std::string, std::string>::const_iterator itend = kvp.end();
283 std::string host = uri.
host();
285 m_ui->m_hostNameLineEdit->setText(QString::fromUtf8(host.c_str()));
287 std::string port = uri.
port();
289 m_ui->m_portLineEdit->setText(QString::fromUtf8(port.c_str()));
291 std::string dbName = uri.
path().substr(1, uri.
path().length());
294 int pos =
m_ui->m_databaseComboBox->findText(QString::fromUtf8(dbName.c_str()));
297 m_ui->m_databaseComboBox->setCurrentIndex(pos);
300 m_ui->m_databaseComboBox->addItem(QString::fromUtf8(dbName.c_str()));
301 m_ui->m_databaseComboBox->setCurrentIndex(0);
305 std::string user = uri.
user();
307 m_ui->m_userNameLineEdit->setText(QString::fromUtf8(user.c_str()));
311 m_ui->m_passwordLineEdit->setText(QString::fromUtf8(pass.c_str()));
313 it = kvp.find(
"PG_CONNECT_TIMEOUT");
314 if (it != itend && !it->second.empty())
315 m_ui->m_connectTimeoutSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
317 it = kvp.find(
"PG_MIN_POOL_SIZE");
318 if (it != itend && !it->second.empty())
319 m_ui->m_minPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
321 it = kvp.find(
"PG_MAX_POOL_SIZE");
322 if (it != itend && !it->second.empty())
323 m_ui->m_maxPoolSizeSpinBox->setValue(boost::lexical_cast<int>(it->second.c_str()));
325 it = kvp.find(
"PG_OPTIONS");
326 if (it != itend && !it->second.empty())
327 m_ui->m_optionsLineEdit->setText(QString::fromUtf8(it->second.c_str()));
329 it = kvp.find(
"PG_HIDE_SPATIAL_METADATA_TABLES");
330 m_ui->m_hideMetadataTablesCheckBox->setChecked((it != itend && !it->second.empty()) && (boost::to_upper_copy(it->second) ==
"TRUE"));
332 it = kvp.find(
"PG_HIDE_RASTER_TABLES");
333 m_ui->m_hideRasterTablesCheckBox->setChecked((it != itend && !it->second.empty()) && (boost::to_upper_copy(it->second) ==
"TRUE"));
335 it = kvp.find(
"PG_HIDE_TABLES");
336 if(it != itend && !it->second.empty())
337 m_ui->m_tablesToHideLineEdit->setText(QString::fromUtf8(it->second.c_str()));
342 m_ui->m_advancedConnectionOptionsGroupBox->setVisible(t);
347 if(
m_ui->m_userNameLineEdit->text() !=
"" ||
m_ui->m_passwordLineEdit->text() !=
"")
355 if(!
m_ui->m_databaseComboBox->currentText().isEmpty())
356 curDb =
m_ui->m_databaseComboBox->currentText().toUtf8().data();
358 m_ui->m_databaseComboBox->clear();
361 std::vector<std::string> dbNames =
370 int idx =
m_ui->m_databaseComboBox->findText(curDb.c_str(),
374 m_ui->m_databaseComboBox->setCurrentIndex(idx);
386 std::sort(names.begin(), names.end());
388 for(std::size_t i = 0; i < names.size(); ++i)
390 m_ui->m_databaseComboBox->addItem(names[i].c_str());
std::string path() const
Retrieving the path.
static std::unique_ptr< DataSource > make(const std::string &driver, const te::core::URI &connInfo)
static bool find(const std::string &dsType)
void set(const te::da::DataSourceInfoPtr &ds)
void advancedConnectionOptionsCheckBoxToggled(bool t)
te::da::DataSourceInfoPtr m_datasource
boost::shared_ptr< DataSource > DataSourcePtr
~PostGISConnectorDialog()
void passwordLineEditEditingFinished()
std::unique_ptr< Ui::PostGISConnectorDialogForm > m_ui
const te::da::DataSourcePtr & getDriver() const
std::string password() const
Retrieving the password information.
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
std::string query() const
Retrieving the query.
static std::vector< std::string > getDataSourceNames(const std::string &dsType, const std::string &connInfo)
It returns the data source names available in the driver.
std::string port() const
Retrieving the port.
std::string host() const
Retrieving the host.
void openPushButtonPressed()
const te::da::DataSourceInfoPtr & getDataSource() const
te::da::DataSourcePtr m_driver
A class for representing an Uniform Resource Identifier (URI).
const std::string getConnectionInfo(bool getPrivateKeys) const
PostGISConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
TECOREEXPORT std::map< std::string, std::string > Expand(const std::string &query_str)
Split a query string into its components.
void testPushButtonPressed()
A class that represents a data source component.
A dialog window for showing the PostGIS connector widget.
void setDatabasesNames(std::vector< std::string > names)
void setConnectionInfo(const std::string &connInfo)
std::string user() const
Retrieving the user information.
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr