$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #include "otsdaq-core/ConfigurationInterface/FileConfigurationInterface.h" 00002 #include <dirent.h> 00003 #include <errno.h> 00004 #include <iostream> 00005 #include <set> 00006 00007 #include "otsdaq-core/ConfigurationInterface/ConfigurationHandler.h" 00008 #include "otsdaq-core/Macros/CoutMacros.h" 00009 #include "otsdaq-core/MessageFacility/MessageFacility.h" 00010 #include "otsdaq-core/TableCore/TableBase.h" 00011 00012 using namespace ots; 00013 00014 //============================================================================== 00015 void FileConfigurationInterface::fill(TableBase* configuration, 00016 TableVersion version) const 00017 { 00018 ConfigurationHandler::readXML(configuration, version); 00019 } 00020 00021 //============================================================================== 00022 // findLatestVersion 00023 // return INVALID if no existing versions 00024 TableVersion FileConfigurationInterface::findLatestVersion( 00025 const TableBase* configuration) const 00026 { 00027 auto versions = getVersions(configuration); 00028 if(!versions.size()) 00029 return TableVersion(); // return INVALID 00030 return *(versions.rbegin()); 00031 } 00032 00033 //============================================================================== 00034 // save active configuration view to file 00035 void FileConfigurationInterface::saveActiveVersion(const TableBase* configuration, 00036 bool overwrite) const 00037 { 00038 ConfigurationHandler::writeXML(configuration); 00039 } 00040 00041 //============================================================================== 00042 std::set<TableVersion> FileConfigurationInterface::getVersions( 00043 const TableBase* configuration) const 00044 { 00045 std::string configDir = ConfigurationHandler::getXMLDir(configuration); 00046 std::cout << __COUT_HDR_FL__ << "ConfigurationDir: " << configDir << std::endl; 00047 DIR* dp; 00048 00049 struct dirent* dirp; 00050 00051 if((dp = opendir(configDir.c_str())) == 0) 00052 { 00053 __SS__ << "ERROR:(" << errno << "). Can't open directory: " << configDir 00054 << std::endl; 00055 __COUT_ERR__ << ss.str(); 00056 __SS_THROW__; 00057 } 00058 00059 const unsigned char isDir = 0x4; 00060 // const std::string pDir = "."; 00061 // const std::string ppDir = ".."; 00062 // int dirVersion; 00063 std::string::const_iterator it; 00064 std::string dirName; 00065 std::set<TableVersion> dirNumbers; 00066 00067 while((dirp = readdir(dp)) != 0) 00068 { 00069 if(dirp->d_type == isDir && dirp->d_name[0] != '.') 00070 { 00071 dirName = dirp->d_name; 00072 // Check if there are non numeric directories 00073 it = dirName.begin(); 00074 00075 while(it != dirName.end() && std::isdigit(*it)) 00076 ++it; 00077 00078 if(dirName.empty() || it != dirName.end()) 00079 { 00080 std::cout << __COUT_HDR_FL__ 00081 << "WARNING: there is a non numeric directory in " << configDir 00082 << " called " << dirName 00083 << " please remove it from there since only numeric " 00084 "directories are considered." 00085 << std::endl; 00086 continue; 00087 } 00088 00089 dirNumbers.insert(TableVersion(strtol(dirp->d_name, 0, 10))); 00090 } 00091 } 00092 closedir(dp); 00093 return dirNumbers; 00094 }