diff options
Diffstat (limited to 'src/components/smart_objects/src/object_schema_item.cc')
-rw-r--r-- | src/components/smart_objects/src/object_schema_item.cc | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc index 742c2ec353..be1c73fb85 100644 --- a/src/components/smart_objects/src/object_schema_item.cc +++ b/src/components/smart_objects/src/object_schema_item.cc @@ -40,7 +40,7 @@ namespace { const char connection_key[] = "connection_key"; const char binary_data[] = "binary_data"; const char app_id[] = "appID"; -} +} // namespace namespace ns_smart_device_link { namespace ns_smart_objects { @@ -110,12 +110,13 @@ std::shared_ptr<CObjectSchemaItem> CObjectSchemaItem::create( errors::eType CObjectSchemaItem::validate( const SmartObject& object, rpc::ValidationReport* report__, - const utils::SemanticVersion& MessageVersion) { + const utils::SemanticVersion& MessageVersion, + const bool allow_unknown_enums) { if (SmartType_Map != object.getType()) { - std::string validation_info = "Incorrect type, expected: " + - SmartObject::typeToString(SmartType_Map) + - ", got: " + - SmartObject::typeToString(object.getType()); + std::string validation_info = + "Incorrect type, expected: " + + SmartObject::typeToString(SmartType_Map) + + ", got: " + SmartObject::typeToString(object.getType()); report__->set_validation_info(validation_info); return errors::INVALID_VALUE; } @@ -142,8 +143,11 @@ errors::eType CObjectSchemaItem::validate( errors::eType result = errors::OK; // Check if MessageVersion matches schema version - result = correct_member.mSchemaItem->validate( - field, &report__->ReportSubobject(key), MessageVersion); + result = + correct_member.mSchemaItem->validate(field, + &report__->ReportSubobject(key), + MessageVersion, + allow_unknown_enums); if (errors::OK != result) { return result; } @@ -154,13 +158,13 @@ errors::eType CObjectSchemaItem::validate( void CObjectSchemaItem::applySchema( SmartObject& Object, - const bool RemoveFakeParameters, + const bool remove_unknown_parameters, const utils::SemanticVersion& MessageVersion) { if (SmartType_Map != Object.getType()) { return; } - if (RemoveFakeParameters) { + if (remove_unknown_parameters) { RemoveFakeParams(Object, MessageVersion); } @@ -173,16 +177,17 @@ void CObjectSchemaItem::applySchema( if (member.mSchemaItem->setDefaultValue(default_value)) { Object[key] = default_value; member.mSchemaItem->applySchema( - Object[key], RemoveFakeParameters, MessageVersion); + Object[key], remove_unknown_parameters, MessageVersion); } } else { member.mSchemaItem->applySchema( - Object[key], RemoveFakeParameters, MessageVersion); + Object[key], remove_unknown_parameters, MessageVersion); } } } -void CObjectSchemaItem::unapplySchema(SmartObject& Object) { +void CObjectSchemaItem::unapplySchema(SmartObject& Object, + const bool remove_unknown_parameters) { if (SmartType_Map != Object.getType()) { return; } @@ -191,7 +196,7 @@ void CObjectSchemaItem::unapplySchema(SmartObject& Object) { const std::string& key = it->first; // move next to avoid wrong iterator on erase ++it; - if (mMembers.end() == mMembers.find(key)) { + if (mMembers.end() == mMembers.find(key) && remove_unknown_parameters) { // remove fake params Object.erase(key); } @@ -202,7 +207,7 @@ void CObjectSchemaItem::unapplySchema(SmartObject& Object) { const std::string& key = it->first; const SMember& member = it->second; if (Object.keyExists(key)) { - member.mSchemaItem->unapplySchema(Object[key]); + member.mSchemaItem->unapplySchema(Object[key], remove_unknown_parameters); } } } @@ -239,8 +244,7 @@ void CObjectSchemaItem::RemoveFakeParams( mMembers.find(key); if (mMembers.end() == members_it // FIXME(EZamakhov): Remove illegal usage of filed in AM - && - key.compare(connection_key) != 0 && key.compare(binary_data) != 0 && + && key.compare(connection_key) != 0 && key.compare(binary_data) != 0 && key.compare(app_id) != 0) { ++it; Object.erase(key); |