#include "StdAfx.h" #include "MBAppMgr.h" #include "MBAppInfo.h" #include "MBPsnAppInfo.h" #include "MBAreaAppInfo.h" CMBAppMgr::CMBAppMgr(void) { } CMBAppMgr::~CMBAppMgr(void) { } bool CMBAppMgr::AddApp(CMBBaseAppObj *pAppObj) { return AddAppObj(pAppObj); } CMBBaseCatalogObj *CMBAppMgr::GetCatalogObj( CString strCabinetID,CString strCatalogID ) { CMBBaseCabinetObj *pBaseCabinetObj = GetCabinetObj( strCabinetID ); if( NULL == pBaseCabinetObj ) return NULL; if( strCatalogID.IsEmpty() ) return NULL; CMBCabinetInfo *pCabinetInfo = (CMBCabinetInfo *)pBaseCabinetObj; return pCabinetInfo->GetCatalogMgr()->DeepFindCatalogObj( strCatalogID ); } CMBBaseCabinetObj *CMBAppMgr::GetCabinetObj( CString strCabinetID ) { if( strCabinetID.IsEmpty() ) { return NULL; } CMBBaseAppObjMap::iterator it; CMBBaseAppObj *pBaseAppObj = NULL; for( it = m_mapAppObj.begin();it != m_mapAppObj.end();it++ ) { pBaseAppObj = it->second; if( pBaseAppObj->IsKindOf(RUNTIME_CLASS(CMBAppInfo)) ) { CMBAppInfo *pAppInfo = (CMBAppInfo *)pBaseAppObj; CMBBaseCabinetObj *pCabinetObj = pAppInfo->GetCabinetObj(strCabinetID); if( pCabinetObj != NULL ) return pCabinetObj; } } return NULL; } CMBBaseCatalogObj *CMBAppMgr::GetPsnCatalogObj( CString strCatalogID ) { CMBBaseCabinetObj *pCabinetObj = GetPsnCabinetObj(); if( NULL == pCabinetObj ) return NULL; if( strCatalogID.IsEmpty() ) return NULL; CMBPsnCabinetInfo * pCabinetInfo = (CMBPsnCabinetInfo*)pCabinetObj; return pCabinetInfo->GetCatalogMgr()->DeepFindCatalogObj( strCatalogID ); } CMBBaseCabinetObj *CMBAppMgr::GetPsnCabinetObj( ) { CMBBaseAppObjMap::iterator it; CMBBaseAppObj *pBaseAppObj = NULL; for( it = m_mapAppObj.begin();it != m_mapAppObj.end();it++ ) { pBaseAppObj = it->second; if( pBaseAppObj->IsKindOf(RUNTIME_CLASS(CMBPsnAppInfo)) ) { CMBPsnAppInfo *pAppInfo = (CMBPsnAppInfo *)pBaseAppObj; return pAppInfo->m_pCabinetInfo; } } return NULL; } // ²éÕÒÉî²ã¶ÔÏ󣬸ú¾Ýid CMBBaseObj *CMBAppMgr::FindDeepObjByID( CStringArray &ar ) { CMBBaseObj *pReturnObj = NULL; if( ar.GetCount() <= 0 ) return pReturnObj; CMBBaseAppObjMap::iterator it; CMBBaseAppObj *pBaseAppObj = NULL; for( it = m_mapAppObj.begin();it != m_mapAppObj.end();it++ ) { pBaseAppObj = it->second; if( pBaseAppObj->IsKindOf(RUNTIME_CLASS(CMBPsnAppInfo)) ) { CMBPsnAppInfo *pAppInfo = (CMBPsnAppInfo *)pBaseAppObj; CMBPsnCabinetInfo *pCabinetInfo = ( CMBPsnCabinetInfo * )pAppInfo->GetCabinetObj( ar[0] ); if( pCabinetInfo != NULL ) { if( ar.GetCount() == 1 ){ pReturnObj = pCabinetInfo; return pReturnObj; } CMBPsnCatalogMgr *pCatalogMgr = pCabinetInfo->GetCatalogMgr(); for( int i = 1;i < ar.GetCount();i++ ) { CMBPsnCatalogInfo *pCatalogInfo = pCatalogMgr->GetCatalogInfo(ar[i]); if( ar.GetCount() - 1 == i ) { pReturnObj = pCatalogInfo; return pReturnObj; } if( pCatalogInfo == NULL ) break; pCatalogMgr = pCatalogInfo->GetCatalogMgr(); } } } else if( pBaseAppObj->IsKindOf(RUNTIME_CLASS(CMBAppInfo)) ) { CMBAppInfo *pAppInfo = (CMBAppInfo *)pBaseAppObj; CMBCabinetInfo *pCabinetInfo = ( CMBCabinetInfo * )pAppInfo->GetCabinetObj( ar[0] ); if( pCabinetInfo != NULL ) { if( ar.GetCount() == 1 ){ pReturnObj = pCabinetInfo; return pReturnObj; } CMBCatalogMgr *pCatalogMgr = pCabinetInfo->GetCatalogMgr(); for( int i = 1;i < ar.GetCount();i++ ) { CMBCatalogInfo *pCatalogInfo = pCatalogMgr->GetCatalogInfo(ar[i]); if( ar.GetCount() - 1 == i ) { pReturnObj = pCatalogInfo; return pReturnObj; } if( pCatalogInfo == NULL ) break; pCatalogMgr = pCatalogInfo->GetCatalogMgr(); } } } } return pReturnObj; } //Èí¼þÉÕÖÆ{'mastercls':{'cls_id':'0031','cls_name':'µç¿Ø×ܳÉ','key_attr':'CODE','key_attrname':'ÎïÁϱàÂë','name_attr':'NAME','name_attrname':'Ãû³Æ'},'composecls':{'cls_id':'0032','cls_name':'Èí¼þ'},'datacls':{'cls_id':'0030','cls_name':'µç¿ØÈí¼þ'},'groupset':{'group':'1','attr':'TYPE','attr_name':'Èí¼þÀàÐÍ'},'qr_code_set':[{'clsid':'0031','attr':'CODE'},{'clsid':'0030','attr':'SOFT_CODE'}]} bool CMBAppMgr::ParseXml( CString strXml,CMBBaseAppObjVector &vectorAppObj,CString &strErrInfo ) { vectorAppObj.clear(); pugi::xml_document xmlDoc; if (!xmlDoc.load(strXml)) { return false; } pugi::xml_node form = xmlDoc.child(_T("Body")).child(_T("App")); for(pugi::xml_node node = form; node; node = node.next_sibling(_T("App"))) { CMBAreaAppInfo *pAreaAppInfo = new CMBAreaAppInfo(); pAreaAppInfo->m_strID = node.attribute(_T("ID")).value(); pAreaAppInfo->m_strName = node.child_value(_T("Name")); pAreaAppInfo->m_strDefCode = node.attribute(_T("DefCode")).value(); pAreaAppInfo->m_strBkColor = node.attribute(_T("BkColor")).value(); pAreaAppInfo->m_strOrder = node.attribute(_T("Order")).value(); pAreaAppInfo->m_strFolder = node.attribute(_T("Folder")).value(); pAreaAppInfo->m_strTxtColor = node.attribute(_T("TxtColor")).value(); pAreaAppInfo->m_strFrameType = node.attribute(_T("FrameType")).value(); pAreaAppInfo->m_strImgFontStyle = node.attribute(_T("ImgFontStyle")).value(); pAreaAppInfo->m_strParam = node.child_value(_T("Param")); pAreaAppInfo->m_strParam.Replace(_T("\\"),_T("")); if( !AddApp(pAreaAppInfo) ) { delete pAreaAppInfo; pAreaAppInfo = NULL; continue; } vectorAppObj.push_back(pAreaAppInfo); } return true; }