DDSFileHandler Class Reference

#include <DDSFileHandler.h>

List of all members.

Public Types

typedef std::vector< std::string > FileIndex
typedef FileIndex::iterator FileIndexItr
typedef FileIndex::const_iterator FileIndexConstItr

Public Member Functions

 DDSFileHandler (DDS::EDataSource datasource, bool offLine=false)
virtual ~DDSFileHandler ()
std::string GetCurrentFileName () const
DDS::EDataSource GetDataSource () const
std::string GetSymLinkTargetName ()
bool IsOffLine () const
bool IsValid () const
bool NewFileAvailable ()
std::ostream & Print (std::ostream &ms) const
std::string GoToFile (std::string filename="")
std::string GoToNextFile ()
std::string GoToSymLinkFile ()

Private Member Functions

bool IsModifiedDirectory () const
bool IsModifiedSymLink () const
Int_t BuildFileIndex ()
std::string BuildFullFilePathName (std::string filename)

Private Attributes

DDS::EDataSource fDataSource
std::string fDataSourceEnv
std::string fDataSourceDir
std::string fLocalDataSourceDir
std::string fSymLink
std::string fSymLinkTarget
Long_t fSymLinkModTime
Long_t fSourceDirModTime
std::string fLastServedFile
bool fValid
FileIndex fFileIndex
FileIndexItr fFileIndexItr
bool fOffLine

Detailed Description

Definition at line 24 of file DDSFileHandler.h.


Member Typedef Documentation

typedef std::vector<std::string> DDSFileHandler::FileIndex

Definition at line 28 of file DDSFileHandler.h.

typedef FileIndex::const_iterator DDSFileHandler::FileIndexConstItr

Definition at line 30 of file DDSFileHandler.h.

typedef FileIndex::iterator DDSFileHandler::FileIndexItr

Definition at line 29 of file DDSFileHandler.h.


Constructor & Destructor Documentation

DDSFileHandler::DDSFileHandler ( DDS::EDataSource  datasource,
bool  offLine = false 
)

Definition at line 191 of file DDSFileHandler.cxx.

References bfld::AsString(), fDataSourceDir, fDataSourceEnv, fLocalDataSourceDir, fOffLine, fSymLink, fValid, gSystem(), Msg::kInfo, Msg::kWarning, and MSG.

