29 #include "ReadMetadataElement.h"
30 #include "NetcdfElement.h"
31 #include "NCMLDebug.h"
32 #include "NCMLParser.h"
37 const string ReadMetadataElement::_sTypeName =
"readMetadata";
38 const vector<string> ReadMetadataElement::_sValidAttributes = vector<string>();
40 ReadMetadataElement::ReadMetadataElement() :
41 RCObjectInterface(), NCMLElement(0)
45 ReadMetadataElement::ReadMetadataElement(
const ReadMetadataElement& proto) :
46 RCObjectInterface(), NCMLElement(proto)
50 ReadMetadataElement::~ReadMetadataElement()
55 ReadMetadataElement::getTypeName()
const
61 ReadMetadataElement::clone()
const
70 validateAttributes(attrs, _sValidAttributes);
73 void ReadMetadataElement::handleBegin()
75 if (!_parser->isScopeNetcdf()) {
76 THROW_NCML_PARSE_ERROR(_parser->getParseLineNumber(),
"Got <readMetadata/> while not within <netcdf>");
82 if (dataset->getProcessedMetadataDirective()) {
83 THROW_NCML_PARSE_ERROR(_parser->getParseLineNumber(),
84 "Got " + toString() +
" element but we already got a metadata directive"
85 " for the current dataset! Only one may be specified.");
87 dataset->setProcessedMetadataDirective();
90 void ReadMetadataElement::handleContent(
const string& content)
92 if (!NCMLUtil::isAllWhitespace(content)) {
93 THROW_NCML_PARSE_ERROR(_parser->getParseLineNumber(),
94 "Got non-whitespace for element content and didn't expect it."
95 " Element=" + toString() +
" content=\"" + content +
"\"");
99 void ReadMetadataElement::handleEnd()
103 string ReadMetadataElement::toString()
const
105 return "<" + _sTypeName +
">";