summaryrefslogtreecommitdiff
path: root/src/components/smart_objects/include/smart_objects
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-08-01 14:06:34 -0400
committerJackLivio <jack@livio.io>2018-08-01 14:06:34 -0400
commitea4a1731986b7f420c31f978edc7219edde448be (patch)
tree15fb0a6a4543c58f04cd3bc180b1e6e7834cc8ed /src/components/smart_objects/include/smart_objects
parent9727cd2cd185d2ea3ea028aab89cb419d1ad4a87 (diff)
downloadsdl_core-ea4a1731986b7f420c31f978edc7219edde448be.tar.gz
Add support for mandatory and removed versioning
Diffstat (limited to 'src/components/smart_objects/include/smart_objects')
-rw-r--r--src/components/smart_objects/include/smart_objects/always_false_schema_item.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/always_true_schema_item.h10
-rw-r--r--src/components/smart_objects/include/smart_objects/array_schema_item.h13
-rw-r--r--src/components/smart_objects/include/smart_objects/default_shema_item.h16
-rw-r--r--src/components/smart_objects/include/smart_objects/enum_schema_item.h22
-rw-r--r--src/components/smart_objects/include/smart_objects/number_schema_item.h16
-rw-r--r--src/components/smart_objects/include/smart_objects/object_schema_item.h42
-rw-r--r--src/components/smart_objects/include/smart_objects/schema_item.h15
-rw-r--r--src/components/smart_objects/include/smart_objects/smart_object.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/smart_schema.h13
-rw-r--r--src/components/smart_objects/include/smart_objects/string_schema_item.h10
11 files changed, 166 insertions, 9 deletions
diff --git a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
index 4510f2292a..3a8a309b8d 100644
--- a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
@@ -62,6 +62,15 @@ class CAlwaysFalseSchemaItem : public ISchemaItem {
**/
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
private:
CAlwaysFalseSchemaItem();
diff --git a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
index 8a211339ba..9fe7878811 100644
--- a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
@@ -63,6 +63,16 @@ class CAlwaysTrueSchemaItem : public ISchemaItem {
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
+
private:
CAlwaysTrueSchemaItem();
DISALLOW_COPY_AND_ASSIGN(CAlwaysTrueSchemaItem);
diff --git a/src/components/smart_objects/include/smart_objects/array_schema_item.h b/src/components/smart_objects/include/smart_objects/array_schema_item.h
index 3e8be98ee0..af21dd9b65 100644
--- a/src/components/smart_objects/include/smart_objects/array_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/array_schema_item.h
@@ -38,6 +38,8 @@
#include "smart_objects/always_true_schema_item.h"
#include "smart_objects/schema_item_parameter.h"
+#include "utils/semantic_version.h"
+
namespace NsSmartDeviceLink {
namespace NsSmartObjects {
/**
@@ -83,6 +85,15 @@ class CArraySchemaItem : public ISchemaItem {
**/
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
/**
* @brief Apply schema.
@@ -93,7 +104,7 @@ class CArraySchemaItem : public ISchemaItem {
* from smart object otherwise contains false.
**/
void applySchema(SmartObject& Object,
- const bool RemoveFakeParameters) OVERRIDE;
+ const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion()) OVERRIDE;
/**
* @brief Unapply schema.
diff --git a/src/components/smart_objects/include/smart_objects/default_shema_item.h b/src/components/smart_objects/include/smart_objects/default_shema_item.h
index fdac77d029..75dbcaf67d 100644
--- a/src/components/smart_objects/include/smart_objects/default_shema_item.h
+++ b/src/components/smart_objects/include/smart_objects/default_shema_item.h
@@ -65,6 +65,16 @@ class CDefaultSchemaItem : public ISchemaItem {
rpc::ValidationReport* report__) OVERRIDE;
/**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
+
+ /**
* @brief Set default value to an object.
* @param Object Object to set default value.
* @return true if default value was successfully set, false otherwise.
@@ -127,6 +137,12 @@ Errors::eType CDefaultSchemaItem<Type>::validate(
}
template <typename Type>
+Errors::eType CDefaultSchemaItem<Type>::validate(
+ const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) {
+ return validate(Object, report__);
+}
+
+template <typename Type>
bool CDefaultSchemaItem<Type>::setDefaultValue(SmartObject& Object) {
Type value;
if (mDefaultValue.getValue(value)) {
diff --git a/src/components/smart_objects/include/smart_objects/enum_schema_item.h b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
index 450bbc6c40..787960659f 100644
--- a/src/components/smart_objects/include/smart_objects/enum_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
@@ -41,6 +41,8 @@
#include "smart_objects/default_shema_item.h"
+#include "utils/semantic_version.h"
+
namespace NsSmartDeviceLink {
namespace NsSmartObjects {
@@ -78,6 +80,16 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
**/
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
+
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
/**
* @brief Apply schema.
* This implementation checks if enumeration is represented as string
@@ -88,7 +100,7 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
* from smart object otherwise contains false.
**/
void applySchema(SmartObject& Object,
- const bool RemoveFakeParameters) OVERRIDE;
+ const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion()) OVERRIDE;
/**
* @brief Unapply schema.
* @param Object Object to unapply schema.
@@ -248,8 +260,14 @@ Errors::eType TEnumSchemaItem<EnumType>::validate(
}
template <typename EnumType>
+Errors::eType TEnumSchemaItem<EnumType>::validate(
+ const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) {
+ return validate(Object, report__);
+}
+
+template <typename EnumType>
void TEnumSchemaItem<EnumType>::applySchema(SmartObject& Object,
- const bool RemoveFakeParameters) {
+ const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion) {
if (SmartType_String == Object.getType()) {
EnumType enum_val = static_cast<EnumType>(-1);
if (ConversionHelper::StringToEnum(Object.asString(), &enum_val)) {
diff --git a/src/components/smart_objects/include/smart_objects/number_schema_item.h b/src/components/smart_objects/include/smart_objects/number_schema_item.h
index 2c64538953..e1d294779d 100644
--- a/src/components/smart_objects/include/smart_objects/number_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/number_schema_item.h
@@ -81,6 +81,16 @@ class TNumberSchemaItem : public CDefaultSchemaItem<NumberType> {
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
+
private:
/**
* @brief Get smart type for this NumberType.
@@ -194,6 +204,12 @@ Errors::eType TNumberSchemaItem<NumberType>::validate(
}
template <typename NumberType>
+Errors::eType TNumberSchemaItem<NumberType>::validate(
+ const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) {
+ return validate(Object, report__);
+}
+
+template <typename NumberType>
TNumberSchemaItem<NumberType>::TNumberSchemaItem(
const TSchemaItemParameter<NumberType>& MinValue,
const TSchemaItemParameter<NumberType>& MaxValue,
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 4c0def558b..df5a34a25a 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
@@ -37,6 +37,8 @@
#include <set>
#include "utils/macro.h"
+#include "utils/semantic_version.h"
+#include <boost/optional.hpp>
#include "smart_objects/schema_item.h"
#include "smart_objects/schema_item_parameter.h"
@@ -62,7 +64,20 @@ class CObjectSchemaItem : public ISchemaItem {
* @param IsMandatory true if member is mandatory, false
* otherwise. Defaults to true.
**/
- SMember(const ISchemaItemPtr SchemaItem, const bool IsMandatory = true);
+ //SMember(const ISchemaItemPtr SchemaItem, const bool IsMandatory = 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);
+ /**
+ * @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.
**/
@@ -71,6 +86,11 @@ class CObjectSchemaItem : public ISchemaItem {
* @brief true if member is mandatory, false otherwise.
**/
bool mIsMandatory;
+ boost::optional<utils::SemanticVersion> mSince;
+ boost::optional<utils::SemanticVersion> mUntil;
+ bool mIsDeprecated;
+ bool mIsRemoved;
+
};
typedef std::map<std::string, SMember> Members;
/**
@@ -98,13 +118,22 @@ class CObjectSchemaItem : public ISchemaItem {
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
/**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
+ /**
* @brief Apply schema.
* @param Object Object to apply schema.
* @param RemoveFakeParameters contains true if need to remove fake parameters
* from smart object otherwise contains false.
**/
void applySchema(SmartObject& Object,
- const bool RemoveFakeParameters) OVERRIDE;
+ const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion()) OVERRIDE;
/**
* @brief Unapply schema.
* @param Object Object to unapply schema.
@@ -136,7 +165,14 @@ class CObjectSchemaItem : public ISchemaItem {
* @brief Removes fake parameters from object.
* @param Object Object to remove fake parameters.
**/
- void RemoveFakeParams(SmartObject& Object);
+ void RemoveFakeParams(SmartObject& Object, const utils::SemanticVersion& MessageVersion);
+
+ /**
+ * @brief Checks mandatory and version fields to see
+ * if a member is required.
+ * @param Object Object to remove fake parameters.
+ **/
+ bool IsMandatory(const SMember& member);
/**
* @brief Map of member name to SMember structure describing the object
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 2b15a1d47a..4e126b2bec 100644
--- a/src/components/smart_objects/include/smart_objects/schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/schema_item.h
@@ -40,6 +40,7 @@
#include <memory>
#include "utils/macro.h"
+#include "utils/semantic_version.h"
namespace NsSmartDeviceLink {
namespace NsSmartObjects {
@@ -74,6 +75,18 @@ class ISchemaItem {
rpc::ValidationReport* report__);
/**
+ * @brief Validate smart object.
+ *
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * message if an error occurs
+ * @param MessageVersion to check mobile RPC version against RPC Spec Histor
+ * @return NsSmartObjects::Errors::eType
+ **/
+ virtual Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion);
+
+ /**
* @brief Set default value to an object.
*
* @param Object Object to set default value.
@@ -100,7 +113,7 @@ class ISchemaItem {
**/
virtual void applySchema(
NsSmartDeviceLink::NsSmartObjects::SmartObject& Object,
- const bool RemoveFakeParameters);
+ const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion());
/**
* @brief Unapply schema.
diff --git a/src/components/smart_objects/include/smart_objects/smart_object.h b/src/components/smart_objects/include/smart_objects/smart_object.h
index 6a2cbdb911..5853c9bb3f 100644
--- a/src/components/smart_objects/include/smart_objects/smart_object.h
+++ b/src/components/smart_objects/include/smart_objects/smart_object.h
@@ -687,6 +687,15 @@ class SmartObject FINAL {
Errors::eType validate(rpc::ValidationReport* report__);
/**
+ * @brief Validates object according to attached schema.
+ *
+ * @param report__ object for reporting errors during validation
+ * @param messageVersion of the mobile app to check against RPC Spec Schema
+ * @return Result of validation.
+ */
+ Errors::eType validate(rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion);
+
+ /**
* @brief Sets new schema
*
* @param schema Schema for object validation
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 ada5646043..08595d311c 100644
--- a/src/components/smart_objects/include/smart_objects/smart_schema.h
+++ b/src/components/smart_objects/include/smart_objects/smart_schema.h
@@ -83,6 +83,17 @@ class CSmartSchema FINAL {
rpc::ValidationReport* report__) const;
/**
+ * @brief Validate smart object.
+ *
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& messageVersion) const;
+
+ /**
* @brief Set new root schema item.
*
* @param SchemaItem Root schema item.
@@ -97,7 +108,7 @@ class CSmartSchema FINAL {
* @param RemoveFakeParameters contains true if need to remove fake parameters
* from smart object otherwise contains false.
**/
- void applySchema(SmartObject& Object, const bool RemoveFakeParameters);
+ void applySchema(SmartObject& Object, const bool RemoveFakeParameters, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion());
/**
* @brief The reverse SmartObject conversion using schema.
diff --git a/src/components/smart_objects/include/smart_objects/string_schema_item.h b/src/components/smart_objects/include/smart_objects/string_schema_item.h
index 50418debc0..0bf21a6449 100644
--- a/src/components/smart_objects/include/smart_objects/string_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/string_schema_item.h
@@ -74,7 +74,15 @@ class CStringSchemaItem : public CDefaultSchemaItem<std::string> {
**/
Errors::eType validate(const SmartObject& Object,
rpc::ValidationReport* report__) OVERRIDE;
-
+ /**
+ * @brief Validate smart object.
+ * @param Object Object to validate.
+ * @param report__ object for reporting errors during validation
+ * @param MessageVersion to check mobile RPC version against RPC Spec History
+ * @return NsSmartObjects::Errors::eType
+ **/
+ Errors::eType validate(const SmartObject& Object,
+ rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion) OVERRIDE;
private:
/**
* @brief Constructor.