27 #include "../../../../common/Translator.h" 
   28 #include "../../../../dataaccess/datasource/DataSource.h" 
   29 #include "../../../../dataaccess/datasource/DataSourceFactory.h" 
   30 #include "../../../../dataaccess/datasource/DataSourceInfo.h" 
   31 #include "../../../../dataaccess/datasource/DataSourceManager.h" 
   32 #include "../../../af/Utils.h" 
   33 #include "../../../widgets/Exception.h" 
   34 #include "../../../widgets/Utils.h" 
   36 #include "ui_OGRConnectorDialogForm.h" 
   40 #include <boost/uuid/random_generator.hpp> 
   41 #include <boost/uuid/uuid_io.hpp> 
   42 #include <boost/filesystem.hpp> 
   43 #include <boost/lexical_cast.hpp> 
   47 #include <QFileDialog> 
   48 #include <QMessageBox> 
   55     m_ui(new Ui::OGRConnectorDialogForm)
 
   65   m_ui->m_helpPushButton->setNameSpace(
"dpi.inpe.br.plugins");
 
   66   m_ui->m_helpPushButton->setPageReference(
"plugins/ogr/ogr.html");
 
   87   if(m_datasource.get() != 0)
 
   89     setConnectionInfo(m_datasource->getConnInfo());
 
   91     m_ui->m_datasourceTitleLineEdit->setText(QString::fromStdString(m_datasource->getTitle()));
 
   93     m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromStdString(m_datasource->getDescription()));
 
  103       throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for OGR data sources!"));
 
  106     std::map<std::string, std::string> dsInfo;
 
  108     getConnectionInfo(dsInfo);
 
  113     ds->setConnectionInfo(dsInfo);
 
  115     m_driver.reset(ds.release());
 
  117     if(m_driver.get() == 0)
 
  118       throw te::qt::widgets::Exception(
TE_TR(
"Could not open dataset via OGR due to an unknown error!"));
 
  120     QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
 
  123       title = m_ui->m_featureRepoLineEdit->text();
 
  125     if(m_datasource.get() == 0)
 
  130       m_datasource->setConnInfo(dsInfo);
 
  132       boost::uuids::basic_random_generator<boost::mt19937> gen;
 
  133       boost::uuids::uuid u = gen();
 
  134       std::string dsId = boost::uuids::to_string(u);
 
  136       m_datasource->setId(dsId);
 
  137       m_driver->setId(dsId);
 
  138       m_datasource->setTitle(title.toStdString());
 
  139       m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().toStdString());
 
  140       m_datasource->setAccessDriver(
"OGR");
 
  141       m_datasource->setType(
"OGR");
 
  145       m_driver->setId(m_datasource->getId());
 
  146       m_datasource->setConnInfo(dsInfo);
 
  147       m_datasource->setTitle(title.toLatin1().data());
 
  148       m_datasource->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toLatin1().data());
 
  151     if(m_ui->m_fileRadioButton->isChecked())
 
  153       QString path = m_ui->m_featureRepoLineEdit->text().trimmed();
 
  156         if(QMessageBox::question(
this, windowTitle(), tr(
"Do you want create spatial index to the selected ESRI ShapeFile?"), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
 
  158           std::vector<std::string> datasetNames = m_driver->getDataSetNames();
 
  159           assert(!datasetNames.empty());
 
  161           std::string command = 
"CREATE SPATIAL INDEX ON " + datasetNames[0];
 
  163           QApplication::setOverrideCursor(Qt::WaitCursor);
 
  165           m_driver->execute(command);
 
  167           QApplication::restoreOverrideCursor();
 
  169           QMessageBox::information(
this, windowTitle(), 
"Spatial index created with successfully!");
 
  174   catch(
const std::exception& e)
 
  176     QMessageBox::warning(
this,
 
  177                          tr(
"TerraLib Qt Components"),
 
  183     QMessageBox::warning(
this,
 
  184                          tr(
"TerraLib Qt Components"),
 
  185                          tr(
"Unknown error while opening feature via OGR!"));
 
  198       throw te::qt::widgets::Exception(
TE_TR(
"Sorry! No data access driver loaded for OGR data sources!"));
 
  201     std::map<std::string, std::string> dsInfo;
 
  203     getConnectionInfo(dsInfo);
 
  207     ds->setConnectionInfo(dsInfo);
 
  211       throw te::qt::widgets::Exception(
TE_TR(
"Could not open feature repository via OGR!"));
 
  213     if (m_ui->m_dirRadioButton->isChecked() && ds->getNumberOfDataSets() <= 0)
 
  214       QMessageBox::information(
this,
 
  215                                tr(
"TerraLib Qt Components"),
 
  216                                tr(
"Directory does not contain datasets!"));
 
  218       QMessageBox::information(
this,
 
  219                        tr(
"TerraLib Qt Components"),
 
  220                        tr(
"Data source is ok!"));
 
  222   catch(
const std::exception& e)
 
  224     QMessageBox::warning(
this,
 
  225                          tr(
"TerraLib Qt Components"),
 
  230     QMessageBox::warning(
this,
 
  231                          tr(
"TerraLib Qt Components"),
 
  232                          tr(
"Unknown error while testing OGR data source!"));
 
  238   if(m_ui->m_fileRadioButton->isChecked())
 
  240     QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Open Vector File"), 
te::qt::widgets::GetFilePathFromSettings(
"vector"), tr(
"Esri Shapefile (*.shp *.SHP);; Mapinfo File (*.mif *.MIF);; GeoJSON (*.geojson *.GeoJSON);; GML (*.gml *.GML);; KML (*.kml *.KML);; All Files (*.*)"), 
 
  241       0, QFileDialog::ReadOnly);
 
  245     if(fileName.isEmpty())
 
  248     QFileInfo info(fileName);
 
  252     m_ui->m_featureRepoLineEdit->setText(fileName);
 
  254   else if(m_ui->m_dirRadioButton->isChecked())
 
  258     if(dirName.isEmpty())
 
  263     m_ui->m_featureRepoLineEdit->setText(dirName);
 
  267     QMessageBox::warning(
this,
 
  268                          tr(
"TerraLib Qt Components"),
 
  269                          tr(
"Sorry, network files are not implemented yet!\nWe will provide it soon!"));
 
  277   QString qstr = m_ui->m_featureRepoLineEdit->text().trimmed();
 
  280     throw te::qt::widgets::Exception(
TE_TR(
"Please select a feature file first!"));
 
  282   connInfo[
"URI"] = qstr.toLatin1().data();
 
  287   std::map<std::string, std::string>::const_iterator it = connInfo.find(
"URI");
 
  288   std::map<std::string, std::string>::const_iterator itend = connInfo.end();
 
  292     m_ui->m_featureRepoLineEdit->setText(it->second.c_str());
 
  293     m_ui->m_dirRadioButton->setChecked(
true);
 
  297   it = connInfo.find(
"SOURCE");
 
  301     m_ui->m_featureRepoLineEdit->setText(it->second.c_str());
 
  302     m_ui->m_fileRadioButton->setChecked(
true);
 
const te::da::DataSourcePtr & getDriver() const 
 
std::auto_ptr< Ui::OGRConnectorDialogForm > m_ui
 
static bool find(const std::string &dsType)
 
void setConnectionInfo(const std::map< std::string, std::string > &connInfo)
 
boost::shared_ptr< DataSource > DataSourcePtr
 
bool IsShapeFile(const QString &path)
 
#define TE_TR(message)
It marks a string in order to get translated. 
 
void openPushButtonPressed()
 
const te::da::DataSourceInfoPtr & getDataSource() const 
 
static std::auto_ptr< DataSource > make(const std::string &dsType)
 
A dialog window for showing the OGR connector widget. 
 
void set(const te::da::DataSourceInfoPtr &ds)
 
A class that represents a data source component. 
 
void testPushButtonPressed()
 
Utility routines for the TerraLib Application Framework module. 
 
void searchFeatureToolButtonPressed()
 
OGRConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
 
bool HasShapeFileSpatialIndex(const QString &path)
 
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
 
void getConnectionInfo(std::map< std::string, std::string > &connInfo) const