#ifndef __FileAttrUpdate_h__
#define __FileAttrUpdate_h__

#include "BGDNet.h"

//
// CFileAttrUpdate
//
// Абстрактный базовый класс изменений атрибутов файла.
//
class CFileAttrUpdate
{
public:
  virtual bool updateAttributes( BGDNet::File* pFile ) = 0;
  // Вызывается для изменения атрибутов файла. Возвращает true,
  // если атрибуты были изменены, иначе возвращает false.
  // В случае ошибки вызывает исключение.
};

//
// CChangeOwner
//
// Подкласс изменений атрибутов файла, в котором владелец
// изменяется принудительно.
//
class CChangeOwner : public CFileAttrUpdate
{
public:
  CChangeOwner(
    const BGDNet::Context& ctx,
    const char* curOwner,
    const char* newOwner );
  virtual bool updateAttributes( BGDNet::File* pFile );
private:
  const BGDNet::Context& m_ctx;
  CString m_curOwner;
  CString m_newOwner;
};

//
// CRepairOwnerModifier
//
// Подкласс изменений атрибутов файла, в котором автоматически исправляются
// некорректно заданные "owner" и "modifier".
//
class CRepairOwnerModifier : public CFileAttrUpdate
{
public:
  CRepairOwnerModifier( const BGDNet::Context& ctx );
  virtual bool updateAttributes( BGDNet::File* pFile );
private:
  const BGDNet::Context& m_ctx;
};

#endif //__FileAttrUpdate_h__
