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