00191                                                                      : 
00192 fDataSource(datasource),fDataSourceEnv(""),fDataSourceDir(""),
00193 fLocalDataSourceDir(""),fSymLink(""),fSymLinkTarget(""),fSymLinkModTime(0),
00194 fSourceDirModTime(0),fLastServedFile(""),fValid(true),fFileIndexItr(0),
00195 fOffLine(offLine) {
00196   // 
00197   // Purpose: Default constructor for DDSFileHandler class.  
00198   //  
00199   // Arguments: datasource   enumerated type specifies source of data. 
00200   //            offline      true => use symbolic link 'offlinefile'
00201   //                         instead of 'currentfile'. default = false.
00202   // Return: n/a.
00203   //
00204   // Contact: S. Kasahara
00205   //
00206   // Notes: Use IsValid() to determine if DDSFileHandler was initialized
00207   //        properly.
00208   //
00209 
00210 
00211   // Get name of directory containing data for requested datasource
00212   string dataSourceString = DDS::AsString(datasource);
00213   fDataSourceEnv = "DDS_"+dataSourceString+"_DATA_DIR";
00214   const char* sourcedir = getenv(fDataSourceEnv.c_str());
00215   if ( sourcedir == NULL ) {
00216     MSG("DDS",Msg::kWarning) << "Environment variable " 
00217                              << fDataSourceEnv << " undefined." << endl;
00218     fValid = false;
00219     return;
00220   } 
00221   else {
00222     fDataSourceDir = sourcedir;
00223   }
00224 
00225   // Determine if fDataSourceDir points to a remote host with rootd server
00226   if ( fDataSourceDir.find("root:")==0 || fDataSourceDir.find("roots:")==0 ) {
00227     TUrl url(fDataSourceDir.c_str());
00228 
00229     // check for existence of DAQ_DATA_DIR or DCS_DATA_DIR
00230     // indicating a local directory path different than that contained
00231     // in DDS_DAQ_DATA_DIR or DDS_DCS_DATA_DIR.
00232     string localDataSourceEnv = dataSourceString+"_DATA_DIR";
00233     const char* localSourceDir = getenv(localDataSourceEnv.c_str());
00234     if (localSourceDir != NULL) {
00235       fLocalDataSourceDir = localSourceDir;
00236     }
00237     else { 
00238       // Parse the source directory to determine the "local path name", used
00239       // to find the symbolic link
00240       string symlink = url.GetFile();
00241       fLocalDataSourceDir = symlink.substr(1,symlink.length()-1);
00242     }
00243     // Check to make sure that user has defined username&password for remote
00244     // host in .netrc file, if not will assume anonymous access
00245     TAuthenticate auth(0,url.GetHost(),url.GetProtocol(),0);
00246 
00247     TString tuser;
00248     TString tpasswd;
00249     if ( !auth.CheckNetrc(tuser,tpasswd) ) {
00250       MSG("DDS",Msg::kInfo) << "CS_" << gSystem->GetPid() << ": "
00251         << "No remote login data in ~.netrc. Assuming anonymous rootd usage."
00252         << endl;
00253       TAuthenticate::SetGlobalUser("anonymous");
00254       passwd* pwstruct = getpwuid(getuid());
00255       const char* username = 0;
00256       if (pwstruct) username = pwstruct -> pw_name;
00257       string password;
00258       if (username != NULL) 
00259         password = string(username) +"@" + string(gSystem->HostName());
00260       else
00261         password = "minos@" + string(gSystem->HostName());
00262       TAuthenticate::SetGlobalPasswd(password.c_str());
00263     }
00264 
00265   }
00266   else {
00267     fLocalDataSourceDir = fDataSourceDir; 
00268   }
00269   if ( fOffLine ) 
00270     fSymLink = fLocalDataSourceDir + "/offlinefile";
00271   else
00272     fSymLink = fLocalDataSourceDir + "/currentfile";
00273   
00274 }

DDSFileHandler::~DDSFileHandler (  )  [virtual]

Definition at line 276 of file DDSFileHandler.cxx.

00276                                 {
00277   // Purpose: Destructor.
00278   //
00279   // Argument: n/a.
00280   //
00281   // Return: n/a.
00282   //
00283   // Contact: S. Kasahara
00284   //
00285 
00286 }


Member Function Documentation

Int_t DDSFileHandler::BuildFileIndex (  )  [private]

Definition at line 87 of file DDSFileHandler.cxx.

References gSystem(), DDSParentServer::IsValid(), Msg::kVerbose, Msg::kWarning, Munits::ms, MSG, MSGSTREAM, and stat.

Referenced by GoToFile(), and GoToNextFile().

