Index: src/libchcore/TTaskDefinition.cpp =================================================================== diff -u -N -rc3e925d02d72f7e70178520c58c2a870f11cbbdc -r503a68180cbb933c97e9af965744bf106994c05a --- src/libchcore/TTaskDefinition.cpp (.../TTaskDefinition.cpp) (revision c3e925d02d72f7e70178520c58c2a870f11cbbdc) +++ src/libchcore/TTaskDefinition.cpp (.../TTaskDefinition.cpp) (revision 503a68180cbb933c97e9af965744bf106994c05a) @@ -172,6 +172,11 @@ TConfig tTaskInfo; tTaskInfo.Read(strPath.ToString()); + Load(tTaskInfo, false); +} + +void TTaskDefinition::Load(const TConfig& rDataSrc, bool bAllowEmptyDstPath) +{ // clear everything m_strTaskName.Clear(); m_vSourcePaths.Clear(); @@ -184,7 +189,7 @@ // get information from config file // task unique id - use if provided, generate otherwise - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.UniqueID"), m_strTaskName) || m_strTaskName.IsEmpty()) + if (!GetConfigValue(rDataSrc, _T("TaskDefinition.UniqueID"), m_strTaskName) || m_strTaskName.IsEmpty()) { boost::uuids::random_generator gen; boost::uuids::uuid u = gen(); @@ -195,29 +200,29 @@ // basic information // source paths to be processed - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths) || m_vSourcePaths.IsEmpty()) + if (!GetConfigValue(rDataSrc, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths) || m_vSourcePaths.IsEmpty()) THROW_CORE_EXCEPTION(eErr_MissingXmlData); - GetConfigValue(tTaskInfo, _T("TaskDefinition.Filters"), m_afFilters); + GetConfigValue(rDataSrc, _T("TaskDefinition.Filters"), m_afFilters); // destination path - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || m_pathDestinationPath.IsEmpty()) + if (!GetConfigValue(rDataSrc, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || (!bAllowEmptyDstPath && m_pathDestinationPath.IsEmpty())) THROW_CORE_EXCEPTION(eErr_MissingXmlData); m_pathDestinationPath.AppendSeparatorIfDoesNotExist(); // type of the operation int iOperation = eOperation_None; - if(!tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation)) + if (!rDataSrc.GetValue(_T("TaskDefinition.OperationType"), iOperation)) THROW_CORE_EXCEPTION(eErr_MissingXmlData); - m_tOperationPlan.SetOperationType((EOperationType)iOperation); + m_tOperationPlan.SetOperationType((EOperationType) iOperation); // and version of the task - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.Version"), m_ullTaskVersion)) + if (!GetConfigValue(rDataSrc, _T("TaskDefinition.Version"), m_ullTaskVersion)) THROW_CORE_EXCEPTION(eErr_MissingXmlData); - if(m_ullTaskVersion < CURRENT_TASK_VERSION) + if (m_ullTaskVersion < CURRENT_TASK_VERSION) { // migrate the task to the newer version // (nothing to migrate at this point, since 1.40 is the first release with xml-based tasks). @@ -226,102 +231,58 @@ m_ullTaskVersion = CURRENT_TASK_VERSION; m_bModified = true; } - else if(m_ullTaskVersion > CURRENT_TASK_VERSION) + else if (m_ullTaskVersion > CURRENT_TASK_VERSION) THROW_CORE_EXCEPTION(eErr_UnsupportedVersion); - tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); + rDataSrc.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); } -void TTaskDefinition::StoreInString(TString& strOutput) +void TTaskDefinition::LoadFromString(const TString& strInput, bool bAllowEmptyDstPath) { // read everything TConfig tTaskInfo; + tTaskInfo.ReadFromString(strInput); - // get information from config file - // task unique id - use if provided, generate otherwise - SetConfigValue(tTaskInfo, _T("TaskDefinition.UniqueID"), m_strTaskName); + Load(tTaskInfo, bAllowEmptyDstPath); +} - // basic information - SetConfigValue(tTaskInfo, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths); - SetConfigValue(tTaskInfo, _T("TaskDefinition.Filters"), m_afFilters); - SetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath); +void TTaskDefinition::StoreInString(TString& strOutput) +{ + TConfig tTaskInfo; + Store(tTaskInfo); - int iOperation = m_tOperationPlan.GetOperationType(); - SetConfigValue(tTaskInfo, _T("TaskDefinition.OperationType"), iOperation); - - SetConfigValue(tTaskInfo, _T("TaskDefinition.Version"), m_ullTaskVersion); - - tTaskInfo.PutSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); - tTaskInfo.WriteToString(strOutput); } -void TTaskDefinition::LoadFromString(const TString& strInput, bool bAllowEmptyDstPath) +void chcore::TTaskDefinition::Store(const TSmartPath& strPath) const { - // read everything TConfig tTaskInfo; - tTaskInfo.ReadFromString(strInput); + Store(tTaskInfo); - // clear everything - m_strTaskName.Clear(); - m_vSourcePaths.Clear(); - m_pathDestinationPath.Clear(); + tTaskInfo.SetFilePath(strPath.ToString()); + tTaskInfo.Write(); +} - m_tConfiguration.Clear(); - - m_bModified = false; - +void chcore::TTaskDefinition::Store(TConfig& rConfig) const +{ // get information from config file // task unique id - use if provided, generate otherwise - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.UniqueID"), m_strTaskName) || m_strTaskName.IsEmpty()) - { - boost::uuids::random_generator gen; - boost::uuids::uuid u = gen(); - m_strTaskName = boost::lexical_cast(u).c_str(); + SetConfigValue(rConfig, _T("TaskDefinition.UniqueID"), m_strTaskName); - m_bModified = true; - } - // basic information - // source paths to be processed - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths) || m_vSourcePaths.IsEmpty()) - THROW_CORE_EXCEPTION(eErr_MissingXmlData); + SetConfigValue(rConfig, _T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths); + SetConfigValue(rConfig, _T("TaskDefinition.Filters"), m_afFilters); + SetConfigValue(rConfig, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath); - GetConfigValue(tTaskInfo, _T("TaskDefinition.Filters"), m_afFilters); + int iOperation = m_tOperationPlan.GetOperationType(); + SetConfigValue(rConfig, _T("TaskDefinition.OperationType"), iOperation); - // destination path - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.DestinationPath"), m_pathDestinationPath) || (!bAllowEmptyDstPath && m_pathDestinationPath.IsEmpty())) - THROW_CORE_EXCEPTION(eErr_MissingXmlData); + SetConfigValue(rConfig, _T("TaskDefinition.Version"), m_ullTaskVersion); - if(!m_pathDestinationPath.IsEmpty()) - m_pathDestinationPath.AppendSeparatorIfDoesNotExist(); - - // type of the operation - int iOperation = eOperation_None; - if(!tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation)) - THROW_CORE_EXCEPTION(eErr_MissingXmlData); - - m_tOperationPlan.SetOperationType((EOperationType)iOperation); - - // and version of the task - if(!GetConfigValue(tTaskInfo, _T("TaskDefinition.Version"), m_ullTaskVersion)) - THROW_CORE_EXCEPTION(eErr_MissingXmlData); - - if(m_ullTaskVersion < CURRENT_TASK_VERSION) - { - // migrate the task to the newer version - // (nothing to migrate at this point, since 1.40 is the first release with xml-based tasks). - - // then mark it as a newest version task - m_ullTaskVersion = CURRENT_TASK_VERSION; - m_bModified = true; - } - else if(m_ullTaskVersion > CURRENT_TASK_VERSION) - THROW_CORE_EXCEPTION(eErr_UnsupportedVersion); - - tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); + rConfig.PutSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); } + const TFileFiltersArray& TTaskDefinition::GetFilters() const { return m_afFilters;