void Parser::loadKeywords(const Json::JsonObject& jsonKeywords) { if (jsonKeywords.is_array()) { for (size_t index = 0; index < jsonKeywords.size(); index++) { Json::JsonObject jsonKeyword = jsonKeywords.get_array_item(index); ParserKeywordConstPtr parserKeyword(new ParserKeyword(jsonKeyword)); addKeyword(parserKeyword); } } else throw std::invalid_argument("Input JSON object is not an array"); }
void ParserKeyword::addItems(const Json::JsonObject& itemsConfig) { if( !itemsConfig.is_array() ) throw std::invalid_argument("The 'items' JSON item missing must be an array in keyword "+getName()+"."); size_t num_items = itemsConfig.size(); ParserRecord record; for (size_t i = 0; i < num_items; i++) { const Json::JsonObject& itemConfig = itemsConfig.get_array_item(i); record.addItem( ParserItem( itemConfig ) ); } this->addRecord( record ); }
ParserKeyword::ParserKeyword(const Json::JsonObject& jsonConfig) { if (jsonConfig.has_item("name")) { ParserKeywordSizeEnum sizeType = UNKNOWN; commonInit(jsonConfig.get_string("name"), sizeType); } else throw std::invalid_argument("Json object is missing the 'name' property"); if (jsonConfig.has_item("deck_names") || jsonConfig.has_item("deck_name_regex") ) // if either the deck names or the regular expression for deck names are // explicitly specified, we do not implicitly add the contents of the 'name' // item to the deck names... clearDeckNames(); initSize(jsonConfig); initDeckNames(jsonConfig); initSectionNames(jsonConfig); initMatchRegex(jsonConfig); if (jsonConfig.has_item("items") && jsonConfig.has_item("records")) throw std::invalid_argument("Fatal error in " + getName() + " configuration. Can NOT have both records: and items:"); if (jsonConfig.has_item("items")) { const Json::JsonObject itemsConfig = jsonConfig.get_item("items"); addItems(itemsConfig); } if (jsonConfig.has_item("records")) { const Json::JsonObject recordsConfig = jsonConfig.get_item("records"); if (recordsConfig.is_array()) { size_t num_records = recordsConfig.size(); for (size_t i = 0; i < num_records; i++) { const Json::JsonObject itemsConfig = recordsConfig.get_array_item(i); addItems(itemsConfig); } } else throw std::invalid_argument("The records item must point to an array item"); } if (jsonConfig.has_item("data")) initData(jsonConfig); if (jsonConfig.has_item("description")) { m_Description = jsonConfig.get_string("description"); } }
void ParserKeyword::initSectionNames(const Json::JsonObject& jsonObject) { if (!jsonObject.has_item("sections")) throw std::invalid_argument("The 'sections' JSON item of keyword "+m_name+" needs to be defined"); const Json::JsonObject namesObject = jsonObject.get_item("sections"); if (!namesObject.is_array()) throw std::invalid_argument("The 'sections' JSON item of keyword "+m_name+" needs to be a list"); m_validSectionNames.clear(); for (size_t nameIdx = 0; nameIdx < namesObject.size(); ++ nameIdx) { const Json::JsonObject nameObject = namesObject.get_array_item(nameIdx); if (!nameObject.is_string()) throw std::invalid_argument("The sub-items of 'sections' of keyword "+m_name+" need to be strings"); addValidSectionName(nameObject.as_string()); } }
void ParserKeyword::initDeckNames(const Json::JsonObject& jsonObject) { if (!jsonObject.has_item("deck_names")) return; const Json::JsonObject namesObject = jsonObject.get_item("deck_names"); if (!namesObject.is_array()) throw std::invalid_argument("The 'deck_names' JSON item of keyword "+m_name+" needs to be a list"); if (namesObject.size() > 0) m_deckNames.clear(); for (size_t nameIdx = 0; nameIdx < namesObject.size(); ++ nameIdx) { const Json::JsonObject nameObject = namesObject.get_array_item(nameIdx); if (!nameObject.is_string()) throw std::invalid_argument("The sub-items of 'deck_names' of keyword "+m_name+" need to be strings"); addDeckName(nameObject.as_string()); } }