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
00048
00064 class RtcNaming
00065 {
00066 public:
00077 RtcNaming() : m_bindListNum(100) {};
00078
00089 RtcNaming(CORBA::ORB_ptr orb) : m_bindListNum(100) {initNaming(orb);};
00090
00101 ~RtcNaming();
00102
00103
00118 bool initNaming(const CORBA::ORB_ptr orb);
00119
00120
00121
00122
00123
00124
00125
00148 CosNaming::NamingContextExt_var
00149 createContext(CosNaming::NamingContextExt_var context,
00150 const std::string& id, const std::string& kind);
00151
00152
00171 bool createHostContext(const std::string& id);
00172
00173
00192 bool createManagerContext(const std::string& id);
00193
00194
00213 bool createCategoryContext(const std::string& category);
00214
00215
00236 bool createModuleContext(const std::string& module,
00237 const std::string& category);
00238
00239
00264 bool bindObject(CosNaming::NamingContextExt_var context,
00265 const std::string& id, const std::string& kind,
00266 CORBA::Object_ptr obj);
00267
00288 bool bindObjectByFullPath(const std::string& path,
00289 CORBA::Object_ptr obj);
00290
00313 bool bindComponent(const std::string& component, const std::string& module,
00314 const std::string& category, CORBA::Object_ptr obj);
00315
00336 bool bindManager(const std::string& id, CORBA::Object_ptr obj);
00337
00338
00339
00340
00341
00342
00343
00353 bool destroyHostContext();
00354
00364 bool destroyManagerContext();
00365
00379 bool destroyCategoryContext(const std::string& id);
00380
00381
00397 bool destroyModuleContext(const std::string& module,
00398 const std::string& category);
00399
00400
00423 bool unbindObject(CosNaming::NamingContextExt_var context,
00424 const std::string& id, const std::string& kind);
00425
00426
00427
00446 bool unbindObjectByFullPath(const std::string& path);
00447
00448
00472 bool unbindLocalComponent(const std::string category,
00473 const std::string module,
00474 const std::string instance);
00475
00476
00477
00478
00479
00480
00481
00497 bool findHostContext(const std::string& id_seq, ContextList& context);
00498
00499
00515 bool findCategoryContext(const std::string& id_seq, ContextList& context);
00516
00517
00533 bool findModuleContext(const std::string& id_seq, ContextList& context);
00534
00535
00551 bool findManagerContext(const std::string& id_seq, ContextList& context);
00552
00553
00569 bool findManager(std::string& id, ObjectList& objects);
00570
00571
00587 bool findComponents(const std::string& id_seq, ObjectList& objects);
00588
00589
00590 protected:
00604 bool destroyRecursive(CosNaming::NamingContextExt_var context);
00605
00606
00624 void findObjectsRecursive(CosNaming::NamingContextExt_ptr context,
00625 const std::string& path, ObjectList& obj);
00626
00644 void findContextRecursive(CosNaming::NamingContextExt_var context,
00645 const std::string& path, ContextList& context_list);
00646
00647
00665 void bindObjectRecursive(CosNaming::NamingContextExt_var context,
00666 const std::string& path,
00667 CORBA::Object_ptr obj);
00668
00669
00670 private:
00678 int split(const std::string& input, const std::string& delimiter,
00679 std::vector<std::string>& results);
00680
00695 std::string makeFullPath(std::string path, int level);
00696
00714 bool pickupNode(const std::string& path, std::string& node, std::string& remain);
00715
00734 void nodeToIdKindAny(const std::string& node,
00735 std::string& id, std::string& kind);
00736
00754 void nodeToIdKind(const std::string& node,
00755 std::string& id, std::string& kind);
00756
00757 private:
00758
00766 CORBA::Object_var m_nameRef;
00767
00775 CosNaming::NamingContextExt_var m_rootContext;
00776
00784 CosNaming::NamingContextExt_var m_hostContext;
00785 std::string m_hostName;
00786
00794 CosNaming::NamingContextExt_var m_mngrContext;
00795 std::string m_mngrName;
00796
00804 std::map<std::string, CosNaming::NamingContextExt_var> m_cateContext;
00805
00813 std::map<std::string, std::map<std::string, CosNaming::NamingContextExt_var> > m_compContext;
00814
00822 int m_bindListNum;
00823
00831 std::vector<CORBA::Object_ptr> m_vObjects;
00832
00833 };
00834
00835 };
00836
00837 #endif // end of __RtcNaming_h__