29 #include "../../../dataaccess/dataset/DataSet.h" 
   30 #include "../../../dataaccess/dataset/DataSetType.h" 
   31 #include "../../../dataaccess/query/SQLDialect.h" 
   32 #include "../../../dataaccess/datasource/DataSourceManager.h" 
   35 #include "../../../dataaccess/utils/Utils.h" 
   36 #include "../utils/DoubleListWidget.h" 
   37 #include "ui_DoubleListWidgetForm.h" 
   38 #include "ui_QueryBuilderWizardForm.h" 
   42 #include <QMessageBox> 
   47     m_ui(new Ui::QueryBuilderWizardForm)
 
   58   m_ui->m_addDataSetPushButton->setIcon(QIcon::fromTheme(
"list-add"));
 
   59   m_ui->m_removeDataSetPushButton->setIcon(QIcon::fromTheme(
"list-remove"));
 
   61   m_ui->m_addWhereClausePushButton->setIcon(QIcon::fromTheme(
"list-add"));
 
   62   m_ui->m_removeWhereClausePushButton->setIcon(QIcon::fromTheme(
"list-remove"));
 
   64   m_ui->m_addOrderPushButton->setIcon(QIcon::fromTheme(
"list-add"));
 
   65   m_ui->m_removeOrderPushButton->setIcon(QIcon::fromTheme(
"list-remove"));
 
   69   m_propertyList->getForm()->m_leftItemsLabel->setText(tr(
"Available Properties"));
 
   70   m_propertyList->getForm()->m_rightItemsLabel->setText(tr(
"Used Properties"));
 
   75   m_groupByList->getForm()->m_leftItemsLabel->setText(tr(
"Available Properties"));
 
   76   m_groupByList->getForm()->m_rightItemsLabel->setText(tr(
"Used Properties"));
 
   92   m_bimapOperator.clear();
 
   93   m_bimapConnector.clear();
 
   99   if(currentPage() == m_ui->m_dataSourceWizardPage)
 
  101     return checkDataSourcePage();
 
  103   else if(currentPage() == m_ui->m_dataSetWizardPage)
 
  105     return checkDataSetPage();
 
  107   else if(currentPage() == m_ui->m_propertyWizardPage)
 
  109     return checkPropertiesPage();
 
  111   else if(currentPage() == m_ui->m_whereClauseWizardPage)
 
  113     return checkWhereClausePage();
 
  115   else if(currentPage() == m_ui->m_groupByWizardPage)
 
  117     return checkGroupByPage();
 
  119   else if(currentPage() == m_ui->m_orderByWizardPage)
 
  121     return checkOrderByPage();
 
  135     list.push_back(it->first.c_str());
 
  140   m_ui->m_dataSourceComboBox->clear();
 
  141   m_ui->m_dataSourceComboBox->addItems(list);
 
  146   std::string dsId = m_ui->m_dataSourceComboBox->currentText().toStdString();
 
  148   std::vector<std::string> datasetNames;
 
  154   for(
size_t t = 0; t < datasetNames.size(); ++t)
 
  156     list.push_back(datasetNames[t].c_str());
 
  159   m_ui->m_dataSetComboBox->clear();
 
  160   m_ui->m_dataSetComboBox->addItems(list);
 
  162   if(datasetNames.empty() == 
false)
 
  163     onDataSetComboBoxActivated(m_ui->m_dataSetComboBox->currentText());
 
  169   std::string dsId = m_ui->m_dataSourceComboBox->currentText().toStdString();
 
  171   std::vector<std::string> datasetNames = ds->getDataSetNames();
 
  173   int row = m_ui->m_dataSetTableWidget->rowCount();
 
  175   std::vector<std::string> inputProperties;
 
  179   for(
int i = 0; i < row; ++i)
 
  182     QTableWidgetItem* itemAlias = m_ui->m_dataSetTableWidget->item(i, 1);
 
  183     std::string alias = itemAlias->text().toStdString();
 
  186     QTableWidgetItem* itemDataSet = m_ui->m_dataSetTableWidget->item(i, 0);
 
  187     std::string dataSetName = itemDataSet->text().toStdString();
 
  190     std::auto_ptr<te::da::DataSetType> dsType;
 
  191     for(
unsigned int i = 0; i < datasetNames.size(); ++i)
 
  193       if(datasetNames[i] == dataSetName)
 
  194         dsType = ds->getDataSetType(datasetNames[i]);
 
  199       for(
size_t t = 0; t < dsType->size(); ++t)
 
  201         std::string propName = dsType->getProperty(t)->getName();
 
  202         std::string fullName = alias + 
