From 9bd863c9002b525b7827f9158d9136143393be5c Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Mon, 23 Jan 2017 11:49:51 -0500 Subject: Added verb frame parsing --- lib/group.cpp | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'lib/group.cpp') diff --git a/lib/group.cpp b/lib/group.cpp index 8b6d985..d5790e9 100644 --- a/lib/group.cpp +++ b/lib/group.cpp @@ -1,43 +1,61 @@ #include "group.h" #include -#include "frame.h" +#include #include "database.h" #include "query.h" namespace verbly { - + const object group::objectType = object::group; - + const std::list group::select = {"group_id", "data"}; - + const field group::id = field::integerField(object::group, "group_id"); - + const field group::frame = field::joinThrough(object::group, "group_id", object::frame, "groups_frames", "frame_id"); const field group::word = field::joinField(object::group, "group_id", object::word); - + group::group(const database& db, sqlite3_stmt* row) : db_(&db), valid_(true) { id_ = sqlite3_column_int(row, 0); - - // TODO: Initialize role data from row. + + std::string rolesJsonStr(reinterpret_cast(sqlite3_column_blob(row, 1))); + nlohmann::json rolesJson = nlohmann::json::parse(std::move(rolesJsonStr)); + for (const nlohmann::json& roleJson : rolesJson) + { + std::string roleName = roleJson["type"]; + selrestr roleSelrestr; + + if (roleJson.find("selrestrs") != roleJson.end()) + { + roleSelrestr = selrestr(roleJson["selrestrs"]); + } + + roles_[roleName] = role(roleName, std::move(roleSelrestr)); + } } - + const std::vector& group::getFrames() const { if (!valid_) { throw std::domain_error("Bad access to uninitialized group"); } - + if (!initializedFrames_) { frames_ = db_->frames(frame::group %= *this, false, -1).all(); - + initializedFrames_ = true; } - + return frames_; } - + + const role& group::getRole(std::string roleName) const + { + return roles_.at(roleName); + } + }; -- cgit 1.4.1