summaryrefslogtreecommitdiff
path: root/TAO/tao/PortableServer/IORInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/PortableServer/IORInfo.h')
-rw-r--r--TAO/tao/PortableServer/IORInfo.h173
1 files changed, 173 insertions, 0 deletions
diff --git a/TAO/tao/PortableServer/IORInfo.h b/TAO/tao/PortableServer/IORInfo.h
new file mode 100644
index 00000000000..5b168a59fe4
--- /dev/null
+++ b/TAO/tao/PortableServer/IORInfo.h
@@ -0,0 +1,173 @@
+// -*- C++ -*-
+
+// ===================================================================
+/**
+ * @file IORInfo.h
+ *
+ * $Id$
+ *
+ * @author Ossama Othman <ossama@uci.edu>
+ */
+// ===================================================================
+
+#ifndef TAO_IOR_INFO_H
+#define TAO_IOR_INFO_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/IORInterceptor/IORInterceptorC.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/LocalObject.h"
+
+// This is to remove "inherits via dominance" warnings from MSVC.
+// MSVC is being a little too paranoid.
+#if defined(_MSC_VER)
+#if (_MSC_VER >= 1200)
+#pragma warning(push)
+#endif /* _MSC_VER >= 1200 */
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+
+/// Forward declarations.
+class TAO_POA;
+
+
+/**
+ * @class TAO_IORInfo
+ *
+ * @brief This class exposes an interface that allows IORInterceptors add
+ * tagged components to IORs.
+ */
+class TAO_IORInfo
+ : public virtual PortableInterceptor::IORInfo,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ /// Constructor.
+ TAO_IORInfo (TAO_POA *poa);
+
+ /**
+ * @name PortableInterceptor::IORInfo Methods
+ *
+ * Methods exposed by the PortableInterceptor::IORInfo interface.
+ */
+ //@{
+
+ /// Return the policy matching the given policy type that is in
+ /// effect for the object whose IOR is being created.
+ virtual CORBA::Policy_ptr get_effective_policy (
+ CORBA::PolicyType type
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Add the given tagged component to all profiles.
+ virtual void add_ior_component (
+ const IOP::TaggedComponent & component
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Add the given tagged component to all profiles matching the given
+ /// ProfileId.
+ virtual void add_ior_component_to_profile (
+ const IOP::TaggedComponent & component,
+ IOP::ProfileId profile_id
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual PortableInterceptor::AdapterManagerId manager_id (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual PortableInterceptor::AdapterState state (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual PortableInterceptor::ObjectReferenceTemplate * adapter_template (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual PortableInterceptor::ObjectReferenceFactory * current_factory (
+ ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual void current_factory (
+ PortableInterceptor::ObjectReferenceFactory * current_factory
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ //@}
+
+ /// Invalidate this IORInfo instance.
+ /**
+ * Once the IOR interception points have been invoked, this IORInfo
+ * instance is no longer valid.
+ */
+ void invalidate (void);
+
+ /// Inform the this IORInfo object that the
+ /// IORInterceptor::components_established() interception point has
+ /// been called.
+ /**
+ * This method is used so to inform the IORInfo when the
+ * add_ior_component() and add_ior_component_to_profile() methods
+ * are invalid. They are only valid in the
+ * IORInterceptor::establish_components() interception point.
+ */
+ void components_established (void);
+
+protected:
+
+ /// Protected destructor to enforce proper memory managment through
+ /// the reference counting mechanism.
+ ~TAO_IORInfo (void);
+
+ /// Check if this IORInfo instance is valid.
+ /**
+ * Once all IORInterceptor interception points have been called,
+ * this IORInfo object is no longer valid. Throw an exception in
+ * that case.
+ */
+ void check_validity (ACE_ENV_SINGLE_ARG_DECL);
+
+private:
+
+ /// Prevent copying through the copy constructor and the assignment
+ /// operator.
+ ACE_UNIMPLEMENTED_FUNC (
+ TAO_IORInfo (const TAO_IORInfo &))
+ ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_IORInfo &))
+
+private:
+
+ /// Pointer to POA
+ TAO_POA *poa_;
+
+ /// True if the IORInterceptor::components_established()
+ /// interception point was called. False otherwise.
+ /**
+ * This flag is used to prevent the add_ior_component() and
+ * add_ior_component_to_profile() methods from being incorrectly
+ * called after the IORInterceptor::establish_components()
+ * interception point has been called.
+ */
+ CORBA::Boolean components_established_;
+
+};
+
+#if defined (__ACE_INLINE__)
+# include "IORInfo.inl"
+#endif /* __ACE_INLINE__ */
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_IOR_INFO_H */