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)
60 m_ui->m_portLineEdit->setValidator(
new QIntValidator(0, 99999,
this));
62 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
63 m_ui->m_helpPushButton->setPageReference(
"plugins/pgis/pgis.html");
87 m_ui->m_datasourceTitleLineEdit->setText(QString::fromUtf8(
m_datasource->getTitle().c_str()));
89 m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromUtf8(
m_datasource->getDescription().c_str()));
99 throw te::qt::widgets::Exception(
TE_TR(
"No data access driver loaded for PostgreSQL + PostGIS data sources!"));
107 throw te::qt::widgets::Exception(
TE_TR(
"Could not open PostgreSQL + PostGIS data source due to an unknown error!"));
109 QString title =
m_ui->m_datasourceTitleLineEdit->text().trimmed();
112 title =
m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromUtf8(
"@") +
m_ui->m_databaseComboBox->currentText().trimmed() + QString::fromUtf8(
"@") +
m_ui->m_userNameLineEdit->text().trimmed();
121 boost::uuids::basic_random_generator<boost::mt19937> gen;
122 boost::uuids::uuid u = gen();
123 std::string dsId = boost::uuids::to_string(u);
128 m_datasource->setDescription(
m_ui->m_datasourceDescriptionTextEdit->toPlainText().toUtf8().data());
137 m_datasource->setDescription(
m_ui->m_datasourceDescriptionTextEdit->toPlainText().toUtf8().data());
140 catch(
const std::exception& e)
142 QMessageBox::warning(
this,
143 tr(
"TerraLib Qt Components"),
149 QMessageBox::warning(
this,
150 tr(
"TerraLib Qt Components"),
151 tr(
"Unknown error while opening PostgreSQL database!"));
164 throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for PostgreSQL + PostGIS data sources!"));
169 throw te::qt::widgets::Exception(
TE_TR(
"Could not open PostgreSQL + PostGIS database!"));
173 QMessageBox::information(
this,
174 tr(
"TerraLib Qt Components"),
175 tr(
"Data source is ok!"));
179 catch(
const std::exception& e)
181 QMessageBox::warning(
this,
182 tr(
"TerraLib Qt Components"),
187 QMessageBox::warning(
this,
188 tr(
"TerraLib Qt Components"),
189 tr(
"Unknown error while testing PostgreSQL + PostGIS data source!"));
197 std::string strURI =
"pgsql://";
200 qstr =
m_ui->m_userNameLineEdit->text().trimmed();
201 strURI += qstr.toUtf8().data();
207 qstr =
m_ui->m_passwordLineEdit->text().trimmed();
208 strURI += qstr.toUtf8().data();
213 qstr =
m_ui->m_hostNameLineEdit->text().trimmed();
214 strURI += qstr.isEmpty() ?
"localhost" : qstr.toUtf8().data();
218 qstr =
m_ui->m_portLineEdit->text().trimmed();
219 strURI += qstr.isEmpty() ?
"5432" : qstr.toUtf8().data();
223 qstr =
m_ui->m_databaseComboBox->currentText().trimmed();
225 strURI +=
"template1";
227 strURI += qstr.toUtf8().data();
239 std::map<std::string, std::string>::const_iterator it = kvp.begin();
240 std::map<std::string, std::string>::const_iterator itend = kvp.end();
242 std::string host = uri.
host();
244 m_ui->m_hostNameLineEdit->setText(QString::fromUtf8(host.c_str()));
246 std::string port = uri.
port();
248 m_ui->m_portLineEdit->setText(QString::fromUtf8(port.c_str()));
250 std::string dbName = uri.
path().substr(1, uri.
path().length());
253 int pos =
m_ui->m_databaseComboBox->findText(QString::fromUtf8(dbName.c_str()));
256 m_ui->m_databaseComboBox->setCurrentIndex(pos);
259 m_ui->m_databaseComboBox->addItem(QString::fromUtf8(dbName.c_str()));
260 m_ui->m_databaseComboBox->setCurrentIndex(0);
264 std::string user = uri.
user();
266 m_ui->m_userNameLineEdit->setText(QString::fromUtf8(user.c_str()));
270 m_ui->m_passwordLineEdit->setText(QString::fromUtf8(pass.c_str()));
275 if(
m_ui->m_userNameLineEdit->text() !=
"" ||
m_ui->m_passwordLineEdit->text() !=
"")
283 if(!
m_ui->m_databaseComboBox->currentText().isEmpty())
284 curDb =
m_ui->m_databaseComboBox->currentText().toUtf8().data();
286 m_ui->m_databaseComboBox->clear();
289 std::vector<std::string> dbNames =
298 int idx =
m_ui->m_databaseComboBox->findText(curDb.c_str(),
302 m_ui->m_databaseComboBox->setCurrentIndex(idx);
314 std::sort(names.begin(), names.end());
316 for(std::size_t i = 0; i < names.size(); ++i)
318 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)
boost::shared_ptr< DataSource > DataSourcePtr
te::da::DataSourceInfoPtr m_datasource
void testPushButtonPressed()
std::string password() const
Retrieving the password information.
static te::dt::Date ds(2010, 01, 01)
const te::da::DataSourceInfoPtr & getDataSource() const
#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.
void set(const te::da::DataSourceInfoPtr &ds)
void setConnectionInfo(const std::string &connInfo)
PostGISConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
const std::string getConnectionInfo(bool getPrivateKeys) const
~PostGISConnectorDialog()
std::string port() const
Retrieving the port.
std::string host() const
Retrieving the host.
te::da::DataSourcePtr m_driver
void openPushButtonPressed()
const te::da::DataSourcePtr & getDriver() const
void passwordLineEditEditingFinished()
A class for representing an Uniform Resource Identifier (URI).
TECOREEXPORT std::map< std::string, std::string > Expand(const std::string &query_str)
Split a query string into its components.
A class that represents a data source component.
std::unique_ptr< Ui::PostGISConnectorDialogForm > m_ui
std::string user() const
Retrieving the user information.
void setDatabasesNames(std::vector< std::string > names)
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr