📄 nwgcmlhandler.cpp
字号:
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 + -