#ifndef SRC_COMPONENTS_SMART_OBJECTS_INCLUDE_SMART_OBJECTS_SCHEMA_ITEM_H_
#define SRC_COMPONENTS_SMART_OBJECTS_INCLUDE_SMART_OBJECTS_SCHEMA_ITEM_H_
+#include <stdint.h>
+
#include "smart_objects/errors.h"
namespace NsSmartDeviceLink {
const NsSmartDeviceLink::NsSmartObjects::SmartObject& pattern_object,
NsSmartDeviceLink::NsSmartObjects::SmartObject& result_object);
+ /**
+ * @brief Get value param, depends of children
+ *
+ * @return value of any parameter
+ */
+ virtual uint32_t GetMemberSize();
+
virtual ~ISchemaItem() {
}
};
#include "smart_objects/always_false_schema_item.h"
#include "smart_objects/object_schema_item.h"
#include "smart_objects/smart_object.h"
-#include "application_manager/smart_object_keys.h"
namespace smart_objects_ns = NsSmartDeviceLink::NsSmartObjects;
namespace NsSmartDeviceLink {
namespace NsSmartObjects {
+const char *kMsgParams = "msg_params";
+
CObjectSchemaItem::SMember::SMember()
: mSchemaItem(CAlwaysFalseSchemaItem::create()),
mIsMandatory(true) {
for (std::map<std::string, CObjectSchemaItem::SMember>::const_iterator i =
mMembers.begin(); i != mMembers.end(); ++i) {
if (objectKeys.end() != objectKeys.find(i->first)) {
- if (i->first == application_manager::strings::msg_params) {
+ if (kMsgParams == i->first) {
is_valid = false;
}
result = i->second.mSchemaItem->validate(Object.getElement(i->first));
- if (i->first == application_manager::strings::msg_params) {
- if (!is_valid) {
+ if (kMsgParams == i->first) {
+ if ((!is_valid) && ( 0 < (*i->second.mSchemaItem).GetMemberSize())) {
result = Errors::ERROR;
}
}
}
}
- if (Errors::OK != result) {
+ if ((Errors::OK != result) && (Errors::UNEXPECTED_PARAMETER != result)) {
break;
}
}
k != objectKeys.end(); ++k) {
if (mMembers.end() == mMembers.find(*k)) {
result = Errors::UNEXPECTED_PARAMETER;
- break;
+ } else {
+ is_valid = true;
}
}
}
- if (Errors::OK == result) {
- is_valid = true;
- }
-
} else {
result = Errors::INVALID_VALUE;
}
+ if (Errors::OK == result) {
+ is_valid = true;
+ }
+
return result;
}
}
}
+uint32_t CObjectSchemaItem::GetMemberSize() {
+ return mMembers.size();
+}
+
CObjectSchemaItem::CObjectSchemaItem(
const std::map<std::string, CObjectSchemaItem::SMember>& Members)
: mMembers(Members) {