"." + propName;
 
  204         inputProperties.push_back(fullName);
 
  205         list.push_back(fullName.c_str());
 
  211   m_propertyList->setInputValues(inputProperties);
 
  212   m_groupByList->setInputValues(inputProperties);
 
  214   m_ui->m_restrictValueComboBox->clear();
 
  215   m_ui->m_restrictValueComboBox->addItems(list);
 
  217   m_ui->m_valuePropertyComboBox->clear();
 
  218   m_ui->m_valuePropertyComboBox->addItems(list);
 
  220   m_ui->m_orderPropertyComboBox->clear();
 
  221   m_ui->m_orderPropertyComboBox->addItems(list);
 
  226   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Plus, tr(
"+").toStdString()));
 
  227   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Minus, tr(
"-").toStdString()));
 
  228   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Multi, tr(
"*").toStdString()));
 
  229   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Div, tr(
"/").toStdString()));
 
  230   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Equal, tr(
"=").toStdString()));
 
  231   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Dif, tr(
"<>").toStdString()));
 
  232   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Great, tr(
">").toStdString()));
 
  233   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_GreatEqual, tr(
">=").toStdString()));
 
  234   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_Less, tr(
"<").toStdString()));
 
  235   m_bimapOperator.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOperator_LessEqual, tr(
"<=").toStdString()));
 
  237   m_ui->m_OperatorComboBox->clear();
 
  239   boost::bimap<int, std::string>::iterator it = m_bimapOperator.begin();
 
  241   while(it != m_bimapOperator.end())
 
  243     m_ui->m_OperatorComboBox->addItem(it->right.c_str());
 
  250   m_bimapConnector.insert(boost::bimap<int, std::string>::value_type(QueryBuilderConnector_NONE, tr(
"---").toStdString()));
 
  251   m_bimapConnector.insert(boost::bimap<int, std::string>::value_type(QueryBuilderConnector_AND, tr(
"AND").toStdString()));
 
  252   m_bimapConnector.insert(boost::bimap<int, std::string>::value_type(QueryBuilderConnector_OR, tr(
"OR").toStdString()));
 
  253   m_bimapConnector.insert(boost::bimap<int, std::string>::value_type(QueryBuilderConnector_NOT, tr(
"NOT").toStdString()));
 
  254   m_bimapConnector.insert(boost::bimap<int, std::string>::value_type(QueryBuilderConnector_LIKE, tr(
"LIKE").toStdString()));
 
  256   m_ui->m_connectorComboBox->clear();
 
  258   boost::bimap<int, std::string>::left_const_iterator it;
 
  259   it = m_bimapConnector.left.find(QueryBuilderConnector_NONE);
 
  260   m_ui->m_connectorComboBox->addItem(it->second.c_str());
 
  261   it = m_bimapConnector.left.find(QueryBuilderConnector_AND);
 
  262   m_ui->m_connectorComboBox->addItem(it->second.c_str());
 
  263   it = m_bimapConnector.left.find(QueryBuilderConnector_OR);
 
  264   m_ui->m_connectorComboBox->addItem(it->second.c_str());
 
  265   it = m_bimapConnector.left.find(QueryBuilderConnector_NOT);
 
  266   m_ui->m_connectorComboBox->addItem(it->second.c_str());
 
  267   it = m_bimapConnector.left.find(QueryBuilderConnector_LIKE);
 
  268   m_ui->m_connectorComboBox->addItem(it->second.c_str());
 
  273   m_bimapOrder.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOrder_ASC, tr(
"ASC").toStdString()));
 
  274   m_bimapOrder.insert(boost::bimap<int, std::string>::value_type(QueryBuilderOrder_DESC, tr(
"DESC").toStdString()));
 
  276   m_ui->m_orderComboBox->clear();
 
  278   boost::bimap<int, std::string>::iterator it = m_bimapOrder.begin();
 
  280   while(it != m_bimapOrder.end())
 
  282     m_ui->m_orderComboBox->addItem(it->right.c_str());
 
  289   if(m_ui->m_dataSourceComboBox->currentText().isEmpty())
 
  291     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Data Source not selected."));
 
  304   int numRows = m_ui->m_dataSetTableWidget->rowCount();
 
  308     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"No Data Set selected."));
 
  321   if(m_propertyList->getOutputValues().empty())
 
  323     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"No Property selected."));
 
  332   int numRows = m_ui->m_whereClauseTableWidget->rowCount();
 
  336     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"No Where Clause defined."));
 
  360   std::string dataSourceName = value.toStdString();
 
  367   if(value.isEmpty() == 
false)
 
  368     m_ui->m_dataSetAliasLineEdit->setText(value);
 
  373   if(m_ui->m_dataSetComboBox->currentText().isEmpty())
 
  375     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Data Set not selected."));
 
  379   if(m_ui->m_dataSetAliasLineEdit->text().isEmpty())
 
  381     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Data Set Alias not defined."));
 
  385   std::string dataSetName = m_ui->m_dataSetComboBox->currentText().toStdString();
 
  386   std::string aliasName = m_ui->m_dataSetAliasLineEdit->text().toStdString();
 
  388   int newrow = m_ui->m_dataSetTableWidget->rowCount();
 
  391   for(
int i = 0; i < newrow; ++i)
 
  393     QTableWidgetItem* itemName = m_ui->m_dataSetTableWidget->item(i, 1);
 
  395     if(itemName->text().toStdString() == aliasName)
 
  397       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Data Set Alias already defined."));
 
  403   m_ui->m_dataSetTableWidget->insertRow(newrow);
 
  405   QTableWidgetItem* itemDataSet = 
