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, 9999,
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;
90 getConnectionInfo(dsInfo);
96 std::map<std::string, std::string> connInfo;
97 connInfo[
"PG_HOST"] = dsInfo[
"PG_HOST"];
98 connInfo[
"PG_PORT"] = dsInfo[
"PG_PORT"];
99 connInfo[
"PG_USER"] = dsInfo[
"PG_USER"];
100 connInfo[
"PG_PASSWORD"] = dsInfo[
"PG_PASSWORD"];
101 connInfo[
"PG_DB_NAME"] = dsInfo[
"PG_NEWDB_NAME"];
102 connInfo[
"PG_MIN_POOL_SIZE"] =
"1";
103 connInfo[
"PG_MAX_POOL_SIZE"] =
"4";
104 connInfo[
"PG_CONNECT_TIMEOUT"] =
"5";
105 if(!dsInfo[
"PG_NEWDB_ENCODING"].empty())
106 connInfo[
"PG_CLIENT_ENCODING"] = dsInfo[
"PG_NEWDB_ENCODING"];
109 ds->setConnectionInfo(connInfo);
112 m_driver.reset(ds.release());
114 if(m_driver.get() == 0)
116 QApplication::restoreOverrideCursor();
117 throw te::qt::widgets::Exception(
TE_TR(
"Could not open POSTGIS data source due to an unknown error!"));
120 QString title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_newDatabaseNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
122 if(m_datasource.get() == 0)
127 m_datasource->setConnInfo(connInfo);
129 boost::uuids::basic_random_generator<boost::mt19937> gen;
130 boost::uuids::uuid u = gen();
131 std::string dsId = boost::uuids::to_string(u);
133 m_datasource->setId(dsId);
134 m_driver->setId(dsId);
135 m_datasource->setTitle(title.toUtf8().data());
136 m_datasource->setDescription(
"");
137 m_datasource->setAccessDriver(
"POSTGIS");
138 m_datasource->setType(
"POSTGIS");
142 m_driver->setId(m_datasource->getId());
143 m_datasource->setConnInfo(connInfo);
144 m_datasource->setTitle(title.toUtf8().data());
145 m_datasource->setDescription(
"");
149 catch(
const std::exception& e)
151 QApplication::restoreOverrideCursor();
152 QMessageBox::warning(
this,
153 tr(
"TerraLib Qt Components"),
159 QApplication::restoreOverrideCursor();
160 QMessageBox::warning(
this,
161 tr(
"TerraLib Qt Components"),
162 tr(
"Unknown error while opening PostgreSQL database!"));
166 QApplication::restoreOverrideCursor();
177 m_ui->m_advancedOptionsGroupBox->setVisible(t);
186 QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
189 connInfo[
"PG_HOST"] = qstr.toStdString();
192 qstr = m_ui->m_portLineEdit->text().trimmed();
195 connInfo[
"PG_PORT"] = qstr.toStdString();
198 qstr = m_ui->m_userNameLineEdit->text().trimmed();
201 connInfo[
"PG_USER"] = qstr.toStdString();
204 qstr = m_ui->m_passwordLineEdit->text().trimmed();
207 connInfo[
"PG_PASSWORD"] = qstr.toStdString();
210 qstr = m_ui->m_newDatabaseNameLineEdit->text().trimmed();
213 connInfo[
"PG_NEWDB_NAME"] = qstr.toStdString();
216 qstr = m_ui->m_templateComboBox->currentText().trimmed();
219 connInfo[
"PG_NEWDB_TEMPLATE"] = qstr.toStdString();
222 qstr = m_ui->m_ownerComboBox->currentText().trimmed();
225 connInfo[
"PG_NEWDB_OWNER"] = qstr.toStdString();
228 qstr = m_ui->m_encodingComboBox->currentText().trimmed();
231 connInfo[
"PG_NEWDB_ENCODING"] = qstr.toStdString();
234 qstr = m_ui->m_tablespaceLineEdit->text().trimmed();
237 connInfo[
"PG_NEWDB_TABLESPACE"] = qstr.toStdString();
240 if(!m_ui->m_noLimitConnectionsGroupBox->isChecked())
242 qstr = m_ui->m_connectionsLimitSpinBox->text().trimmed();
246 if(boost::lexical_cast<int>(qstr.toStdString()) >= 1)
247 connInfo[
"PG_NEWDB_CONN_LIMIT"] = qstr.toStdString();
249 connInfo[
"PG_NEWDB_CONN_LIMIT"] =
"-1";
268 if(m_ui->m_userNameLineEdit->text() !=
"" && m_ui->m_passwordLineEdit->text() !=
"")
270 std::map<std::string, std::string> dsInfo;
271 getConnectionInfo(dsInfo);
275 if(!templates.empty())
276 for(std::size_t i = 0; i < templates.size(); i++)
277 m_ui->m_templateComboBox->addItem(templates[i].c_str());
279 m_ui->m_templateComboBox->setCurrentIndex(m_ui->m_templateComboBox->findText(
"postgis"));
282 m_ui->m_encodingComboBox->clear();
283 m_ui->m_encodingComboBox->addItem(
"");
285 if(!encodings.empty())
286 for(std::size_t i = 0; i < encodings.size(); i++)
290 m_ui->m_ownerComboBox->clear();
291 std::map<std::string, std::string> info;
292 std::map<std::string, std::string> aux;
293 getConnectionInfo(aux);
294 info[
"PG_HOST"] = aux[
"PG_HOST"].empty()?
"localhost":aux[
"PG_HOST"];
295 info[
"PG_PORT"] = aux[
"PG_PORT"].empty()?
"5432":aux[
"PG_PORT"];
296 info[
"PG_USER"] = aux[
"PG_USER"];
297 info[
"PG_PASSWORD"] = aux[
"PG_PASSWORD"];
300 auxDs->setConnectionInfo(info);
303 std::auto_ptr<te::da::DataSet> dsRoles = auxDs->query(
"select * from pg_roles");
305 while(dsRoles->moveNext())
306 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.
void getConnectionInfo(std::map< std::string, std::string > &connInfo) 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.
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.
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