00087                                      {
00088   //
00089   // Purpose: Build file index of files in source directory.  Files are
00090   //          assumed to have subscript of form ".root".  
00091   //
00092   // Argument: none.
00093   // 
00094   // Return: Int_t  number of files in index
00095   //
00096   // Contact: S. Kasahara
00097   //
00098 
00099 
00100   fFileIndex.clear(); fFileIndexItr = fFileIndex.end(); // clear previous index
00101 
00102   if ( !IsValid() ) {
00103     MSG("DDS",Msg::kWarning) 
00104     << "BuildFileIndex called on InValid FileHandler." << endl;
00105     return 0;
00106   }
00107 
00108   // Open source directory
00109   void *dir = gSystem -> OpenDirectory(fLocalDataSourceDir.c_str());
00110   if (!dir) {
00111     MSG("DDS",Msg::kWarning) << "Error in open of file source directory " 
00112      << fLocalDataSourceDir << ".\nCannot build file index." << endl;
00113     return 0;
00114   }
00115   
00116   // update last modification time of source directory
00117   struct stat keystat;
00118   if ( stat(fLocalDataSourceDir.c_str(),&keystat) >= 0 ) {
00119     fSourceDirModTime = keystat.st_ctime;
00120   }
00121 
00122   const char* file;
00123   string filename;
00124   while ((file = gSystem -> GetDirEntry(dir)) ) {
00125     filename = file;
00126     // Determine if file has required extension
00127     if ( filename.length() > 5 
00128       && filename.find(".root") == filename.length()-5 ) {
00129       fFileIndex.push_back(fDataSourceDir+"/"+filename);
00130     }
00131   }
00132   // sort the directory contents in alphanumeric order
00133   std::sort(fFileIndex.begin(),fFileIndex.end());
00134 
00135   gSystem -> FreeDirectory(dir);
00136 
00137   fFileIndexItr = fFileIndex.begin();
00138 
00139   MsgStream& ms = MSGSTREAM("DDS",Msg::kVerbose);
00140   ms << "CS_" << gSystem->GetPid() << ": "<< "Built new FileIndex: " << endl;
00141   for (FileIndexConstItr citr  = fFileIndex.begin(); 
00142                          citr != fFileIndex.end(); citr++) {
00143     ms << "    " << *citr << endl; 
00144   }
00145   return fFileIndex.size();
00146 
00147 }

std::string DDSFileHandler::BuildFullFilePathName ( std::string  filename  )  [private]

Definition at line 149 of file DDSFileHandler.cxx.

References fDataSourceDir, and len.

Referenced by GoToFile().

00149                                                                   {
00150   //
00151   // Purpose: Build full file path name from file name.
00152   //
00153   // Argument: string    filename of interest.
00154   //
00155   // Return: fullfilepathname of file.
00156   //
00157   // Contact: S. Kasahara
00158   //
00159   // Notes: If the filename contains an absolute
00160   //        path specification beginning with "/", then nothing is added
00161   //        to the filename to create the fullfilepathname.  If the filename
00162   //        indicates a relative path, this method will prepend the data source
00163   //        directory path to the input filename if not already present. 
00164   //  
00165 
00166   std::string fullfilepathname = filename;
00167   unsigned int namelen = filename.length();
00168   if ( filename.find(fDataSourceDir) >= namelen ) {
00169     // Check if filename is a relative path and prepend data source directory
00170     if( filename.find("/") != 0 ) {
00171       fullfilepathname = fDataSourceDir + "/" + fullfilepathname;
00172     }
00173   }  
00174 
00175   // Check to see if fullfilepathname is symbolic link, and if so
00176   // expand to link target name
00177   const Int_t bufsize = 512;
00178   char buffer[bufsize];
00179 
00180   Int_t len = readlink(fullfilepathname.c_str(),buffer,bufsize);
00181   if ( len >= 0 ) {
00182     buffer[len] = '\0';  // null terminate string
00183     fullfilepathname = buffer;
00184     fullfilepathname = this -> BuildFullFilePathName(fullfilepathname);
00185   }
00186   return fullfilepathname;
00187 
00188 }

std::string DDSFileHandler::GetCurrentFileName (  )  const

Definition at line 288 of file DDSFileHandler.cxx.

References fFileIndex, and fFileIndexItr.

Referenced by GoToFile(), GoToNextFile(), GoToSymLinkFile(), NewFileAvailable(), and DDSChildServer::Subscribe().

00288                                                    {
00289   //
00290   // Purpose: Retrieves full path name of file pointed to by fFileIndexItr.  
00291   //
00292   // Argument: none.
00293   // 
00294   // Return: std::string  full file path name of current file.
00295   //
00296   // Contact: S. Kasahara
00297   //
00298 
00299   std::string currentFileName;
00300   if (fFileIndexItr != fFileIndex.end() ) currentFileName = *fFileIndexItr;
00301   return currentFileName;
00302 
00303 }

DDS::EDataSource DDSFileHandler::GetDataSource (  )  const [inline]

