| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 | #include "stdafx.h"#include "STDFileMgr.h"#include "OTSFileSys.h"//#include "OTSHelper.h"namespace OTSClassifyEngine {	const CString strInclutionPathName = ".\\Config\\SysData\\IncSysLib\\IncASTDData.db";	// constructor	CSTDFileMgr::CSTDFileMgr()	{		// initialization		void Init();	}	// destructor	CSTDFileMgr::~CSTDFileMgr()	{		// cleanup		Cleanup();	}	// public	BOOL CSTDFileMgr::CreateSTDFile()	{		// check file name		m_strPathName.Trim();		if (m_strPathName.IsEmpty())		{			// error, wrong file name			LogErrorTrace(__FILE__, __LINE__, _T("Empty file path name"));			ASSERT(FALSE);			return FALSE;		}		// get database name		CString sDatabaseName = GetPathName();		if (OTSTools::COTSFileSys::Exists(sDatabaseName))		{			if (!Open(m_strPathName, FALSE))			{				LogErrorTrace(__FILE__, __LINE__, _T("Open STD file failed."));				ASSERT(FALSE);				return FALSE;			}		}		else		{			if (!Create(m_strPathName))			{				LogErrorTrace(__FILE__, __LINE__, _T("Create X-ray file failed."));				ASSERT(FALSE);				return FALSE;			}		}		return TRUE;	}	// Load/Save	BOOL CSTDFileMgr::Load(BOOL a_bClear /*= TRUE*/)	{		CString a_strPathName=strInclutionPathName;		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, STD_FILE_EXT, NULL, OFN_FILEMUSTEXIST, STD_FILE_FILTER);			if (dlg.DoModal() != IDOK)			{				return FALSE;			}			// get file pathname			a_strPathName = dlg.GetPathName();		}		// file pathname		m_strPathName = a_strPathName;		if (!CreateSTDFile())		{			LogErrorTrace(__FILE__, __LINE__, _T("Create or open STD file failed."));			return FALSE;		}		if (!GetListSTDItem())		{			LogErrorTrace(__FILE__, __LINE__, _T("Get STD Item list failed."));			return FALSE;		}		// ok, return TRUE		return TRUE;	}	void CSTDFileMgr::SetSTDItemList(CSTDItemsList& a_listSTDItem, BOOL a_bClear)	{		// clear holes list if necessary		if (a_bClear)		{			m_listSTDItem.clear();		}		// copy the list		for (auto pSTDItem : a_listSTDItem)		{			//CSTDItemPtr pSTDItemNew = CSTDItemPtr(new CSTDItem(*pSTDItem.get()));			m_listSTDItem.push_back(pSTDItem);		}	}	//add code by 2018-12-7	CInclutionSTDDataPtr CSTDFileMgr::GetSysSTDLibByType(SYS_STD_TYPE a_nIdentifyType)	{		CSTDFileMgrPtr m_poSTDFileMgr = CSTDFileMgrPtr(new CSTDFileMgr());		ASSERT(m_poSTDFileMgr);		CInclutionSTDDataPtr a_pSTDlib;		switch (a_nIdentifyType)		{		case SYS_STD_TYPE::GENERAL:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL1:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL2:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL3:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL4:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL5:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL6:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		case SYS_STD_TYPE::SPECIAL7:			a_pSTDlib = m_poSTDFileMgr->GenerateSTDLib(IDENTIFY_KIND::ALL);			break;		default:			//error log			break;		}		ASSERT(a_pSTDlib);		if (!a_pSTDlib)		{			//error log		}		return a_pSTDlib;	}		CInclutionSTDDataPtr CSTDFileMgr::GenerateSTDLib(IDENTIFY_KIND a_nIdentifyKind)	{		CInclutionSTDDataPtr pPartSTDData = CInclutionSTDDataPtr(new CInclutionSTDData());		if (a_nIdentifyKind < IDENTIFY_KIND::MIN || a_nIdentifyKind > IDENTIFY_KIND::MAX)		{			return nullptr;		}		if (m_listSTDItem.empty())		{			LogErrorTrace(__FILE__, __LINE__, _T("GenerateSTDLib: system STD lib data is empty."));			return nullptr;		}			CSTDItemsList listSTDItems;			if (!((int)a_nIdentifyKind == (int)IDENTIFY_KIND::ALL))			{				for (auto Item : m_listSTDItem)				{					int nSTDId = Item->GetSTDId();					int nStartId = (int)STD_START_ID + 100 * ((int)a_nIdentifyKind - 1) + 1;					int nStopId = (int)STD_START_ID + 100 * (int)a_nIdentifyKind;					if (nSTDId >= nStartId && nSTDId <= nStopId)					{						CSTDItemPtr newItem = CSTDItemPtr(new CSTDItem(*Item.get()));						listSTDItems.push_back(newItem);					}				}			}			else			{				for (auto Item : m_listSTDItem)				{					CSTDItemPtr newItem = CSTDItemPtr(new CSTDItem(*Item.get()));					listSTDItems.push_back(newItem);									}			}			pPartSTDData->SetSTDItemsList(listSTDItems, TRUE);				// version		CString strVersion = PART_STD_FILE_VERSION;		pPartSTDData->SetFileVersion(strVersion);		CString strName = _T("");		switch ((int)a_nIdentifyKind)		{		case (int)IDENTIFY_KIND::ALL:			strName = STD_FILE_SYS_ALL;			break;		case (int)IDENTIFY_KIND::SIMPLE_OXIDE:			strName = STD_FILE_SYS_SIMPLE_OXIDE;			break;		case (int)IDENTIFY_KIND::COMPLEX_OXIDE:			strName = STD_FILE_SYS_COMPLEX_OXIDE;			break;		case (int)IDENTIFY_KIND::SULFIDE:			strName = STD_FILE_SYS_SULFIDE;			break;		case (int)IDENTIFY_KIND::NITRIDES:			strName = STD_FILE_SYS_NITRIDES;			break;		}		pPartSTDData->SetName(strName);		//CElementsList m_listElements;		//not used at this moment		return pPartSTDData;	}	BOOL CSTDFileMgr::GetListSTDItem()	{		//get x-ray info list		CSTDItemsList listInfo;		listInfo.clear();		if (!GetListSTDItem(listInfo))		{			LogErrorTrace(__FILE__, __LINE__, _T("GetListSTDItem: get STD item list failed."));			return FALSE;		}		if (listInfo.empty())		{			LogErrorTrace(__FILE__, __LINE__, _T("GetListSTDItem: get STD item list failed."));			return FALSE;		}		for (auto pInfo : listInfo)		{			//get x-ray data			CSTDItemPtr pItem = CSTDItemPtr(new CSTDItem(*pInfo.get()));						const long a_STDId = pInfo->GetSTDId();						if (!GetSTDData(a_STDId, pItem))			{				LogErrorTrace(__FILE__, __LINE__, _T("GetXrayList: get STD item data failed."));				return FALSE;			}			//get element list			/*long nElementSize = pInfo->GetElementRange();			if (nElementSize == 0)			{				m_listSTDItem.push_back(pItem);				continue;			}*/			/*CElementRangeList listElementRange;			if (!GetElementRange(a_STDId, nElementSize, listElementRange))			{				LogErrorTrace(__FILE__, __LINE__, _T("GetXrayList: get x-ray data failed."));				return FALSE;			}			pItem->SetElementRangeList(listElementRange);*/						m_listSTDItem.push_back(pItem);		}		return TRUE;	}	//Get XrayInfoList	BOOL CSTDFileMgr::GetListSTDItem(CSTDItemsList& a_listSTDItem)	{		auto STDDataDB = GetSTDDataDB();		if (!STDDataDB)		{			LogErrorTrace(__FILE__, __LINE__, _T("Failed to open STD data table"));			ASSERT(FALSE);			return FALSE;		}		a_listSTDItem = STDDataDB->GetSTDItemList(FALSE);		return TRUE;	}	/*BOOL CSTDFileMgr::GetElementRange(const long a_nSTDId, const long a_nElementSize, CElementRangeList& a_listElementRange)	{		auto ElementRangeDB = GetElementRangeDB();		if (!ElementRangeDB)		{			LogErrorTrace(__FILE__, __LINE__, _T("Failed to open element range table"));			ASSERT(FALSE);			return FALSE;		}		a_listElementRange.clear();		a_listElementRange = ElementRangeDB->GetElementRangeListById(a_nSTDId, a_nElementSize);		return TRUE;	}*/	BOOL CSTDFileMgr::GetSTDData(const long a_nSTDId, CSTDItemPtr a_pSTDItem)	{		ASSERT(a_pSTDItem);		if (!a_pSTDItem)		{			LogErrorTrace(__FILE__, __LINE__, _T("Invalid STD data point."));			return FALSE;		}		auto STDDataDB = GetSTDDataDB();		if (!STDDataDB)		{			LogErrorTrace(__FILE__, __LINE__, _T("Failed to open STD data table"));			ASSERT(FALSE);			return FALSE;		}		a_pSTDItem = STDDataDB->GetSTDItemById(a_nSTDId);			return TRUE;	}	CSTDDataDBPtr CSTDFileMgr::GetSTDDataDB()	{		if (!m_pSTDDataDB)		{			auto datastorePtr = GetDatastore();			if (datastorePtr)			{				m_pSTDDataDB = std::make_shared<CSTDDataDB>(datastorePtr);			}		}		ASSERT(m_pSTDDataDB);		return m_pSTDDataDB;	}	/*CElementRangeDBPtr CSTDFileMgr::GetElementRangeDB()	{		if (!m_pElementRangeDB)		{			auto datastorePtr = GetDatastore();			if (datastorePtr)			{				m_pElementRangeDB = std::make_shared<CElementRangeDB>(datastorePtr);			}		}		ASSERT(m_pElementRangeDB);		return m_pElementRangeDB;	}*/		// cleanup 	void CSTDFileMgr::Cleanup()	{		// need to do nothing at the moment		m_listSTDItem.clear();	}	// initialization	void CSTDFileMgr::Init()	{		// initialization		m_listSTDItem.clear();	}	// duplication 	void CSTDFileMgr::Duplicate(const CSTDFileMgr& a_oSource)	{		// initialization		Init();		// copy data over		for (auto pSTDItem : a_oSource.m_listSTDItem)		{			CSTDItemPtr pSTDItemNew = CSTDItemPtr(new CSTDItem(*pSTDItem.get()));			m_listSTDItem.push_back(pSTDItemNew);		}	}}
 |