Ejemplo n.º 1
0
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());
}
Ejemplo n.º 2
0
	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;
	}
Ejemplo n.º 3
0
	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);
	}
Ejemplo n.º 4
0
	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;
	}