Definition at line 38 of file DDSFileHandler.h.

References fDataSource.

00038 { return fDataSource; }

std::string DDSFileHandler::GetSymLinkTargetName (  ) 

Definition at line 305 of file DDSFileHandler.cxx.

References fDataSourceDir, fSymLink, fSymLinkModTime, fSymLinkTarget, gSystem(), IsModifiedSymLink(), Msg::kWarning, len, MSG, and stat.

Referenced by GoToNextFile(), GoToSymLinkFile(), NewFileAvailable(), and DDSChildServer::Next().

00305                                                {
00306   //
00307   // Purpose: Retrieves full path name of file pointed to by fSymLink.
00308   //          (either "currentfile" or "offlinefile" depending on fOffLine
00309   //           bool).  
00310   //
00311   // Argument: none.
00312   // 
00313   // Return: std::string  full file path name of target of fSymLink.
00314   //
00315   // Contact: S. Kasahara
00316   //
00317 
00318   if ( this -> IsModifiedSymLink() ) {
00319     fSymLinkTarget = "";
00320     // update last modification time of key file
00321     struct stat keystat;
00322     if ( lstat(fSymLink.c_str(),&keystat) >= 0 ) {
00323       fSymLinkModTime = keystat.st_ctime;
00324       const Int_t bufsize = 512;
00325       char buffer[bufsize];
00326       Int_t len = readlink(fSymLink.c_str(),buffer,bufsize);
00327       if ( len >= 0 ) {
00328         buffer[len] = '\0';  // null terminate string
00329         if (buffer[0] == '/')   // absolute path
00330             fSymLinkTarget = buffer;
00331         else
00332             fSymLinkTarget = fDataSourceDir + "/" + buffer;
00333       }
00334       else {
00335         MSG("DDS",Msg::kWarning) << "CS_" << gSystem -> GetPid()
00336                                  << ": Error in reading symbolic link file:\n"
00337                                  << fSymLink << "." << endl;
00338       }
00339     }
00340     else {
00341       MSG("DDS",Msg::kWarning) << "CS_" << gSystem->GetPid()
00342                                << ": Error in reading symbolic link file:\n"
00343                                << fSymLink << " modification time." << endl;
00344     }
00345   }  
00346   
00347   return fSymLinkTarget;
00348   
00349 }

std::string DDSFileHandler::GoToFile ( std::string  filename = ""  ) 

Definition at line 351 of file DDSFileHandler.cxx.

References BuildFileIndex(), BuildFullFilePathName(), fFileIndex, fFileIndexItr, fLastServedFile, GetCurrentFileName(), and IsModifiedDirectory().

Referenced by DDSChildServer::GoToFile(), GoToNextFile(), and GoToSymLinkFile().

00351                                                      {
00352   //
00353   // Purpose: Advance file iterator to point to the file indicated by
00354   //          fullFilePathName.  
00355   //
00356   // Argument: std::string  file name to advance to.  If file name does
00357   //                        not include the directory source path, this
00358   //                        information will be prepended to the file name.
00359   //                        If filename is null, advances to first file in 
00360   //                        directory. 
00361   //
00362   // Return: name of file corresponding to position index iterator was left at.
00363   //
00364   // Contact: S. Kasahara
00365   //
00366   // Notes: If specified file is not found, index iterator is left to
00367   //        point at 1 just beyond the missing file in the file index.
00368   //        If specified filename is null, index iterator is left to
00369   //        point at beginning of file index.
00370   //
00371 
00372   if ( this -> IsModifiedDirectory() ) this -> BuildFileIndex();
00373 
00374   std::string fullFilePathName = this -> BuildFullFilePathName(filename);
00375 
00376   if ( filename.empty() ) {
00377     fFileIndexItr = fFileIndex.begin();
00378   }
00379   else {
00380     for ( fFileIndexItr=fFileIndex.begin(); fFileIndexItr!=fFileIndex.end(); 
00381           fFileIndexItr++ ) {
00382       if ( (*fFileIndexItr) >= fullFilePathName ) {
00383         break;
00384       } 
00385     }
00386   }
00387 
00388   std::string nextFile = this -> GetCurrentFileName();
00389   if ( !nextFile.empty() ) {
00390     fLastServedFile = nextFile;
00391   }
00392 
00393   return nextFile;
00394 
00395 }

