⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nwgcmlhandler.cpp

📁 mtk simulator v2 new source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		RELEASE_OBJECT(m_pXMLDomDocument)
}


/**************************************************************

	FUNCTION NAME		: GetBootUpMessageList

  	PURPOSE				: Return a list of all Boot Up message objects to the upper layer

	INPUT PARAMETERS	: nil

	OUTPUT PARAMETERS	: nil

	RETURNS				: CPtrList*

	REMARKS				: This function looks for all the boot up messages in the XML.
							Makes objects of these boot up messages and returns a list of 
							objects.

**************************************************************/

CPtrList* CNWGCMLHandler::GetBootUpMessageList()
{
	MSXML::IXMLDOMNodeList*		pNodeList; 
	MSXML::IXMLDOMNode*			pNode; 
	UINT16	iCount	=	0;
	INT32	nTotalNodes			=	0;
	CPtrList*	pPtrList	=	NULL;
	CBootUpMsg*	pBootUpMessage	=	NULL;

	if(GetTotalNodesOfType(TAG_BOOTUPMSG,pNodeList,&nTotalNodes) == SUCCESS)
	{
		while(nTotalNodes)
		{
			if(!pPtrList)
				ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
			pNodeList->nextNode(&pNode);
			ALLOCATE_MEM(pBootUpMessage,CBootUpMsg);
			GetBootUpMessageDetails(pNode,*pBootUpMessage);
			pPtrList->AddTail(pBootUpMessage);
			--nTotalNodes;
			RELEASE_OBJECT(pNode);
		}
	}
	return pPtrList;
}



/**************************************************************

	FUNCTION NAME		: GetBootUpMessageDetails

  	PURPOSE				: Gets the Boot up messages informationn object from DOM node

	INPUT PARAMETERS	: MSXML::IXMLDOMNode*

	OUTPUT PARAMETERS	: CBootUpMsg

	RETURNS				: ERR

	REMARKS				: This function creates a CBootUpMsg object out of the DOM node 
							and passes the object as an output paramater

**************************************************************/

ERR CNWGCMLHandler::GetBootUpMessageDetails(MSXML::IXMLDOMNode* pNode, CBootUpMsg& message)
{
	ERR			err		=	FAILURE;
	MSXML::IXMLDOMNode*		pChildNode	=	NULL;
	MSXML::IXMLDOMNodeList*		pChildNodeList; 
	LPTSTR		pval	=	NULL;
	if(GetAllChildren(pNode,pChildNodeList) == SUCCESS)
	{
		long iListSize = GetListSize(pChildNodeList);
		while(iListSize)
		{
			GetNextNode(pChildNodeList,pChildNode);
			pval = GetAttributeValue(pChildNode,TAG_ID);
			if(pval)
			{
				message.AddInBootMessageId(_ttoi(pval));
				DELETE_MEM_ARR(pval);
			}
			RELEASE_OBJECT(pChildNode);
			--iListSize;
		}
		RELEASE_OBJECT(pChildNodeList);
	}
	return err;
}

/**************************************************************

	FUNCTION NAME		: GetFrequentlyUsedMessageList

  	PURPOSE				: Return a list of all Boot Up message objects to the upper layer

	INPUT PARAMETERS	: nil

	OUTPUT PARAMETERS	: nil

	RETURNS				: CPtrList*

	REMARKS				: This function looks for all the boot up messages in the XML.
							Makes objects of these boot up messages and returns a list of 
							objects.

**************************************************************/

CPtrList* CNWGCMLHandler::GetFrequentlyUsedMessageList()
{
	MSXML::IXMLDOMNodeList*		pNodeList; 
	MSXML::IXMLDOMNode*			pNode; 
	UINT16	iCount	=	0;
	INT32	nTotalNodes			=	0;
	CPtrList*	pPtrList	=	NULL;
	CFreqUsedMsg*	pFreqUsedMessage	=	NULL;

	if(GetTotalNodesOfType(TAG_FREQUSED,pNodeList,&nTotalNodes) == SUCCESS)
	{
		while(nTotalNodes)
		{
			if(!pPtrList)
				ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
			pNodeList->nextNode(&pNode);
			ALLOCATE_MEM(pFreqUsedMessage,CFreqUsedMsg);
			GetFrequentlyUsedMessageDetails(pNode,*pFreqUsedMessage);
			pPtrList->AddTail(pFreqUsedMessage);
			--nTotalNodes;
			RELEASE_OBJECT(pNode);
		}
	}
	return pPtrList;
}



