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(nullptr),
45  m_dataSetConverter(nullptr)
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 
70 {
71  //update interface button state
72  m_ui->m_addToolButton->setEnabled(true);
73 
74  m_targetDataSource = te::da::DataSourceManager::getInstance().find(targetDatasource->getId());
75 
76  m_sourceDataSetType = sourceDataSetType;
77 
78  m_dataSetConverter = converter;
79 
81 }
82 
84 {
85  return m_dataSetConverter;
86 }
87 
89 {
91 
92  w.set(m_targetDataSource->getId());
94 
95  if(w.exec() == QDialog::Accepted)
96  {
98 
100 
101  emit dataSetAdapterChanged();
102  }
103 }
104 
106 {
107  if(m_ui->m_tableWidget->currentRow() == -1)
108  return;
109 
110  std::string propName = m_ui->m_tableWidget->item(m_ui->m_tableWidget->currentRow(), 1)->text().toUtf8().data();
111 
112  m_dataSetConverter->remove(propName);
113 
114  m_ui->m_removeToolButton->setEnabled(false);
115 
117 
118  emit dataSetAdapterChanged();
119 }
120 
122 {
123 }
124 
126 {
127 }
128 
130 {
131 }
132 
134 {
135  std::string propName = m_ui->m_tableWidget->item(row, 1)->text().toUtf8().data();
136 
137  std::vector<std::string> nap;
138 
140 
141  for(size_t t = 0; t < nap.size(); ++t)
142  {
143  if(nap[t] == propName)
144  {
145  m_ui->m_removeToolButton->setEnabled(false);
146  return;
147  }
148  }
149 
150  m_ui->m_removeToolButton->setEnabled(true);
151 }
152 
154 {
155  m_typeMap.clear();
156 
157  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::ARRAY_TYPE, tr("Array").toUtf8().data()));
158  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BIT_TYPE, tr("Bit").toUtf8().data()));
159  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BOOLEAN_TYPE, tr("Boolean").toUtf8().data()));
160  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::BYTE_ARRAY_TYPE, tr("Byte Array").toUtf8().data()));
161  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::CHAR_TYPE, tr("Char").toUtf8().data()));
162  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::COMPOSITE_TYPE, tr("Composite").toUtf8().data()));
163  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DATASET_TYPE, tr("Data Set").toUtf8().data()));
164  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DATETIME_TYPE, tr("Date and Time").toUtf8().data()));
165  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::DOUBLE_TYPE, tr("Double").toUtf8().data()));
166  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::FLOAT_TYPE, tr("Float").toUtf8().data()));
167  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::GEOMETRY_TYPE, tr("Geometry").toUtf8().data()));
168  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT16_TYPE, tr("Int 16").toUtf8().data()));
169  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT32_TYPE, tr("Int 32").toUtf8().data()));
170  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::INT64_TYPE, tr("Int 64").toUtf8().data()));
171  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::NUMERIC_TYPE, tr("Numeric").toUtf8().data()));
172  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::RASTER_TYPE, tr("Raster").toUtf8().data()));
173  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::STRING_TYPE, tr("String").toUtf8().data()));
174  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UCHAR_TYPE, tr("U Char").toUtf8().data()));
175  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT16_TYPE, tr("U Int 16").toUtf8().data()));
176  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT32_TYPE, tr("U Int 32").toUtf8().data()));
177  m_typeMap.insert(std::map<int, std::string>::value_type(te::dt::UINT64_TYPE, tr("U Int 64").toUtf8().data()));
178 }
179 
181 {
182  assert(m_dataSetConverter);
183 
185 
186  m_ui->m_tableWidget->setRowCount(0);
187 
188  //fill table with dataset properties
189  for(size_t t = 0; t < dsType->size(); ++t)
190  {
191  std::string propName = dsType->getProperty(t)->getName();
192 
193  int newrow = m_ui->m_tableWidget->rowCount();
194  m_ui->m_tableWidget->insertRow(newrow);
195 
196  QTableWidgetItem* itemCheck = new QTableWidgetItem();
197  itemCheck->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
198  itemCheck->setIcon(QIcon::fromTheme("check"));
199  m_ui->m_tableWidget->setItem(newrow, 0, itemCheck);
200 
201  QTableWidgetItem* itemName = new QTableWidgetItem(QString::fromUtf8(propName.c_str()));
202  itemName->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
203  m_ui->m_tableWidget->setItem(newrow, 1, itemName);
204 
205  QTableWidgetItem* itemType = new QTableWidgetItem(m_typeMap[dsType->getProperty(t)->getType()].c_str());
206  itemType->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
207  m_ui->m_tableWidget->setItem(newrow, 2, itemType);
208  }
209 
210  //fill table with dataset properties that can not be adapted
211  std::vector<std::string> nonAdaptedProperties;
212  m_dataSetConverter->getNonConvertedProperties(nonAdaptedProperties);
213 
214  for(std::size_t i = 0; i < nonAdaptedProperties.size(); ++i)
215  {
216  int newrow = m_ui->m_tableWidget->rowCount();
217  m_ui->m_tableWidget->insertRow(newrow);
218 
219  QTableWidgetItem* itemCheck = new QTableWidgetItem();
220  itemCheck->setFlags(Qt::ItemIsEnabled);
221  itemCheck->setIcon(QIcon::fromTheme("delete"));
222  m_ui->m_tableWidget->setItem(newrow, 0, itemCheck);
223 
224  QTableWidgetItem* itemName = new QTableWidgetItem(QString::fromUtf8(nonAdaptedProperties[i].c_str()));
225  itemName->setFlags(Qt::ItemIsEnabled);
226  m_ui->m_tableWidget->setItem(newrow, 1, itemName);
227  }
228 }
Property * getProperty(std::size_t i) const
It returns the i-th property.
std::map< int, std::string > m_typeMap
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
void getNonConvertedProperties(std::vector< std::string > &propertyNames) const
This method returns the name of the properties that have not yet been converted.
std::unique_ptr< Ui::DataSetAdapterWidgetForm > m_ui
An converter for DataSetType.
static DataSourceManager & getInstance()
It returns a reference to the singleton instance.
te::da::DataSetTypeConverter * getConverter()
te::da::DataSetTypeConverter * m_dataSetConverter
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)
void remove(const std::string &propertyName)
This method removes a property of DataSetTypeConverter.
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