#pragma once #define _CRTDBG_MAP_ALLOC #include #include #include "stdafx.h" #include "RptParamFileMgr.h" #include "OTSFileSys.h" //#include "MultiLang.h" namespace OTSMODEL { using namespace OTSTools; CRptParamFileMgr::CRptParamFileMgr() { Init(); } CRptParamFileMgr::~CRptParamFileMgr() { } BOOL CRptParamFileMgr::Save(OTS_SOFT_PACKAGE_ID a_nPackId) { // get software package system data path CString strSoftwareSysDataPath = COTSFileSys::GetOTSPackSysDataPathName(a_nPackId); if (strSoftwareSysDataPath.IsEmpty()) { // shouldn't happen, software package system data path string is empty LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to software package system data path string.")); return FALSE; } // software package system data path exists? if (!COTSFileSys::Exists(strSoftwareSysDataPath)) { // software package system data path doesn't exists, create it if (!COTSFileSys::CreateFolder(strSoftwareSysDataPath)) { // failed to create software package system data path, return FALSE LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to create software package system data path.")); return FALSE; } } // get software pack measure preference file pathname CString strProgMgrParamFilePathName = COTSFileSys::GetOTSPackReportPrefFilePathName(a_nPackId); if (strProgMgrParamFilePathName.IsEmpty()) { // shouldn't happen, software pack measure preference file pathname is empty, return nullptr LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to find program manager param file pathname.")); return FALSE; } ASSERT(m_poRptParamFile); if (!m_poRptParamFile) { LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to set report param file.")); return FALSE; } strProgMgrParamFilePathName = strProgMgrParamFilePathName ; tinyxml2::XMLDocument doc; if (COTSFileSys::Exists(strProgMgrParamFilePathName)) { doc.LoadFile(strProgMgrParamFilePathName);//载入xml文件 } doc.Clear(); tinyxml2::XMLDeclaration* declaration = doc.NewDeclaration();//添加xml文件头申明 doc.InsertFirstChild(declaration); tinyxml2::XMLElement *rootNode; rootNode = doc.NewElement(RootClassName); doc.InsertEndChild(rootNode); m_poRptParamFile->Serialize(true, &doc, rootNode); int result = doc.SaveFile(strProgMgrParamFilePathName); // file pathname m_strPathName = strProgMgrParamFilePathName; // ok, return TRUE return TRUE; } BOOL CRptParamFileMgr::Load(OTS_SOFT_PACKAGE_ID a_nPackId) { /*int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); tmpFlag |= _CRTDBG_LEAK_CHECK_DF; _CrtSetDbgFlag(tmpFlag); _CrtSetBreakAlloc(6357);*/ // get software pack measure preference file pathname GetOTSPackReportPrefFilePathName CString strProgMgrParamFilePathName = COTSFileSys::GetOTSPackReportPrefFilePathName(a_nPackId); if (strProgMgrParamFilePathName.IsEmpty()) { // shouldn't happen, software pack measure preference file pathname is empty, return false LogErrorTrace(__FILE__, __LINE__, _T("Load: failed to find report param file pathname.")); return FALSE; } // program manager param file exists? if (COTSFileSys::Exists(strProgMgrParamFilePathName)) { ASSERT(m_poRptParamFile); if (!m_poRptParamFile) { LogErrorTrace(__FILE__, __LINE__, _T("Load: failed to set report param file.")); return FALSE; } tinyxml2::XMLDocument doc; doc.LoadFile(strProgMgrParamFilePathName);//载入xml文件 tinyxml2::XMLElement *rootNode; rootNode = doc.FirstChildElement(RootClassName); m_poRptParamFile->Serialize(false, &doc, rootNode); // file pathname m_strPathName = strProgMgrParamFilePathName; } else { // file not exists, need to create a new one // get app system file path CString strCompanySysDataPath = COTSFileSys::GetOTSPackSysDataPathName(a_nPackId); if (strCompanySysDataPath.IsEmpty()) { // shouldn't happen, program manager param file pathname is empty, return false LogErrorTrace(__FILE__, __LINE__, _T("Load: failed to company system data pathname.")); return FALSE; } // company system data path exists? if (!COTSFileSys::Exists(strCompanySysDataPath)) { // company system data path doesn't exists, create it if (!COTSFileSys::CreateFolder(strCompanySysDataPath)) { // failed to create company system data path, can't go any further, return false LogErrorTrace(__FILE__, __LINE__, _T("Load: failed to create system path.")); return FALSE; } } //default value if (!Create(a_nPackId)) { // failed to create company system data path, can't go any further, return false LogErrorTrace(__FILE__, __LINE__, _T("Load: failed to create system file.")); return FALSE; } // save the program (preference) file if (!Save(a_nPackId)) { // failed to create LogErrorTrace(__FILE__, __LINE__, _T("Load: save program manager file failed.")); return FALSE; } } // ok, return true return TRUE; } void CRptParamFileMgr::SetRptParamFile(CRptParamFilePtr a_poRptParamFile) { ASSERT(a_poRptParamFile); if (!a_poRptParamFile) { LogErrorTrace(__FILE__, __LINE__, _T("SetRptParamFile: failed to set report param file.")); return; } m_poRptParamFile = CRptParamFilePtr(new CRptParamFile(a_poRptParamFile.get())); } BOOL CRptParamFileMgr::Create(OTS_SOFT_PACKAGE_ID a_nPackId) { // get software pack program data path CString strOTSProDataPathName = COTSFileSys::GetOTSPackProgDataPathName(a_nPackId); if (strOTSProDataPathName.IsEmpty()) { // shouldn't happen, software pack program data path is empty LogErrorTrace(__FILE__, __LINE__, _T("Create: failed to get software pack program data path.")); return FALSE; } // particle size level file folder m_poRptParamFile->SetSizeFileFolder(strOTSProDataPathName); // triangulation template file folder m_poRptParamFile->SetTrigTempFileFolder(strOTSProDataPathName); // report template file folder m_poRptParamFile->SetRptTempFileFolder(strOTSProDataPathName); // particle STD analysis file folder m_poRptParamFile->SetSTDFileFolder(strOTSProDataPathName); return TRUE; } void CRptParamFileMgr::Init() { m_poRptParamFile = CRptParamFilePtr(new CRptParamFile()); } }