1 #include "otsdaq-core/ConfigurationInterface/FileConfigurationInterface.h"
7 #include "otsdaq-core/ConfigurationInterface/ConfigurationHandler.h"
8 #include "otsdaq-core/Macros/CoutMacros.h"
9 #include "otsdaq-core/MessageFacility/MessageFacility.h"
10 #include "otsdaq-core/TableCore/TableBase.h"
15 void FileConfigurationInterface::fill(
TableBase* configuration,
18 ConfigurationHandler::readXML(configuration, version);
24 TableVersion FileConfigurationInterface::findLatestVersion(
27 auto versions = getVersions(configuration);
30 return *(versions.rbegin());
35 void FileConfigurationInterface::saveActiveVersion(
const TableBase* configuration,
38 ConfigurationHandler::writeXML(configuration);
42 std::set<TableVersion> FileConfigurationInterface::getVersions(
45 std::string configDir = ConfigurationHandler::getXMLDir(configuration);
46 std::cout << __COUT_HDR_FL__ <<
"ConfigurationDir: " << configDir << std::endl;
51 if((dp = opendir(configDir.c_str())) == 0)
53 __SS__ <<
"ERROR:(" << errno <<
"). Can't open directory: " << configDir
55 __COUT_ERR__ << ss.str();
59 const unsigned char isDir = 0x4;
63 std::string::const_iterator it;
65 std::set<TableVersion> dirNumbers;
67 while((dirp = readdir(dp)) != 0)
69 if(dirp->d_type == isDir && dirp->d_name[0] !=
'.')
71 dirName = dirp->d_name;
75 while(it != dirName.end() && std::isdigit(*it))
78 if(dirName.empty() || it != dirName.end())
80 std::cout << __COUT_HDR_FL__
81 <<
"WARNING: there is a non numeric directory in " << configDir
82 <<
" called " << dirName
83 <<
" please remove it from there since only numeric "
84 "directories are considered."
89 dirNumbers.insert(
TableVersion(strtol(dirp->d_name, 0, 10)));