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"
41 #include <QGridLayout>
42 #include <QMessageBox>
52 m_ui(new Ui::QueryDialogForm)
57 QGridLayout* layout =
new QGridLayout(
m_ui->m_widget);
60 layout->setContentsMargins(0, 0, 0, 0);
68 QGridLayout* colorPickerLayout =
new QGridLayout(
m_ui->m_colorPickerFrame);
69 colorPickerLayout->setContentsMargins(0, 0, 0, 0);
77 m_ui->m_helpPushButton->setPageReference(
"widgets/query/query_dialog.html");
86 return m_whereClauseWidget.get();
91 m_whereClauseWidget->setLayerList(layerList);
93 m_ui->m_inputLayerComboBox->clear();
95 std::list<te::map::AbstractLayerPtr>::iterator it = layerList.begin();
97 while(it != layerList.end())
101 std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
105 if(dsLayer && dsType->hasGeom())
106 m_ui->m_inputLayerComboBox->addItem(l->getTitle().c_str(), QVariant::fromValue(l));
111 if(m_ui->m_inputLayerComboBox->count() > 0)
113 QString s = m_ui->m_inputLayerComboBox->currentText();
115 onInputLayerActivated(s);
121 for(
int i = 0; i < m_ui->m_inputLayerComboBox->count(); ++i)
123 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(i, Qt::UserRole);
128 m_ui->m_inputLayerComboBox->setCurrentIndex(i);
133 if(m_ui->m_inputLayerComboBox->count() > 0)
135 QString s = m_ui->m_inputLayerComboBox->currentText();
137 onInputLayerActivated(s);
143 if(value.empty() ==
false)
145 std::string dataSetName = value;
146 std::string aliasName = value;
148 int pos = dataSetName.find(
".");
149 if(pos != std::string::npos)
151 aliasName = dataSetName.substr(pos + 1, dataSetName.size() - 1);
161 return m_whereClauseWidget->getWhere();
174 m_ui->m_inputLayerComboBox->addItem(layer->getTitle().c_str(), QVariant::fromValue(layer));
176 int curIdx = m_ui->m_inputLayerComboBox->currentIndex();
178 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(curIdx, Qt::UserRole);
183 QString s = m_ui->m_inputLayerComboBox->currentText();
185 onInputLayerActivated(s);
191 int curIdx = m_ui->m_inputLayerComboBox->currentIndex();
193 for(
int i = 0; i < m_ui->m_inputLayerComboBox->count(); ++i)
195 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(i, Qt::UserRole);
200 m_ui->m_inputLayerComboBox->removeItem(i);
204 if(m_ui->m_inputLayerComboBox->count() != 0)
206 m_ui->m_inputLayerComboBox->setCurrentIndex(0);
208 QString s = m_ui->m_inputLayerComboBox->currentText();
210 onInputLayerActivated(s);
214 m_whereClauseWidget->resetInterface();
223 m_whereClauseWidget->resetInterface();
226 int idxLayer = m_ui->m_inputLayerComboBox->currentIndex();
228 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(idxLayer, Qt::UserRole);
239 if(!dsPtr->isOpened())
242 m_whereClauseWidget->setDataSource(dsPtr);
245 std::vector<std::string> vecOperators;
246 std::vector<std::string> vecSpatialOperators;
247 std::vector<std::string> vecConnectors;
252 std::set<std::string>::iterator it;
257 vecOperators.push_back(*it);
264 vecOperators.push_back(*it);
268 m_whereClauseWidget->setOperatorsList(vecOperators);
273 vecSpatialOperators.push_back(*it);
280 vecSpatialOperators.clear();
291 m_whereClauseWidget->setSpatialOperatorsList(vecSpatialOperators);
296 vecConnectors.push_back(*it);
300 m_whereClauseWidget->setConnectorsList(vecConnectors);
303 std::auto_ptr<te::da::DataSetType> dsType = dsLayer->getSchema();
305 std::string dsName = dsType->getName();
306 std::string aliasName = setAliasName(dsName);
308 std::vector<std::pair<std::string, std::string> > list;
309 list.push_back(std::pair<std::string, std::string>(dsName, aliasName));
311 m_whereClauseWidget->setFromItems(list);
314 std::vector<std::string> inputProperties;
315 std::vector<std::string> geomProperties;
317 for(
size_t i = 0; i < dsType->size(); ++i)
319 std::string propName = dsType->getProperty(i)->getName();
322 geomProperties.push_back(propName);
324 inputProperties.push_back(propName);
327 m_whereClauseWidget->setAttributeList(inputProperties);
328 m_whereClauseWidget->setGeomAttributeList(geomProperties, dsLayer->getSRID());
335 if(wh == 0 || wh->
getExp() == 0)
337 QMessageBox::information(
this, tr(
"Query"), tr(
"Add a restriction expression first."));
342 int index = m_ui->m_inputLayerComboBox->currentIndex();
344 QVariant varLayer = m_ui->m_inputLayerComboBox->itemData(index, Qt::UserRole);
353 setCursor(Qt::WaitCursor);
359 std::auto_ptr<const te::map::LayerSchema> schema(layer->getSchema());
362 std::auto_ptr<te::da::DataSet> dataset = layer->getData(e);
363 assert(dataset.get());
365 if(m_ui->m_newSelRadioButton->isChecked())
368 dataset->moveBeforeFirst();
371 layer->clearSelected();
374 emit layerSelectedObjectsChanged(layer);
376 else if(m_ui->m_addSelRadioButton->isChecked())
379 dataset->moveBeforeFirst();
384 emit layerSelectedObjectsChanged(layer);
387 emit highlightLayerObjects(layer, dataset.get(), m_colorPicker->getColor());
389 setCursor(Qt::ArrowCursor);
393 catch(std::exception& e)
395 setCursor(Qt::ArrowCursor);
396 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
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