std::string DDSFileHandler::GoToNextFile (  ) 

Definition at line 397 of file DDSFileHandler.cxx.

References BuildFileIndex(), fFileIndex, fFileIndexItr, fLastServedFile, fSymLinkTarget, GetCurrentFileName(), GetSymLinkTargetName(), GoToFile(), gSystem(), IsModifiedDirectory(), Msg::kWarning, and MSG.

Referenced by DDSChildServer::GoToFile(), and DDSChildServer::Next().

00397                                        {
00398   //
00399   // Purpose: Move current file iterator to point to the next file
00400   //          in source directory and return fullfilepathname of this file.
00401   //
00402   // Argument: none.
00403   // 
00404   // Return: std::string  full file path name of next file.
00405   //
00406   // Contact: S. Kasahara
00407   //
00408   // Notes:  Files are presumed to have names ending in  ".root".
00409   //         Files are in alphanumeric order.  If first call,
00410   //         the start of the file index is positioned at file pointed
00411   //         to by the symbolic link "currentfile", or if that symbolic
00412   //         link is not present, to the first file in the directory. 
00413   //
00414 
00415   std::string nextFileName = "";
00416   std::string currentFileName = this -> GetCurrentFileName();
00417 
00418   bool isNewBuild = false;
00419   if ( this -> IsModifiedDirectory() ) {
00420     this -> GetSymLinkTargetName();
00421     this -> BuildFileIndex();
00422     isNewBuild = true;
00423   }
00424  
00425   if ( fFileIndex.empty() ) {
00426     fFileIndexItr = fFileIndex.end();
00427     return "";
00428   }
00429 
00430   if ( fLastServedFile.empty() ) {
00431     // Start from currentfile symbolic link if available
00432     // Else first file in directory
00433     nextFileName = fSymLinkTarget;
00434     nextFileName = this -> GoToFile(nextFileName); 
00435   }
00436   else {
00437     // Move to next file in file index
00438     if ( !isNewBuild ) {
00439       if ( fFileIndexItr != fFileIndex.end() ) fFileIndexItr++;
00440       nextFileName = this -> GetCurrentFileName();
00441     }
00442     else {
00443       // if index has changed, must find position of currentfile before advance
00444       nextFileName =  this -> GoToFile(fLastServedFile);
00445       if ( strcmp(nextFileName.c_str(),fLastServedFile.c_str()) ) {
00446         MSG("DDS",Msg::kWarning) << "CS_" <<  gSystem -> GetPid()
00447         << ": The data source directory\n" 
00448         << "    no longer contains the last served file " << currentFileName
00449         << "\n    indicating a potential gap in the files served." 
00450         << " Will set index to next file beyond missing file in directory." 
00451         << endl;
00452       }
00453       else if ( fFileIndexItr != fFileIndex.end() ) {
00454         fFileIndexItr++;
00455         nextFileName = this->GetCurrentFileName();
00456       }
00457     }
00458   }            
00459 
00460   if ( !nextFileName.empty() ) {
00461     fLastServedFile = nextFileName;
00462   }
00463 
00464   return nextFileName;
00465   
00466 }

std::string DDSFileHandler::GoToSymLinkFile (  ) 

Definition at line 468 of file DDSFileHandler.cxx.

References fLastServedFile, GetCurrentFileName(), GetSymLinkTargetName(), and GoToFile().

Referenced by DDSChildServer::GoToFile(), and DDSChildServer::Next().

