summaryrefslogtreecommitdiff
path: root/trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h')
-rw-r--r--trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h b/trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h
new file mode 100644
index 00000000000..cc888e28e31
--- /dev/null
+++ b/trunk/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h
@@ -0,0 +1,147 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file FT_IOGR_Property.h
+ *
+ * $Id$
+ *
+ * This class implements the IOGR properties for the FT service
+ *
+ *
+ * @author Bala Natarajan <bala@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef TAO_FT_IOGR_PROPERTY_H
+#define TAO_FT_IOGR_PROPERTY_H
+#include /**/ "ace/pre.h"
+
+#include "tao/LocalObject.h"
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/IORManipulation/IORManip_Loader.h"
+#include "orbsvcs/FT_CORBA_ORBC.h"
+#include "tao/IOPC.h"
+#include "orbsvcs/FaultTolerance/FT_ORB_Utils_export.h"
+
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#endif /* _MSC_VER */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_Profile;
+
+/**
+ * @class TAO_FT_IOGR_Property
+ *
+ * @brief TAO_FT_IOGR_Property
+ *
+ * This class serves as the callback class for setting the
+ * TaggedComponent properties in the profiles of the IOGR. The
+ * user can make an instance of this class with the right
+ * properties and use the helper methods in the IORManipulation
+ *
+ * NOTE: This class is NOT thread safe. The range of services that
+ * use this class (like the RM) should use them in a thread safe
+ * manner.
+ */
+class TAO_FT_ORB_Utils_Export TAO_FT_IOGR_Property
+ : public virtual TAO_IOP::TAO_IOR_Property,
+ public virtual TAO_Local_RefCounted_Object
+{
+public:
+
+ /// Our Constructor
+ TAO_FT_IOGR_Property (FT::TagFTGroupTaggedComponent &ft_group);
+
+ TAO_FT_IOGR_Property (void);
+
+ /// Destructor
+ ~TAO_FT_IOGR_Property (void);
+
+ /// Set the property for the IOGR
+ virtual CORBA::Boolean set_property (
+ CORBA::Object_ptr &ior
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ TAO_IOP::Invalid_IOR
+ ));
+
+ /// Set <ior1> as primary which is a part of <ior2>
+ virtual CORBA::Boolean set_primary (
+ CORBA::Object_ptr &ior1,
+ CORBA::Object_ptr ior2
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ TAO_IOP::NotFound,
+ TAO_IOP::Duplicate
+ ));
+
+ /// Get the primary member from the IOGR <ior>
+ virtual CORBA::Object_ptr get_primary (
+ CORBA::Object_ptr ior
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException,
+ TAO_IOP::NotFound
+ ));
+
+ /// Is there a primary available for <ior>
+ virtual CORBA::Boolean is_primary_set (
+ CORBA::Object_ptr ior
+ ACE_ENV_ARG_DECL_WITH_DEFAULTS)
+ ACE_THROW_SPEC ((
+ CORBA::SystemException
+ ));
+
+ virtual CORBA::Boolean remove_primary_tag (
+ CORBA::Object_ptr &iogr
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Reset the underlying tagged components held by the class
+ CORBA::Boolean reset_tagged_components (
+ FT::TagFTGroupTaggedComponent &ft_group);
+
+ /// Extract the TagFTGroupTaggedComponent inside the <ior>
+ CORBA::Boolean get_tagged_component (
+ const CORBA::Object_ptr iogr,
+ FT::TagFTGroupTaggedComponent &ft_group
+ ACE_ENV_ARG_DECL) const
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+
+ /// An helper function that gets the primary profile from the <ior>
+ TAO_Profile *get_primary_profile (CORBA::Object_ptr ior);
+
+ /// An helper method for encoding the proeprties
+ CORBA::Boolean encode_properties (
+ TAO_OutputCDR &cdr,
+ IOP::TaggedComponent &tagged_components);
+
+private:
+ /// Hold the reference to the FT group tagged component
+ FT::TagFTGroupTaggedComponent *ft_group_tagged_component_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif /* _MSC_VER */
+
+#if defined (__ACE_INLINE__)
+# include "orbsvcs/FaultTolerance/FT_IOGR_Property.inl"
+#endif /* __ACE_INLINE__ */
+
+#include /**/ "ace/post.h"
+#endif /* TAO_FT_IOGR_PROPERTY_H */