void ProgramOptions::validate() const { SetString missing; for (OptionGroupMap::const_iterator it = groups.begin(); it != groups.end(); ++it){ findMissingOptions(it->second, missing); } Size sz = missing.size(); if (sz > 0 ) { String buffer; std::stringstream ss(buffer); Size index = 0; for (SetString::const_iterator it = missing.begin(); it != missing.end(); ++it){ ss << *it; if (index + 1 < sz) ss << ","; ++index; } THROW_MSG(CoreText::instance().missingOption(ss.str())); } }
OptionsParser::OptionsParser(const QString& fileName, QObject *parent) : QObject(parent) , fileName_(fileName) { QFile optionsFile(fileName_); QFile defaultsFile(":/cleanerplugin/default.xml"); QDomDocument optionsDoc, defaultsDoc; optionsDoc.setContent(&optionsFile); defaultsDoc.setContent(&defaultsFile); QDomElement optionsElement = optionsDoc.documentElement(); QDomElement defaultsElement = defaultsDoc.documentElement(); defaultsElement_ = defaultsElement.firstChildElement("options"); optionsElement_ = optionsElement.firstChildElement("options"); QString root; findMissingOptions(optionsElement_, &root); }
void OptionsParser::findMissingOptions(const QDomElement& optElement, QString *root) { QDomNode optionNode = optElement.firstChild(); while(!optionNode.isNull()) { if(!findNode(optionNode.toElement())) { QString nodeString = *root + optElement.tagName() + "." + optionNode.toElement().tagName(); missingNodes[nodeString] = optionNode; } QDomNode childNode = optionNode.firstChild(); while(!childNode.isNull()) { QString childRoot = *root + optElement.tagName()+"." + optionNode.toElement().tagName() + "."; findMissingOptions(childNode.toElement(), &childRoot); childNode = childNode.nextSibling(); } optionNode = optionNode.nextSibling(); } *root += optElement.tagName()+"."; }
void ProgramOptions::findMissingOptions(const OptionGroup& group, SetString& missing) const { for (OptionMap::const_iterator it = group.getOptions().begin(); it != group.getOptions().end(); ++it) { if (it->second.isMandatory() && !isOptionDefined (it->first)){ missing.insert(it->second.getName()); } } for (OptionGroupMap::const_iterator git = group.getGroups().begin(); git != group.getGroups().end(); ++git) { findMissingOptions(git->second, missing); } }