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