/**************************************************************

	FUNCTION NAME		: GetFrequentlyUsedMessageDetails

  	PURPOSE				: Gets the Freq used messages informationn object from DOM node

	INPUT PARAMETERS	: MSXML::IXMLDOMNode*

	OUTPUT PARAMETERS	: CFreqUsedMsg

	RETURNS				: ERR

	REMARKS				: This function creates a CFreqUsedMsg object out of the DOM node 
							and passes the object as an output paramater

**************************************************************/

ERR CNWGCMLHandler::GetFrequentlyUsedMessageDetails(MSXML::IXMLDOMNode* pNode, CFreqUsedMsg& message)
{
	ERR			err		=	FAILURE;
	MSXML::IXMLDOMNode*		pChildNode	=	NULL;
	MSXML::IXMLDOMNodeList*		pChildNodeList; 
	LPTSTR		pval	=	NULL;

	if(GetAllChildren(pNode,pChildNodeList) == SUCCESS)
	{
		long iListSize = GetListSize(pChildNodeList);
		while(iListSize)
		{
			GetNextNode(pChildNodeList,pChildNode);
			pval = GetAttributeValue(pChildNode,TAG_ID);
			if(pval)
			{
				message.AddInFreqUsedMessageId(_ttoi(pval));
				DELETE_MEM_ARR(pval);
			}
			RELEASE_OBJECT(pChildNode);
			--iListSize;
		}
		RELEASE_OBJECT(pChildNodeList);
	}

	return err;
}
BOOL CNWGCMLHandler::SetDataSetInDom(CData& dataSet,CDataList dataList)
{	
	return(AddDataSetInDataList(dataSet,dataList));
}

ERR  CNWGCMLHandler::AddDataSetInDataList(CData& dataSet,CDataList datalist)
{
    MSXML::IXMLDOMNodeList*		pNodeList;
	ERR		err		=	FAILURE;
	MSXML::IXMLDOMNode*			pNode;
	MSXML::IXMLDOMNode*			pNewNode;
	MSXML::IXMLDOMNode*			pOutNode;
	UINT16	iCount	=	0;
	INT32	nTotalNodes			=	0;
	CDataList*	pDataFromDOM	=	NULL;
	CPtrList*	pPtrList	=	NULL;
	CGCMLGenerator generator;
	if(GetTotalNodesOfType(TAG_DATALIST,pNodeList,&nTotalNodes) == SUCCESS)
	{
		while(nTotalNodes)
		{
			CString dataListName;
			pNodeList->nextNode(&pNode);
			ALLOCATE_MEM(pDataFromDOM,CDataList);
			///have to get out the details here			
			GetDataListDetails(pNode,*pDataFromDOM);
			dataListName = pDataFromDOM->GetName();
			if(!dataListName.CompareNoCase(datalist.GetName()))
			{
				//DATA LIST FOUND ADD DATA SET HERE
				if((err = generator.GetNewDataNode(dataSet,pNewNode)) == SUCCESS)
					{
						AddChild(pNode,(MSXML::IXMLDOMElement*)pNewNode,pOutNode);
						RELEASE_OBJECT(pNewNode);
						RELEASE_OBJECT(pNode);
						RELEASE_OBJECT(pOutNode);
						err = SUCCESS;
	//					generator.MakeGCML();//enable this to generate the xml file
						break;
					}
				}
				--nTotalNodes;			
		}
	}
	return err;
}

ERR CNWGCMLHandler::GetDataSetToAddFromDataList(CData& dataNew,CDataList newDataList,CDataList *dataListFromDOM)
{
	//return the newly added data
	CData dataDom;
	BOOL found = FALSE;
	CList<CData,CData&>& newdata= newDataList.GetData();
	CList<CData,CData&>& domdata= dataListFromDOM->GetData();	
	if((newdata.GetCount() > 0) && (domdata.GetCount() > 0))
	{
		for( POSITION datapos = newdata.GetHeadPosition(); datapos != NULL;)
		{
			dataNew = (newdata.GetNext( datapos ));
			found = FALSE;
			for( POSITION pos = domdata.GetHeadPosition(); pos != NULL;)
			{
				dataDom = (domdata.GetNext(pos));
				if(!dataDom.GetName().CompareNoCase(dataNew.GetName()))
				{
					found = TRUE;
					break;
				}				
			}
			if(!found)
				break;
		}
	}
	if(!found)
		return SUCCESS;
	else
		return FAILURE;
}

