Index: src/ch/TTaskDefinition.cpp =================================================================== diff -u -rca1933ef07e18d939449e4878eca5cc81cc73f3f -r1d7d79169d480a02e335b8b0a4919f9c78d58325 --- src/ch/TTaskDefinition.cpp (.../TTaskDefinition.cpp) (revision ca1933ef07e18d939449e4878eca5cc81cc73f3f) +++ src/ch/TTaskDefinition.cpp (.../TTaskDefinition.cpp) (revision 1d7d79169d480a02e335b8b0a4919f9c78d58325) @@ -28,81 +28,99 @@ #include "TTaskDefinition.h" TTaskDefinition::TTaskDefinition() : - m_bNeedsSaving(false), + m_bModified(false), m_strTaskUniqueID() { boost::uuids::random_generator gen; boost::uuids::uuid u = gen(); - m_strTaskUniqueID = boost::lexical_cast(u); + m_strTaskUniqueID = boost::lexical_cast(u).c_str(); } +TTaskDefinition::TTaskDefinition(const TTaskDefinition& rSrc) : + m_strTaskUniqueID(rSrc.m_strTaskUniqueID), + m_vSourcePaths(rSrc.m_vSourcePaths), + m_strDestinationPath(rSrc.m_strDestinationPath), + m_tOperationPlan(rSrc.m_tOperationPlan), + m_tConfiguration(rSrc.m_tConfiguration), + m_bModified(rSrc.m_bModified) +{ +} + TTaskDefinition::~TTaskDefinition() { } -// initialize object with data (get/set, from cfg file?, from string(cmd line options)) -void TTaskDefinition::AddSourcePath(const CString& strPath) +TTaskDefinition& TTaskDefinition::operator=(const TTaskDefinition& rSrc) { - CClipboardEntryPtr spEntry(boost::make_shared()); - spEntry->SetPath(strPath); + if(this != &rSrc) + { + m_strTaskUniqueID = rSrc.m_strTaskUniqueID; + m_vSourcePaths = rSrc.m_vSourcePaths; + m_strDestinationPath = rSrc.m_strDestinationPath; + m_tOperationPlan = rSrc.m_tOperationPlan; + m_tConfiguration = rSrc.m_tConfiguration; + m_bModified = rSrc.m_bModified; + } - m_arrSourcePaths.Add(spEntry); + return *this; } -CString TTaskDefinition::GetSourcePathNameAt(size_t stIndex) const +// Task unique id +CString TTaskDefinition::GetTaskUniqueID() const { - CClipboardEntryPtr spEntry = m_arrSourcePaths.GetAt(stIndex); - if(spEntry) - return spEntry->GetPath(); - return CString(); + return m_strTaskUniqueID; } -CClipboardEntryPtr TTaskDefinition::GetSourcePathAt(size_t stIndex) const +// Source paths +// initialize object with data (get/set, from cfg file?, from string(cmd line options)) +void TTaskDefinition::AddSourcePath(const CString& strPath) { - CClipboardEntryPtr spEntry = m_arrSourcePaths.GetAt(stIndex); - return spEntry; + m_vSourcePaths.push_back(strPath); + m_bModified = true; } +CString TTaskDefinition::GetSourcePathAt(size_t stIndex) const +{ + return m_vSourcePaths.at(stIndex); +} + size_t TTaskDefinition::GetSourcePathCount() const { - return m_arrSourcePaths.GetSize(); + return m_vSourcePaths.size(); } void TTaskDefinition::ClearSourcePaths() { - m_arrSourcePaths.RemoveAll(); + m_vSourcePaths.clear(); + m_bModified = true; } -const CClipboardArray& TTaskDefinition::GetSourcePaths() const +const std::vector& TTaskDefinition::GetSourcePaths() const { - return m_arrSourcePaths; + return m_vSourcePaths; } +// Destination path void TTaskDefinition::SetDestinationPath(const CString& strPath) { - m_tDestinationPath.SetPath(strPath); + m_strDestinationPath = strPath; + if(m_strDestinationPath.Right(1) != _T("\\")) + m_strDestinationPath += _T("\\"); + m_bModified = true; } CString TTaskDefinition::GetDestinationPath() const { - return m_tDestinationPath.GetPath(); + return m_strDestinationPath; } -const CDestPath& TTaskDefinition::GetDestPath() const -{ - return m_tDestinationPath; -} - +// Operation type void TTaskDefinition::SetOperationType(EOperationType eOperation) { m_tOperationPlan.SetOperationType(eOperation); + m_bModified = true; } -CString TTaskDefinition::GetTaskUniqueID() const -{ - return m_strTaskUniqueID.c_str(); -} - EOperationType TTaskDefinition::GetOperationType() const { return m_tOperationPlan.GetOperationType(); @@ -113,12 +131,87 @@ return m_tOperationPlan; } -TTaskConfiguration& TTaskDefinition::GetConfiguration() +// Task configuration +void TTaskDefinition::SetConfig(const TConfig& rConfig) { - return m_tOperationConfiguration; + m_tConfiguration = rConfig; + m_bModified = true; } -const TTaskConfiguration& TTaskDefinition::GetConfiguration() const +TConfig& TTaskDefinition::GetConfiguration() { - return m_tOperationConfiguration; + return m_tConfiguration; } + +const TConfig& TTaskDefinition::GetConfiguration() const +{ + return m_tConfiguration; +} + +// Serialization +void TTaskDefinition::Load(const CString& strPath) +{ + // read everything + TConfig tTaskInfo; + tTaskInfo.Read(strPath); + + // clear everything + m_strTaskUniqueID.Empty(); + m_vSourcePaths.clear(); + m_strDestinationPath.Empty(); + + m_tConfiguration.Clear(); + + m_bModified = false; + + // get information from config file + // task unique id - use if provided, generate otherwise + tTaskInfo.GetValue(_T("TaskDefinition.UniqueID"), m_strTaskUniqueID, _T("")); + if(m_strTaskUniqueID.IsEmpty()) + { + boost::uuids::random_generator gen; + boost::uuids::uuid u = gen(); + m_strTaskUniqueID = boost::lexical_cast(u).c_str(); + + m_bModified = true; + } + + // basic information + tTaskInfo.GetValue(_T("TaskDefinition.SourcePaths"), m_vSourcePaths); + tTaskInfo.GetValue(_T("TaskDefinition.DestinationPath"), m_strDestinationPath, _T("")); + if(m_strDestinationPath.Right(1) != _T("\\")) + m_strDestinationPath += _T("\\"); + + int iOperation = eOperation_None; + tTaskInfo.GetValue(_T("TaskDefinition.OperationType"), iOperation, eOperation_None); + m_tOperationPlan.SetOperationType((EOperationType)iOperation); + + tTaskInfo.ExtractSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); +} + +void TTaskDefinition::Store(const CString& strPath, bool bOnlyIfModified) +{ + if(!bOnlyIfModified || m_bModified || m_tConfiguration.IsModified()) + { + // read everything + TConfig tTaskInfo; + tTaskInfo.SetFilePath(strPath); + + // get information from config file + // task unique id - use if provided, generate otherwise + tTaskInfo.SetValue(_T("TaskDefinition.UniqueID"), m_strTaskUniqueID); + + // basic information + tTaskInfo.SetValue(_T("TaskDefinition.SourcePaths.Path"), m_vSourcePaths); + tTaskInfo.SetValue(_T("TaskDefinition.DestinationPath"), m_strDestinationPath); + + int iOperation = m_tOperationPlan.GetOperationType(); + tTaskInfo.SetValue(_T("TaskDefinition.OperationType"), iOperation); + + tTaskInfo.PutSubConfig(_T("TaskDefinition.TaskSettings"), m_tConfiguration); + + tTaskInfo.Write(); + + m_bModified = false; + } +}