ConfigInputAddressDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/addressgeocoding/ImportTableDialog.cpp
22 
23  \brief A dialog to import table with address to geocoding operation
24 */
25 
26 // TerraLib
27 #include "../../core/logger/Logger.h"
28 #include "../../common/progress/ProgressManager.h"
29 #include "../../core/uri/URI.h"
30 #include "../../core/translator/Translator.h"
31 #include "../../common/STLUtils.h"
32 #include "../../dataaccess/dataset/DataSetType.h"
33 #include "../../dataaccess/dataset/ObjectIdSet.h"
34 #include "../../dataaccess/datasource/DataSourceCapabilities.h"
35 #include "../../dataaccess/datasource/DataSourceInfo.h"
36 #include "../../dataaccess/datasource/DataSourceInfoManager.h"
37 #include "../../dataaccess/datasource/DataSourceFactory.h"
38 #include "../../dataaccess/datasource/DataSourceManager.h"
39 #include "../../dataaccess/utils/Utils.h"
40 #include "../../datatype/Enums.h"
41 #include "../../datatype/Property.h"
42 #include "../../maptools/AbstractLayer.h"
43 #include "../../qt/af/Utils.h"
44 #include "../../qt/widgets/datasource/selector/DataSourceSelectorDialog.h"
45 #include "../../qt/widgets/layer/utils/DataSet2Layer.h"
46 #include "../../qt/widgets/progress/ProgressViewerDialog.h"
47 #include "../../statistics/core/Utils.h"
48 #include "../Config.h"
49 #include "../Exception.h"
51 #include "ui_ConfigInputAddressDialogForm.h"
52 
53 // Qt
54 #include <QFileDialog>
55 #include <QMessageBox>
56 #include <QSettings>
57 
58 // Boost
59 #include <boost/algorithm/string.hpp>
60 #include <boost/filesystem.hpp>
61 #include <boost/uuid/random_generator.hpp>
62 #include <boost/uuid/uuid_io.hpp>
63 
65  : QDialog(parent, f),
66  m_ui(new Ui::ConfigInputAddressDialogForm)
67 {
68 // add controls
69  m_ui->setupUi(this);
70 
71  connect(m_ui->m_helpPushButton, SIGNAL(clicked()), this, SLOT(onHelpPushButtonClicked()));
72  connect(m_ui->m_okPushButton, SIGNAL(clicked()), this, SLOT(onOkPushButtonClicked()));
73  connect(m_ui->m_cancelPushButton, SIGNAL(clicked()), this, SLOT(onCancelPushButtonClicked()));
74 
75  std::string fileName;
76  std::string streetName;
77 }
78 
80 {
81 }
82 
84 {
85  return m_dataSource;
86 }
87 
89 {
90  m_dataSource = dataSource;
91  std::vector<std::string> names = m_dataSource->getDataSetNames();
92 
93  m_ui->m_inputAddressLineEdit->clear();
94  m_ui->m_inputAddressLineEdit->setText(QString(names[0].c_str()));
95 
96  m_ui->m_sTypeComboBox->clear();
97  m_ui->m_sTitleComboBox->clear();
98  m_ui->m_sNameComboBox->clear();
99  m_ui->m_sNumberComboBox->clear();
100  m_ui->m_sNeighborhoodComboBox->clear();
101  m_ui->m_sPostalCodeComboBox->clear();
102 
103  m_ui->m_sTypeComboBox->addItem("");
104  m_ui->m_sTitleComboBox->addItem("");
105  m_ui->m_sNameComboBox->addItem("");
106  m_ui->m_sNumberComboBox->addItem("");
107  m_ui->m_sNeighborhoodComboBox->addItem("");
108  m_ui->m_sPostalCodeComboBox->addItem("");
109 
110  std::unique_ptr<te::da::DataSetType> dsType = m_dataSource->getDataSetType(names[0]);
111  std::vector<te::dt::Property*> propsVec = dsType->getProperties();
112 
113  for(std::size_t i = 0; i < propsVec.size(); ++i)
114  {
115  int type = propsVec[i]->getType();
116  if(type == te::dt::INT16_TYPE || type == te::dt::INT32_TYPE || type == te::dt::INT64_TYPE || type == te::dt::DOUBLE_TYPE )
117  {
118  m_ui->m_sNumberComboBox->addItem(QString(propsVec[i]->getName().c_str()));
119  }
120  else
121  {
122  m_ui->m_sTypeComboBox->addItem(QString(propsVec[i]->getName().c_str()));
123  m_ui->m_sTitleComboBox->addItem(QString(propsVec[i]->getName().c_str()));
124  m_ui->m_sNameComboBox->addItem(QString(propsVec[i]->getName().c_str()));
125  m_ui->m_sNeighborhoodComboBox->addItem(QString(propsVec[i]->getName().c_str()));
126  m_ui->m_sPostalCodeComboBox->addItem(QString(propsVec[i]->getName().c_str()));
127  }
128  }
129 }
130 
132 {
133  return m_ui->m_inputAddressLineEdit->text().toUtf8().data();
134 }
135 
137 {
138  return m_ui->m_sTypeComboBox->currentText().toUtf8().data();
139 }
140 
142 {
143  m_ui->m_sTypeComboBox->setCurrentIndex(m_ui->m_sTypeComboBox->findText(streetType.c_str()));
144 }
145 
147 {
148  return m_ui->m_sTitleComboBox->currentText().toUtf8().data();
149 }
150 
152 {
153  m_ui->m_sTitleComboBox->setCurrentIndex(m_ui->m_sTitleComboBox->findText(streetTitle.c_str()));
154 }
155 
157 {
158  return m_ui->m_sNameComboBox->currentText().toUtf8().data();
159 }
160 
162 {
163  m_ui->m_sNameComboBox->setCurrentIndex(m_ui->m_sNameComboBox->findText(streetName.c_str()));
164 }
165 
167 {
168  return m_ui->m_sNumberComboBox->currentText().toUtf8().data();
169 }
170 
172 {
173  m_ui->m_sNumberComboBox->setCurrentIndex(m_ui->m_sNumberComboBox->findText(streetNumber.c_str()));
174 }
175 
177 {
178  return m_ui->m_sNeighborhoodComboBox->currentText().toUtf8().data();
179 }
180 
182 {
183  m_ui->m_sNeighborhoodComboBox->setCurrentIndex(m_ui->m_sNeighborhoodComboBox->findText(streetNeighborhood.c_str()));
184 }
185 
187 {
188  return m_ui->m_sPostalCodeComboBox->currentText().toUtf8().data();
189 }
190 
192 {
193  m_ui->m_sPostalCodeComboBox->setCurrentIndex(m_ui->m_sPostalCodeComboBox->findText(streetPostalCode.c_str()));
194 }
195 
197 {
198  QMessageBox::information(this, "Help", "Under development");
199 }
200 
202 {
203  const te::core::URI& connInfo = m_dataSource->getConnectionInfo();
204 
205  std::vector<std::string>dsNames = m_dataSource->getDataSetNames();
206 
207  std::map<std::string, std::string> addressConfig;
208  addressConfig.insert(std::pair<std::string,std::string>("fileName", dsNames[0]));
209  addressConfig.insert(std::pair<std::string,std::string>("filePath", connInfo.host() + connInfo.path()));
210  addressConfig.insert(std::pair<std::string,std::string>("streetType", m_ui->m_sTypeComboBox->currentText().toUtf8().data()));
211  addressConfig.insert(std::pair<std::string,std::string>("streetTitle", m_ui->m_sTitleComboBox->currentText().toUtf8().data()));
212  addressConfig.insert(std::pair<std::string,std::string>("streetName", m_ui->m_sNameComboBox->currentText().toUtf8().data()));
213  addressConfig.insert(std::pair<std::string,std::string>("number", m_ui->m_sNumberComboBox->currentText().toUtf8().data()));
214  addressConfig.insert(std::pair<std::string,std::string>("neighborhood", m_ui->m_sNeighborhoodComboBox->currentText().toUtf8().data()));
215  addressConfig.insert(std::pair<std::string,std::string>("postalCode", m_ui->m_sPostalCodeComboBox->currentText().toUtf8().data()));
216 
217  AddAddressConfigToSettings(addressConfig);
218 
219  this->accept();
220 }
221 
223 {
224  reject();
225 }
226 
227 void te::addressgeocoding::ConfigInputAddressDialog::AddAddressConfigToSettings(std::map<std::string, std::string> addressConfig)
228 {
229  QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
230 
231  sett.beginGroup("Address Geocoding");
232 
233  AddAddressConfigItens(addressConfig, sett);
234 
235  sett.endGroup();
236 }
237 
238 void te::addressgeocoding::ConfigInputAddressDialog::AddAddressConfigItens(std::map<std::string, std::string> addressConfig, QSettings& sett)
239 {
240  std::map<std::string, std::string>::iterator it = addressConfig.begin();
241 
242  sett.beginGroup(it->second.c_str());
243 
244  while(it != addressConfig.end())
245  {
246  sett.setValue(it->first.c_str(), it->second.c_str());
247  ++it;
248  }
249 
250  sett.endGroup();
251 
252 }
253 
255  std::string streetType,
256  std::string streetTitle,
257  std::string streetName,
258  std::string number,
259  std::string neighborhood,
260  std::string postalCode)
261 {
262  QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
263 
264  QString key1 = "Address Geocoding/filePath";
265  QString key2 = "Address Geocoding/streetType";
266  QString key3 = "Address Geocoding/streetTitle";
267  QString key4 = "Address Geocoding/streetName";
268  QString key5 = "Address Geocoding/number";
269  QString key6 = "Address Geocoding/neighborhood";
270  QString key7 = "Address Geocoding/postalCode";
271 
272  sett.setValue(key1, filePath.c_str());
273  sett.setValue(key2, streetType.c_str());
274  sett.setValue(key3, streetTitle.c_str());
275  sett.setValue(key4, streetName.c_str());
276  sett.setValue(key5, number.c_str());
277  sett.setValue(key6, neighborhood.c_str());
278  sett.setValue(key7, postalCode.c_str());
279 }
280 
282  std::string& streetType,
283  std::string& streetTitle,
284  std::string& streetName,
285  std::string& number,
286  std::string& neighborhood,
287  std::string& postalCode)
288 {
289  QSettings sett(QSettings::IniFormat, QSettings::UserScope, qApp->organizationName(), qApp->applicationName());
290 
291  std::string key1 = "Address Geocoding/filePath";
292  std::string key2 = "Address Geocoding/streetType";
293  std::string key3 = "Address Geocoding/streetTitle";
294  std::string key4 = "Address Geocoding/streetName";
295  std::string key5 = "Address Geocoding/number";
296  std::string key6 = "Address Geocoding/neighborhood";
297  std::string key7 = "Address Geocoding/postalCode";
298 
299  filePath = sett.value(key1.c_str()).toString().toUtf8().data();
300  streetType = sett.value(key2.c_str()).toString().toUtf8().data();
301  streetTitle = sett.value(key3.c_str()).toString().toUtf8().data();
302  streetName = sett.value(key4.c_str()).toString().toUtf8().data();
303  number = sett.value(key5.c_str()).toString().toUtf8().data();
304  neighborhood = sett.value(key5.c_str()).toString().toUtf8().data();
305  postalCode = sett.value(key6.c_str()).toString().toUtf8().data();
306 }
307 
309 {
310 
311 }
void RemoveAddressConfigFromSettings(const QString &path, const QString &typeFile)
ConfigInputAddressDialog(QWidget *parent=0, Qt::WindowFlags f=0)
std::string path() const
Retrieving the path.
Definition: URI.cpp:118
boost::shared_ptr< DataSource > DataSourcePtr
void setDataSource(te::da::DataSourcePtr dataSource)
void AddAddressConfigItens(std::map< std::string, std::string > addressConfig, QSettings &sett)
void setStreetPostalCode(std::string streetPostalCode)
void setStreetNeighborhood(std::string streetNeighborhood)
void AddAddressConfigToSettings(std::map< std::string, std::string > addressConfig)
A dialog to import table with address to geocoding operation.
std::string host() const
Retrieving the host.
Definition: URI.cpp:108
std::unique_ptr< Ui::ConfigInputAddressDialogForm > m_ui
A class for representing an Uniform Resource Identifier (URI).
Definition: URI.h:49
void GetAddressConfigToSettings(std::string &filePath, std::string &streetType, std::string &streetTitle, std::string &streetName, std::string &number, std::string &neighborhood, std::string &postalCode)