00001
00021 #ifndef __RtcNaming_h__
00022 #define __RtcNaming_h__
00023
00024
00025 #include "rtm/idl/RTMBaseStub.h"
00026 #include "rtm/idl/RTMBaseSkel.h"
00027 #include "rtm/RtcBase.h"
00028
00029
00030 #include <map>
00031 #include <string>
00032 #include <vector>
00033
00034 #define HOST_CTXT_LEVEL 1
00035 #define MANAGER_CTXT_LEVEL 2
00036 #define MANAGER_LEVEL 3
00037 #define CATEGORY_CTXT_LEVEL 3
00038 #define MODULE_CTXT_LEVEL 4
00039 #define COMPONENT_LEVEL 5
00040
00041 namespace RTM
00042 {
00043 using namespace std;
00044
00045 typedef std::vector<CosNaming::NamingContextExt_var> ContextList;
00046 typedef std::vector<CORBA::Object_ptr> ObjectList;
00047
00063 class RtcNaming
00064 {
00065 public:
00076 RtcNaming() : m_bindListNum(100) {};
00077
00088 RtcNaming(CORBA::ORB_ptr orb) : m_bindListNum(100) {initNaming(orb);};
00089
00100 ~RtcNaming();
00101
00102
00117 bool initNaming(const CORBA::ORB_ptr orb);
00118
00119
00120
00121
00122
00123
00124
00147 CosNaming::NamingContextExt_var
00148 createContext(CosNaming::NamingContextExt_var context,
00149 const std::string& id, const std::string& kind);
00150
00151
00170 bool createHostContext(const std::string& id);
00171
00172
00191 bool createManagerContext(const std::string& id);
00192
00193
00212 bool createCategoryContext(const std::string& category);
00213
00214
00235 bool createModuleContext(const std::string& module,
00236 const std::string& category);
00237
00238
00263 bool bindObject(CosNaming::NamingContextExt_var context,
00264 const std::string& id, const std::string& kind,
00265 CORBA::Object_ptr obj);
00266
00287 bool bindObjectByFullPath(const std::string& path,
00288 CORBA::Object_ptr obj);
00289
00312 bool bindComponent(const std::string& component, const std::string& module,
00313 const std::string& category, CORBA::Object_ptr obj);
00314
00335 bool bindManager(const std::string& id, CORBA::Object_ptr obj);
00336
00337
00338
00339
00340
00341
00342
00352 bool destroyHostContext();
00353
00363 bool destroyManagerContext();
00364
00378 bool destroyCategoryContext(const std::string& id);
00379
00380
00396 bool destroyModuleContext(const std::string& module,
00397 const std::string& category);
00398
00399
00400
00401
00402
00403
00404
00420 bool findHostContext(const std::string& id_seq, ContextList& context);
00421
00422
00438 bool findCategoryContext(const std::string& id_seq, ContextList& context);
00439
00440
00456 bool findModuleContext(const std::string& id_seq, ContextList& context);
00457
00458
00474 bool findManagerContext(const std::string& id_seq, ContextList& context);
00475
00476
00492 bool findManager(std::string& id, ObjectList& objects);
00493
00494
00510 bool findComponents(const std::string& id_seq, ObjectList& objects);
00511
00512
00513 protected:
00527 bool destroyRecursive(CosNaming::NamingContextExt_var context);
00528
00529
00547 void findObjectsRecursive(CosNaming::NamingContextExt_ptr context,
00548 const std::string& path, ObjectList& obj);
00549
00567 void findContextRecursive(CosNaming::NamingContextExt_var context,
00568 const std::string& path, ContextList& context_list);
00569
00570
00588 void bindObjectRecursive(CosNaming::NamingContextExt_var context,
00589 const std::string& path,
00590 CORBA::Object_ptr obj);
00591
00592
00593 private:
00601 int split(const std::string& input, const std::string& delimiter,
00602 std::vector<std::string>& results);
00603
00618 std::string makeFullPath(std::string path, int level);
00619
00637 bool pickupNode(const std::string& path, std::string& node, std::string& remain);
00638
00657 void nodeToIdKindAny(const std::string& node,
00658 std::string& id, std::string& kind);
00659
00677 void nodeToIdKind(const std::string& node,
00678 std::string& id, std::string& kind);
00679
00680 private:
00681
00689 CORBA::Object_var m_nameRef;
00690
00698 CosNaming::NamingContextExt_var m_rootContext;
00699
00707 CosNaming::NamingContextExt_var m_hostContext;
00708
00716 CosNaming::NamingContextExt_var m_mngrContext;
00717
00725 std::map<std::string, CosNaming::NamingContextExt_var> m_cateContext;
00726
00734 std::map<std::string, std::map<std::string, CosNaming::NamingContextExt_var> > m_compContext;
00735
00743 int m_bindListNum;
00744
00752 std::vector<CORBA::Object_ptr> m_vObjects;
00753
00754 };
00755
00756 };
00757
00758 #endif // end of __RtcNaming_h__