Go to the documentation of this file.00001 #ifndef _PARAM_SET_H
00002 #define _PARAM_SET_H
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
00028
00029
00030
00031 #ifndef __cplusplus
00032 #error This is a C++ include file and cannot be used from plain C
00033 #endif
00034
00035 #include <map>
00036 #include <vector>
00037 #include <string.h>
00038 #include <stdexcept>
00039 #include <stdlib.h>
00040 #include <xercesc/dom/DOMElement.hpp>
00041 #include <xercesc/dom/DOMNode.hpp>
00042 #include <xercesc/dom/DOMBuilder.hpp>
00043 #include <xercesc/util/PlatformUtils.hpp>
00044
00045 #include <IntParamDef.h>
00046 #include <IntArrayParamDef.h>
00047 #include <DoubleParamDef.h>
00048 #include <DoubleArrayParamDef.h>
00049 #include <StringParamDef.h>
00050 #include <StringArrayParamDef.h>
00051 #include <BoolParamDef.h>
00052 #include <ParamStrX.h>
00053 #include <parameterConstants.h>
00054
00055 using std::auto_ptr;
00056 using std::domain_error;
00057 using std::map;
00058 using std::string;
00059 using std::vector;
00060 using XERCES_CPP_NAMESPACE_QUALIFIER DOMNodeList;
00061 using XERCES_CPP_NAMESPACE_QUALIFIER DOMElement;
00062 using XERCES_CPP_NAMESPACE_QUALIFIER DOMBuilder;
00063
00066 namespace Parameters {
00067
00071 class ParamSetDef
00072 {
00073 public:
00074
00075 enum paramTypesEnum { BOOL, DOUBLE, DOUBLE_ARRAY, INT, INT_ARRAY, STRING, STRING_ARRAY};
00076
00081 ParamSetDef(const string & xmlParamSetDef);
00082
00086 virtual ~ParamSetDef();
00087
00094 paramTypesEnum getParamTypeForName(string paramName);
00095
00101 BoolParamDef getBoolParamDef(string paramName);
00102
00108 IntParamDef getIntParamDef(string paramName);
00109
00115 DoubleParamDef getDoubleParamDef(string paramName);
00116
00122 StringParamDef getStringParamDef(string paramName);
00123
00129 IntArrayParamDef getIntArrayParamDef(string paramName);
00130
00136 DoubleArrayParamDef getDoubleArrayParamDef(string paramName);
00137
00143 StringArrayParamDef getStringArrayParamDef(string paramName);
00144
00148 auto_ptr< vector<BoolParamDef> > getBoolParamDefs();
00149
00153 auto_ptr< vector<IntParamDef> > getIntParamDefs();
00154
00158 auto_ptr< vector<StringParamDef> > getStringParamDefs();
00159
00163 auto_ptr< vector<DoubleParamDef> > getDoubleParamDefs();
00164
00168 auto_ptr< vector<IntArrayParamDef> > getIntArrayParamDefs();
00169
00173 auto_ptr< vector<DoubleArrayParamDef> > getDoubleArrayParamDefs();
00174
00178 auto_ptr< vector<StringArrayParamDef> > getStringArrayParamDefs();
00179
00180
00181 private:
00182
00183 int parseFile(const string & xmlFile);
00184 int parseDOM(const string & xmlFile);
00185 int parseSAX(const string & xmlFile);
00189 void processParamDefNodes(DOMNodeList *paramNodes);
00193 void handleBoolParamDef(DOMElement *paramElem);
00197 void handleIntParamDef(DOMElement *paramElem);
00201 void handleIntArrayParamDef(DOMElement *paramElem);
00205 void handleDoubleParamDef(DOMElement *paramElem);
00209 void handleDoubleArrayParamDef(DOMElement *paramElem);
00213 void handleStringParamDef(DOMElement *paramElem);
00217 void handleStringArrayParamDef(DOMElement *paramElem);
00218 void setSchemaLocation(DOMBuilder * parser);
00219
00220 map<string, BoolParamDef> boolParamDefMap;
00221 map<string, IntParamDef> intParamDefMap;
00222 map<string, DoubleParamDef> doubleParamDefMap;
00223 map<string, StringParamDef> stringParamDefMap;
00224 map<string, IntArrayParamDef> intArrayParamDefMap;
00225 map<string, DoubleArrayParamDef> doubleArrayParamDefMap;
00226 map<string, StringArrayParamDef> stringArrayParamDefMap;
00227
00228
00229 XMLCh* PARAMETER_TAG_NAME;
00230 XMLCh* NAME_TAG_NAME;
00231 XMLCh* REQUIRED_TAG_NAME;
00232 XMLCh* PROMPT_TAG_NAME;
00233 XMLCh* HELP_TAG_NAME;
00234 XMLCh* DEFAULT_TAG_NAME;
00235 XMLCh* STRING_DEFAULT_TAG_NAME;
00236 XMLCh* LENGTH_TAG_NAME;
00237 XMLCh* VALID_VALUES_TAG_NAME;
00238 XMLCh* VALUE_TAG_NAME;
00239 XMLCh* MAX_TAG_NAME;
00240 XMLCh* MIN_TAG_NAME;
00241 XMLCh* UNITS_TAG_NAME;
00242 XMLCh* MAXLEN_TAG_NAME;
00243
00244 XMLCh* INT_PARAM_TYPE;
00245 XMLCh* DOUBLE_PARAM_TYPE;
00246 XMLCh* STRING_PARAM_TYPE;
00247 XMLCh* BOOL_PARAM_TYPE;
00248 XMLCh* INT_ARRAY_PARAM_TYPE;
00249 XMLCh* DOUBLE_ARRAY_PARAM_TYPE;
00250 XMLCh* STRING_ARRAY_PARAM_TYPE;
00251 };
00252 }
00253 #endif