new QTableWidgetItem(QString::fromStdString(dataSetName));
 
  406   m_ui->m_dataSetTableWidget->setItem(newrow, 0, itemDataSet);
 
  408   QTableWidgetItem* itemAlias = 
new QTableWidgetItem(QString::fromStdString(aliasName));
 
  409   m_ui->m_dataSetTableWidget->setItem(newrow, 1, itemAlias);
 
  411   m_ui->m_dataSetTableWidget->resizeColumnToContents(0);
 
  416   int row = m_ui->m_dataSetTableWidget->currentRow();
 
  419     m_ui->m_dataSetTableWidget->removeRow(row);
 
  421   m_ui->m_dataSetTableWidget->resizeColumnToContents(0);
 
  426   if(m_ui->m_restrictValueComboBox->currentText().isEmpty())
 
  428     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Restrict value not defined."));
 
  432   if(m_ui->m_valuePropertyRadioButton->isChecked() == 
false &&
 
  433      m_ui->m_valueValueRadioButton->isChecked() == 
false)
 
  435      if(m_ui->m_valueValueComboBox->currentText().isEmpty())
 
  437       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Value not defined."));
 
  442   if(m_ui->m_valueValueRadioButton->isChecked())
 
  444     if(m_ui->m_valueValueComboBox->currentText().isEmpty())
 
  446       QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Value not defined."));
 
  451   int newrow = m_ui->m_whereClauseTableWidget->rowCount();
 
  453   std::string restrictValue = m_ui->m_restrictValueComboBox->currentText().toStdString();
 
  454   std::string operatorStr = m_ui->m_OperatorComboBox->currentText().toStdString();
 
  455   std::string connector = m_ui->m_connectorComboBox->currentText().toStdString();
 
  457   std::string valueStr = 
"";
 
  458   if(m_ui->m_valuePropertyRadioButton->isChecked())
 
  459     valueStr = m_ui->m_valuePropertyComboBox->currentText().toStdString();
 
  460   else if(m_ui->m_valueValueRadioButton->isChecked())
 
  461     valueStr = m_ui->m_valueValueComboBox->currentText().toStdString();
 
  464   m_ui->m_whereClauseTableWidget->insertRow(newrow);
 
  466   QTableWidgetItem* itemProperty = 
new QTableWidgetItem(QString::fromStdString(restrictValue));
 
  467   m_ui->m_whereClauseTableWidget->setItem(newrow, 0, itemProperty);
 
  469   QTableWidgetItem* itemOperator = 
new QTableWidgetItem(QString::fromStdString(operatorStr));
 
  470   m_ui->m_whereClauseTableWidget->setItem(newrow, 1, itemOperator);
 
  472   QTableWidgetItem* itemValue = 
new QTableWidgetItem(QString::fromStdString(valueStr));
 
  473   m_ui->m_whereClauseTableWidget->setItem(newrow, 2, itemValue);
 
  475   QTableWidgetItem* itemConnector = 
new QTableWidgetItem(QString::fromStdString(connector));
 
  476   m_ui->m_whereClauseTableWidget->setItem(newrow, 3, itemConnector);
 
  478   m_ui->m_whereClauseTableWidget->resizeColumnsToContents();
 
  483   int row = m_ui->m_whereClauseTableWidget->currentRow();
 
  486     m_ui->m_whereClauseTableWidget->removeRow(row);
 
  488   m_ui->m_whereClauseTableWidget->resizeColumnsToContents();
 
  493   if(m_ui->m_orderPropertyComboBox->currentText().isEmpty())
 
  495     QMessageBox::warning(
this, tr(
"Query Builder"), tr(
"Property value not defined."));
 
  499   int newrow = m_ui->m_orderTableWidget->rowCount();
 
  501   std::string propertyValue = m_ui->m_orderPropertyComboBox->currentText().toStdString();
 
  502   std::string order = m_ui->m_orderComboBox->currentText().toStdString();
 
  505   m_ui->m_orderTableWidget->insertRow(newrow);
 
  507   QTableWidgetItem* itemProperty = 
new QTableWidgetItem(QString::fromStdString(propertyValue));
 
  508   m_ui->m_orderTableWidget->setItem(newrow, 0, itemProperty);
 
  510   QTableWidgetItem* itemOrder = 
new QTableWidgetItem(QString::fromStdString(order));
 
  511   m_ui->m_orderTableWidget->setItem(newrow, 1, itemOrder);
 
  513   m_ui->m_orderTableWidget->resizeColumnsToContents();
 
  518   int row = m_ui->m_orderTableWidget->currentRow();
 
  521     m_ui->m_orderTableWidget->removeRow(row);
 
  523   m_ui->m_orderTableWidget->resizeColumnsToContents();
 
std::map< std::string, DataSourcePtr >::iterator iterator
 
boost::shared_ptr< DataSource > DataSourcePtr
 
static DataSourceManager & getInstance()
It returns a reference to the singleton instance. 
 
TEDATAACCESSEXPORT void GetDataSetNames(std::vector< std::string > &datasetNames, const std::string &datasourceId)
 
A Qt dialog that allows users to create query builder based on TerraLib query framework.