summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/src/object_schema_item.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/smart_objects/src/object_schema_item.cc')
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc
index bab952411b..c17a2221db 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -54,7 +54,8 @@ CObjectSchemaItem::SMember::SMember(const ISchemaItemPtr SchemaItem,
const std::string& Since,
const std::string& Until,
const bool IsDeprecated,
- const bool IsRemoved)
+ const bool IsRemoved,
+ const std::vector<CObjectSchemaItem::SMember>& history_vector)
: mSchemaItem(SchemaItem), mIsMandatory(IsMandatory) {
if (Since.size() > 0) {
@@ -83,6 +84,7 @@ CObjectSchemaItem::SMember::SMember(const ISchemaItemPtr SchemaItem,
mIsDeprecated = IsDeprecated;
mIsRemoved = IsRemoved;
+ mHistoryVector = history_vector;
}
@@ -107,7 +109,6 @@ bool CObjectSchemaItem::SMember::CheckHistoryFieldVersion(const utils::SemanticV
}
}
- printf("Final true of check history version\n");
return true; //Not enough version information. Default true.
}
@@ -176,10 +177,33 @@ Errors::eType CObjectSchemaItem::validate(const SmartObject& object,
++it) {
const std::string& key = it->first;
const SMember& member = it->second;
- printf("key: %s\n", key.c_str());
std::set<std::string>::const_iterator key_it = object_keys.find(key);
if (object_keys.end() == key_it) {
- if (member.mIsMandatory && member.CheckHistoryFieldVersion(MessageVersion)) {
+ if(member.mSince.is_initialized() && MessageVersion < member.mSince.get() && member.mHistoryVector.size() > 0) {
+ //Message version predates parameter and a history vector exists.
+ for (uint i=0; i<member.mHistoryVector.size(); i++) {
+ if (member.mHistoryVector[i].mSince.is_initialized() && MessageVersion >= member.mHistoryVector[i].mSince.get()) {
+ if (member.mHistoryVector[i].mUntil.is_initialized() && MessageVersion >= member.mHistoryVector[i].mUntil.get()) {
+ //MessageVersion is newer than the specified "Until" version
+ continue;
+ } else {
+ if (member.mHistoryVector[i].mIsMandatory == true && (member.mHistoryVector[i].mIsRemoved == false)) {
+ std::string validation_info = "Missing mandatory parameter since and until: " + key;
+ report__->set_validation_info(validation_info);
+ return Errors::MISSING_MANDATORY_PARAMETER;
+ }
+ break;
+ }
+ } else if (member.mHistoryVector[i].mSince.is_initialized() == false && member.mHistoryVector[i].mUntil.is_initialized() && MessageVersion < member.mHistoryVector[i].mUntil.get()){
+ if (member.mHistoryVector[i].mIsMandatory == true && (member.mHistoryVector[i].mIsRemoved == false)) {
+ std::string validation_info = "Missing mandatory parameter until: " + key;
+ report__->set_validation_info(validation_info);
+ return Errors::MISSING_MANDATORY_PARAMETER;
+ }
+ break;
+ }
+ }
+ } else if (member.mIsMandatory && member.CheckHistoryFieldVersion(MessageVersion) && (member.mIsMandatory == false)) {
std::string validation_info = "Missing mandatory parameter: " + key;
report__->set_validation_info(validation_info);
return Errors::MISSING_MANDATORY_PARAMETER;
@@ -286,8 +310,18 @@ void CObjectSchemaItem::RemoveFakeParams(SmartObject& Object, const utils::Seman
} else if (members_it->second.mIsRemoved && members_it->second.CheckHistoryFieldVersion(MessageVersion)) {
++it;
Object.erase(key);
- } else {
- it++;
+ } else if (members_it->second.mHistoryVector.size() > 0) {
+ for (uint i=0; i<members_it->second.mHistoryVector.size(); i++) {
+ if (members_it->second.mHistoryVector[i].CheckHistoryFieldVersion(MessageVersion) && members_it->second.mHistoryVector[i].mIsRemoved) {
+ ++it;
+ Object.erase(key);
+ break;
+ }
+ }
+ ++it;
+ }
+ else {
+ ++it;
}
}
}