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 "ui_PostGISCreatorDialogForm.h"
37 #include <boost/algorithm/string/case_conv.hpp>
38 #include <boost/lexical_cast.hpp>
39 #include <boost/uuid/random_generator.hpp>
40 #include <boost/uuid/uuid_io.hpp>
43 #include <QtGui/QMessageBox>
47 m_ui(new Ui::PostGISCreatorDialogForm)
53 m_ui->m_advancedOptionsGroupBox->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_creator.html");
79 throw te::qt::widgets::Exception(
TR_QT_WIDGETS(
"Sorry! No data access driver loaded for PostgreSQL data sources!"));
82 std::map<std::string, std::string> dsInfo;
84 getConnectionInfo(dsInfo);
90 std::map<std::string, std::string> connInfo;
91 connInfo[
"PG_HOST"] = dsInfo[
"PG_HOST"];
92 connInfo[
"PG_PORT"] = dsInfo[
"PG_PORT"];
93 connInfo[
"PG_USER"] = dsInfo[
"PG_USER"];
94 connInfo[
"PG_PASSWORD"] = dsInfo[
"PG_PASSWORD"];
95 connInfo[
"PG_DB_NAME"] = dsInfo[
"PG_NEWDB_NAME"];
96 connInfo[
"PG_MIN_POOL_SIZE"] =
"1";
97 connInfo[
"PG_MAX_POOL_SIZE"] =
"4";
98 connInfo[
"PG_CONNECT_TIMEOUT"] =
"5";
99 if(!dsInfo[
"PG_NEWDB_ENCODING"].empty())
100 connInfo[
"PG_CLIENT_ENCODING"] = dsInfo[
"PG_NEWDB_ENCODING"];
103 ds->setConnectionInfo(connInfo);
106 m_driver.reset(ds.release());
108 if(m_driver.get() == 0)
109 throw te::qt::widgets::Exception(
TR_QT_WIDGETS(
"Could not open POSTGIS data source due to an unknown error!"));
111 QString title = m_ui->m_hostNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_newDatabaseNameLineEdit->text().trimmed() + QString::fromStdString(
"@") + m_ui->m_userNameLineEdit->text().trimmed();
113 if(m_datasource.get() == 0)
118 m_datasource->setConnInfo(connInfo);
120 boost::uuids::basic_random_generator<boost::mt19937> gen;
121 boost::uuids::uuid u = gen();
122 std::string dsId = boost::uuids::to_string(u);
124 m_datasource->setId(dsId);
125 m_driver->setId(dsId);
126 m_datasource->setTitle(title.toUtf8().data());
127 m_datasource->setDescription(
"");
128 m_datasource->setAccessDriver(
"POSTGIS");
129 m_datasource->setType(
"POSTGIS");
133 m_driver->setId(m_datasource->getId());
134 m_datasource->setConnInfo(connInfo);
135 m_datasource->setTitle(title.toUtf8().data());
136 m_datasource->setDescription(
"");
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!"));
165 m_ui->m_advancedOptionsGroupBox->setVisible(t);
174 QString qstr = m_ui->m_hostNameLineEdit->text().trimmed();
177 connInfo[
"PG_HOST"] = qstr.toStdString();
180 qstr = m_ui->m_portLineEdit->text().trimmed();
183 connInfo[
"PG_PORT"] = qstr.toStdString();
186 qstr = m_ui->m_userNameLineEdit->text().trimmed();
189 connInfo[
"PG_USER"] = qstr.toStdString();
192 qstr = m_ui->m_passwordLineEdit->text().trimmed();
195 connInfo[
"PG_PASSWORD"] = qstr.toStdString();
198 qstr = m_ui->m_newDatabaseNameLineEdit->text().trimmed();
201 connInfo[
"PG_NEWDB_NAME"] = qstr.toStdString();
204 qstr = m_ui->m_templateComboBox->currentText().trimmed();
207 connInfo[
"PG_NEWDB_TEMPLATE"] = qstr.toStdString();
210 qstr = m_ui->m_ownerComboBox->currentText().trimmed();
213 connInfo[
"PG_NEWDB_OWNER"] = qstr.toStdString();
216 qstr = m_ui->m_encodingComboBox->currentText().trimmed();
219 connInfo[
"PG_NEWDB_ENCODING"] = qstr.toStdString();
222 qstr = m_ui->m_tablespaceLineEdit->text().trimmed();
225 connInfo[
"PG_NEWDB_TABLESPACE"] = qstr.toStdString();
228 if(!m_ui->m_noLimitConnectionsGroupBox->isChecked())
230 qstr = m_ui->m_connectionsLimitSpinBox->text().trimmed();
234 if(boost::lexical_cast<int>(qstr.toStdString()) >= 1)
235 connInfo[
"PG_NEWDB_CONN_LIMIT"] = qstr.toStdString();
237 connInfo[
"PG_NEWDB_CONN_LIMIT"] =
"-1";
256 if(m_ui->m_userNameLineEdit->text() !=
"" && m_ui->m_passwordLineEdit->text() !=
"")
258 std::map<std::string, std::string> dsInfo;
259 getConnectionInfo(dsInfo);
263 if(!templates.empty())
264 for(std::size_t i = 0; i < templates.size(); i++)
265 m_ui->m_templateComboBox->addItem(templates[i].c_str());
267 m_ui->m_templateComboBox->setCurrentIndex(m_ui->m_templateComboBox->findText(
"postgis"));
270 m_ui->m_encodingComboBox->addItem(
"");
272 if(!encodings.empty())
273 for(std::size_t i = 0; i < encodings.size(); i++)
274 m_ui->m_encodingComboBox->addItem(encodings[i].c_str());
277 m_ui->m_ownerComboBox->clear();
278 std::map<std::string, std::string> info;
279 std::map<std::string, std::string> aux;
280 getConnectionInfo(aux);
281 info[
"PG_HOST"] = aux[
"PG_HOST"].empty()?
"localhost":aux[
"PG_HOST"];
282 info[
"PG_PORT"] = aux[
"PG_PORT"].empty()?
"5432":aux[
"PG_PORT"];
283 info[
"PG_USER"] = aux[
"PG_USER"];
284 info[
"PG_PASSWORD"] = aux[
"PG_PASSWORD"];
287 auxDs->setConnectionInfo(info);
290 std::auto_ptr<te::da::DataSet> dsRoles = auxDs->query(
"select * from pg_roles");
292 while(dsRoles->moveNext())
293 m_ui->m_ownerComboBox->addItem(dsRoles->getString(
"rolname").c_str());
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.
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.
std::auto_ptr< Ui::PostGISCreatorDialogForm > m_ui
A class that represents a data source component.
PostGISCreatorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
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
const te::da::DataSourceInfoPtr & getDataSource() const
void applyPushButtonPressed()
const te::da::DataSourcePtr & getDriver() const
#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 getConnectionInfo(std::map< std::string, std::string > &connInfo) const
void passwordLineEditEditingFinished()
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
void advancedCreationOptionsCheckBoxToggled(bool t)
void closePushButtonPressed()