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 "../../../widgets/Exception.h"
33 #include "ui_GeoFileConnectorDialogForm.h"
36 #include <boost/algorithm/string/case_conv.hpp>
37 #include <boost/uuid/random_generator.hpp>
38 #include <boost/uuid/uuid_io.hpp>
39 #include <boost/filesystem.hpp>
42 #include <QtGui/QFileDialog>
43 #include <QtGui/QIcon>
44 #include <QtGui/QMessageBox>
48 m_ui(new Ui::GeoFileConnectorDialogForm)
54 m_ui->m_addDatasourceToolButton->setIcon(QIcon::fromTheme(
"list-add"));
55 m_ui->m_removeDatasourceToolButton->setIcon(QIcon::fromTheme(
"list-remove"));
56 m_ui->m_updateDatasourceToolButton->setIcon(QIcon::fromTheme(
"view-refresh"));
67 m_ui->m_openPushButton->setEnabled(
false);
81 m_datasources = datasources;
83 m_ui->m_datasourceListWidget->clear();
85 for(std::list<te::da::DataSourceInfoPtr>::iterator it = m_datasources.begin(); it != m_datasources.end(); ++it)
87 QString
id = QString::fromStdString((*it)->getId());
88 QString title = QString::fromStdString((*it)->getTitle());
90 QListWidgetItem* item =
new QListWidgetItem(title);
91 item->setData(Qt::UserRole, QVariant(
id));
93 m_ui->m_datasourceListWidget->addItem(item);
96 if(m_ui->m_datasourceListWidget->count() != 0)
98 QListWidgetItem* item = m_ui->m_datasourceListWidget->item(0);
99 m_ui->m_datasourceListWidget->setCurrentItem(item);
100 dataSourcePressed(item);
102 m_ui->m_openPushButton->setEnabled(
true);
117 QMessageBox::warning(
this,
118 tr(
"TerraLib Qt Components"),
119 tr(
"Data source is ok!"));
121 catch(
const std::exception& e)
123 QMessageBox::warning(
this,
124 tr(
"TerraLib Qt Components"),
129 QMessageBox::warning(
this,
130 tr(
"TerraLib Qt Components"),
131 tr(
"Unknown error when probing data source!"));
137 QMessageBox::warning(
this,
138 tr(
"TerraLib Qt Components"),
139 tr(
"Not implemented yet!\nWe will provide it soon!"));
144 QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Open Geo Spatial File"), QString(
""), tr(
"Image File (*.png, *.jpg, *.jpeg, *.tif, *.tiff, *.geotif, *.geotiff);; Vector File (*.shp, *.geojson, *.kml);; All Files (*.*)"), 0, QFileDialog::ReadOnly);
146 if(fileName.isEmpty())
149 m_ui->m_datasourceLineEdit->setText(fileName);
158 assert(driver.get());
160 if(driver.get() != 0)
164 nds->setConnInfo(driver->getConnectionInfo());
166 boost::uuids::basic_random_generator<boost::mt19937> gen;
167 boost::uuids::uuid u = gen();
168 std::string dsId = boost::uuids::to_string(u);
170 QString title = m_ui->m_datasourceTitleLineEdit->text().trimmed();
173 title = m_ui->m_datasourceLineEdit->text().trimmed();
176 nds->setTitle(title.toUtf8().data());
177 nds->setDescription(m_ui->m_datasourceDescriptionTextEdit->toPlainText().trimmed().toUtf8().data());
178 nds->setAccessDriver(driver->getType());
179 nds->setType(
"GEOFILE");
181 m_datasources.push_back(nds);
183 QString
id = QString::fromStdString(nds->getId());
185 QListWidgetItem* item =
new QListWidgetItem(title);
186 item->setData(Qt::UserRole, QVariant(
id));
188 m_ui->m_datasourceListWidget->addItem(item);
190 m_ui->m_openPushButton->setEnabled(
true);
193 catch(
const std::exception& e)
195 QMessageBox::warning(
this,
196 tr(
"TerraLib Qt Components"),
201 QMessageBox::warning(
this,
202 tr(
"TerraLib Qt Components"),
203 tr(
"Unknown error when probing data source!"));
209 QListWidgetItem* item = m_ui->m_datasourceListWidget->currentItem();
214 QVariant udata = item->data(Qt::UserRole);
216 QString
id = udata.toString();
221 std::string dsId =
id.toStdString();
223 std::list<te::da::DataSourceInfoPtr>::iterator it = std::find_if(m_datasources.begin(), m_datasources.end(),
FindById(dsId));
225 if(it == m_datasources.end())
228 m_datasources.erase(it);
230 int itemRow = m_ui->m_datasourceListWidget->row(item);
232 item = m_ui->m_datasourceListWidget->takeItem(itemRow);
236 if(m_datasources.empty())
237 m_ui->m_openPushButton->setEnabled(
false);
242 QMessageBox::warning(
this,
243 tr(
"TerraLib Qt Components"),
244 tr(
"Not implemented yet!\nWe will provide it soon!"));
249 m_ui->m_datasourceLineEdit->setText(
"");
250 m_ui->m_datasourceTitleLineEdit->setText(
"");
251 m_ui->m_datasourceDescriptionTextEdit->setText(
"");
256 QVariant udata = item->data(Qt::UserRole);
258 QString
id = udata.toString();
263 std::string dsId =
id.toStdString();
265 std::list<te::da::DataSourceInfoPtr>::iterator it = std::find_if(m_datasources.begin(), m_datasources.end(),
FindById(dsId));
267 if(it == m_datasources.end())
270 std::map<std::string, std::string>::const_iterator itdsinfo = (*it)->getConnInfo().find(
"SOURCE");
272 if(itdsinfo == (*it)->getConnInfo().end())
283 m_ui->m_datasourceLineEdit->setText(QString::fromStdString(itdsinfo->second));
284 m_ui->m_datasourceTitleLineEdit->setText(QString::fromStdString((*it)->getTitle()));
285 m_ui->m_datasourceDescriptionTextEdit->setText(QString::fromStdString((*it)->getDescription()));
290 std::map<std::string, std::string> dsInfo;
293 std::string driverType;
295 boost::filesystem::path fp = m_ui->m_datasourceLineEdit->text().trimmed().toUtf8().data();
297 std::string fileExtension = boost::to_upper_copy(fp.extension().string());
299 if((fileExtension ==
".TIF") || (fileExtension ==
".TIFF") || (fileExtension ==
".GEOTIF") || (fileExtension ==
".GEOTIFF") ||
300 (fileExtension ==
".PNG") || (fileExtension ==
".JPG") || (fileExtension ==
".JPEG"))
303 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Sorry! No data access driver loaded for GEOFILE data sources!"));
305 dsInfo[
"SOURCE"] = m_ui->m_datasourceLineEdit->text().trimmed().toStdString();
307 driverType =
"GEOFILE";
309 else if((fileExtension ==
".SHP") || (fileExtension ==
".GEOJSON") || (fileExtension ==
".KML"))
312 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Sorry! No data access driver loaded for OGR data sources!"));
314 dsInfo[
"SOURCE"] = m_ui->m_datasourceLineEdit->text().trimmed().toStdString();
320 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Sorry! Unknown data access driver for the selected file!"));
326 throw te::qt::widgets::Exception(TR_QT_WIDGETS(
"Could not open data source due to an unexpected error!"));
328 ds->setConnectionInfo(dsInfo);
336 return (ds->getId() == m_id);
void set(const std::list< te::da::DataSourceInfoPtr > &datasources)
static bool find(const std::string &dsType)
bool operator()(const te::da::DataSourceInfoPtr &ds) const
void dataSourcePressed(QListWidgetItem *item)
void fileSearchToolButtonPressed()
boost::shared_ptr< DataSource > DataSourcePtr
void updateDatasourceToolButtonPressed()
void helpPushButtonPressed()
void testPushButtonPressed()
void addDatasourceToolButtonPressed()
void openPushButtonPressed()
~GeoFileConnectorDialog()
const std::list< te::da::DataSourceInfoPtr > & getDataSources() const
static std::auto_ptr< DataSource > make(const std::string &dsType)
te::da::DataSourcePtr test()
GeoFileConnectorDialog(QWidget *parent=0, Qt::WindowFlags f=0)
A dialog window for showing the GeoFile connector widget.
A class that represents a data source component.
void removeDatasourceToolButtonPressed()
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
std::auto_ptr< Ui::GeoFileConnectorDialogForm > m_ui