#include <HierarchyConfigReader.h>
Inheritance diagram for Tools::HierarchicalConfigurationReader:
Public Member Functions | |
virtual String * | className (void) const |
Answer receiver class name. | |
virtual Configuration * | readConfiguration (Configuration *configuration) |
virtual void | readLine (void) |
virtual String * | parseLine (void) |
virtual void | parseAssignment (String *line) |
virtual void | parseBlockOpenning (String *line) |
virtual void | parseBlockClosing (String *line) |
virtual Configuration * | getConfigurationFor (String *path) |
virtual void | pushConfiguration (void) |
virtual void | popConfiguration (void) |
Protected Attributes | |
OrderedCollection * | stack |
It allows to have nested configurations inside one file. Nested configuration can be specified like this:
topLevelItem = value1 nestedConfig1 { nestedLevelItem1 = value2 } nestedConfig2.nestedLevelItem2 = value3 nestedConfig2.nestedLevelItem3 = value4
Definition at line 44 of file HierarchyConfigReader.h.
|
Answer receiver class name. Because there isn't any standard way to obtain class name this method comes to place. Every class should rewrite this method but many didn't (yet). Reimplemented from Core::Object. Definition at line 34 of file HierarchyConfigReader.cc. 00035 { 00036 return new String("HierarchicalConfigurationReader"); 00037 }
|
|
Definition at line 131 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_configuration, Tools::Configuration::at(), Core::String::copy(), Core::String::indexOf(), Tools::Configuration::instances(), nil, Tools::ConfigurationReader::put(), and Core::String::size(). Referenced by parseAssignment(). 00132 { 00133 Configuration *config = _configuration; 00134 String *item; 00135 int index; 00136 00137 do { 00138 index = path->indexOf('.'); 00139 if (index < 0) item = path; 00140 else { 00141 item = dynamic_cast<String *>(path->copy(0, index)); 00142 path = dynamic_cast<String *>(path->copy(index + 1, path->size())); 00143 } 00144 config = dynamic_cast<Configuration *>(config->at(item, nil)); 00145 if (config == nil) { 00146 Configuration *subConfig = new Configuration; 00147 put(item, subConfig); 00148 Configuration::instances()->put(item, subConfig); 00149 config = subConfig; 00150 } 00151 } while (item != path); 00152 00153 return config; 00154 }
|
|
Definition at line 89 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_configuration, Core::String::copy(), getConfigurationFor(), Core::Collection::isEmpty(), Core::String::lastIndexOf(), Tools::Configuration::put(), Core::String::size(), and Core::String::trimBlanks(). Referenced by readLine(). 00090 { 00091 String *path, *item, *value; 00092 Configuration *config; 00093 long idx = line->indexOf('='); 00094 00095 path = dynamic_cast<String *>(line->copy(0, idx))->trimBlanks(); 00096 if (path->isEmpty()) return; 00097 value = dynamic_cast<String *>(line->copy(idx + 1, line->size()))->trimBlanks(); 00098 00099 idx = path->lastIndexOf('.'); 00100 if (idx < 0) { 00101 item = path; 00102 config = _configuration; 00103 } else { 00104 item = dynamic_cast<String *>(path->copy(idx + 1, path->size())); 00105 path = dynamic_cast<String *>(path->copy(0, idx)); 00106 config = getConfigurationFor(path); 00107 } 00108 config->put(item, value); 00109 }
|
|
Definition at line 125 of file HierarchyConfigReader.cc. References popConfiguration(). Referenced by readLine(). 00126 { 00127 popConfiguration(); 00128 }
|
|
Definition at line 111 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_configuration, Core::Object::error(), Tools::Configuration::instances(), pushConfiguration(), and Tools::ConfigurationReader::put(). Referenced by readLine(). 00112 { 00113 Configuration *subConfig = new Configuration; 00114 line = line->trimBlanks(); 00115 if (line->isEmpty()) { 00116 error(new String("Configration parse error: block must have a name."), 00117 new String(__PRETTY_FUNCTION__), this); 00118 } 00119 put(line, subConfig); 00120 Configuration::instances()->put(line, subConfig); 00121 pushConfiguration(); 00122 _configuration = subConfig; 00123 }
|
|
Definition at line 74 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_stream, Core::String::copy(), Core::String::indexOf(), Core::Stream::nextLine(), Core::SequenceableCollection::replaceAll(), and Core::String::trimBlanks(). Referenced by readLine(). 00075 { 00076 String *line; 00077 long idx; 00078 00079 line = dynamic_cast<String *>(_stream->nextLine()); 00080 line->replaceAll(Character::tab(), Character::space()); 00081 00082 /* Remove comments */ 00083 idx = line->indexOf('#'); 00084 if (idx > 0) line = dynamic_cast<String *>(line->copy(0, idx)); 00085 line = line->trimBlanks(); 00086 return line; 00087 }
|
|
Definition at line 161 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_configuration, Core::OrderedCollection::removeFirst(), and stack. Referenced by parseBlockClosing(). 00162 { 00163 _configuration = dynamic_cast<Configuration *>(stack->removeFirst()); 00164 }
|
|
Definition at line 156 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::_configuration, Core::OrderedCollection::addFirst(), and stack. Referenced by parseBlockOpenning(). 00157 { 00158 stack->addFirst(_configuration); 00159 }
|
|
Reimplemented from Tools::ConfigurationReader. Definition at line 40 of file HierarchyConfigReader.cc. References Tools::ConfigurationReader::readConfiguration(), and stack. 00041 { 00042 stack = new OrderedCollection; 00043 return ConfigurationReader::readConfiguration(configuration); 00044 }
|
|
Reimplemented from Tools::ConfigurationReader. Definition at line 46 of file HierarchyConfigReader.cc. References Core::String::copy(), Core::SequenceableCollection::copyReplace(), Core::SequenceableCollection::first(), Core::String::indexOf(), Core::Collection::isEmpty(), Core::SequenceableCollection::last(), parseAssignment(), parseBlockClosing(), parseBlockOpenning(), parseLine(), and Core::String::size(). 00047 { 00048 String *line = parseLine(); 00049 00050 if (line->isEmpty()) return; 00051 00052 /* On backslash concatenate next line */ 00053 while (line->last()->isEqual(Character::value('\\'))) { 00054 line = dynamic_cast<String *>( 00055 line->copyReplace(line->size()-1, line->size(), parseLine())); 00056 } 00057 00058 if (line->first()->isEqual(Character::value('}'))) { 00059 parseBlockClosing(line); 00060 } else { 00061 long idx; 00062 idx = line->indexOf('{'); 00063 if (idx > 0 && idx < line->size()) { 00064 parseBlockOpenning(dynamic_cast<String *>(line->copy(0, idx-1))); 00065 } else { 00066 idx = line->indexOf('='); 00067 if (idx > 0 && idx < line->size()) { 00068 parseAssignment(line); 00069 } 00070 } 00071 } 00072 }
|
|
Definition at line 47 of file HierarchyConfigReader.h. Referenced by popConfiguration(), pushConfiguration(), and readConfiguration(). |