28 #include "../../../../common/Translator.h"
29 #include "../../../../dataaccess/datasource/DataSource.h"
30 #include "../../../../dataaccess/datasource/DataSourceFactory.h"
31 #include "../../../../dataaccess/datasource/DataSourceInfo.h"
32 #include "../../../../dataaccess/datasource/DataSourceManager.h"
33 #include "../../../widgets/Exception.h"
34 #include "../../../widgets/utils/ScopedCursor.h"
35 #include "ui_PostGISCreatorDialogForm.h"
38 #include <boost/algorithm/string/case_conv.hpp>
39 #include <boost/lexical_cast.hpp>
40 #include <boost/uuid/random_generator.hpp>
41 #include <boost/uuid/uuid_io.hpp>
44 #include <QMessageBox>
48 m_ui(new
Ui::PostGISCreatorDialogForm)
54 m_ui->m_advancedOptionsGroupBox->hide();
63 m_ui->m_portLineEdit->setValidator(
new QIntValidator(0, 99999,
this));
65 m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
66 m_ui->m_helpPushButton->setPageReference(
"plugins/pgis/pgis_creator.html");
76 QApplication::setOverrideCursor(Qt::WaitCursor);
83 QApplication::restoreOverrideCursor();
84 throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for PostgreSQL data sources!"));
88 std::map<std::string, std::string> dsInfo = getConnectionInfo(
true);
95 std::map<std::string, std::string> connInfo;
96 if(!dsInfo[
"PG_HOST"].empty())
97 connInfo[
"PG_HOST"] = dsInfo[
"PG_HOST"];
99 if(!dsInfo[
"PG_PORT"].empty())
100 connInfo[
"PG_PORT"] = dsInfo[
"PG_PORT"];
102 connInfo[
"PG_USER"] = dsInfo[
"PG_USER"];
103 connInfo[
"PG_PASSWORD"] = dsInfo[
"PG_PASSWORD"];
104 connInfo[
"PG_DB_NAME"] = dsInfo[
"PG_NEWDB_NAME"];
105 connInfo[
"PG_MIN_POOL_SIZE"] =
"1";
106 connInfo[
"PG_MAX_POOL_SIZE"] =
"4";
107 connInfo[
"PG_CONNECT_TIMEOUT"] =
"5";
108 if(!dsInfo[
"PG_NEWDB_ENCODING"].empty())
109 connInfo[
"PG_CLIENT_ENCODING"] = dsInfo[
"PG_NEWDB_ENCODING"];
112 ds->setConnectionInfo(connInfo);
115 m_driver.reset(ds.release());
118 if(m_driver.get() == 0)
120 QApplication::restoreOverrideCursor();
121 throw te::qt::widgets::Exception(
TE_TR(
"Could not open POSTGIS data source due to an unknown error!"));
124 QString title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_newDatabaseNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
126 std::map<std::string, std::string> connInfo;
127 if(!dsInfo[
"PG_HOST"].empty())
128 connInfo[
"PG_HOST"] = dsInfo[
"PG_HOST"];
130 if(!dsInfo[
"PG_PORT"].empty())
131 connInfo[
"PG_PORT"] = dsInfo[
"PG_PORT"];
133 connInfo[
"PG_USER"] = dsInfo[
"PG_USER"];
135 if(m_ui->m_savePasswordCheckBox)
136 connInfo[
"PG_PASSWORD"] = dsInfo[
"PG_PASSWORD"];
138 connInfo[
"PG_DB_NAME"] = dsInfo[
"PG_NEWDB_NAME"];
139 connInfo[
"PG_MIN_POOL_SIZE"] =
"1";
140 connInfo[
"PG_MAX_POOL_SIZE"] =
"4";
141 connInfo[
"PG_CONNECT_TIMEOUT"] =
"5";
142 if(!dsInfo[
"PG_NEWDB_ENCODING"].empty())
143 connInfo[
"PG_CLIENT_ENCODING"] = dsInfo[
"PG_NEWDB_ENCODING"];
145 if(m_datasource.get() == 0)
150 m_datasource->setConnInfo(connInfo);
152 boost::uuids::basic_random_generator<boost::mt19937> gen;
153 boost::uuids::uuid u = gen();
154 std::string dsId = boost::uuids::to_string(u);
156 m_datasource->setId(dsId);
157 m_driver->setId(dsId);
158 m_datasource->setTitle(title.toUtf8().data());
159 m_datasource->setDescription(
"");
160 m_datasource->setAccessDriver(
"POSTGIS");
161 m_datasource->setType(
"POSTGIS");
165 m_driver->setId(m_datasource->getId());
166 m_datasource->setConnInfo(connInfo);
167 m_datasource->setTitle(title.toUtf8().data());
168 m_datasource->setDescription(
"");
172 catch(
const std::exception& e)
174 QApplication::restoreOverrideCursor();
175 QMessageBox::warning(
this,
176 tr(
"TerraLib Qt Components"),
182 QApplication::restoreOverrideCursor();
183 QMessageBox::warning(
this,
184 tr(
"TerraLib Qt Components"),
185 tr(
"Unknown error while opening PostgreSQL database!"));
189 QApplication::restoreOverrideCursor();
200 m_ui->m_advancedOptionsGroupBox->setVisible(t);
205 std::map<std::string, std::string> connInfo;
208 QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
211 connInfo[
"PG_HOST"] = qstr.toStdString();
214 qstr = m_ui->m_portLineEdit->text().trimmed();
217 connInfo[
"PG_PORT"] = qstr.toStdString();
220 qstr = m_ui->m_userNameLineEdit->text().trimmed();
223 connInfo[
"PG_USER"] = qstr.toStdString();
228 qstr = m_ui->m_passwordLineEdit->text().trimmed();
231 connInfo[
"PG_PASSWORD"] = qstr.toStdString();
235 qstr = m_ui->m_newDatabaseNameLineEdit->text().trimmed();
238 connInfo[
"PG_NEWDB_NAME"] = qstr.toStdString();
241 qstr = m_ui->m_templateComboBox->currentText().trimmed();
244 connInfo[
"PG_NEWDB_TEMPLATE"] = qstr.toStdString();
247 qstr = m_ui->m_ownerComboBox->currentText().trimmed();
250 connInfo[
"PG_NEWDB_OWNER"] = qstr.toStdString();
253 qstr = m_ui->m_encodingComboBox->currentText().trimmed();
256 connInfo[
"PG_NEWDB_ENCODING"] = qstr.toStdString();
259 qstr = m_ui->m_tablespaceLineEdit->text().trimmed();
262 connInfo[
"PG_NEWDB_TABLESPACE"] = qstr.toStdString();
265 if(!m_ui->m_noLimitConnectionsGroupBox->isChecked())
267 qstr = m_ui->m_connectionsLimitSpinBox->text().trimmed();
271 if(boost::lexical_cast<int>(qstr.toStdString()) >= 1)
272 connInfo[
"PG_NEWDB_CONN_LIMIT"] = qstr.toStdString();
274 connInfo[
"PG_NEWDB_CONN_LIMIT"] =
"-1";
295 if(m_ui->m_userNameLineEdit->text() !=
"" && m_ui->m_passwordLineEdit->text() !=
"")
297 std::map<std::string, std::string> dsInfo = getConnectionInfo(
true);
301 if(!templates.empty())
302 for(std::size_t i = 0; i < templates.size(); i++)
303 m_ui->m_templateComboBox->addItem(templates[i].c_str());
305 m_ui->m_templateComboBox->setCurrentIndex(m_ui->m_templateComboBox->findText(
"postgis"));
308 m_ui->m_encodingComboBox->clear();
309 m_ui->m_encodingComboBox->addItem(
"");
311 if(!encodings.empty())
312 for(std::size_t i = 0; i < encodings.size(); i++)
316 m_ui->m_ownerComboBox->clear();
317 std::map<std::string, std::string> info;
318 std::map<std::string, std::string> aux = getConnectionInfo(
true);
319 info[
"PG_HOST"] = aux[
"PG_HOST"].empty()?
"localhost":aux[
"PG_HOST"];
320 info[
"PG_PORT"] = aux[
"PG_PORT"].empty()?
"5432":aux[
"PG_PORT"];
321 info[
"PG_USER"] = aux[
"PG_USER"];
322 info[
"PG_PASSWORD"] = aux[
"PG_PASSWORD"];
325 auxDs->setConnectionInfo(info);
328 std::auto_ptr<te::da::DataSet> dsRoles = auxDs->query(
"select * from pg_roles");
330 while(dsRoles->moveNext())
331 m_ui->m_ownerComboBox->addItem(dsRoles->getString(
"rolname").c_str());
static bool find(const std::string &dsType)
boost::shared_ptr< DataSource > DataSourcePtr
void advancedCreationOptionsCheckBoxToggled(bool t)
const te::da::DataSourceInfoPtr & getDataSource() const
#define TE_TR(message)
It marks a string in order to get translated.
static std::auto_ptr< DataSource > make(const std::string &dsType)
void applyPushButtonPressed()
PostGISCreatorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
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.
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 passwordLineEditEditingFinished()
static std::auto_ptr< DataSource > create(const std::string &dsType, const std::map< std::string, std::string > &dsInfo)
It creates a new repository for a data source.
A class that represents a data source component.
std::map< std::string, std::string > getConnectionInfo(bool getPrivateKeys) const
static std::string getCharEncodingName(const CharEncoding &code)
It returns the name of the given charset.
const te::da::DataSourcePtr & getDriver() const
std::auto_ptr< Ui::PostGISCreatorDialogForm > m_ui
void closePushButtonPressed()
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr