diff options
author | JackLivio <jack@livio.io> | 2018-08-01 14:06:34 -0400 |
---|---|---|
committer | JackLivio <jack@livio.io> | 2018-08-01 14:06:34 -0400 |
commit | ea4a1731986b7f420c31f978edc7219edde448be (patch) | |
tree | 15fb0a6a4543c58f04cd3bc180b1e6e7834cc8ed /src/components/smart_objects/include/smart_objects | |
parent | 9727cd2cd185d2ea3ea028aab89cb419d1ad4a87 (diff) | |
download | sdl_core-ea4a1731986b7f420c31f978edc7219edde448be.tar.gz |
Add support for mandatory and removed versioning
Diffstat (limited to 'src/components/smart_objects/include/smart_objects')
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. |