//
// C++ Implementation: PresetFactoryManager
//
// Description: 
//
//
// Author: Carmelo Piccione <carmelo.piccione@gmail.com>, (C) 2008
//
// Copyright: See COPYING file that comes with this distribution
//
//
#ifndef __PRESET_FACTORY_MANAGER_HPP
#define __PRESET_FACTORY_MANAGER_HPP

#include "PresetFactory.hpp"


/// A simple exception class to strongly type all preset factory related issues
class PresetFactoryException : public std::exception
{
public:
  inline            PresetFactoryException (const std::string & message) : _message(message) {}
  virtual           ~PresetFactoryException() throw() {}
  const std::string &message() const { return _message; } 

private:
  std::string _message;
};

/// A manager of preset factories
class PresetFactoryManager {

public:
  PresetFactoryManager();
  ~PresetFactoryManager();

  /// Initializes the manager with mesh sizes specified
  /// \param gx the width of the mesh
  /// \param gy the height of the mesh
  /// \note This must be called once before any other methods
  void initialize (int gx, int gy);

  /// Requests a factory given a preset extension type
  /// \param extension a string denoting the preset suffix type
  /// \throws PresetFactoryException if the extension is unhandled
  /// \returns a valid preset factory associated with the extension
  PresetFactory & factory (const std::string & extension);

  /// Tests if an extension has been registered with a factory
  /// \param extension the file name extension to verify
  /// \returns true if a factory exists, false otherwise
  bool extensionHandled (const std::string & extension) const;

private:
  mutable std::map<std::string, PresetFactory *>  _factoryMap;
  mutable std::vector<PresetFactory *>            _factoryList;
  int             _gx, _gy;       
  volatile bool   initialized;

  void registerFactory (const std::string & extension, PresetFactory * factory);
};

#endif
