📄 nwgcmlhandler.cpp
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/**************************************************************
FILENAME : NWGCMLHandler.cpp
PURPOSE : It is the middle layer between the XML layer and the MMI intyerface
layer.
REMARKS : nil
AUTHOR : Vikram
DATE : Oct 10,03
**************************************************************/
#include "stdafx.h"
#include "resource.h"
//#include "MMINWSimulator.h"
#include "NWGCMLHandler.h"
#include "ObjectSearch.h"
#include "GCMLGenerator.h"
//#ifdef _DEBUG
//#undef THIS_FILE
//static char THIS_FILE[]=__FILE__;
//#define new DEBUG_NEW
//#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//void CNWGCMLHandler::FreeAll();
CNWGCMLHandler::CNWGCMLHandler()//:CDCMLHandler()
{
}
CNWGCMLHandler::CNWGCMLHandler(LPTSTR pFileName):CDCMLHandler(pFileName)
{
}
CNWGCMLHandler::~CNWGCMLHandler()
{
}
/**************************************************************
FUNCTION NAME : GetDataList
PURPOSE : Return a list of all data objects to the upper layer
INPUT PARAMETERS : nil
OUTPUT PARAMETERS : nil
RETURNS : CPtrList*
REMARKS : This function looks for all data lists in the XML.
Makes objects of these data lists and returns a list of
objects.
**************************************************************/
CPtrList* CNWGCMLHandler::GetDataList()
{
MSXML::IXMLDOMNodeList* pNodeList;
MSXML::IXMLDOMNode* pNode;
UINT16 iCount = 0;
INT32 nTotalNodes = 0;
CPtrList* pPtrList = NULL;
CDataList* pData = NULL;
if(GetTotalNodesOfType(TAG_DATALIST,pNodeList,&nTotalNodes) == SUCCESS)
{
while(nTotalNodes)
{
if(!pPtrList)
ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
pNodeList->nextNode(&pNode);
ALLOCATE_MEM(pData,CDataList);
GetDataListDetails(pNode,*pData);
pPtrList->AddTail(pData);
--nTotalNodes;
}
}
return pPtrList;
}
/**************************************************************
FUNCTION NAME : GetDataTypeList
PURPOSE : Return a list of all datatype objects to the upper layer
INPUT PARAMETERS : nil
OUTPUT PARAMETERS : nil
RETURNS : CPtrList*
REMARKS : This function looks for all datatype lists in the XML.
Makes objects of these datatype lists and returns a list of
objects.
**************************************************************/
CPtrList* CNWGCMLHandler::GetDataTypeList()
{
MSXML::IXMLDOMNodeList* pNodeList;
MSXML::IXMLDOMNode* pNode;
MSXML::IXMLDOMNamedNodeMap* pNodeMap = NULL;
UINT16 iCount = 0;
INT32 nTotalNodes = 0;
LPTSTR pVal = NULL;
CPtrList* pPtrList = NULL;
CDataType* pDataype = NULL;
if(GetTotalNodesOfType(TAG_DATATYPE,pNodeList,&nTotalNodes) == SUCCESS)
{
while(nTotalNodes)
{
if(!pPtrList)
ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
pNodeList->nextNode(&pNode);
pDataype = new CDataType;
//ALLOCATE_MEM(pDataype,CDataType);
pNodeMap = GetAllAttributes(pNode);
if(pNodeMap)
{
GetAttributeValue(pNodeMap,TAG_NAME,pVal);
if(pVal){
pDataype->SetName(CString(pVal));
DELETE_MEM_ARR(pVal);
}
GetAttributeValue(pNodeMap,TAG_SIZE,pVal);
if(pVal){
pDataype->SetSize(_ttoi(CString(pVal)));
DELETE_MEM_ARR(pVal);
}
}
pPtrList->AddTail(pDataype);
--nTotalNodes;
}//while(nTotalNodes)
}
return pPtrList;
}
///kmalik added the support for getting the application list from xml
CPtrList* CNWGCMLHandler::GetApplicationList()
{
MSXML::IXMLDOMNodeList* pNodeList;
MSXML::IXMLDOMNode* pNode;
MSXML::IXMLDOMNamedNodeMap* pNodeMap = NULL;
UINT16 iCount = 0;
INT32 nTotalNodes = 0;
LPTSTR pVal = NULL;
CPtrList* pPtrList = NULL;
CApplication* pApp = NULL;
if(GetTotalNodesOfType(TAG_APPLICATION,pNodeList,&nTotalNodes) == SUCCESS)
{
while(nTotalNodes)
{
if(!pPtrList)
ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
pNodeList->nextNode(&pNode);
pApp = new CApplication;
//ALLOCATE_MEM(pDataype,CDataType);
pNodeMap = GetAllAttributes(pNode);
if(pNodeMap)
{
GetAttributeValue(pNodeMap,TAG_ID,pVal);
if(pVal){
pApp->SetAppId(_ttoi(CString(pVal)));
DELETE_MEM_ARR(pVal);
}
GetAttributeValue(pNodeMap,TAG_NAME,pVal);
if(pVal){
pApp->SetApplicationName(CString(pVal));
DELETE_MEM_ARR(pVal);
}
}
pPtrList->AddTail(pApp);
--nTotalNodes;
}//while(nTotalNodes)
}
return pPtrList;
}
/**************************************************************
FUNCTION NAME : GetFormatsList
PURPOSE : Return a list of all format objects to the upper layer
INPUT PARAMETERS : nil
OUTPUT PARAMETERS : nil
RETURNS : CPtrList*
REMARKS : This function looks for all format in the XML.
Makes objects of these formats and returns a list of
objects.
**************************************************************/
CPtrList* CNWGCMLHandler::GetFormatsList()
{
MSXML::IXMLDOMNodeList* pNodeList;
MSXML::IXMLDOMNode* pNode;
UINT16 iCount = 0;
INT32 nTotalNodes = 0;
CPtrList* pPtrList = NULL;
CPtrList* pDataList = NULL;
CPtrList* pDataTypeList = NULL;
CFormat* pFormat = NULL;
if(GetTotalNodesOfType(TAG_FORMATS,pNodeList,&nTotalNodes) == SUCCESS)
{
pDataList = GetDataList();
pDataTypeList = GetDataTypeList();
while(nTotalNodes)
{
if(!pPtrList)
ALLOCATE_MEM_ARR(pPtrList,CPtrList,10);
pNodeList->nextNode(&pNode);
ALLOCATE_MEM(pFormat,CFormat);
GetFormatDetails(pNode,*pFormat,pDataList,pDataTypeList);
pPtrList->AddTail(pFormat);
--nTotalNodes;
}
}
return pPtrList;
}
/**************************************************************
FUNCTION NAME : GetDataListDetails
PURPOSE : Gets the Data list informationn object from DOM node
INPUT PARAMETERS : MSXML::IXMLDOMNode*
OUTPUT PARAMETERS : CDataList
RETURNS : ERR
REMARKS : This function creates a DataList object out of the DOM node
and passes the object as an output paramater
**************************************************************/
ERR CNWGCMLHandler::GetDataListDetails(MSXML::IXMLDOMNode* pNode, CDataList& data)
{
MSXML::IXMLDOMNode* pChildNode = NULL;
MSXML::IXMLDOMNamedNodeMap* pNodeMap = NULL;
MSXML::IXMLDOMNodeList* pChildNodeList;
LPTSTR pVal = NULL;
pNodeMap = GetAllAttributes(pNode);
if(pNodeMap)
{
GetAttributeValue(pNodeMap,TAG_NAME,pVal);
if(pVal){
data.SetName(CString(pVal));
DELETE_MEM_ARR(pVal);
}
//get default data set name
GetAttributeValue(pNodeMap,TAG_DEFAULT,pVal);
if(pVal){
data.SetDefault(CString(pVal));
DELETE_MEM_ARR(pVal);
}
RELEASE_OBJECT(pNodeMap)
}
if(GetAllChildren(pNode,pChildNodeList) == SUCCESS)
{
long iListSize = GetListSize(pChildNodeList);
while(iListSize)
{
GetNextNode(pChildNodeList,pChildNode);
CData dataObj;
dataObj.GetValueList().RemoveAll();
if(GetDataDetails(pChildNode,dataObj) == SUCCESS)
{
data.AddValue(dataObj);
}
RELEASE_OBJECT(pChildNode);
--iListSize;
}
RELEASE_OBJECT(pChildNodeList);
}
return SUCCESS;
}
/**************************************************************
FUNCTION NAME : GetDataDetails
PURPOSE : Gets the Data object informationn object from DOM node
INPUT PARAMETERS : MSXML::IXMLDOMNode*
OUTPUT PARAMETERS : CData
RETURNS : ERR
REMARKS : This function creates a Data object out of the DOM node
and passes the object as an output paramater
**************************************************************/
ERR CNWGCMLHandler::GetDataDetails(MSXML::IXMLDOMNode* pNode, CData& data)
{
MSXML::IXMLDOMNamedNodeMap* pNodeMap = NULL;
MSXML::IXMLDOMNode* pChildNode = NULL;
MSXML::IXMLDOMNodeList* pChildNodeList;
LPTSTR pVal = NULL;
pNodeMap = GetAllAttributes(pNode);
if(pNodeMap)
{
GetAttributeValue(pNodeMap,TAG_NAME,pVal);
if(pVal){
data.SetName(CString(pVal));
DELETE_MEM_ARR(pVal);
}
//added for description
GetAttributeValue(pNodeMap,TAG_DESCRIPTION,pVal);
if(pVal)
{
data.SetDescription(CString(pVal));
DELETE_MEM_ARR(pVal);
}
//added for frequency
GetAttributeValue(pNodeMap,TAG_FREQUENCY,pVal);
if(pVal)
{
data.SetFrequency(_ttoi(CString(pVal)));
DELETE_MEM_ARR(pVal);
}
//added for timer
GetAttributeValue(pNodeMap,TAG_TIMER,pVal);
if(pVal)
{
data.SetTimer(_ttoi(CString(pVal)));
DELETE_MEM_ARR(pVal);
}
if(GetAllChildren(pNode,pChildNodeList) == SUCCESS)
{
long iListSize = GetListSize(pChildNodeList);
while(iListSize)
{
CValue val;
GetNextNode(pChildNodeList,pChildNode);
pVal = GetAttributeValue(pChildNode,TAG_NAME);
if(pVal)
{
val.SetName(pVal);
DELETE_MEM_ARR(pVal);
}
pVal = GetAttributeValue(pChildNode,TAG_DESCRIPTION);
if(pVal)
{
val.SetDescription(pVal);
DELETE_MEM_ARR(pVal);
}
pVal = GetAttributeValue(pChildNode,TAG_SOURCE);
if(pVal)
{
CString csType(pVal);
int nPos=0;
if( (nPos=csType.Find(_T("[ct]"))) != -1)
{
val.SetSourceType(CONSTANT);
val.SetSourceValue(csType.Mid(nPos+4));
}
else if((nPos=csType.Find(_T("[dlg]"))) !=-1)
{
val.SetSourceType(DLG);
val.SetSourceValue(csType.Mid(nPos+5));
}
else if((nPos=csType.Find(_T("[file]"))) !=-1)
{
val.SetSourceType(FL);
val.SetSourceValue(csType.Mid(nPos+6));
}
else if((nPos=csType.Find(_T("[req]"))) !=-1)
{
val.SetSourceType(REQ);
val.SetSourceValue(csType.Mid(nPos+5));
}
DELETE_MEM_ARR(pVal);
}
data.AddValue(val);
RELEASE_OBJECT(pChildNode);
--iListSize;
}
RELEASE_OBJECT(pChildNodeList);
}
}
return SUCCESS;
}
/**************************************************************
FUNCTION NAME : GetFormatDetails
PURPOSE : Gets the Format object informationn object from DOM node
INPUT PARAMETERS : MSXML::IXMLDOMNode*,CPtrList* pDataList,CPtrList* pDataTypeList)
OUTPUT PARAMETERS : CFormat
RETURNS : ERR
REMARKS : This function looks for the CFormat object inside the DOM by matching it
with thr Data objects list.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -