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