27 #include "../../../dataaccess/dataset/DataSet.h"
28 #include "../../../dataaccess/dataset/DataSetType.h"
29 #include "../../../dataaccess/dataset/ObjectIdSet.h"
30 #include "../../../dataaccess/datasource/DataSourceCapabilities.h"
31 #include "../../../dataaccess/query/FunctionNames.h"
32 #include "../../../dataaccess/query/QueryCapabilities.h"
33 #include "../../../dataaccess/utils/Utils.h"
34 #include "../../../maptools/DataSetLayer.h"
35 #include "../utils/ColorPickerToolButton.h"
38 #include "ui_QueryDialogForm.h"
39 #include "ui_WhereClauseWidgetForm.h"
42 #include <QGridLayout>
43 #include <QMessageBox>
53 m_ui(new Ui::QueryDialogForm)
58 QGridLayout* layout =
new QGridLayout(
m_ui->m_widget);
61 layout->setContentsMargins(0, 0, 0, 0);
69 QGridLayout* colorPickerLayout =
new QGridLayout(
m_ui->m_colorPickerFrame);
70 colorPickerLayout->setContentsMargins(0, 0, 0, 0);
78 m_ui->m_helpPushButton->setPageReference(
"widgets/query/query_dialog.html");
87 return m_whereClauseWidget.get();
92 m_whereClauseWidget->setLayerList(layerList);
94 m_ui->m_inputLayerComboBox->clear();
96 std::list<te::map::AbstractLayerPtr>::iterator it = layerList.begin();
98 while(it != layerList.end())
102 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
106 if(dsLayer && dsType->hasGeom())
107 m_ui->m_inputLayerComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
112 if(m_ui->m_inputLayerComboBox->count() > 0)
114 QString s = m_ui->m_inputLayerComboBox->currentText();
116 onInputLayerActivated(s);
122 for(
int i = 0; i < m_ui->m_inputLayerComboBox->count(); ++i)
124 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(i, Qt::UserRole);
129 m_ui->m_inputLayerComboBox->setCurrentIndex(i);
134 if(m_ui->m_inputLayerComboBox->count() > 0)
136 QString s = m_ui->m_inputLayerComboBox->currentText();
138 onInputLayerActivated(s);
144 if(value.empty() ==
false)
146 std::string dataSetName = value;
147 std::string aliasName = value;
149 int pos = dataSetName.find(
".");
150 if(pos != std::string::npos)
152 aliasName = dataSetName.substr(pos + 1, dataSetName.size() - 1);
162 return m_whereClauseWidget->getWhere();
176 m_ui->m_inputLayerComboBox->addItem(layer->getTitle().c_str(), QVariant::fromValue(layer));
178 int curIdx = m_ui->m_inputLayerComboBox->currentIndex();
180 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(curIdx, Qt::UserRole);
185 QString s = m_ui->m_inputLayerComboBox->currentText();
187 onInputLayerActivated(s);
192 m_whereClauseWidget->getForm()->m_layerComboBox->addItem(layer->getTitle().c_str(), QVariant::fromValue(layer));
198 int curIdx = m_ui->m_inputLayerComboBox->currentIndex();
200 for(
int i = 0; i < m_ui->m_inputLayerComboBox->count(); ++i)
202 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(i, Qt::UserRole);
207 m_ui->m_inputLayerComboBox->removeItem(i);
211 if(m_ui->m_inputLayerComboBox->count() != 0)
213 m_ui->m_inputLayerComboBox->setCurrentIndex(0);
215 QString s = m_ui->m_inputLayerComboBox->currentText();
217 onInputLayerActivated(s);
221 m_whereClauseWidget->resetInterface();
228 curIdx = m_whereClauseWidget->getForm()->m_layerComboBox->currentIndex();
230 for(
int i = 0; i < m_whereClauseWidget->getForm()->m_layerComboBox->count(); ++i)
232 QVariant varLayer = m_whereClauseWidget->getForm()->m_layerComboBox->itemData(i, Qt::UserRole);
237 m_whereClauseWidget->getForm()->m_layerComboBox->removeItem(i);
244 m_whereClauseWidget->resetInterface();
247 int idxLayer = m_ui->m_inputLayerComboBox->currentIndex();
249 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(idxLayer, Qt::UserRole);
260 if(!dsPtr->isOpened())
263 m_whereClauseWidget->setDataSource(dsPtr);
266 std::vector<std::string> vecOperators;
267 std::vector<std::string> vecSpatialOperators;
268 std::vector<std::string> vecConnectors;
273 std::set<std::string>::iterator it;
278 vecOperators.push_back(*it);
285 vecOperators.push_back(*it);
289 m_whereClauseWidget->setOperatorsList(vecOperators);
294 vecSpatialOperators.push_back(*it);
301 vecSpatialOperators.clear();
312 m_whereClauseWidget->setSpatialOperatorsList(vecSpatialOperators);
317 vecConnectors.push_back(*it);
321 m_whereClauseWidget->setConnectorsList(vecConnectors);
324 std::auto_ptr<te::da::DataSetType> dsType = dsLayer->getSchema();
326 std::string dsName = dsType->getName();
327 std::string aliasName = setAliasName(dsName);
329 std::vector<std::pair<std::string, std::string> > list;
330 list.push_back(std::pair<std::string, std::string>(dsName, aliasName));
332 m_whereClauseWidget->setFromItems(list);
335 std::vector<std::string> inputProperties;
336 std::vector<std::string> geomProperties;
338 for(
size_t i = 0; i < dsType->size(); ++i)
340 std::string propName = dsType->getProperty(i)->getName();
343 geomProperties.push_back(propName);
345 inputProperties.push_back(propName);
348 m_whereClauseWidget->setAttributeList(inputProperties);
349 m_whereClauseWidget->setGeomAttributeList(geomProperties, dsLayer->getSRID());
356 if(wh == 0 || wh->
getExp() == 0)
358 QMessageBox::information(
this, tr(
"Query"), tr(
"Add a restriction expression first."));
363 int index = m_ui->m_inputLayerComboBox->currentIndex();
365 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(index, Qt::UserRole);
374 setCursor(Qt::WaitCursor);
380 std::auto_ptr<const te::map::LayerSchema> schema(layer->getSchema());
383 std::auto_ptr<te::da::DataSet> dataset = layer->getData(e);
384 assert(dataset.get());
386 if(m_ui->m_newSelRadioButton->isChecked())
389 dataset->moveBeforeFirst();
394 layer->clearSelected();
397 emit layerSelectedObjectsChanged(layer);
399 else if(m_ui->m_addSelRadioButton->isChecked())
402 dataset->moveBeforeFirst();
409 emit layerSelectedObjectsChanged(layer);
412 emit highlightLayerObjects(layer, dataset.get(), m_colorPicker->getColor());
414 setCursor(Qt::ArrowCursor);
418 catch(std::exception& e)
420 setCursor(Qt::ArrowCursor);
421 QMessageBox::information(
this, tr(
"Query"), e.what());
TEDATAACCESSEXPORT DataSourcePtr GetDataSource(const std::string &datasourceId, const bool opened=true)
Search for a data source with the informed id in the DataSourceManager.
const std::set< std::string > & getComparsionOperators() const
static const std::string sm_ST_Equals
static const std::string sm_ST_Overlaps
boost::shared_ptr< DataSource > DataSourcePtr
static const std::string sm_ST_Touches
static const std::string sm_ST_Intersects
A class that represents the known capabilities of a specific data source, i.e. this class informs all...
const std::set< std::string > & getArithmeticOperators() const
void setExpression(te::da::Expression *expression, bool isClauseIn)
It set the expression that can be used to retrieve the data set that contains the all indentified ele...
static const std::string sm_ST_Contains
const QueryCapabilities & getQueryCapabilities() const
Q_DECLARE_METATYPE(te::map::AbstractLayerPtr)
This is an abstract class that models a query expression.
const std::set< std::string > & getLogicalOperators() const
static const std::string sm_ST_Crosses
A class that informs the query support of a given data source.
const std::string & getDataSourceId() const
This class represents a set of unique ids created in the same context. i.e. from the same data set...
A class that can be used to model a filter expression that can be applied to a query.
static const std::string sm_ST_EnvelopeIntersects
Expression * getExp() const
TEDATAACCESSEXPORT ObjectIdSet * GenerateOIDSet(DataSet *dataset, const DataSetType *type)
const std::set< std::string > & getSpatialTopologicOperators() const
This file defines a class for a Query Dialog Dialog.
static const std::string sm_ST_Disjoint
static const std::string sm_ST_Within
A layer with reference to a dataset.
virtual Expression * clone() const =0
It creates a new copy of this expression.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr