summaryrefslogtreecommitdiff
path: root/TAO/tao/ObjRefTemplate/ObjectReferenceTemplate_Adapter_Impl.h
blob: 040f8d4871adcc9680a2b3bfa98bfd6093f5e5c3 (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
// -*- C++ -*-

//=============================================================================
/**
 * @file ObjectReferenceTemplate_Adapter_Impl.h
 *
 * $Id$
 *
 * This is the implementation of the TAO_ObjectReferenceTemplate_Adapter
 *
 * @author Johnny Willemsen  <jwillemsen@remedy.nl>
 */
//=============================================================================

#ifndef TAO_OBJECT_REFERENCE_TEMPLATE_ADAPTER_IMPL_H
#define TAO_OBJECT_REFERENCE_TEMPLATE_ADAPTER_IMPL_H

#include /**/ "ace/pre.h"

#include "ort_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "tao/PortableServer/ObjectReferenceTemplate_Adapter.h"
#include "tao/ObjRefTemplate/ObjectReferenceTemplate_i.h"

#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
#pragma warning(push)
#endif /* _MSC_VER >= 1200 */
#pragma warning(disable:4250)
#endif /* _MSC_VER */

class TAO_POA;

/**
 * @class TAO_ObjectReferenceTemplate_Adapter
 *
 * @brief Implementation of the PortableInterceptor::ObjectReferenceTemplate
 *        interface.
 */
class TAO_ORT_Export TAO_ObjectReferenceTemplate_Adapter_Impl
  : public TAO_ObjectReferenceTemplate_Adapter
{
public:
  TAO_ObjectReferenceTemplate_Adapter_Impl();

  /// Activate this adapter
  virtual int activate (const char *server_id,
                        const char *orb_id,
                        PortableInterceptor::AdapterName *adapter_name,
                        TAO_POA *poa
                        ACE_ENV_ARG_DECL_WITH_DEFAULTS);

  /// Set a different ort_factory to be used.
  virtual int set_obj_ref_factory (PortableInterceptor::ObjectReferenceFactory *current_factory
                                   ACE_ENV_ARG_DECL_WITH_DEFAULTS);

  /**
   * @name PortableInterceptor::ObjectReferenceTemplate Methods
   *
   * Methods required by the
   * PortableInterceptor::ObjectReferenceTemplate ValueType.
   */
  //@{
  virtual char * server_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((CORBA::SystemException));

  virtual char * orb_id (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((CORBA::SystemException));

  virtual PortableInterceptor::AdapterName * adapter_name (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((CORBA::SystemException));
  //@}

  /// Accessor methods to ObjectReferenceTemplate template
  virtual PortableInterceptor::ObjectReferenceTemplate * get_adapter_template (void);

  /// Accessor methods to PortableInterceptor::ObjectReferenceFactory
  virtual PortableInterceptor::ObjectReferenceFactory * get_obj_ref_factory (void);

  /**
   * @name PortableInterceptor::ObjectReferenceFactory Methods
   *
   * Methods required by the
   * PortableInterceptor::ObjectReferenceFactory ValueType.
   */
  //@{
  virtual CORBA::Object_ptr make_object (
      const char * repository_id,
      const PortableInterceptor::ObjectId & id
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((
      CORBA::SystemException
    ));
  //@}

  /// Set the underlying POA pointer.
  /**
   * Upon destruction of the POA that this ObjectReferenceTemplate is
   * associated with, the underlying POA pointer will be set to zero
   * to forcibly break all ties with the POA.  This is necessary to
   * prevent this ObjectReferenceTemplate from invoking the POA after
   * it has been destroyed.
   */
  void poa (TAO_POA * poa);

protected:

  /// Destructor
  /**
   * Protected destructor to enforce proper memory management via
   * reference counting.
   */
  ~TAO_ObjectReferenceTemplate_Adapter_Impl (void);

private:

  /// The ORT Template, this is the factory and its identify
  PortableInterceptor::ObjectReferenceTemplate_var ort_template_;

  /// The ORT Factory
  PortableInterceptor::ObjectReferenceFactory_var ort_factory_;

  /// TAO specific ORT Template
  TAO_ObjectReferenceTemplate* tao_ort_template;
};

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif /* _MSC_VER */

#if defined (__ACE_INLINE__)
# include "ObjectReferenceTemplate_Adapter_Impl.inl"
#endif /* ! __ACE_INLINE__ */

#include /**/ "ace/post.h"

#endif /* TAO_OBJECT_REFERENCE_TEMPLATE_ADAPTER_IMPL_H */