All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DataSetAdapterWidget.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/qt/widgets/property/DataSetAdapterWidget.cpp
22 
23  \brief A class used to define the DataSetAdapterWidget class.
24 */
25 
26 // TerraLib
27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../dataaccess/dataset/DataSetType.h"
29 #include "../../../dataaccess/dataset/DataSetTypeConverter.h"
30 #include "../../../dataaccess/datasource/DataSource.h"
31 #include "../../../dataaccess/datasource/DataSourceTransactor.h"
32 #include "../../../dataaccess/datasource/DataSourceManager.h"
33 #include "DataSetAdapterWidget.h"
35 #include "ui_DataSetAdapterWidgetForm.h"
36 
37 // Qt
38 #include <QMessageBox>
39 
40 
42  : QWidget(parent, f),
43  m_ui(new Ui::DataSetAdapterWidgetForm),
44  m_sourceDataSetType(0),
45  m_dataSetConverter(0)
46 {
47  m_ui->setupUi(this);
48 
49  buidTypeMap();
50 
51 // button icons
52  m_ui->m_addToolButton->setIcon(QIcon::fromTheme("list-add"));
53  m_ui->m_removeToolButton->setIcon(QIcon::fromTheme("list-remove"));
54  m_ui->m_editToolButton->setIcon(QIcon::fromTheme("preferences-system"));
55  m_ui->m_upToolButton->setIcon(QIcon::fromTheme("go-up"));
56  m_ui->m_downToolButton->setIcon(QIcon::fromTheme("go-down"));
57 
58  //connects
59  connect(m_ui->m_addToolButton, SIGNAL(clicked()), this, SLOT(onAddToolButtonClicked()));
60  connect(m_ui->m_removeToolButton, SIGNAL(clicked()), this, SLOT(onRemoveToolButtonClicked()));
61  connect(m_ui->m_editToolButton, SIGNAL(clicked()), this, SLOT(onEditToolButtonClicked()));
62  connect(m_ui->m_upToolButton, SIGNAL(clicked()), this, SLOT(onUpToolButtonClicked()));
63  connect(m_ui->m_downToolButton, SIGNAL(clicked()), this, SLOT(onDownToolButtonClicked()));
64  connect(m_ui->m_tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(onCellClicked(int, int)));
65 }
66 
68 {
69 
70 }
71 
73 {
74  //update interface button state
75  m_ui->m_addToolButton->setEnabled(true);
76 
77  m_targetDataSource = te::da::DataSourceManager::getInstance().find(targetDatasource->getId());
78 
79  m_sourceDataSetType = sourceDataSetType;
80 
81  m_dataSetConverter = converter;
82 
83  fillDataSetTable();
84 }
85 
87 {
88  return m_dataSetConverter;
89 }
90 
92 {
94 
95  w.set(m_targetDataSource->getId());
96  w.set(m_sourceDataSetType);
97 
98  if(w.exec() == QDialog::Accepted)
99  {
100  w.adapt(m_dataSetConverter);
101 
102  fillDataSetTable();
103  }
104 }
105 
107 {
108  if(m_ui->m_tableWidget->currentRow() == -1)
109  return;
110 
111  std::string propName = m_ui->m_tableWidget->item(m_ui->m_tableWidget->currentRow(), 1)->text().toStdString();
112 
113  m_dataSetConverter->remove(propName);
114 
115  m_ui->m_removeToolButton->setEnabled(false);
116 
117  fillDataSetTable();
118 }
119 
121 {
122 }
123 
125 {
126 }
127 
129 {
130 }
131 
133 {
134  std::string propName = m_ui->m_tableWidget->item(row, 1)->text().toStdString();
135 
136  std::vector<std::string> nap;
137 
138  m_dataSetConverter->getNonConvertedProperties(nap);
139 
140  for(size_t t = 0; t < nap.size(); ++t)
141  {
142  if(nap[t] == propName)
143  {
144  m_ui->m_removeToolButton->setEnabled(false);
145  return;
146  }
147  }
148 
149  m_ui->m_removeToolButton->setEnabled(true);
150 }
151 
153 {
154  m_typeMap.clear();
155 
156  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::ARRAY_TYPE, tr("Array").toStdString()));
157  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BIT_TYPE, tr("Bit").toStdString()));
158  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BOOLEAN_TYPE, tr("Boolean").toStdString()));
159  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BYTE_ARRAY_TYPE, tr("Byte Array").toStdString()));
160  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::CHAR_TYPE, tr("Char").toStdString()));
161  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::COMPOSITE_TYPE, tr("Composite").toStdString()));
162  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DATASET_TYPE, tr("Data Set").toStdString()));
163  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DATETIME_TYPE, tr("Date and Time").toStdString()));
164  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DOUBLE_TYPE, tr("Double").toStdString()));
165  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::FLOAT_TYPE, tr("Float").toStdString()));
166  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::GEOMETRY_TYPE, tr("Geometry").toStdString()));
167  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT16_TYPE, tr("Int 16").toStdString()));
168  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT32_TYPE, tr("Int 32").toStdString()));
169  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT64_TYPE, tr("Int 64").toStdString()));
170  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::NUMERIC_TYPE, tr("Numeric").toStdString()));
171  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::RASTER_TYPE, tr("Raster").toStdString()));
172  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::STRING_TYPE, tr("String").toStdString()));
173  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UCHAR_TYPE, tr("U Char").toStdString()));
174  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT16_TYPE, tr("U Int 16").toStdString()));
175  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT32_TYPE, tr("U Int 32").toStdString()));
176  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT64_TYPE, tr("U Int 64").toStdString()));
177 }
178 
180 {
181  assert(m_dataSetConverter);
182 
183  te::da::DataSetType* dsType = m_dataSetConverter->getResult();
184 
185  m_ui->m_tableWidget->setRowCount(0);
186 
187  //fill table with dataset properties
188  for(size_t t = 0; t < dsType->size(); ++t)
189  {
190  std::string propName = dsType->getProperty(t)->getName();
191 
192  int newrow = m_ui->m_tableWidget->rowCount();
193  m_ui->m_tableWidget->insertRow(newrow);
194 
195  QTableWidgetItem* itemCheck = new QTableWidgetItem();
196  itemCheck->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
197  itemCheck->setIcon(QIcon::fromTheme("check"));
198  m_ui->m_tableWidget->setItem(newrow, 0, itemCheck);
199 
200  QTableWidgetItem* itemName = new QTableWidgetItem(QString::fromStdString(propName));
201  itemName->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
202  m_ui->m_tableWidget->setItem(newrow, 1, itemName);
203 
204  QTableWidgetItem* itemType = new QTableWidgetItem(m_typeMap[dsType->getProperty(t)->getType()].c_str());
205  itemType->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
206  m_ui->m_tableWidget->setItem(newrow, 2, itemType);
207  }
208 
209  //fill table with dataset properties that can not be adapted
210  std::vector<std::string> nonAdaptedProperties;
211  m_dataSetConverter->getNonConvertedProperties(nonAdaptedProperties);
212 
213  for(std::size_t i = 0; i < nonAdaptedProperties.size(); ++i)
214  {
215  int newrow = m_ui->m_tableWidget->rowCount();
216  m_ui->m_tableWidget->insertRow(newrow);
217 
218  QTableWidgetItem* itemCheck = new QTableWidgetItem();
219  itemCheck->setFlags(Qt::ItemIsEnabled);
220  itemCheck->setIcon(QIcon::fromTheme("delete"));
221  m_ui->m_tableWidget->setItem(newrow, 0, itemCheck);
222 
223  QTableWidgetItem* itemName = new QTableWidgetItem(QString::fromStdString(nonAdaptedProperties[i]));
224  itemName->setFlags(Qt::ItemIsEnabled);
225  m_ui->m_tableWidget->setItem(newrow, 1, itemName);
226  }
227 }
Property * getProperty(std::size_t i) const
It returns the i-th property.
void setAdapterParameters(te::da::DataSetType *sourceDataSetType, te::da::DataSetTypeConverter *converter, const te::da::DataSourceInfoPtr &targetDatasource)
Used to set the needed information to create a data set adapter.
A class used to define the DataSetAdapterWidget class.
A class that models the description of a dataset.
Definition: DataSetType.h:72
An converter for DataSetType.
static DataSourceManager & getInstance()
It returns a reference to the singleton instance.
te::da::DataSetTypeConverter * getConverter()
DataSetAdapterWidget(QWidget *parent=0, Qt::WindowFlags f=0)
std::size_t size() const
It returns the number of properties of the CompositeProperty.
int getType() const
It returns the property data type.
Definition: Property.h:161
A dialog for creating a adaptor property converter.
void adapt(te::da::DataSetTypeConverter *converter)
std::auto_ptr< Ui::DataSetAdapterWidgetForm > m_ui
A class used to define the PropertyConverterDialog class.
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
const std::string & getName() const
It returns the property name.
Definition: Property.h:127