Teuchos_XMLObject.cpp
Go to the documentation of this file.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
00028
00029 #include "Teuchos_XMLObject.hpp"
00030 #include "Teuchos_StrUtils.hpp"
00031
00032 using namespace Teuchos;
00033
00034
00035
00036 XMLObject::XMLObject(const std::string& tag)
00037 : ptr_(rcp(new XMLObjectImplem(tag)))
00038 {}
00039
00040 XMLObject::XMLObject(XMLObjectImplem* ptr)
00041 : ptr_(rcp(ptr))
00042 {}
00043
00044 XMLObject XMLObject::deepCopy() const
00045 {
00046 if (is_null(ptr_))
00047 {
00048 return XMLObject();
00049 }
00050 return XMLObject(ptr_->deepCopy());
00051 }
00052
00053 const std::string& XMLObject::getTag() const
00054 {
00055 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00056 "XMLObject::getTag: XMLObject is empty");
00057 return ptr_->getTag();
00058 }
00059
00060 bool XMLObject::hasAttribute(const std::string& name) const
00061 {
00062 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00063 "XMLObject::hasAttribute: XMLObject is empty");
00064 return ptr_->hasAttribute(name);
00065 }
00066
00067 const std::string& XMLObject::getAttribute(const std::string& name) const
00068 {
00069 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00070 "XMLObject::getAttribute: XMLObject is empty");
00071 return ptr_->getAttribute(name);
00072 }
00073
00074 const std::string& XMLObject::getRequired(const std::string& name) const
00075 {
00076 TEST_FOR_EXCEPTION(!hasAttribute(name), std::runtime_error,
00077 "XMLObject::getRequired: key "
00078 << name << " not found");
00079 return getAttribute(name);
00080 }
00081
00082 std::string XMLObject::getWithDefault(const std::string& name,
00083 const std::string& defaultValue) const
00084 {
00085 if (hasAttribute(name)) return getRequired(name);
00086 else return defaultValue;
00087 }
00088
00089 bool XMLObject::getRequiredBool(const std::string& name) const
00090 {
00091 if (hasAttribute(name))
00092 {
00093 std::string val = StrUtils::allCaps(getRequired(name));
00094 if (val=="TRUE" || val=="YES" || val=="1")
00095 {
00096 return true;
00097 }
00098 else if (val=="FALSE" || val=="NO" || val=="0")
00099 {
00100 return false;
00101 }
00102 else
00103 {
00104 TEST_FOR_EXCEPTION(true, std::runtime_error,
00105 "XMLObject::getRequiredBool value [" << val
00106 << "] should have been {TRUE|FALSE|YES|NO|0|1}");
00107 }
00108 }
00109 return false;
00110 }
00111
00112 int XMLObject::numChildren() const
00113 {
00114 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00115 "XMLObject::numChildren: XMLObject is empty");
00116 return ptr_->numChildren();
00117 }
00118
00119 const XMLObject& XMLObject::getChild(int i) const
00120 {
00121 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00122 "XMLObject::getChild: XMLObject is empty");
00123 return ptr_->getChild(i);
00124 }
00125
00126 int XMLObject::numContentLines() const
00127 {
00128 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00129 "XMLObject::numContentLines: XMLObject is empty");
00130 return ptr_->numContentLines();
00131 }
00132
00133 const std::string& XMLObject::getContentLine(int i) const
00134 {
00135 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00136 "XMLObject::getContentLine: XMLObject is empty");
00137 return ptr_->getContentLine(i);
00138 }
00139
00140 std::string XMLObject::toString() const
00141 {
00142 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00143 "XMLObject::toString: XMLObject is empty");
00144 return ptr_->toString();
00145 }
00146
00147 void XMLObject::print(std::ostream& os, int indent) const
00148 {
00149 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00150 "XMLObject::print: XMLObject is empty");
00151 ptr_->print(os, indent);
00152 }
00153
00154 std::string XMLObject::header() const
00155 {
00156 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00157 "XMLObject::header: XMLObject is empty");
00158 return ptr_->header();
00159 }
00160
00161 std::string XMLObject::terminatedHeader() const
00162 {
00163 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00164 "XMLObject::terminatedHeader: XMLObject is empty");
00165 return ptr_->terminatedHeader();
00166 }
00167
00168 std::string XMLObject::footer() const
00169 {
00170 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00171 "XMLObject::footer: XMLObject is empty");
00172 return ptr_->footer();
00173 }
00174
00175 void XMLObject::checkTag(const std::string& expected) const
00176 {
00177 TEST_FOR_EXCEPTION(getTag() != expected, std::runtime_error,
00178 "XMLObject::checkTag error: expected <"
00179 << expected << ">, found <"
00180 << getTag() << ">");
00181 }
00182
00183 void XMLObject::addAttribute(const std::string& name, const std::string& value)
00184 {
00185 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00186 "XMLObject::addAttribute: XMLObject is empty");
00187 ptr_->addAttribute(name, value);
00188 }
00189
00190 void XMLObject::addChild(const XMLObject& child)
00191 {
00192 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00193 "XMLObject::addChild: XMLObject is empty");
00194 ptr_->addChild(child);
00195 }
00196
00197 void XMLObject::addContent(const std::string& contentLine)
00198 {
00199 TEST_FOR_EXCEPTION(is_null(ptr_), Teuchos::EmptyXMLError,
00200 "XMLObject::addContent: XMLObject is empty");
00201 ptr_->addContent(contentLine);
00202 }