00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "ArExport.h"
00028 #include "ariaOSDef.h"
00029 #include "ArConfigGroup.h"
00030 #include "ArArgumentBuilder.h"
00031 #include "ArLog.h"
00032
00033 ArConfigGroup::ArConfigGroup(const char *baseDirectory)
00034 {
00035 if (baseDirectory != NULL)
00036 myBaseDirectory = baseDirectory;
00037 else
00038 myBaseDirectory = "";
00039 }
00040
00041 ArConfigGroup::~ArConfigGroup(void)
00042 {
00043
00044 }
00045
00046 void ArConfigGroup::addConfig(ArConfig *config)
00047 {
00048 myConfigs.push_back(config);
00049 }
00050
00051 void ArConfigGroup::remConfig(ArConfig *config)
00052 {
00053 myConfigs.remove(config);
00054 }
00055
00056 bool ArConfigGroup::parseFile(const char *fileName,
00057 bool continueOnError)
00058 {
00059 std::list<ArConfig *>::iterator it;
00060 bool ret = true;
00061
00062 myLastFile = fileName;
00063
00064
00065
00066 for (it = myConfigs.begin(); it != myConfigs.end(); it++)
00067 {
00068 (*it)->setBaseDirectory(myBaseDirectory.c_str());
00069 }
00070
00071
00072 for (it = myConfigs.begin(); it != myConfigs.end(); it++)
00073 {
00074 if (!(*it)->parseFile(fileName, continueOnError))
00075 {
00076
00077
00078 ret = false;
00079
00080 if (!continueOnError)
00081 return false;
00082 }
00083 }
00084 return ret;
00085 }
00086
00087 bool ArConfigGroup::reloadFile(bool continueOnError)
00088 {
00089 return parseFile(myLastFile.c_str(), continueOnError);
00090 }
00091
00092 bool ArConfigGroup::writeFile(const char *fileName)
00093 {
00094 std::set<std::string> alreadyWritten;
00095 std::list<ArConfig *>::iterator it;
00096 bool ret = true;
00097 bool append = false;
00098
00099
00100
00101
00102 for (it = myConfigs.begin(); it != myConfigs.end(); it++)
00103 {
00104 (*it)->setBaseDirectory(myBaseDirectory.c_str());
00105 }
00106
00107
00108 for (it = myConfigs.begin(); it != myConfigs.end(); it++)
00109 {
00110 ArLog::log(ArLog::Verbose, "Writing config file");
00111 if (!(*it)->writeFile(fileName, append, &alreadyWritten))
00112 {
00113
00114
00115 ret = false;
00116 }
00117 append = true;
00118 }
00119 return ret;
00120
00121 }
00122
00123 void ArConfigGroup::setBaseDirectory(const char *baseDirectory)
00124 {
00125 myBaseDirectory = baseDirectory;
00126 }
00127
00128 const char *ArConfigGroup::getBaseDirectory(void) const
00129 {
00130 return myBaseDirectory.c_str();
00131 }