00468                                           {
00469   //
00470   // Purpose: Move current file iterator to point to the file pointed
00471   //          to by the symbolic link 'currentfile' or 'offlinefile'.
00472   //
00473   // Argument: none.
00474   // 
00475   // Return: std::string  fullfilepathname of file pointed to by
00476   //                      symbolic link.
00477   //
00478   // Contact: S. Kasahara
00479   //
00480 
00481   std::string symLinkTarget = this -> GetSymLinkTargetName();
00482   if ( !symLinkTarget.empty() ) {
00483     // Attempt to move to it
00484     this -> GoToFile(symLinkTarget);
00485   }
00486 
00487   std::string nextFile = this -> GetCurrentFileName();
00488   if (!nextFile.empty()) {
00489     fLastServedFile = nextFile;
00490   }
00491 
00492   return nextFile;
00493   
00494 }

bool DDSFileHandler::IsModifiedDirectory (  )  const [private]

Definition at line 496 of file DDSFileHandler.cxx.

References fLocalDataSourceDir, fSourceDirModTime, IsValid(), and stat.

Referenced by GoToFile(), and GoToNextFile().

00496                                                {
00497   //
00498   // Purpose: Determine if directory containing files has been modified.
00499   //
00500   // Argument: none.
00501   // 
00502   // Return: none.
00503   //
00504   // Contact: S. Kasahara
00505   //
00506 
00507   if ( IsValid() ) { 
00508   // Check last mod time of source directory and compare it to stored mod time
00509     struct stat keystat;
00510     if (stat(fLocalDataSourceDir.c_str(),&keystat) >= 0) {
00511       if (fSourceDirModTime != keystat.st_ctime) {
00512         return true;
00513       }
00514     }
00515   }
00516 
00517   return false;
00518 
00519 }

bool DDSFileHandler::IsModifiedSymLink (  )  const [private]

Definition at line 521 of file DDSFileHandler.cxx.

References fSymLink, fSymLinkModTime, IsValid(), and stat.

Referenced by GetSymLinkTargetName().

00521                                              {
00522   //
00523   // Purpose: Determine if symbolic link has been modified since last
00524   //          call to GetSymLinkFileName().
00525   //
00526   // Argument: none.
00527   // 
00528   // Return: none.
00529   //
00530   // Contact: S. Kasahara
00531   //
00532 
00533   if ( IsValid() ) { 
00534   // Check last mod time of key file and compare it to stored mod time
00535     struct stat keystat;
00536     if (lstat(fSymLink.c_str(),&keystat) >= 0) {
00537       if (fSymLinkModTime != keystat.st_ctime) {
00538         return true;
00539       }
00540     }
00541   }
00542 
00543   return false;
00544 
00545 }

bool DDSFileHandler::IsOffLine (  )  const [inline]

Definition at line 40 of file DDSFileHandler.h.

References fOffLine.

00040 { return fOffLine; }

bool DDSFileHandler::IsValid (  )  const [inline]

Definition at line 41 of file DDSFileHandler.h.

References fValid.

Referenced by IsModifiedDirectory(), IsModifiedSymLink(), NewFileAvailable(), and Print().

00041 { return fValid; }

bool DDSFileHandler::NewFileAvailable (  ) 

Definition at line 547 of file DDSFileHandler.cxx.

References fSymLinkTarget, GetCurrentFileName(), GetSymLinkTargetName(), and IsValid().

Referenced by DDSChildServer::Next().

00547                                       {
00548   //
00549   // Purpose: Compare GetSymLinkFileName() to GetCurrentFileName() and
00550   //          return true if different.
00551   //
00552   // Argument: none.
00553   // 
00554   // Return: true if current file is different than symbolic link file.
00555   //
00556   // Contact: S. Kasahara
00557   //
00558 
00559   if ( IsValid() ) { 
00560     this -> GetSymLinkTargetName();
00561     if ( !fSymLinkTarget.empty() ) {
00562       if ( strcmp( (this->GetSymLinkTargetName()).c_str(),
00563                    (this->GetCurrentFileName()).c_str() ) ) {
00564         return true;
00565       }
00566     }
00567   }
00568 
00569   return false;
00570 
00571 }

