Qualifier* Sintactico::ParseFieldSpecifier() { if ( proximo_token.GetTipo() == punt_punto ) { proximo_token = analizador_lexico->ObtenerSiguienteToken(); string field_name = ParseFieldName(); return new Referencia(field_name); } else throw SyntaxException("Falta punto: produccion FieldSpecifier",analizador_lexico->GetLineaActual()); }
OrderBy* GetFeatureRequest::ParserOrderBy(XElement* pxOrderBy) { OrderBy* pOrderBy = NULL; FilterFactory* pFilterFactory = augeGetFilterFactoryInstance(); if(!pxOrderBy->HasChildren()) { return NULL; } pOrderBy = pFilterFactory->CreateOrderBy(); char field_name[AUGE_NAME_MAX]; const char* property_name = NULL; XNode* pxNode = NULL; XNodeSet* pxNodeSet = pxOrderBy->GetChildren("PropertyName"); pxNodeSet->Reset(); while((pxNode=pxNodeSet->Next())!=NULL) { property_name = pxNode->GetContent(); if(strlen(property_name)>0) { ParseFieldName(property_name, field_name, AUGE_NAME_MAX); pOrderBy->AddField(field_name); } } pxNodeSet->Release(); XAttribute* pxAttr = pxOrderBy->GetAttribute("order"); if(pxAttr!=NULL) { const char* order = pxAttr->GetValue(); if(order!=NULL) { if(g_stricmp(order,"desc")==0) { pOrderBy->SetOrder(augeOrderDesc); } //pxAttr->Release(); } } return pOrderBy; }
void GetFeatureRequest::SetFields(GQuery* pQuery, const char* fields) { if(fields==NULL) { return; } char field[AUGE_NAME_MAX]; char* field_c = strdup(fields); char* ptr = strtok(field_c, ","); while(ptr!=NULL) { ParseFieldName(ptr, field, AUGE_NAME_MAX); pQuery->AddSubField(field); ptr = strtok(NULL, ","); } free(field_c); }
GQuery* GetFeatureRequest::ParseXmlQuery(FeatureClass* pFeatureClass) { if(m_pxDoc==NULL) { return NULL; } XElement* pxRoot = m_pxDoc->GetRootNode(); XElement* pxQuery = (XElement*)pxRoot->GetFirstChild("Query"); if(pxQuery==NULL) { return NULL; } FilterFactory* pFilterFactory = augeGetFilterFactoryInstance(); GQuery* pQuery = pFilterFactory->CreateQuery(); if(pQuery==NULL) { return NULL; } XElement* pxFilter = (XElement*)pxQuery->GetFirstChild("Filter"); if(pxFilter!=NULL) { GFilter* pFilter = NULL; FilterReader* reader = pFilterFactory->CreateFilerReader(pFeatureClass->GetFields()); pFilter = reader->Read(pxFilter); pQuery->SetFilter(pFilter); } XElement* pxOrderBy = (XElement*)pxQuery->GetFirstChild("OrderBy"); if(pxOrderBy!=NULL) { OrderBy* pOrderBy = ParserOrderBy(pxOrderBy); if(pOrderBy!=NULL) { pQuery->SetOrderBy(pOrderBy); } } //PropertyName char field_name[AUGE_NAME_MAX]; const char* property_name; XNode* pxNode = NULL; XNodeSet* pxNodeSet = pxQuery->GetChildren("PropertyName"); pxNodeSet->Reset(); while((pxNode=pxNodeSet->Next())!=NULL) { property_name = pxNode->GetContent(); ParseFieldName(property_name, field_name, AUGE_NAME_MAX); WebContext* pWebContext = augeGetWebContextInstance(); pQuery->AddSubField(pWebContext->ParameterEncoding(field_name)); } if(m_max_features>0) { pQuery->SetMaxFeatures(m_max_features); } if(m_offset>0) { pQuery->SetOffset(m_offset); } pxNodeSet->Release(); return pQuery; }