| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- #include "stdafx.h"
- #include "TriTempFileMgr.h"
- #include "OTSFileSys.h"
- #include "OTSHelper.h"
- #include "COTSUtilityDllFunExport.h"
- namespace OTSMODEL {
- using namespace OTSDATA;
- // constructor
- CTriTempFileMgr::CTriTempFileMgr()
- {
- // initialization
- Init();
- }
- // copy constructor
- CTriTempFileMgr::CTriTempFileMgr(const CTriTempFileMgr& a_oSource)
- {
- // can't copy itself
- if (&a_oSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(a_oSource);
- }
- // copy constructor
- CTriTempFileMgr::CTriTempFileMgr(CTriTempFileMgr* a_poSource)
- {
- // can't copy itself
- if (a_poSource == this)
- {
- return;
- }
- // copy data over
- Duplicate(*a_poSource);
- }
- // =operator
- CTriTempFileMgr& CTriTempFileMgr::operator=(const CTriTempFileMgr& a_oSource)
- {
- // cleanup
- Cleanup();
- // copy the class data over
- Duplicate(a_oSource);
- // return class
- return *this;
- }
- // ==operator
- BOOL CTriTempFileMgr::operator==(const CTriTempFileMgr& a_oSource)
- {
- // members
- return *(m_poTriTempFile.get()) == *(a_oSource.m_poTriTempFile.get());
- }
- // destructor
- CTriTempFileMgr::~CTriTempFileMgr()
- {
- // cleanup
- Cleanup();
- }
- // public
- // Load/Save
- BOOL CTriTempFileMgr::Load(CString a_strPathName /*= _T("")*/, BOOL a_bClear /*= TRUE*/)
- {
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- // clear all data if necessary
- if (a_bClear)
- {
- Init();
- }
- // check file pathname
- a_strPathName.Trim();
- if (a_strPathName.IsEmpty())
- {
- // file open dialog
- CFileDialog dlg(TRUE, TRIA_TEMP_FILE_EXT, NULL, OFN_FILEMUSTEXIST, TRIA_TEMP_FILE_FILTER);
- if (dlg.DoModal() != IDOK)
- {
- return FALSE;
- }
- // get file pathname
- a_strPathName = dlg.GetPathName();
- }
- // open the particle analysis standard file
-
- // create a new triangle template point
- CTriTempFilePtr poTriTempFile = CTriTempFilePtr(new CTriTempFile());
- // create a loading archive
-
- tinyxml2::XMLDocument doc;
- doc.LoadFile(a_strPathName);//载入xml文件
- tinyxml2::XMLElement *rootNode;
- rootNode = doc.FirstChildElement(RootClassName);
- poTriTempFile->Serialize(false, &doc, rootNode);
- // file version
- CString strFileVersion = poTriTempFile->GetVersion();
- DWORD nFileVersion = COTSHelper::GetVersionFromString(strFileVersion);
- if (nFileVersion == 0)
- {
- // invalid file
- LogErrorTrace(__FILE__, __LINE__, _T("Load: invalid particle size level file %s"), a_strPathName);
- return FALSE;
- }
- m_poTriTempFile = poTriTempFile ;
- // file pathname
- m_strPathName = a_strPathName;
- // set file modify flag to FALSE
- m_bModify = FALSE;
- // ok, return TRUE
- return TRUE;
- }
- BOOL CTriTempFileMgr::Save(CString a_strPathName /*= _T("")*/)
- {
- AFX_MANAGE_STATE(AfxGetStaticModuleState());
- // check file pathname
- a_strPathName.Trim();
- if (a_strPathName.IsEmpty())
- {
- // file save as dialog
- CFileDialog dlg(FALSE, TRIA_TEMP_FILE_EXT, NULL, OFN_OVERWRITEPROMPT, TRIA_TEMP_FILE_FILTER);
- if (dlg.DoModal() != IDOK)
- {
- return FALSE;
- }
- // get file pathname
- a_strPathName = dlg.GetPathName();
- }
- // create the file
-
- tinyxml2::XMLDocument doc;
- doc.LoadFile(a_strPathName);//载入xml文件
- doc.Clear();
- tinyxml2::XMLDeclaration* declaration = doc.NewDeclaration();//添加xml文件头申明
- doc.InsertFirstChild(declaration);
- tinyxml2::XMLElement *rootNode;
- rootNode = doc.NewElement(RootClassName);
- doc.InsertEndChild(rootNode);
- m_poTriTempFile->Serialize(true, &doc, rootNode);
- int result = doc.SaveFile(a_strPathName);
- // file pathname
- m_strPathName = a_strPathName;
- // set file modify flag to FALSE
- m_bModify = FALSE;
- // ok, return TRUE
- return TRUE;
- }
- // part size items list
- void CTriTempFileMgr::SetTriTempItemList(CTriTempItemList& a_listTriTempItems, BOOL a_bClear/* = TRUE*/)
- {
- CTriTempItemList listTriTemp;
- ASSERT(m_poTriTempFile);
- if (!m_poTriTempFile)
- {
- LogErrorTrace(__FILE__, __LINE__, _T("SetTriTempItemList: invalid triangle template pointer."));
- return;
- }
- m_poTriTempFile->SetTriTempItemList(a_listTriTempItems, a_bClear);
- }
- CTriTempItemPtr CTriTempFileMgr::GetTriTempItemByIndex(int a_nIndex)
- {
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- if (a_nIndex < 0 || a_nIndex >(int)listTriTemp.size())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("GetTriTempItemByIndex: invalid index."));
- return nullptr;
- }
- CTriTempItemPtr pTriTempItem = CTriTempItemPtr(new CTriTempItem(*(listTriTemp[a_nIndex].get())));
- return pTriTempItem;
- }
- CTriTempItemPtr CTriTempFileMgr::GetTriTempItemByName(CString a_strName)
- {
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- // make sure there is no a same name item in the list
- auto itr = std::find_if(listTriTemp.begin(), listTriTemp.end(), [a_strName](CTriTempItemPtr& poPartSizeItem) { return poPartSizeItem->GetTemplateName().CompareNoCase(a_strName) == 0; });
- if (itr != listTriTemp.end())
- {
- // same name std item already in the list
- LogErrorTrace(__FILE__, __LINE__, _T("GetTriTempItemByName: can't find the same name in the list. name is %s"), a_strName);
- return FALSE;
- }
- CTriTempItemPtr pTriTemp = *itr;
- return CTriTempItemPtr(new CTriTempItem(*(pTriTemp.get())));
- }
- BOOL CTriTempFileMgr::DeleteTriTempItemByIndex(int a_nIndex)
- {
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- if (a_nIndex >= 0 && a_nIndex < (int)listTriTemp.size())
- {
- listTriTemp.erase(listTriTemp.begin() + a_nIndex);
- }
- SetTriTempItemList(listTriTemp);
- return TRUE;
- }
- BOOL CTriTempFileMgr::AddTriTempItem(CTriTempItemPtr a_poTriTempItem)
- {
- ASSERT(a_poTriTempItem);
- if (!a_poTriTempItem)
- {
- LogErrorTrace(__FILE__, __LINE__, _T("AddTriTempItem: empty triangle template item."));
- return FALSE;
- }
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- // make sure there is no a same name item in the list
- CString strName = a_poTriTempItem->GetTemplateName();
- auto itr = std::find_if(listTriTemp.begin(), listTriTemp.end(), [strName](CTriTempItemPtr& poTriTempItem) { return poTriTempItem->GetTemplateName().CompareNoCase(strName) == 0; });
- if (itr != listTriTemp.end())
- {
- // same name std item already in the list
- LogErrorTrace(__FILE__, __LINE__, _T("AddSTDItem: same name std item already in the list. %s"), strName);
- return FALSE;
- }
- listTriTemp.push_back(a_poTriTempItem);
- SetTriTempItemList(listTriTemp);
- return TRUE;
- }
- BOOL CTriTempFileMgr::InsertTriTempItem(int a_nIndex, CTriTempItemPtr a_poTriTempItem)
- {
- ASSERT(a_poTriTempItem);
- if (!a_poTriTempItem)
- {
- LogErrorTrace(__FILE__, __LINE__, _T("InsertTriTempItem: empty triangle template item."));
- return FALSE;
- }
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- if (a_nIndex < 0 || a_nIndex >(int)listTriTemp.size())
- {
- LogErrorTrace(__FILE__, __LINE__, _T("InsertTriTempItem: invalid index."));
- return FALSE;
- }
- // make sure there is no a same name item in the list
- CString strName = a_poTriTempItem->GetTemplateName();
- auto itr = std::find_if(listTriTemp.begin(), listTriTemp.end(), [strName](CTriTempItemPtr& poTriTempItem) { return poTriTempItem->GetTemplateName().CompareNoCase(strName) == 0; });
- if (itr != listTriTemp.end())
- {
- // same name std item already in the list
- LogErrorTrace(__FILE__, __LINE__, _T("InsertTriTempItem: same name triangle item already in the list. %s"), strName);
- return FALSE;
- }
- listTriTemp.insert(listTriTemp.begin() + a_nIndex, a_poTriTempItem);
- return TRUE;
- }
- BOOL CTriTempFileMgr::EditTriTempItem(int a_nIndex, CTriTempItemPtr a_poTriTempItem)
- {
- // input check
- ASSERT(a_poTriTempItem);
- if (!a_poTriTempItem)
- {
- // invalid std item pointer
- LogErrorTrace(__FILE__, __LINE__, _T("EditTriTempItem: invalid input triangle item pointer."));
- return FALSE;
- }
- // get part size items list
- CTriTempItemList listTriTemp = m_poTriTempFile->GetTriTempItemList();
- // check index value
- if (a_nIndex < 0 || a_nIndex >(int)listTriTemp.size())
- {
- // invalid index
- LogErrorTrace(__FILE__, __LINE__, _T("EditTriTempItem: invalid index."));
- return FALSE;
- }
- // make sure there is no a same name item in the list
- CString strName = a_poTriTempItem->GetTemplateName();
- if (a_nIndex > 0)
- {
- auto itr = std::find_if(listTriTemp.begin(), listTriTemp.begin() + a_nIndex - 1, [strName](CTriTempItemPtr& poTriTempItem) { return poTriTempItem->GetTemplateName().CompareNoCase(strName) == 0; });
- if (itr != listTriTemp.end())
- {
- // same name item already in the list
- LogErrorTrace(__FILE__, __LINE__, _T("EditTriTempItem: same name triangle template item already in the list. %s"), strName);
- return FALSE;
- }
- }
- else if (a_nIndex != (int)listTriTemp.size() - 1)
- {
- auto itr = std::find_if(listTriTemp.begin() + a_nIndex + 1, listTriTemp.end(), [strName](CTriTempItemPtr& poTriTempItem) { return poTriTempItem->GetTemplateName().CompareNoCase(strName) == 0; });
- if (itr != listTriTemp.end())
- {
- // same name std item already in the list
- LogErrorTrace(__FILE__, __LINE__, _T("EditSTDItem: same name std item already in the list. %s"), strName);
- return FALSE;
- }
- }
- // replace the part size item
- *(listTriTemp[a_nIndex].get()) = *(a_poTriTempItem.get());
- // ok, return TRUE
- return TRUE;
- }
- void CTriTempFileMgr::SetTriTempFile(CTriTempFilePtr a_poTriTempFile)
- {
- ASSERT(a_poTriTempFile);
- if (!a_poTriTempFile)
- {
- LogErrorTrace(__FILE__, __LINE__, _T("SetPartSizeFile: empty triangle template file pointer."));
- return;
- }
- m_poTriTempFile = CTriTempFilePtr(new CTriTempFile(*a_poTriTempFile.get()));
- }
- // protected
- // cleanup
- void CTriTempFileMgr::Cleanup()
- {
- // need to do nothing at the moment
- }
- // initialization
- void CTriTempFileMgr::Init()
- {
- // initialization
- m_strPathName = _T("");
- m_bModify = FALSE;
- m_poTriTempFile = CTriTempFilePtr(new CTriTempFile());
- }
- // duplication
- void CTriTempFileMgr::Duplicate(const CTriTempFileMgr& a_oSource)
- {
- // initialization
- Init();
- // copy data over
- m_strPathName = a_oSource.m_strPathName;
- m_bModify = a_oSource.m_bModify;
- m_poTriTempFile = CTriTempFilePtr(new CTriTempFile(a_oSource.m_poTriTempFile.get()));
- }
-
- }
|