std::ostream & DDSFileHandler::Print ( std::ostream &  ms  )  const

Definition at line 573 of file DDSFileHandler.cxx.

References bfld::AsString(), fDataSource, fDataSourceDir, fDataSourceEnv, fFileIndex, fSymLink, fSymLinkTarget, and IsValid().

Referenced by operator<<().

00573                                                       {
00574   //
00575   // Purpose: Print DDSFileHandler status on std::ostream.
00576   //
00577   // Argument: ms  std::ostream to print on.
00578   //
00579   // Return: std::ostream reference.
00580   //
00581   // Contact: S. Kasahara
00582   //
00583 
00584   if ( IsValid() ) {
00585     ms << "DDSFileHandler is serving files for data source " 
00586        << DDS::AsString(fDataSource) << " from directory:\n  "
00587        << fDataSourceDir << "." << endl;
00588     ms << "The symbolic link:\n  " << fSymLink << "\nshould point to "
00589        << "the most recent " << DDS::AsString(fDataSource)        
00590        << " file." << endl;
00591     if ( !fSymLinkTarget.empty() ) {
00592       ms << "This symbolic link file pointed to " 
00593          << fSymLinkTarget << " on last check." << endl;
00594     }
00595     else {
00596       ms << "This symbolic link file did not point to a file when last checked." 
00597          << endl;
00598     }
00599     ms << "There are " << fFileIndex.size() << " entries in the file index."
00600        << endl;
00601     for (unsigned int i = 0; i < fFileIndex.size(); i++) {
00602       ms << "  " << i+1 << ")" << fFileIndex[i] << endl;
00603     } 
00604   }
00605   else {
00606     ms << "DDSFileHandler was unable to access the environment variable "
00607        << fDataSourceEnv << "." << endl;
00608   }
00609 
00610   return ms;
00611 
00612 }


Member Data Documentation

Definition at line 61 of file DDSFileHandler.h.

Referenced by GetDataSource(), and Print().

std::string DDSFileHandler::fDataSourceDir [private]
std::string DDSFileHandler::fDataSourceEnv [private]

Definition at line 62 of file DDSFileHandler.h.

Referenced by DDSFileHandler(), and Print().

Definition at line 71 of file DDSFileHandler.h.

Referenced by GetCurrentFileName(), GoToFile(), GoToNextFile(), and Print().

Definition at line 72 of file DDSFileHandler.h.

Referenced by GetCurrentFileName(), GoToFile(), and GoToNextFile().

std::string DDSFileHandler::fLastServedFile [private]

Definition at line 69 of file DDSFileHandler.h.

Referenced by GoToFile(), GoToNextFile(), and GoToSymLinkFile().

std::string DDSFileHandler::fLocalDataSourceDir [private]

Definition at line 64 of file DDSFileHandler.h.

Referenced by DDSFileHandler(), and IsModifiedDirectory().

bool DDSFileHandler::fOffLine [private]

Definition at line 73 of file DDSFileHandler.h.

Referenced by DDSFileHandler(), and IsOffLine().

Definition at line 68 of file DDSFileHandler.h.

Referenced by IsModifiedDirectory().

std::string DDSFileHandler::fSymLink [private]

Definition at line 65 of file DDSFileHandler.h.

Referenced by DDSFileHandler(), GetSymLinkTargetName(), IsModifiedSymLink(), and Print().

Definition at line 67 of file DDSFileHandler.h.

Referenced by GetSymLinkTargetName(), and IsModifiedSymLink().

std::string DDSFileHandler::fSymLinkTarget [private]

Definition at line 66 of file DDSFileHandler.h.

Referenced by GetSymLinkTargetName(), GoToNextFile(), NewFileAvailable(), and Print().

bool DDSFileHandler::fValid [private]

Definition at line 70 of file DDSFileHandler.h.

Referenced by DDSFileHandler(), and IsValid().


The documentation for this class was generated from the following files:

Generated on 2 Nov 2017 for loon by  doxygen 1.6.1