PCMFileSystemManager.h

Go to the documentation of this file.
00001 
00002 //
00003 // This source file is a part of ParCompMark
00004 // Parallel Compositing Benchmark Framework
00005 //
00006 // for latest info see http://parcompmark.sourceforge.net
00007 
00008 //
00009 // Copyright (C) 2006 IT2 ParCompMark Dev. Team
00010 // 
00011 // This program is free software; you can redistribute it and/or
00012 // modify it under the terms of the GNU General Public License
00013 // as published by the Free Software Foundation; either version 2
00014 // of the License, or (at your option) any later version.
00015 // 
00016 // This program is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU General Public License for more details.
00020 // 
00021 // You should have received a copy of the GNU General Public License
00022 // along with this program; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 
00027 
00028 #ifndef __PCM_FILESYSTEMMANAGER_H__
00029 #  define __PCM_FILESYSTEMMANAGER_H__
00030 
00031 //
00032 // Inner includes
00033 //
00034 
00035 #  include "PCMPremeditations.h"
00036 
00037 #  include "PCMSingleton.h"
00038 
00039 #  include "PCMException.h"
00040 
00041 #  include "PCMLogger.h"
00042 
00043 #  include "PCMContainer.h"
00044 
00045 #  include "PCMPointer.h"
00046 
00047 //
00048 // Outer includes
00049 //
00050 
00051 #  include <string>
00052 
00053 #  include <list>
00054 
00055 #  include <queue>
00056 
00057 #  include <stack>
00058 
00059 //
00060 // Scripting bind includes (for Squirrel)
00061 //
00062 
00063 #  include <squirrel/squirrel.h>
00064 #  include <squirrel/sqstdio.h>
00065 #  include <squirrel/sqstdaux.h>
00066 #  include <squirrel/sqplus.h>
00067 
00068 namespace ParCompMark
00069 {
00070 
00076   class FileSystemManager:public Singleton < FileSystemManager >
00077   {
00078 
00079         //
00080         // Unit test class
00081         //
00082 #  ifdef PARCOMPMARK_TEST
00083         friend class ParCompMarkTest::TestFileSystemManager;
00084 #  endif
00085 
00086         //
00087         // Scripting binding (for Squirrel)
00088         //
00089 
00091 
00092 
00100    public:static void squirrelGlue()
00101         {
00102          ::SqPlus::SQClassDef < FileSystemManager >
00103                 (_T("FileSystemManager")).staticFunc(&FileSystemManager::getInstance,
00104                                                   _T("getInstance")).func(&FileSystemManager::existsDataFile,
00105                                                                           _T("existsDataFile"));
00106         }
00107 
00109 
00110         //
00111         // Enumerations
00112         //
00113 
00114    public:
00115 
00117         enum FileOperation
00118         {
00119 
00121          READ,
00122 
00124          WRITE,
00125 
00127          APPEND
00128         };
00129 
00130         //
00131         // Typedefs
00132         //
00133 
00134    public:
00135 
00137         typedef Pointer < FILE,
00138         Mutex > CFilePointer;
00139 
00141         typedef Pointer < std::fstream,
00142         Mutex > CppFilePointer;
00143 
00144         //
00145         // Class constants
00146         //
00147 
00149 
00150 
00151    public:
00152 
00158         static const u32 MAX_PATH;
00159 
00165         static const std::string PATH_SEPARATOR;
00166 
00168 
00169         //
00170         // Variables
00171         //
00172 
00174 
00175 
00176    protected:
00177 
00183         bool mInitialized;
00184 
00190         std::string mAppDirectory;
00191 
00197         std::string mDataDirectory;
00198 
00204         std::string mHomeDirectory;
00205 
00211         std::string mCurrentDirectory;
00212 
00218         std::string mIniFile;
00219 
00221 
00222         //
00223         // Constructors & destructor
00224         //
00225 
00227 
00228 
00229    public:
00230 
00236         FileSystemManager(const std::string & appDirectory =
00237                          "~/.ParCompMark/", const std::string & iniFile = "parcompmark.ini");
00238 
00242         virtual ~ FileSystemManager();
00243 
00245 
00246         //
00247         // Getters & setters
00248         //
00249 
00251 
00252 
00253    public:
00254 
00260         const bool & getInitialized() const;
00261 
00267         const std::string & getAppDirectory() const;
00268 
00274         void setAppDirectory(const std::string & appdirectory);
00275 
00281         const std::string & getDataDirectory() const;
00282 
00288         void setDataDirectory(const std::string & datadirectory);
00289 
00295         const std::string & getHomeDirectory() const;
00296 
00302         const std::string & getCurrentDirectory() const;
00303 
00309         const std::string & getIniFile() const;
00310 
00312 
00313         //
00314         // Class methods
00315         //
00316 
00318 
00319 
00320    public:
00321 
00326         static FileSystemManager *getInstance();
00327 
00332         static void closeFile(FileSystemManager::CppFilePointer & fp);
00333 
00338         static void closeFile(FileSystemManager::CFilePointer & fp);
00339 
00341 
00342         //
00343         // Methods
00344         //
00345 
00347 
00348 
00349    public:
00350 
00354         virtual void initialize();
00355 
00359         virtual void finalize();
00360 
00366         virtual bool existsDirectory(const std::string & name) const;
00367 
00373         virtual bool createDirectory(const std::string & name) const;
00374 
00379         virtual std::string findDataDirectory() const;
00380 
00387         virtual bool existsLibrary(const std::string & library,
00388                                  const std::vector < std::string > &additionalPaths =
00389                                  std::vector < std::string > ())const;
00390 
00397         virtual std::string findLibraryPath(const std::string & library,
00398                                          const std::vector < std::string > &additionalPaths =
00399                                          std::vector < std::string > ())const;
00400 
00406         virtual std::list < std::string > listDirectory(const std::string & directory) const;
00407 
00413         virtual std::list < std::string > listDataDirectory(const std::string & directory) const;
00414 
00420         virtual bool existsFile(const std::string & name) const;
00421 
00427         virtual bool existsAppFile(const std::string & name) const;
00428 
00434         virtual bool existsDataFile(const char *name) const;
00435 
00442         virtual FileSystemManager::CFilePointer openFileC(const std::string & name,
00443                                                         const FileOperation & operation =
00444                                                         FileSystemManager::READ) const;
00445 
00452         virtual FileSystemManager::CFilePointer openAppFileC(const std::string & name,
00453                                                           const FileOperation & operation =
00454                                                           FileSystemManager::READ) const;
00455 
00462         virtual FileSystemManager::CFilePointer openDataFileC(const std::string & name,
00463                                                           const FileOperation & operation =
00464                                                           FileSystemManager::READ) const;
00465 
00472         virtual FileSystemManager::CppFilePointer openFileCpp(const std::string & name,
00473                                                           const FileOperation & operation =
00474                                                           FileSystemManager::READ) const;
00475 
00482         virtual FileSystemManager::CppFilePointer openAppFileCpp(const std::string & name,
00483                                                                  const FileOperation & operation =
00484                                                                  FileSystemManager::READ) const;
00485 
00492         virtual FileSystemManager::CppFilePointer openDataFileCpp(const std::string & name,
00493                                                                 const FileOperation & operation =
00494                                                                 FileSystemManager::READ) const;
00495 
00501         virtual std::string getPathDataFile(const std::string & name) const;
00502 
00508         virtual std::string readTextFile(const std::string & name) const;
00509 
00515         virtual std::string readAppTextFile(const std::string & name) const;
00516 
00522         virtual std::string readDataTextFile(const std::string & name) const;
00523 
00524    protected:
00525 
00529         virtual void _findHomeDirectory();
00530 
00536         virtual std::string _replaceHomeChar(const std::string & path) const;
00537 
00546         virtual std::string _translateToAbsolutePath(const std::string & path) const;
00547 
00551         virtual void _createAppDirectory();
00552 
00554 
00555   };
00556 
00557   //
00558   // Include header implementation
00559   //
00560 
00561 #  include "PCMFileSystemManager_impl.h"
00562 
00563 }
00564 
00565 // Declare FileSystemManager class (and its enums) for SqPlus binding
00567 DECLARE_INSTANCE_TYPE_NAME(ParCompMark::FileSystemManager, FileSystemManager);
00568 
00569 #endif