diff --git a/MachMgr.h b/MachMgr.h index 732a125..0bfddae 100644 --- a/MachMgr.h +++ b/MachMgr.h @@ -191,7 +191,7 @@ class MachMgr : public IMachMgr bool TdbGetToolDir( std::string& sToolDir) const override ; bool TdbGetToolHolderDir( std::string& sTHolderDir) const override ; bool TdbExport( const STRVECTOR& vsToolsNames, const std::string& sOutFile) const override ; - bool TdbToBeImported( const std::string& sFile, STRVECTOR& vsToolNames) const override ; + bool TdbToBeImported( const std::string& sFile, STRVECTOR& vsToolNames, INTVECTOR& vToolsTypes) const override; bool TdbImport( const std::string& sFile, const STRVECTOR& vsToolsToImport, const STRVECTOR& vsToolsNames, STRVECTOR& vsImported) override ; // Setup int GetCurrSetup( void) const override ; diff --git a/MachMgrDBTools.cpp b/MachMgrDBTools.cpp index 1ff0ac6..a85694a 100644 --- a/MachMgrDBTools.cpp +++ b/MachMgrDBTools.cpp @@ -844,7 +844,7 @@ MachMgr::TdbExport( const STRVECTOR& vsToolsNames, const string& sOutFile) const //---------------------------------------------------------------------------- bool -MachMgr::TdbToBeImported( const string& sFile, STRVECTOR& vsToolsNames) const +MachMgr::TdbToBeImported( const string& sFile, STRVECTOR& vsToolsNames, INTVECTOR& vToolsTypes) const { if ( ! ExistsFile( sFile)){ LOG_ERROR( GetEMkLogger(), "TdbToBeImported Error : File does not exist") ; @@ -858,7 +858,7 @@ MachMgr::TdbToBeImported( const string& sFile, STRVECTOR& vsToolsNames) const return false ; } - return pTsMgr->ToBeImported( sFile, vsToolsNames) ; + return pTsMgr->ToBeImported( sFile, vsToolsNames, vToolsTypes) ; } diff --git a/ToolsMgr.cpp b/ToolsMgr.cpp index ac3fd48..b9c575c 100644 --- a/ToolsMgr.cpp +++ b/ToolsMgr.cpp @@ -794,7 +794,7 @@ ToolsMgr::GetCurrToolThLength( double& dThLen) const bool ToolsMgr::Export( const STRVECTOR& vsToolsNames, const string& sOutFile, bool bCompressed) { - LOG_ERROR( GetEMkLogger(), ( "Export Tools " + sOutFile).c_str()) ; + LOG_INFO( GetEMkLogger(), ( "Export Tools " + sOutFile).c_str()) ; // Out Directory size_t pos = sOutFile.rfind( "\\") ; @@ -901,7 +901,7 @@ ToolsMgr::ExportOneTool( const string& sToolName, Writer& TheWriter, const int& //---------------------------------------------------------------------------- bool -ToolsMgr::ToBeImported( const string& sFile, STRVECTOR& vsToolsNames) +ToolsMgr::ToBeImported( const string& sFile, STRVECTOR& vsToolsNames, INTVECTOR& vToolsTypes) { Scanner TheScanner ; if ( ! TheScanner.Init( sFile, ";")) { @@ -925,29 +925,52 @@ ToolsMgr::ToBeImported( const string& sFile, STRVECTOR& vsToolsNames) return false ; bool bToolName = false ; - bool bRemoved = false ; - // cerco i nomi di tutti i tool del file + bool bToolType = false ; + bool bAdd = true ; + string sName, sType ; + while ( TheScanner.GetLine( sLine)) { if ( sLine.front() == '[' && sLine.back() == ']') { // se è intestazione + // aggiungo tool precedente se ok + if ( bAdd && bToolType && bToolName){ + vsToolsNames.push_back( sName) ; + vToolsTypes.push_back( stoi( sType)) ; + } bToolName = false ; - bRemoved = false ; + bToolType = false ; + bAdd = true ; } else { string sKey, sVal ; - SplitFirst( sLine, "=", sKey, sVal) ; + SplitFirst( sLine, "=", sKey, sVal) ; + if ( ToUpper( sKey) == "TYP") { + if ( ! bToolType) { + bToolType = true ; + sType = sVal ; + } + else // se tool ha più types è errore, non potrà essere importato + bAdd = false ; + } if( ToUpper( sKey) == "NAME") { if ( ! bToolName){ bToolName = true ; - vsToolsNames.push_back( sVal) ; - } - else if ( ! bRemoved) { // se tool ha più nomi è errore, lo elimino dal vettore - vsToolsNames.pop_back() ; - bRemoved = true ; + sName = sVal ; } + else // se tool ha più nomi è errore, non potrà essere importato + bAdd = false ; } } } + // aggiungo ultimo tool se ok + if ( bAdd && bToolType && bToolName) { + vsToolsNames.push_back( sName) ; + vToolsTypes.push_back( stoi( sType)) ; + } + + if ( vsToolsNames.size() != vToolsTypes.size()) + return false ; + return true ; } @@ -955,15 +978,19 @@ ToolsMgr::ToBeImported( const string& sFile, STRVECTOR& vsToolsNames) bool ToolsMgr::Import( const string& sFile, const STRVECTOR& vsToolsToImport, const STRVECTOR& vsToolsNames, STRVECTOR& vsImported) { - LOG_ERROR( GetEMkLogger(), ( "Import Tools : " + sFile).c_str()) ; + LOG_INFO( GetEMkLogger(), ( "Import Tools : " + sFile).c_str()) ; - // Verifico validità dei ToolsNames - for ( size_t i = 0 ; i < vsToolsNames.size() ; i ++) { - if ( m_suData.find( vsToolsNames[i]) != m_suData.end()){ - LOG_ERROR( GetEMkLogger(), ( " Error : name \"" + vsToolsNames[i] + "\" is already used").c_str()) ; - return false ; + for ( size_t i = 0 ; i < vsToolsNames.size() ; i ++) { + // Se esiste già nel DB un utensile con lo stesso nome lo rimuovo + if ( m_suData.find( vsToolsNames[i]) != m_suData.end()) { + bool bOk = RemoveTool( vsToolsNames[i]) ; + if ( ! bOk){ + LOG_ERROR( GetEMkLogger(), ( " Error removing " + vsToolsNames[i]).c_str()) ; + return false ; + } } - if ( i != vsToolsNames.size() - 1 && find( vsToolsNames.begin() + i + 1, vsToolsNames.end(), vsToolsNames[i]) != vsToolsNames.end()){ + // Verfico che il nome non sia ripetuto nella lista dei vsToolsNames + if ( i != vsToolsNames.size() - 1 && find( vsToolsNames.begin() + i + 1, vsToolsNames.end(), vsToolsNames[i]) != vsToolsNames.end()) { LOG_ERROR( GetEMkLogger(), ( " Error : name \"" + vsToolsNames[i] + "\" is already used").c_str()) ; return false ; } diff --git a/ToolsMgr.h b/ToolsMgr.h index 08d6246..8dba009 100644 --- a/ToolsMgr.h +++ b/ToolsMgr.h @@ -62,7 +62,7 @@ class ToolsMgr const ToolData* GetCurrTool(void) const { return (m_bCurrTool ? &m_tdCurrTool : nullptr) ; } bool Export( const STRVECTOR& vsToolsNames, const std::string& sOutFile, bool bCompressed = true) ; - bool ToBeImported( const std::string& sFile, STRVECTOR& vsToolsNames) ; + bool ToBeImported( const std::string& sFile, STRVECTOR& vsToolsNames, INTVECTOR& vToolsTypes) ; bool Import( const std::string& sFile, const STRVECTOR& vsToolsToImport, const STRVECTOR& vsToolsNames, STRVECTOR& vsImported) ; private :