/** * @file Test.cc * @brief Generated class Test source file. * * This class is a part of SmartObjects solution. It provides * factory functionallity which allows client to use SmartSchemas * in accordance with definitions from Test.xml file */ // Copyright (c) 2013, Ford Motor Company // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following // disclaimer in the documentation and/or other materials provided with the // distribution. // // Neither the name of the Ford Motor Company nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. #include #include #include "Test.h" #include "SmartObjects/CAlwaysTrueSchemaItem.hpp" #include "SmartObjects/CAlwaysFalseSchemaItem.hpp" #include "SmartObjects/CArraySchemaItem.hpp" #include "SmartObjects/CBoolSchemaItem.hpp" #include "SmartObjects/CObjectSchemaItem.hpp" #include "SmartObjects/CStringSchemaItem.hpp" #include "SmartObjects/TEnumSchemaItem.hpp" #include "SmartObjects/TNumberSchemaItem.hpp" #include "SmartObjects/TSchemaItemParameter.hpp" using namespace NsSmartDeviceLink::NsSmartObjects; XXX::YYY::ZZZ::Test::Test() : CSmartFactory() { TStructsSchemaItems struct_schema_items; InitStructSchemes(struct_schema_items); std::set function_id_items; std::set message_type_items; message_type_items.insert(messageType::request); message_type_items.insert(messageType::response); message_type_items.insert(messageType::notification); InitFunctionSchemes(struct_schema_items, function_id_items, message_type_items); } TSharedPtr XXX::YYY::ZZZ::Test::ProvideObjectSchemaItemForStruct( const TStructsSchemaItems &struct_schema_items, const StructIdentifiers::eType struct_id) { const TStructsSchemaItems::const_iterator it = struct_schema_items.find(struct_id); if (it != struct_schema_items.end()) { return it->second; } return NsSmartDeviceLink::NsSmartObjects::CAlwaysFalseSchemaItem::create(); } void XXX::YYY::ZZZ::Test::InitStructSchemes( TStructsSchemaItems &struct_schema_items) { TSharedPtr struct_schema_item_Struct2 = InitStructSchemaItem_Struct2(struct_schema_items); struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct2, struct_schema_item_Struct2)); structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct2, CSmartSchema(struct_schema_item_Struct2))); TSharedPtr struct_schema_item_Struct1 = InitStructSchemaItem_Struct1(struct_schema_items); struct_schema_items.insert(std::make_pair(StructIdentifiers::Struct1, struct_schema_item_Struct1)); structs_schemes_.insert(std::make_pair(StructIdentifiers::Struct1, CSmartSchema(struct_schema_item_Struct1))); } void XXX::YYY::ZZZ::Test::InitFunctionSchemes( const TStructsSchemaItems &struct_schema_items, const std::set &function_id_items, const std::set &message_type_items) { functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey(FunctionID::name1, messageType::request), InitFunction_name1_request(struct_schema_items, function_id_items, message_type_items))); functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey(FunctionID::val_1, messageType::response), InitFunction_val_1_response(struct_schema_items, function_id_items, message_type_items))); functions_schemes_.insert(std::make_pair(NsSmartDeviceLink::NsJSONHandler::SmartSchemaKey(FunctionID::val_2, messageType::notification), InitFunction_val_2_notification(struct_schema_items, function_id_items, message_type_items))); } //------------- Functions schemes initialization ------------- CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_name1_request( const TStructsSchemaItems &struct_schema_items, const std::set &function_id_items, const std::set &message_type_items) { std::set Enum_new4_all_enum_values; Enum_new4_all_enum_values.insert(Enum_new4::_11); Enum_new4_all_enum_values.insert(Enum_new4::_22); std::set param2_allowed_enum_subset_values; param2_allowed_enum_subset_values.insert(Enum1::name1); // Function parameter param1. // // Description Line1 // Description Line2 // // Design Line1 // // Note: Issue1 // Note: Issue2 // Note: Issue3 // // ToDo: Do1 // ToDo: Do2 TSharedPtr param1_SchemaItem = TEnumSchemaItem::create(Enum_new4_all_enum_values, TSchemaItemParameter(Enum_new4::_11)); // Function parameter param2. TSharedPtr param2_SchemaItem = TEnumSchemaItem::create(param2_allowed_enum_subset_values, TSchemaItemParameter(name1)); std::map schema_members; schema_members["param1"] = CObjectSchemaItem::SMember(param1_SchemaItem, true); schema_members["param2"] = CObjectSchemaItem::SMember(param2_SchemaItem, true); std::map params_members; params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(function_id_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(message_type_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); std::map root_members_map; root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true); root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true); return CSmartSchema(CObjectSchemaItem::create(root_members_map)); } CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_1_response( const TStructsSchemaItems &struct_schema_items, const std::set &function_id_items, const std::set &message_type_items) { std::map schema_members; std::map params_members; params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(function_id_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(message_type_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_CORRELATION_ID] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); std::map root_members_map; root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true); root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true); return CSmartSchema(CObjectSchemaItem::create(root_members_map)); } CSmartSchema XXX::YYY::ZZZ::Test::InitFunction_val_2_notification( const TStructsSchemaItems &struct_schema_items, const std::set &function_id_items, const std::set &message_type_items) { std::map schema_members; std::map params_members; params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_FUNCTION_ID] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(function_id_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_MESSAGE_TYPE] = CObjectSchemaItem::SMember(TEnumSchemaItem::create(message_type_items), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_VERSION] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); params_members[NsSmartDeviceLink::NsJSONHandler::strings::S_PROTOCOL_TYPE] = CObjectSchemaItem::SMember(TNumberSchemaItem::create(), true); std::map root_members_map; root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_MSG_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(schema_members), true); root_members_map[NsSmartDeviceLink::NsJSONHandler::strings::S_PARAMS] = CObjectSchemaItem::SMember(CObjectSchemaItem::create(params_members), true); return CSmartSchema(CObjectSchemaItem::create(root_members_map)); } //----------- Structs schema items initialization ------------ TSharedPtr XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct1( const TStructsSchemaItems &struct_schema_items) { std::set Enum1_all_enum_values; Enum1_all_enum_values.insert(Enum1::name1); Enum1_all_enum_values.insert(Enum1::internal_name2); std::set enumSubset1_allowed_enum_subset_values; enumSubset1_allowed_enum_subset_values.insert(Enum1::name1); std::set Enum_new2_all_enum_values; Enum_new2_all_enum_values.insert(Enum_new2::_1); Enum_new2_all_enum_values.insert(Enum_new2::_2); Enum_new2_all_enum_values.insert(Enum_new2::_3); std::set sub1_allowed_enum_subset_values; sub1_allowed_enum_subset_values.insert(Enum1::name1); std::set sub2_allowed_enum_subset_values; sub2_allowed_enum_subset_values.insert(Enum1::internal_name2); std::set sub3_allowed_enum_subset_values; sub3_allowed_enum_subset_values.insert(Enum_new4::_22); // Struct member intParam. TSharedPtr intParam_SchemaItem = TNumberSchemaItem::create(TSchemaItemParameter(), TSchemaItemParameter(2), TSchemaItemParameter()); // Struct member doubleParam. TSharedPtr doubleParam_SchemaItem = TNumberSchemaItem::create(TSchemaItemParameter(0.333), TSchemaItemParameter(), TSchemaItemParameter()); // Struct member boolParam. TSharedPtr boolParam_SchemaItem = CBoolSchemaItem::create(TSchemaItemParameter()); // Struct member structParam. TSharedPtr structParam_SchemaItem = ProvideObjectSchemaItemForStruct(struct_schema_items, StructIdentifiers::Struct2); // Struct member enumParam. TSharedPtr enumParam_SchemaItem = TEnumSchemaItem::create(Enum1_all_enum_values, TSchemaItemParameter()); // Struct member enumParam1. TSharedPtr enumParam1_SchemaItem = TEnumSchemaItem::create(Enum1_all_enum_values, TSchemaItemParameter()); // Struct member enumSubset1. TSharedPtr enumSubset1_SchemaItem = TEnumSchemaItem::create(enumSubset1_allowed_enum_subset_values, TSchemaItemParameter()); // Struct member arrayOfInt. TSharedPtr arrayOfInt_SchemaItem = CArraySchemaItem::create(CBoolSchemaItem::create(TSchemaItemParameter()), TSchemaItemParameter(0), TSchemaItemParameter(20)); // Struct member arrayOfEnum1. TSharedPtr arrayOfEnum1_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem::create(Enum1_all_enum_values, TSchemaItemParameter()), TSchemaItemParameter(0), TSchemaItemParameter(20)); // Struct member arrayOfEnum3. TSharedPtr arrayOfEnum3_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem::create(Enum_new2_all_enum_values, TSchemaItemParameter()), TSchemaItemParameter(10), TSchemaItemParameter(40)); // Struct member arrayOfEnum4. TSharedPtr arrayOfEnum4_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem::create(sub1_allowed_enum_subset_values, TSchemaItemParameter()), TSchemaItemParameter(10), TSchemaItemParameter(41)); // Struct member arrayOfEnum5. TSharedPtr arrayOfEnum5_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem::create(sub2_allowed_enum_subset_values, TSchemaItemParameter()), TSchemaItemParameter(10), TSchemaItemParameter(42)); // Struct member arrayOfEnum6. TSharedPtr arrayOfEnum6_SchemaItem = CArraySchemaItem::create(TEnumSchemaItem::create(sub3_allowed_enum_subset_values, TSchemaItemParameter()), TSchemaItemParameter(10), TSchemaItemParameter(43)); std::map schema_members; schema_members["intParam"] = CObjectSchemaItem::SMember(intParam_SchemaItem, true); schema_members["doubleParam"] = CObjectSchemaItem::SMember(doubleParam_SchemaItem, false); schema_members["boolParam"] = CObjectSchemaItem::SMember(boolParam_SchemaItem, true); schema_members["structParam"] = CObjectSchemaItem::SMember(structParam_SchemaItem, true); schema_members["enumParam"] = CObjectSchemaItem::SMember(enumParam_SchemaItem, true); schema_members["enumParam1"] = CObjectSchemaItem::SMember(enumParam1_SchemaItem, true); schema_members["enumSubset1"] = CObjectSchemaItem::SMember(enumSubset1_SchemaItem, false); schema_members["arrayOfInt"] = CObjectSchemaItem::SMember(arrayOfInt_SchemaItem, false); schema_members["arrayOfEnum1"] = CObjectSchemaItem::SMember(arrayOfEnum1_SchemaItem, false); schema_members["arrayOfEnum3"] = CObjectSchemaItem::SMember(arrayOfEnum3_SchemaItem, true); schema_members["arrayOfEnum4"] = CObjectSchemaItem::SMember(arrayOfEnum4_SchemaItem, true); schema_members["arrayOfEnum5"] = CObjectSchemaItem::SMember(arrayOfEnum5_SchemaItem, true); schema_members["arrayOfEnum6"] = CObjectSchemaItem::SMember(arrayOfEnum6_SchemaItem, true); return CObjectSchemaItem::create(schema_members); } TSharedPtr XXX::YYY::ZZZ::Test::InitStructSchemaItem_Struct2( const TStructsSchemaItems &struct_schema_items) { std::map schema_members; return CObjectSchemaItem::create(schema_members); } //-------------- String to value enum mapping ---------------- namespace NsSmartDeviceLink { namespace NsSmartObjects { template <> const std::map &TEnumSchemaItem::getEnumElementsStringRepresentation() { static bool is_initialized = false; static std::map enum_string_representation; if (false == is_initialized) { enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::name1, "name1")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum1::internal_name2, "name2")); is_initialized = true; } return enum_string_representation; } template <> const std::map &TEnumSchemaItem::getEnumElementsStringRepresentation() { static bool is_initialized = false; static std::map enum_string_representation; if (false == is_initialized) { enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_1, "xxx")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_2, "yyy")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::E2::val_3, "val_3")); is_initialized = true; } return enum_string_representation; } template <> const std::map &TEnumSchemaItem::getEnumElementsStringRepresentation() { static bool is_initialized = false; static std::map enum_string_representation; if (false == is_initialized) { enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_1, "xxx")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_2, "xxx")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new2::_3, "xxx")); is_initialized = true; } return enum_string_representation; } template <> const std::map &TEnumSchemaItem::getEnumElementsStringRepresentation() { static bool is_initialized = false; static std::map enum_string_representation; if (false == is_initialized) { enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_11, "xxx")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::Enum_new4::_22, "xxx")); is_initialized = true; } return enum_string_representation; } template <> const std::map &TEnumSchemaItem::getEnumElementsStringRepresentation() { static bool is_initialized = false; static std::map enum_string_representation; if (false == is_initialized) { enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::request, "request")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::response, "response")); enum_string_representation.insert(std::make_pair(XXX::YYY::ZZZ::messageType::notification, "notification")); is_initialized = true; } return enum_string_representation; } } // NsSmartObjects } // NsSmartDeviceLink