/**
 * \file BGDNetFile.h
 * \brief Объявление класса File
 */

#ifndef __BGDNetFile_h__
#define __BGDNetFile_h__

#include "BGDNetConfig.h"

#include "BGDNetDirEntry.h"
#include "BGDNetException.h"

namespace BGDNet
{

class Directory;

/**
 * \class File
 * \brief Класс "Файл"
 *
 * Представляет собой абстракцию файла в файловой системе сервера NetWare.
 */
class BGDNET_API File : public DirEntry
{
public:

  File( const Volume* pVol, const Path& relPath )
    throw(Exception);
  /**<
   * \brief Конструктор.
   * @param pVol Указатель на том, в котором находится файл.
   * @param relPath Путь к файлу относительно корневого каталога тома
   */

  File( const Directory* pDir, const Path& fileName )
    throw(Exception);
  /**<
   * \brief Конструктор.
   * @param pDir Указатель на каталог, в котором находится файл
   * @param fileName Имя файла
   */

  virtual nuint32 ownerId( void ) const;
  /**<
   * \brief Доступ к идентификатору владельца.
   * @return Идентификатор владельца элемента каталога.
   */

  virtual void ownerId( nuint32 id );
  /**<
   * \brief Изменяет идентификатор владельца.
   * @param id Новый идентификатор владельца.
   */

  nuint32 modifierId( void ) const;
  /**<
   * \brief Доступ к идентификатору объекта, изменившего файл.
   * @return Идентификатор объекта, изменившего файл.
   */

  void modifierId( nuint32 id );
  /**<
   * \brief Изменяет идентификатор объекта, изменившего файл.
   * @param id Новый идентификатор объекта, изменившего файл.
   */

  String modifierName( const Context& ctx ) const;
  /**<
   * \brief Доступ к имени объекта, изменившего элемент каталога.
   * @param ctx Ссылка на контекст NDS.
   * @return Строка, содержащая имя объекта, изменившего элемент каталога,
   * в указанном контексте.
   */

  void modifierName( const Context& ctx, const char* name );
  /**<
   * \brief Изменяет имя объекта, изменившего элемент каталога.
   * @param ctx Ссылка на контекст NDS.
   * @param name Указатель на строку, содержащую новое имя объекта,
   * изменившего элемент каталога.
   */

  nuint32 size( void ) const;
  /**<
   * \brief Доступ к размеру файла.
   * @return Размер файла (в байтах).
   */
};

} // namespace BGDNet

#endif //__BGDNetFile_h__
