summaryrefslogtreecommitdiff
path: root/TAO/tao/IFR_Client/IFR_Components.pidl
blob: bad6a63dbf7a995de5e0c3b94492c28de8b98a65 (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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
// -*- IDL -*-

/**
 * @file IFR_Components.pidl
 *
 * $Id$
 *
 *   This file was used to generate the code in IFR_ComponentsC.{h,inl,cpp}.
 *   The original file Interface.idl was split into four pieces, to
 *   keep the generated files to a manageable size and reduce build
 *   time. This IDL file contains all the interfaces and other data
 *   types related to CORBA components.
 *
 *   The command used to generate code from this IDL file is:
 *
 *     tao_idl -Ge 1 -GT -I../.. \
 *          -Wb,export_macro=TAO_IFR_Client_Export \
 *          -Wb,export_include=ifr_client_export.h \
 *          -Wb,pre_include="ace/pre.h" \
 *          -Wb,post_include="ace/post.h" \
 *          -Wb,versioning_begin=TAO_BEGIN_VERSIONED_NAMESPACE_DECL \
 *          -Wb,versioning_end=TAO_END_VERSIONED_NAMESPACE_DECL \
 *          IFR_Components.pidl
 *
 *   Only the stub files are used in the TAO_IFR_Client library. The
 *   skeleton files can be deleted from this directory.
 *
 *   No patching of the generated stub files is necessary.
 *
 *   To generate the skeleton files for the IFR Service, the command is:
 *
 *     tao_idl -o ../../orbsvcs/orbsvcs/IFRService -Ge 1 \
 *          -Wb,pre_include="ace/pre.h" \
 *          -Wb,post_include="ace/post.h" \
 *          IFR_Components.pidl
 *
 *   The only modification necessary to the skeleton files is to
 *   change
 *
 *   #include "IFR_ComponentsC.h"
 *
 *   to
 *
 *   #include "tao/IFR_Client/IFR_ComponentsC.h"
 *
 *   in IFR_ComponentsS.h. The stub files may be deleted from the IFRService
 *   directory.
 *
 */

#ifndef _IFR_COMPONENTS_IDL_
#define _IFR_COMPONENTS_IDL_

#include "tao/IFR_Client/IFR_Extended.pidl"

module CORBA
{
  typeprefix CORBA "omg.org";

  module ComponentIR
  {
    interface ComponentDef;
    interface HomeDef;

    interface EventDef : ExtValueDef
    {
    };

    interface Container : CORBA::Container
    {
      ComponentDef create_component (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in ComponentDef base_component,
	  in InterfaceDefSeq supports_interfaces
	);

      HomeDef create_home (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in HomeDef base_home,
	  in ComponentDef managed_component,
	  in InterfaceDefSeq supports_interfaces,
	  in ValueDef primary_key
	);

      EventDef create_event (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in boolean is_custom,
	  in boolean is_abstract,
	  in ValueDef base_value,
	  in boolean is_truncatable,
	  in ValueDefSeq abstract_base_values,
	  in InterfaceDefSeq supported_interfaces,
	  in ExtInitializerSeq initializers
	);
    };

    interface ModuleDef : CORBA::ModuleDef,
			  Container
    {
    };

    interface Repository : CORBA::Repository,
			   Container
    {
    };

    interface ProvidesDef : Contained
    {
      attribute InterfaceDef interface_type;
    };

    struct ProvidesDescription
    {
      Identifier name;
      RepositoryId id;
      RepositoryId defined_in;
      VersionSpec version;
      RepositoryId interface_type;
    };

    interface UsesDef : Contained
    {
      attribute InterfaceDef interface_type;
      attribute boolean is_multiple;
    };

    struct UsesDescription
    {
      Identifier name;
      RepositoryId id;
      RepositoryId defined_in;
      VersionSpec version;
      RepositoryId interface_type;
      boolean is_multiple;
    };

    interface EventPortDef : Contained
    {
      // read/write interface
      attribute EventDef event;
      // read interface
      boolean is_a (in RepositoryId event_id);
    };

    struct EventPortDescription
    {
      Identifier name;
      RepositoryId id;
      RepositoryId defined_in;
      VersionSpec version;
      RepositoryId event;
    };

    interface EmitsDef : EventPortDef
    {
    };

    interface PublishesDef : EventPortDef
    {
    };

    interface ConsumesDef : EventPortDef
    {
    };

    interface ComponentDef : ExtInterfaceDef
    {
      // read/write interface
      attribute ComponentDef base_component;
      attribute InterfaceDefSeq supported_interfaces;

      // write interface
      ProvidesDef create_provides (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in InterfaceDef interface_type
	);

      UsesDef create_uses (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in InterfaceDef interface_type,
	  in boolean is_multiple
	);

      EmitsDef create_emits (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in EventDef event
	);

      PublishesDef create_publishes (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in EventDef event
	);

      ConsumesDef create_consumes (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in EventDef event
	);
    };

    typedef sequence<ProvidesDescription> ProvidesDescriptionSeq;
    typedef sequence<UsesDescription> UsesDescriptionSeq;
    typedef sequence<EventPortDescription> EventPortDescriptionSeq;

    struct ComponentDescription
    {
      Identifier name;
      RepositoryId id;
      RepositoryId defined_in;
      VersionSpec version;
      RepositoryId base_component;
      RepositoryIdSeq supported_interfaces;
      ProvidesDescriptionSeq provided_interfaces;
      UsesDescriptionSeq used_interfaces;
      EventPortDescriptionSeq emits_events;
      EventPortDescriptionSeq publishes_events;
      EventPortDescriptionSeq consumes_events;
      ExtAttrDescriptionSeq attributes;
      TypeCode type;
    };

    interface FactoryDef : OperationDef
    {
    };

    interface FinderDef : OperationDef
    {
    };

    interface HomeDef : ExtInterfaceDef
    {
      // read/write interface
      attribute HomeDef base_home;
      attribute InterfaceDefSeq supported_interfaces;
      attribute ComponentDef managed_component;
      attribute ValueDef primary_key;

      // write interface
      FactoryDef create_factory (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in ParDescriptionSeq params,
	  in ExceptionDefSeq exceptions
	);

      FinderDef create_finder (
	  in RepositoryId id,
	  in Identifier name,
	  in VersionSpec version,
	  in ParDescriptionSeq params,
	  in ExceptionDefSeq exceptions
	);
    };

    struct HomeDescription
    {
      Identifier name;
      RepositoryId id;
      RepositoryId defined_in;
      VersionSpec version;
      RepositoryId base_home;
      RepositoryId managed_component;
      ValueDescription primary_key;
      OpDescriptionSeq factories;
      OpDescriptionSeq finders;
      OpDescriptionSeq operations;
      ExtAttrDescriptionSeq attributes;
      TypeCode type;
    };
  };
};

#endif /* _IFR_COMPONENTS_IDL_ */