mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
2.8 KiB
173 lines
2.8 KiB
#pragma once
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
#include <AdsiHelpers.h>
|
|
#include "VarSetBase.h"
|
|
|
|
|
|
class CFixObjectsInHierarchy
|
|
{
|
|
public:
|
|
|
|
CFixObjectsInHierarchy();
|
|
~CFixObjectsInHierarchy();
|
|
|
|
_bstr_t GetObjectType() const
|
|
{
|
|
return m_strObjectType;
|
|
}
|
|
|
|
void SetObjectType(LPCTSTR pszType)
|
|
{
|
|
m_strObjectType = pszType;
|
|
}
|
|
|
|
bool GetFixReplaced() const
|
|
{
|
|
return m_bFixReplaced;
|
|
}
|
|
|
|
void SetFixReplaced(bool bFix)
|
|
{
|
|
m_bFixReplaced = bFix;
|
|
}
|
|
|
|
_bstr_t GetSourceContainerPath() const
|
|
{
|
|
return m_strSourceContainerPath;
|
|
}
|
|
|
|
void SetSourceContainerPath(_bstr_t strPath)
|
|
{
|
|
m_strSourceContainerPath = strPath;
|
|
}
|
|
|
|
_bstr_t GetTargetContainerPath() const
|
|
{
|
|
return m_strTargetContainerPath;
|
|
}
|
|
|
|
void SetTargetContainerPath(_bstr_t strPath)
|
|
{
|
|
m_strTargetContainerPath = strPath;
|
|
}
|
|
|
|
void FixObjects();
|
|
|
|
private:
|
|
|
|
class CMigrated
|
|
{
|
|
public:
|
|
|
|
CMigrated();
|
|
~CMigrated();
|
|
|
|
void RetrieveMigratedObjects(int nActionId = -1);
|
|
|
|
int GetCount();
|
|
_bstr_t GetObjectType(int nIndex);
|
|
int GetObjectStatus(int nIndex);
|
|
_bstr_t GetObjectSourcePath(int nIndex);
|
|
_bstr_t GetObjectTargetPath(int nIndex);
|
|
|
|
void UpdateObjectTargetPath(int nIndex, _bstr_t strPath);
|
|
|
|
public:
|
|
|
|
enum EStatus
|
|
{
|
|
STATUS_CREATED = 0x00000001,
|
|
STATUS_REPLACED = 0x00000002,
|
|
STATUS_EXISTED = 0x00000004,
|
|
};
|
|
|
|
private:
|
|
|
|
_bstr_t GetObjectKey(int nIndex);
|
|
|
|
private:
|
|
|
|
long m_lActionId;
|
|
IIManageDBPtr m_spDB;
|
|
CVarSet m_vsObjects;
|
|
};
|
|
|
|
class CTargetPath
|
|
{
|
|
public:
|
|
|
|
CTargetPath();
|
|
~CTargetPath();
|
|
|
|
void SetContainerPaths(_bstr_t strSourceContainerPath, _bstr_t strTargetContainerPath);
|
|
|
|
bool NeedsToMove(_bstr_t strSourceObjectPath, _bstr_t strTargetObjectPath);
|
|
|
|
_bstr_t GetTargetContainerPath();
|
|
_bstr_t GetTargetObjectCurrentPath();
|
|
|
|
private:
|
|
|
|
bool IsMatch(LPCTSTR pszA, LPCTSTR pszB);
|
|
|
|
private:
|
|
|
|
CADsPathName m_pnSourceContainerPath;
|
|
CADsPathName m_pnTargetContainerPath;
|
|
CADsPathName m_pnTargetObjectOldPath;
|
|
CADsPathName m_pnTargetObjectNewPath;
|
|
};
|
|
|
|
class CContainers;
|
|
|
|
struct SObject
|
|
{
|
|
SObject(int nIndex, _bstr_t strPath) :
|
|
m_nIndex(nIndex),
|
|
m_strPath(strPath)
|
|
{
|
|
}
|
|
|
|
SObject(const SObject& r) :
|
|
m_nIndex(r.m_nIndex),
|
|
m_strPath(r.m_strPath)
|
|
{
|
|
}
|
|
|
|
SObject& operator =(const SObject& r)
|
|
{
|
|
m_nIndex = r.m_nIndex;
|
|
m_strPath = r.m_strPath;
|
|
return *this;
|
|
}
|
|
|
|
int m_nIndex;
|
|
_bstr_t m_strPath;
|
|
|
|
friend CContainers;
|
|
};
|
|
|
|
typedef std::vector<SObject> CObjects;
|
|
|
|
class CContainers : public std::map<_bstr_t, CObjects>
|
|
{
|
|
public:
|
|
|
|
CContainers() {}
|
|
|
|
void InsertObject(_bstr_t strContainerPath, int nObjectIndex, _bstr_t strObjectPathOld);
|
|
};
|
|
|
|
private:
|
|
|
|
_bstr_t m_strObjectType;
|
|
bool m_bFixReplaced;
|
|
_bstr_t m_strSourceContainerPath;
|
|
_bstr_t m_strTargetContainerPath;
|
|
|
|
CMigrated m_Migrated;
|
|
CTargetPath m_TargetPath;
|
|
CContainers m_Containers;
|
|
};
|