diff options
Diffstat (limited to 'src/components/smart_objects')
7 files changed, 162 insertions, 127 deletions
diff --git a/src/components/smart_objects/include/smart_objects/object_schema_item.h b/src/components/smart_objects/include/smart_objects/object_schema_item.h index 7f51ae5678..ee42b36620 100644 --- a/src/components/smart_objects/include/smart_objects/object_schema_item.h +++ b/src/components/smart_objects/include/smart_objects/object_schema_item.h @@ -45,55 +45,57 @@ namespace ns_smart_device_link { namespace ns_smart_objects { + /** - * @brief Object schema item. + * @brief Object member. **/ -class CObjectSchemaItem : public ISchemaItem { - public: +struct SMember { /** - * @brief Object member. + * @brief Default constructor. + **/ + SMember(); + /** + * @brief Constructor. + * @param SchemaItem Member schema item. + * @param IsMandatory true if member is mandatory, false + * otherwise. Defaults to true. **/ - struct SMember { - /** - * @brief Default constructor. - **/ - SMember(); - /** - * @brief Constructor. - * @param SchemaItem Member schema item. - * @param IsMandatory true if member is mandatory, false - * otherwise. Defaults to true. - **/ - SMember(const ISchemaItemPtr SchemaItem, - const bool IsMandatory = true, - const std::string& Since = "", - const std::string& Until = "", - const bool IsDeprecated = false, - const bool IsRemoved = false, - const std::vector<CObjectSchemaItem::SMember>& history_vector = {}); - /** - * @brief Checks the version a parameter was removed (until) - * If the mobile's msg version is greater than or - **/ - bool CheckHistoryFieldVersion( - const utils::SemanticVersion& MessageVersion) const; + SMember(const ISchemaItemPtr SchemaItem, + const bool IsMandatory = true, + const std::string& Since = "", + const std::string& Until = "", + const bool IsDeprecated = false, + const bool IsRemoved = false, + const std::vector<SMember>& history_vector = {}); + /** + * @brief Checks the version a parameter was removed (until) + * If the mobile's msg version is greater than or + **/ + bool CheckHistoryFieldVersion( + const utils::SemanticVersion& MessageVersion) const; + + /** + * @brief Member schema item. + **/ + ISchemaItemPtr mSchemaItem; + /** + * @brief true if member is mandatory, false otherwise. + **/ + bool mIsMandatory; + boost::optional<utils::SemanticVersion> mSince; + boost::optional<utils::SemanticVersion> mUntil; + bool mIsDeprecated; + bool mIsRemoved; + std::vector<SMember> mHistoryVector; +}; +typedef std::map<std::string, SMember> Members; - /** - * @brief Member schema item. - **/ - ISchemaItemPtr mSchemaItem; - /** - * @brief true if member is mandatory, false otherwise. - **/ - bool mIsMandatory; - boost::optional<utils::SemanticVersion> mSince; - boost::optional<utils::SemanticVersion> mUntil; - bool mIsDeprecated; - bool mIsRemoved; - std::vector<CObjectSchemaItem::SMember> mHistoryVector; - }; - typedef std::map<std::string, SMember> Members; +/** + * @brief Object schema item. + **/ +class CObjectSchemaItem : public ISchemaItem { + public: /** * @brief Create a new schema item. * @@ -153,6 +155,12 @@ class CObjectSchemaItem : public ISchemaItem { */ size_t GetMemberSize() OVERRIDE; + boost::optional<SMember&> GetMemberSchemaItem( + const std::string& member_key) OVERRIDE; + + void AddMemberSchemaItem(const std::string& member_key, + SMember& member) OVERRIDE; + protected: /** * @brief Constructor. @@ -173,14 +181,14 @@ class CObjectSchemaItem : public ISchemaItem { * @param member Schema member * @param MmessageVersion Semantic Version of mobile message. **/ - const CObjectSchemaItem::SMember& GetCorrectMember( - const SMember& member, const utils::SemanticVersion& messageVersion); + const SMember& GetCorrectMember(const SMember& member, + const utils::SemanticVersion& messageVersion); /** * @brief Map of member name to SMember structure describing the object *member. **/ - const Members mMembers; + Members mMembers; DISALLOW_COPY_AND_ASSIGN(CObjectSchemaItem); }; } // namespace ns_smart_objects diff --git a/src/components/smart_objects/include/smart_objects/schema_item.h b/src/components/smart_objects/include/smart_objects/schema_item.h index fa5f6d3adc..9c29e66f36 100644 --- a/src/components/smart_objects/include/smart_objects/schema_item.h +++ b/src/components/smart_objects/include/smart_objects/schema_item.h @@ -40,12 +40,14 @@ #include <memory> #include <vector> +#include "boost/optional/optional.hpp" #include "utils/macro.h" #include "utils/semantic_version.h" namespace ns_smart_device_link { namespace ns_smart_objects { class SmartObject; +class SMember; /** * @brief Base schema item. @@ -123,6 +125,17 @@ class ISchemaItem { virtual void BuildObjectBySchema(const SmartObject& pattern_object, SmartObject& result_object); + virtual boost::optional<SMember&> GetMemberSchemaItem( + const std::string& member_key) { + UNUSED(member_key); + return boost::optional<SMember&>(); + } + + virtual void AddMemberSchemaItem(const std::string& member_key, + SMember& member) { + UNUSED(member_key); + UNUSED(member); + } /** * @brief Get value param, depends of children * diff --git a/src/components/smart_objects/include/smart_objects/smart_schema.h b/src/components/smart_objects/include/smart_objects/smart_schema.h index 936f49c11e..8cbafa53b2 100644 --- a/src/components/smart_objects/include/smart_objects/smart_schema.h +++ b/src/components/smart_objects/include/smart_objects/smart_schema.h @@ -86,6 +86,13 @@ class CSmartSchema FINAL { void setSchemaItem(const ISchemaItemPtr SchemaItem); /** + * @brief Set new root schema item. + * + * @param SchemaItem Root schema item. + */ + ISchemaItemPtr getSchemaItem(); + + /** * @brief Apply schema. * * @param Object Object to apply schema. diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc index be1c73fb85..01e4ec46e0 100644 --- a/src/components/smart_objects/src/object_schema_item.cc +++ b/src/components/smart_objects/src/object_schema_item.cc @@ -44,20 +44,19 @@ const char app_id[] = "appID"; namespace ns_smart_device_link { namespace ns_smart_objects { -CObjectSchemaItem::SMember::SMember() +SMember::SMember() : mSchemaItem(CAlwaysFalseSchemaItem::create()) , mIsMandatory(true) , mIsDeprecated(false) , mIsRemoved(false) {} -CObjectSchemaItem::SMember::SMember( - const ISchemaItemPtr SchemaItem, - const bool IsMandatory, - const std::string& Since, - const std::string& Until, - const bool IsDeprecated, - const bool IsRemoved, - const std::vector<CObjectSchemaItem::SMember>& history_vector) +SMember::SMember(const ISchemaItemPtr SchemaItem, + const bool IsMandatory, + const std::string& Since, + const std::string& Until, + const bool IsDeprecated, + const bool IsRemoved, + const std::vector<SMember>& history_vector) : mSchemaItem(SchemaItem), mIsMandatory(IsMandatory) { if (Since.size() > 0) { utils::SemanticVersion since_struct(Since); @@ -76,7 +75,7 @@ CObjectSchemaItem::SMember::SMember( mHistoryVector = history_vector; } -bool CObjectSchemaItem::SMember::CheckHistoryFieldVersion( +bool SMember::CheckHistoryFieldVersion( const utils::SemanticVersion& MessageVersion) const { if (MessageVersion.isValid()) { if (mSince != boost::none) { @@ -153,6 +152,7 @@ errors::eType CObjectSchemaItem::validate( } object_keys.erase(key_it); } + return errors::OK; } @@ -169,10 +169,10 @@ void CObjectSchemaItem::applySchema( } SmartObject default_value; - for (Members::const_iterator it = mMembers.begin(); it != mMembers.end(); - ++it) { - const std::string& key = it->first; - const SMember& member = it->second; + + for (const auto& item : mMembers) { + const std::string& key = item.first; + const SMember& member = item.second; if (!Object.keyExists(key)) { if (member.mSchemaItem->setDefaultValue(default_value)) { Object[key] = default_value; @@ -201,7 +201,6 @@ void CObjectSchemaItem::unapplySchema(SmartObject& Object, Object.erase(key); } } - for (Members::const_iterator it = mMembers.begin(); it != mMembers.end(); ++it) { const std::string& key = it->first; @@ -232,6 +231,21 @@ size_t CObjectSchemaItem::GetMemberSize() { return mMembers.size(); } +boost::optional<SMember&> CObjectSchemaItem::GetMemberSchemaItem( + const std::string& member_key) { + auto it = mMembers.find(member_key); + + if (it != mMembers.end()) { + return boost::optional<SMember&>(it->second); + } + return boost::optional<SMember&>(); +} + +void CObjectSchemaItem::AddMemberSchemaItem(const std::string& member_key, + SMember& member) { + mMembers[member_key] = member; +} + CObjectSchemaItem::CObjectSchemaItem(const Members& members) : mMembers(members) {} @@ -260,7 +274,7 @@ void CObjectSchemaItem::RemoveFakeParams( } } -const CObjectSchemaItem::SMember& CObjectSchemaItem::GetCorrectMember( +const SMember& CObjectSchemaItem::GetCorrectMember( const SMember& member, const utils::SemanticVersion& messageVersion) { // Check if member is the correct version if (member.CheckHistoryFieldVersion(messageVersion)) { diff --git a/src/components/smart_objects/src/smart_schema.cc b/src/components/smart_objects/src/smart_schema.cc index 4ab5e5ff23..6107d19266 100644 --- a/src/components/smart_objects/src/smart_schema.cc +++ b/src/components/smart_objects/src/smart_schema.cc @@ -53,6 +53,10 @@ void CSmartSchema::setSchemaItem(const ISchemaItemPtr schemaItem) { mSchemaItem = schemaItem; } +ISchemaItemPtr CSmartSchema::getSchemaItem() { + return mSchemaItem; +} + void CSmartSchema::applySchema(SmartObject& Object, const bool remove_unknown_parameters, const utils::SemanticVersion& MessageVersion) { diff --git a/src/components/smart_objects/test/CObjectSchemaItem_test.cc b/src/components/smart_objects/test/CObjectSchemaItem_test.cc index 51085040c5..8a7d09f31e 100644 --- a/src/components/smart_objects/test/CObjectSchemaItem_test.cc +++ b/src/components/smart_objects/test/CObjectSchemaItem_test.cc @@ -117,28 +117,27 @@ class ObjectSchemaItemTest : public ::testing::Test { resultCode_values.insert(ResultType::GENERIC_ERROR); resultCode_values.insert(ResultType::DISALLOWED); - CObjectSchemaItem::Members paramsMembersMap; - paramsMembersMap[S_FUNCTION_ID] = CObjectSchemaItem::SMember( + Members paramsMembersMap; + paramsMembersMap[S_FUNCTION_ID] = SMember( TEnumSchemaItem<FunctionID::eType>::create(function_values), true); paramsMembersMap[S_CORRELATION_ID] = - CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true); - paramsMembersMap[S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember( - TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(1), - TSchemaItemParameter<int>(2)), - true); - - CObjectSchemaItem::Members schemaMembersMap; - schemaMembersMap[Keys::RESULT_CODE] = CObjectSchemaItem::SMember( + SMember(TNumberSchemaItem<int>::create(), true); + paramsMembersMap[S_PROTOCOL_VERSION] = + SMember(TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(1), + TSchemaItemParameter<int>(2)), + true); + + Members schemaMembersMap; + schemaMembersMap[Keys::RESULT_CODE] = SMember( TEnumSchemaItem<ResultType::eType>::create(resultCode_values), false); - schemaMembersMap[Keys::INFO] = CObjectSchemaItem::SMember( - CStringSchemaItem::create(TSchemaItemParameter<size_t>(0), - TSchemaItemParameter<size_t>(10)), - false); - schemaMembersMap[Keys::SUCCESS] = - CObjectSchemaItem::SMember(CBoolSchemaItem::create(), false); + schemaMembersMap[Keys::INFO] = + SMember(CStringSchemaItem::create(TSchemaItemParameter<size_t>(0), + TSchemaItemParameter<size_t>(10)), + false); + schemaMembersMap[Keys::SUCCESS] = SMember(CBoolSchemaItem::create(), false); // Create fake param that has breaking history changes - std::vector<CObjectSchemaItem::SMember> fake_param_history_vector; + std::vector<SMember> fake_param_history_vector; std::shared_ptr<ISchemaItem> fake_param_SchemaItem = CArraySchemaItem::create( @@ -156,22 +155,21 @@ class ObjectSchemaItemTest : public ::testing::Test { TSchemaItemParameter<size_t>(1), TSchemaItemParameter<size_t>(100)); - fake_param_history_vector.push_back(CObjectSchemaItem::SMember( + fake_param_history_vector.push_back(SMember( fake_param_history_v1_SchemaItem, true, "", "4.5.0", false, false)); - schemaMembersMap["fakeParam"] = - CObjectSchemaItem::SMember(fake_param_SchemaItem, - false, - "4.5.0", - "", - false, - false, - fake_param_history_vector); - - CObjectSchemaItem::Members rootMembersMap; - rootMembersMap[S_PARAMS] = CObjectSchemaItem::SMember( - CObjectSchemaItem::create(paramsMembersMap), true); - rootMembersMap[S_MSG_PARAMS] = CObjectSchemaItem::SMember( - CObjectSchemaItem::create(schemaMembersMap), true); + schemaMembersMap["fakeParam"] = SMember(fake_param_SchemaItem, + false, + "4.5.0", + "", + false, + false, + fake_param_history_vector); + + Members rootMembersMap; + rootMembersMap[S_PARAMS] = + SMember(CObjectSchemaItem::create(paramsMembersMap), true); + rootMembersMap[S_MSG_PARAMS] = + SMember(CObjectSchemaItem::create(schemaMembersMap), true); schema_item = CObjectSchemaItem::create(rootMembersMap); } diff --git a/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc b/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc index edcb09c604..555239c489 100644 --- a/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc +++ b/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc @@ -252,21 +252,20 @@ class SmartObjectConvertionTimeTest : public ::testing::Test { TEnumSchemaItem<MessageTypeTest::eType>::create( messageType_allowedEnumSubsetValues); - CObjectSchemaItem::Members paramsMembersMap; + Members paramsMembersMap; paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_FUNCTION_ID] = - CObjectSchemaItem::SMember(functionId_SchemaItem, true); + SMember(functionId_SchemaItem, true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_MESSAGE_TYPE] = - CObjectSchemaItem::SMember(messageType_SchemaItem, true); + SMember(messageType_SchemaItem, true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_CORRELATION_ID] = - CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true); + SMember(TNumberSchemaItem<int>::create(), true); - std::map<std::string, CObjectSchemaItem::SMember> rootMembersMap; + std::map<std::string, SMember> rootMembersMap; rootMembersMap[ns_smart_device_link::ns_json_handler::strings::S_PARAMS] = - CObjectSchemaItem::SMember(CObjectSchemaItem::create(paramsMembersMap), - true); + SMember(CObjectSchemaItem::create(paramsMembersMap), true); return CSmartSchema(CObjectSchemaItem::create(rootMembersMap)); } @@ -318,51 +317,43 @@ class SmartObjectConvertionTimeTest : public ::testing::Test { TSchemaItemParameter<int>(2000000000), TSchemaItemParameter<int>()); - std::map<std::string, CObjectSchemaItem::SMember> schemaMembersMap; + std::map<std::string, SMember> schemaMembersMap; - schemaMembersMap["success"] = - CObjectSchemaItem::SMember(success_SchemaItem, true); - schemaMembersMap["resultCode"] = - CObjectSchemaItem::SMember(resultCode_SchemaItem, true); - schemaMembersMap["info"] = - CObjectSchemaItem::SMember(info_SchemaItem, false); - schemaMembersMap["tryAgainTime"] = - CObjectSchemaItem::SMember(tryAgainTime_SchemaItem, true); + schemaMembersMap["success"] = SMember(success_SchemaItem, true); + schemaMembersMap["resultCode"] = SMember(resultCode_SchemaItem, true); + schemaMembersMap["info"] = SMember(info_SchemaItem, false); + schemaMembersMap["tryAgainTime"] = SMember(tryAgainTime_SchemaItem, true); - std::map<std::string, CObjectSchemaItem::SMember> paramsMembersMap; + std::map<std::string, SMember> paramsMembersMap; paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_FUNCTION_ID] = - CObjectSchemaItem::SMember( - TEnumSchemaItem<FunctionIdTest::eType>::create( - functionId_allowedEnumSubsetValues), - true); + SMember(TEnumSchemaItem<FunctionIdTest::eType>::create( + functionId_allowedEnumSubsetValues), + true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_MESSAGE_TYPE] = - CObjectSchemaItem::SMember( - TEnumSchemaItem<MessageTypeTest::eType>::create( - messageType_allowedEnumSubsetValues), - true); + SMember(TEnumSchemaItem<MessageTypeTest::eType>::create( + messageType_allowedEnumSubsetValues), + true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_CORRELATION_ID] = - CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true); + SMember(TNumberSchemaItem<int>::create(), true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_PROTOCOL_VERSION] = - CObjectSchemaItem::SMember( + SMember( TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(1), TSchemaItemParameter<int>(2)), true); paramsMembersMap [ns_smart_device_link::ns_json_handler::strings::S_PROTOCOL_TYPE] = - CObjectSchemaItem::SMember(TNumberSchemaItem<int>::create(), true); + SMember(TNumberSchemaItem<int>::create(), true); - std::map<std::string, CObjectSchemaItem::SMember> rootMembersMap; + std::map<std::string, SMember> rootMembersMap; rootMembersMap [ns_smart_device_link::ns_json_handler::strings::S_MSG_PARAMS] = - CObjectSchemaItem::SMember( - CObjectSchemaItem::create(schemaMembersMap), true); + SMember(CObjectSchemaItem::create(schemaMembersMap), true); rootMembersMap[ns_smart_device_link::ns_json_handler::strings::S_PARAMS] = - CObjectSchemaItem::SMember(CObjectSchemaItem::create(paramsMembersMap), - true); + SMember(CObjectSchemaItem::create(paramsMembersMap), true); return CSmartSchema(CObjectSchemaItem::create(rootMembersMap)); } }; |