BOOL CNWGCMLHandler::UpDateDataListInDom(CDataList dataList,CData& changedDataSet)
{	
	return(UpdateDataList(dataList,changedDataSet));
}


//have to add the newly update data list in DOM
ERR  CNWGCMLHandler::UpdateDataList(CDataList dataList,CData& changedDataSet)
{
    MSXML::IXMLDOMNodeList*		pNodeList;
    MSXML::IXMLDOMNodeList*		pChildNodeList;
	ERR		err		=	FAILURE;
	MSXML::IXMLDOMNode*			pNode;
	MSXML::IXMLDOMNode*			pChildNode;
	MSXML::IXMLDOMNamedNodeMap*	pNodeMap	=	NULL;
	CGCMLGenerator generator;
	LPTSTR	pName = NULL;
	INT32 nTotalNodes=0;
	if(GetTotalNodesOfType(TAG_DATALIST,pNodeList,&nTotalNodes) == SUCCESS)
	{
		//find the data list and remove the data list from the DOM
		//now add the new data list having edited data set
		//UpdateDataListNode
		while((nTotalNodes)&&(err == FAILURE))
		{
			GetNextNode(pNodeList,pNode);
			pNodeMap = GetAllAttributes(pNode);
			GetAttributeValue(pNodeMap,TAG_NAME,pName);
			//check the data list match if yes then update the data list as well as data set
			if(!dataList.GetName().CompareNoCase(pName))
			{
				//matched data list name
				if(generator.UpdateDataListNode(dataList,pNodeMap) == SUCCESS)
				{
					err = SUCCESS;
					//continure as the data list is update
					//get all the child and look for data set to be updated changedDataSet
					if(GetAllChildren(pNode,pChildNodeList) == SUCCESS)
					{
						long iListSize = GetListSize(pChildNodeList);
						while(iListSize)
						{
							GetNextNode(pChildNodeList,pChildNode);
							pNodeMap = GetAllAttributes(pChildNode);
							GetAttributeValue(pNodeMap,TAG_NAME,pName);
							if(!changedDataSet.GetName().CompareNoCase(pName))
							{
								//get the data details
								//now update this data set
								if(generator.UpdateDataSetNode(changedDataSet,pNodeMap)==SUCCESS)
								{
									err = SUCCESS;
									CList<CValue,CValue&>& valueList= changedDataSet.GetValueList();
									POSITION valpos = valueList.GetHeadPosition();
									//matched the name										
										if(GetAllChildren(pChildNode,pChildNodeList) == SUCCESS)
										{
											iListSize = GetListSize(pChildNodeList);
											while((iListSize)&& (valpos != NULL))
											{
												//now update the values from the new value list in dom
												CValue& valueObj = (CValue&)(valueList.GetNext( valpos ));
												GetNextNode(pChildNodeList,pChildNode);
												pNodeMap = GetAllAttributes(pChildNode);
												GetAttributeValue(pNodeMap,TAG_NAME,pName);
												GetAttributeValue(pNodeMap,TAG_SOURCE,pName);
												if(generator.UpdateValueNode(valueObj,pNodeMap)== SUCCESS)
													err = SUCCESS;									
											}
									}
								}
								generator.MakeGCML();
									break;								
							}								
							RELEASE_OBJECT(pChildNode);
							--iListSize;
						}
						RELEASE_OBJECT(pChildNodeList);
					}
				}
			}//if data list name are matched
			--nTotalNodes;
		}//while total number of nodes > 1
			RELEASE_OBJECT(pNodeList);
			RELEASE_OBJECT(pNode);
			RELEASE_OBJECT(pNodeMap);
	}
	return err;
}

BOOL CNWGCMLHandler::UpDateDefaultDataSetInDom(CDataList dataList,CData& changedDataSet)
{
	return(UpdateDefaultDataSet(dataList,changedDataSet));
}

