summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/FaultTolerance/FT_IOGR_Property.h
blob: cc888e28e31be779e76816a707f24cd0fad1c66b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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 */