00001
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef RtcNaming_h
00032 #define RtcNaming_h
00033
00034
00035 #include "rtm/idl/RTMBaseStub.h"
00036 #include "rtm/idl/RTMBaseSkel.h"
00037 #include "rtm/RtcBase.h"
00038
00039
00040 #include <map>
00041 #include <string>
00042 #include <vector>
00043
00044 #define HOST_CTXT_LEVEL 1
00045 #define MANAGER_CTXT_LEVEL 2
00046 #define MANAGER_LEVEL 3
00047 #define CATEGORY_CTXT_LEVEL 3
00048 #define MODULE_CTXT_LEVEL 4
00049 #define COMPONENT_LEVEL 5
00050
00051 namespace RTM
00052 {
00053 using namespace std;
00054
00055 typedef std::vector<CosNaming::NamingContextExt_var> ContextList;
00056 typedef std::vector<CORBA::Object_ptr> ObjectList;
00057
00058
00074 class EXPORTS RtcNaming
00075 {
00076 public:
00087 RtcNaming() : m_bindListNum(100) {};
00088
00099 RtcNaming(CORBA::ORB_ptr orb) : m_bindListNum(100) {initNaming(orb);};
00100
00111 ~RtcNaming();
00112
00113
00128 bool initNaming(const CORBA::ORB_ptr orb);
00129
00130
00131
00132
00133
00134
00135
00158 CosNaming::NamingContextExt_var
00159 createContext(CosNaming::NamingContextExt_var context,
00160 const std::string& id, const std::string& kind);
00161
00162
00181 bool createHostContext(const std::string& id);
00182
00183
00202 bool createManagerContext(const std::string& id);
00203
00204
00223 bool createCategoryContext(const std::string& category);
00224
00225
00246 bool createModuleContext(const std::string& module,
00247 const std::string& category);
00248
00249
00274 bool bindObject(CosNaming::NamingContextExt_var context,
00275 const std::string& id, const std::string& kind,
00276 CORBA::Object_ptr obj);
00277
00298 bool bindObjectByFullPath(const std::string& path,
00299 CORBA::Object_ptr obj);
00300
00323 bool bindComponent(const std::string& component, const std::string& module,
00324 const std::string& category, CORBA::Object_ptr obj);
00325
00346 bool bindManager(const std::string& id, CORBA::Object_ptr obj);
00347
00348
00349
00350
00351
00352
00353
00363 bool destroyHostContext();
00364
00374 bool destroyManagerContext();
00375
00389 bool destroyCategoryContext(const std::string& id);
00390
00391
00407 bool destroyModuleContext(const std::string& module,
00408 const std::string& category);
00409
00410
00433 bool unbindObject(CosNaming::NamingContextExt_var context,
00434 const std::string& id, const std::string& kind);
00435
00436
00437
00456 bool unbindObjectByFullPath(const std::string& path);
00457
00458
00482 bool unbindLocalComponent(const std::string category,
00483 const std::string module,
00484 const std::string instance);
00485
00486
00487
00488
00489
00490
00491
00507 bool findHostContext(const std::string& id_seq, ContextList& context);
00508
00509
00525 bool findCategoryContext(const std::string& id_seq, ContextList& context);
00526
00527
00543 bool findModuleContext(const std::string& id_seq, ContextList& context);
00544
00545
00561 bool findManagerContext(const std::string& id_seq, ContextList& context);
00562
00563
00579 bool findManager(std::string& id, ObjectList& objects);
00580
00581
00597 bool findComponents(const std::string& id_seq, ObjectList& objects);
00598
00599
00600 protected:
00614 bool destroyRecursive(CosNaming::NamingContextExt_var context);
00615
00616
00634 void findObjectsRecursive(CosNaming::NamingContextExt_ptr context,
00635 const std::string& path, ObjectList& obj);
00636
00654 void findContextRecursive(CosNaming::NamingContextExt_var context,
00655 const std::string& path, ContextList& context_list);
00656
00657
00675 void bindObjectRecursive(CosNaming::NamingContextExt_var context,
00676 const std::string& path,
00677 CORBA::Object_ptr obj);
00678
00679
00680 private:
00688 int split(const std::string& input, const std::string& delimiter,
00689 std::vector<std::string>& results);
00690
00705 std::string makeFullPath(std::string path, int level);
00706
00724 bool pickupNode(const std::string& path, std::string& node, std::string& remain);
00725
00744 void nodeToIdKindAny(const std::string& node,
00745 std::string& id, std::string& kind);
00746
00764 void nodeToIdKind(const std::string& node,
00765 std::string& id, std::string& kind);
00766
00767 private:
00768
00776 CORBA::Object_var m_nameRef;
00777
00785 CosNaming::NamingContextExt_var m_rootContext;
00786
00794 CosNaming::NamingContextExt_var m_hostContext;
00795 std::string m_hostName;
00796
00804 CosNaming::NamingContextExt_var m_mngrContext;
00805 std::string m_mngrName;
00806
00814 std::map<std::string, CosNaming::NamingContextExt_var> m_cateContext;
00815
00823 std::map<std::string, std::map<std::string, CosNaming::NamingContextExt_var> > m_compContext;
00824
00832 int m_bindListNum;
00833
00841 std::vector<CORBA::Object_ptr> m_vObjects;
00842
00843 };
00844
00845 };
00846
00847 #endif // end of __RtcNaming_h__