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