summaryrefslogtreecommitdiff
path: root/modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h')
-rw-r--r--modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h b/modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h
new file mode 100644
index 00000000000..cf92d6aa292
--- /dev/null
+++ b/modules/CIAO/DAnCE/RedirectionService/CCMObjectLocator.h
@@ -0,0 +1,105 @@
+// $Id$
+
+#ifndef CCMOBJECTLOCATOR_H_
+#define CCMOBJECTLOCATOR_H_
+
+#include "ace/Map_Manager.h"
+#include "ace/Null_Mutex.h"
+#include "ace/SStringfwd.h"
+#include "ace/String_Base.h"
+#include "tao/corba.h"
+#include "tao/ORB.h"
+#include "tao/Object.h"
+#include "tao/PortableServer/PortableServer.h"
+#include "tao/PortableServer/ServantLocatorC.h"
+
+#include "RedirectionService_Export.h"
+
+namespace DAnCE
+{
+
+ class RedirectionService_Export CCMObjectLocator
+ : public PortableServer::ServantLocator
+ , public ::CORBA::LocalObject
+ {
+ public:
+ class TreeNode;
+ typedef ACE_Map_Manager<ACE_CString, TreeNode*, ACE_Null_Mutex> TNodes;
+ class RedirectionService_Export TreeNode
+ {
+ public:
+ static const char delimiter_ = '/';
+ TreeNode() {};
+ TreeNode (const TreeNode & src);
+ ~TreeNode();
+ CORBA::Object_ptr getValue() const
+ {
+ return CORBA::Object::_duplicate (this->obj_.in());
+ };
+ CORBA::Object_ptr getValue (const char * path) const;
+ void setValue (CORBA::Object_ptr obj)
+ {
+ this->obj_ = CORBA::Object::_duplicate (obj);
+ };
+ void addChild (const char * path, CORBA::Object_ptr obj = CORBA::Object::_nil());
+ void addChild (const char * path, TreeNode & node);
+ void removeChild (const char * path);
+ int missingNodeLevel (const char * path);
+ static ACE_CString mergePath (const char * parent, const char * child);
+ private:
+ CORBA::Object_var obj_;
+ TNodes children_;
+ TreeNode * getChild (const char * path) const;
+ static ACE_CString splitPath (ACE_CString & path, bool first = true);
+ };
+
+ CCMObjectLocator (CORBA::ORB_ptr orb, PortableServer::POA_ptr parent_poa, const char * poa_name);
+
+ virtual ~CCMObjectLocator();
+
+ virtual ::PortableServer::Servant preinvoke (
+ const ::PortableServer::ObjectId & oid,
+ ::PortableServer::POA_ptr adapter,
+ const char * operation,
+ ::PortableServer::ServantLocator::Cookie & the_cookie);
+
+ virtual void postinvoke (
+ const ::PortableServer::ObjectId & /*oid*/,
+ ::PortableServer::POA_ptr /*adapter*/,
+ const char * /*operation*/,
+ ::PortableServer::ServantLocator::Cookie /*the_cookie*/,
+ ::PortableServer::Servant /*the_servant*/
+ );
+
+ void start_register (const ACE_CString& plan);
+
+ CORBA::Object_ptr register_object (const ACE_CString & plan
+ , const ACE_CString & inst
+ , const ACE_CString & port
+ , CORBA::Object_ptr obj);
+
+ CORBA::Object_ptr register_object (const ACE_CString & plan
+ , const ACE_CString & inst
+ , CORBA::Object_ptr obj);
+
+ void unregister_object (const ACE_CString & plan
+ , const ACE_CString & inst
+ , const ACE_CString & port);
+
+ void finish_register (const ACE_CString& plan);
+
+ void register_objects (const char * name, TreeNode & node);
+
+ private:
+ TreeNode db_;
+ CORBA::ORB_var orb_;
+ PortableServer::POA_var myPOA_;
+
+ TNodes transactions_;
+ CCMObjectLocator() {};
+ // to ban the usage
+ }; // CCMObjectLocator
+
+} //DAnCE
+
+#endif /*CCMOBJECTLOCATOR_H_*/