/**
 * \file BGDNetVolume.h
 * \brief Объявление классов Volume и Volumes
 */

#ifndef __BGDNetVolume_h__
#define __BGDNetVolume_h__

#include "BGDNetConfig.h"

#include <nwvol.h>
#include "BGDNetShare.h"
#include "BGDNetException.h"
#include "BGDNetString.h"

namespace BGDNet
{

class Server;
class Directory;

/**
 * \class Volume
 * \brief Класс "Том"
 *
 * Каждый файловый сервер предоставляет один или несколько томов для совместного
 * использования пользователями NDS. Класс "Том" представляет собой абстракцию
 * такого сетевого ресурса.
 */
class BGDNET_API Volume : public Share
{
public:

  Volume( const Server* pSrv, const String& volName )
    throw(Exception);
  /**<
   * \brief Конструктор
   * @param pSrv Указатель на сервер, на котором находится том.
   * @param volName Ссылка на строку, содержащую имя тома.
   */

  Volume( const Volume& v );
  /**<
   * \brief Инициализатор копии.
   */

  virtual ~Volume( void );
  /**<
   * \brief Деструктор
   */

  Volume& operator =( const Volume& v );
  /**<
   * \brief Оператор присваивания.
   */

  const Server* srv( void ) const;
  /**<
   * \brief Доступ к владельцу тома
   * @return Указатель на сервер, на котором находится том.
   */

  const String& name( void ) const;
  /**<
   * \brief Доступ к имени тома
   * @return Ссылка на строку, содержащую имя тома.
   */

  Directory* root( void );
  /**<
   * \brief Доступ к корневому каталогу.
   * @return Указатель на корневой каталог тома.
   */

  const Directory* root( void ) const;
  /**<
   * \brief Доступ к корневому каталогу.
   * @return Указатель на корневой каталог тома.
   */

  bool supportsLongNames( void ) const;
  /**<
   * \brief Определяет, поддерживаются ли длинные имена.
   * @return true если том поддерживает длинные имена, false
   * в противном случае.
   */

private:

  void getRoot( void );
  /**<
   * \brief Инициализирует корневой каталог.
   */

  const Server* m_pSrv;
  /**<
   * \brief Указатель на сервер, на котором находится том.
   */

  String m_volName;
  /**<
   * \brief Строка, содержащая имя тома.
   */

  Directory* m_pRoot;
  /**<
   * \brief Указатель на корневой каталог тома
   */

  bool m_supportsLongNames;
  /**<
   * \brief Признак поддержки томом длинных имен.
   */
};

} // namespace BGDNet

#endif //__BGDNetVolume_h__