//for updating the default dataset of a datalist in GCML
ERR  CNWGCMLHandler::UpdateDefaultDataSet(CDataList dataList,CData& changedDataSet)
{
    MSXML::IXMLDOMNodeList*		pNodeList;
    //MSXML::IXMLDOMNodeList*		pChildNodeList;
	ERR		err		=	FAILURE;
	MSXML::IXMLDOMNode*			pNode;
	//MSXML::IXMLDOMNode*			pChildNode;
	MSXML::IXMLDOMNamedNodeMap*	pNodeMap	=	NULL;
	CGCMLGenerator generator;
	LPTSTR	pName = NULL;
	INT32 nTotalNodes=0;
	if(GetTotalNodesOfType(TAG_DATALIST,pNodeList,&nTotalNodes) == SUCCESS)
	{
		//find the data list and remove the data list from the DOM
		//now add the new data list having edited data set
		//UpdateDataListNode
		while((nTotalNodes)&&(err == FAILURE))
		{
			GetNextNode(pNodeList,pNode);
			pNodeMap = GetAllAttributes(pNode);
			GetAttributeValue(pNodeMap,TAG_NAME,pName);
			//check the data list match if yes then update the data list as well as data set
			if(!dataList.GetName().CompareNoCase(pName))
			{
				//matched data list name
				if(generator.UpdateDataListNode(dataList,pNodeMap) == SUCCESS)
				{
					err = SUCCESS;
					break;
				}
			}
			--nTotalNodes;
		}
	}
	return err;
}

BOOL CNWGCMLHandler::UpDateInputModeInDom(CFormat& format)
{	
	return(UpdateFormat(format));
}

ERR CNWGCMLHandler::UpdateFormat(CFormat& format)
{
	MSXML::IXMLDOMNodeList*		pNodeList;
    ERR		err		=	FAILURE;
	MSXML::IXMLDOMNode*			pNode;
	MSXML::IXMLDOMNamedNodeMap*	pNodeMap	=	NULL;
	CGCMLGenerator generator;
	LPTSTR	pName = NULL;
	INT32 nTotalNodes=0;
	//update the input mode of format in dOM
	if(GetTotalNodesOfType(TAG_FORMATS,pNodeList,&nTotalNodes) == SUCCESS)
	{
		//find the format and update the input mode.
		while(nTotalNodes)
		{
			GetNextNode(pNodeList,pNode);
			pNodeMap = GetAllAttributes(pNode);
			GetAttributeValue(pNodeMap,TAG_NAME,pName);
			//check the data list match if yes then update the data list as well as data set
			if(!format.GetName().CompareNoCase(pName))
			{
				//matched data list name
				if(generator.UpdateFormatNode(format,pNodeMap) == SUCCESS)
				{
					err = SUCCESS;
					//generator.MakeGCML();
					break;
				}				
			}
			--nTotalNodes;
		}
		RELEASE_OBJECT(pNodeList)
		RELEASE_OBJECT(pNodeMap)
		RELEASE_OBJECT(pNode)
	}
	return err;
}

BOOL CNWGCMLHandler::UpDateResponseModeInDom(CMessage msg)
{	
	return(UpdateResponseMode(msg));
}

ERR CNWGCMLHandler::UpdateResponseMode(CMessage msg)
{
	MSXML::IXMLDOMNodeList*		pNodeList;
    ERR		err		=	FAILURE;
	MSXML::IXMLDOMNode*			pNode;
	MSXML::IXMLDOMNamedNodeMap*	pNodeMap	=	NULL;
	CGCMLGenerator generator;
	LPTSTR	pName = NULL;
	INT32 nTotalNodes=0;
	//update the input mode of format in dOM
	if(GetTotalNodesOfType(TAG_INCOMINGMSG,pNodeList,&nTotalNodes) == SUCCESS)
	{
		//find the format and update the input mode.
		while(nTotalNodes)
		{
			GetNextNode(pNodeList,pNode);
			pNodeMap = GetAllAttributes(pNode);
			GetAttributeValue(pNodeMap,TAG_NAME,pName);
			//check the data list match if yes then update the data list as well as data set
			if(!msg.GetMessageName().CompareNoCase(pName))
			{
				//matched data list name
				if(generator.UpdateIncomingMessageNode(msg,pNodeMap) == SUCCESS)
				{
					err = SUCCESS;
					generator.MakeGCML();
					break;
				}				
			}
			--nTotalNodes;
		}
		RELEASE_OBJECT(pNodeList)
		RELEASE_OBJECT(pNodeMap)
		RELEASE_OBJECT(pNode)
	}
	return err;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -