Line data Source code
1 : /* 2 : * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. 3 : * Copyright Contributors to the OpenSDN project 4 : */ 5 : 6 : #ifndef ctrlplane_config_json_parser_h 7 : #define ctrlplane_config_json_parser_h 8 : 9 : #include <list> 10 : #include <map> 11 : #include <string> 12 : 13 : #include "config-client-mgr/config_json_parser_base.h" 14 : 15 : #include "base/queue_task.h" 16 : #include "ifmap/ifmap_table.h" 17 : #include "ifmap/ifmap_origin.h" 18 : 19 : #include "rapidjson/document.h" 20 : #include "ifmap/ifmap_server_table.h" 21 : #include "ifmap/ifmap_server.h" 22 : 23 : #include <boost/function.hpp> 24 : 25 : struct AutogenProperty; 26 : class ConfigCass2JsonAdapter; 27 : 28 : class ConfigJsonParser : public ConfigJsonParserBase { 29 : public: 30 : typedef boost::function< 31 : bool(const contrail_rapidjson::Value &, std::unique_ptr<AutogenProperty> *) 32 : > MetadataParseFn; 33 : typedef std::map<std::string, MetadataParseFn> MetadataParseMap; 34 : typedef std::list<struct DBRequest *> RequestList; 35 : 36 : ConfigJsonParser(); 37 : ~ConfigJsonParser(); 38 : 39 : virtual void SetupGraphFilter(); 40 : virtual void EndOfConfig(); 41 : 42 : void MetadataRegister(const std::string &metadata, MetadataParseFn parser); 43 : void MetadataClear(const std::string &module); 44 : virtual bool Receive(const ConfigCass2JsonAdapter &adapter, 45 : bool add_change); 46 161 : void ifmap_server_set(IFMapServer *ifmap_server) { 47 161 : ifmap_server_ = ifmap_server; 48 161 : }; 49 : 50 : private: 51 : void SetupObjectFilter(); 52 : void SetupSchemaGraphFilter(); 53 : void SetupSchemaWrapperPropertyInfo(); 54 : bool ParseDocument(const ConfigCass2JsonAdapter &adapter, 55 : IFMapOrigin::Origin origin, RequestList *req_list, 56 : IFMapTable::RequestKey *key, bool add_change) const; 57 : bool ParseNameType(const ConfigCass2JsonAdapter &adapter, 58 : IFMapTable::RequestKey *key) const; 59 : bool ParseProperties(const ConfigCass2JsonAdapter &adapter, 60 : const IFMapTable::RequestKey &key, IFMapOrigin::Origin origin, 61 : RequestList *req_list, bool add_change) const; 62 : bool ParseOneProperty(const ConfigCass2JsonAdapter &adapter, 63 : const contrail_rapidjson::Value &key_node, 64 : const contrail_rapidjson::Value &value_node, 65 : const IFMapTable::RequestKey &key, IFMapOrigin::Origin origin, 66 : RequestList *req_list, bool add_change) const; 67 : bool ParseLinks(const ConfigCass2JsonAdapter &adapter, 68 : const IFMapTable::RequestKey &key, IFMapOrigin::Origin origin, 69 : RequestList *req_list, bool add_change) const; 70 : bool ParseRef(const ConfigCass2JsonAdapter &adapter, 71 : const contrail_rapidjson::Value &ref_entry, 72 : IFMapOrigin::Origin origin, const std::string &refer, 73 : const IFMapTable::RequestKey &key, 74 : RequestList *req_list, bool add_change) const; 75 : bool ParseOneRef(const ConfigCass2JsonAdapter &adapter, 76 : const contrail_rapidjson::Value &arr, 77 : const IFMapTable::RequestKey &key, IFMapOrigin::Origin origin, 78 : RequestList *req_list, const std::string &key_str, 79 : size_t pos, bool add_change) const; 80 : void EnqueueListToTables(RequestList *req_list) const; 81 : void InsertRequestIntoQ(IFMapOrigin::Origin origin, 82 : const std::string &neigh_type, const std::string &neigh_name, 83 : const std::string &metaname, std::unique_ptr<AutogenProperty> &pvalue, 84 : const IFMapTable::RequestKey &key, bool add_change, 85 : RequestList *req_list) const; 86 : 87 : IFMapTable::RequestKey *CloneKey(const IFMapTable::RequestKey &src) const; 88 : IFMapServer *ifmap_server_; 89 : MetadataParseMap metadata_map_; 90 : }; 91 : 92 : #endif // ctrlplane_config_json_parser_h