Skip to content
Snippets Groups Projects
LibraryManager.cpp 2.44 KiB
Newer Older
#include <iostream>
#include "MantidKernel/DllOpen.h"
#include "MantidKernel/LibraryManager.h"
#include "Poco/File.h"
#include "Poco/DirectoryIterator.h"
#include "boost/algorithm/string.hpp"

Nick Draper's avatar
Nick Draper committed

/// Constructor
LibraryManagerImpl::LibraryManagerImpl() :
	g_log(Logger::get("LibraryManager"))
{
	g_log.debug() << "LibraryManager created." << std::endl;
}

/// Destructor
LibraryManagerImpl::~LibraryManagerImpl()
{
Nick Draper's avatar
Nick Draper committed
	//std::cerr << "LibraryManager destroyed." << std::endl;
/** Opens all suitable DLLs on a given path.
 *  \param filePath :: The filepath to the directory where the libraries are.
 *  \param isRecursive :: Whether to search subdirectories.
 *  \return The number of libraries opened.
 */
int LibraryManagerImpl::OpenAllLibraries(const std::string& filePath,
		bool isRecursive)
{
	int libCount = 0;
	if ( libPath.exists() && libPath.isDirectory() )
		//iteratate over the available files
	        Poco::DirectoryIterator end_itr;
		for (Poco::DirectoryIterator itr(libPath); itr != end_itr; ++itr)
				}
			}
			else
			{
				//if they are libraries
			  std::string libName = DllOpen::ConvertToLibName(Poco::Path(itr->path()).getFileName());

				if (libName != "")
				{
					//load them
					LibraryWrapper* tmp = new LibraryWrapper;

					//use lower case library name for the map key
					std::string libNameLower =
							boost::algorithm::to_lower_copy(libName);

					//Check that a libray with this name has not already been loaded
					if (OpenLibs.find(libNameLower) == OpenLibs.end())
					{
						g_log.debug("Trying to open library: " + libName
								+ "...");
						//Try to open the library
						if (tmp->OpenLibrary(libName, filePath))
						{
							//Successfully opened, so add to map
							g_log.debug("Opened library: " + libName + ".\n");
Nick Draper's avatar
Nick Draper committed
							
							boost::shared_ptr<LibraryWrapper> pLib(tmp);
							OpenLibs.insert(std::pair< std::string, boost::shared_ptr<LibraryWrapper> >(libName, pLib) );
							++libCount;
						}
					}
				}
	}
	else
	{
		g_log.error("In OpenAllLibraries: " + filePath + " must be a directory.");
	}
Nick Draper's avatar
Nick Draper committed