summaryrefslogtreecommitdiff
path: root/TAO/CIAO/ciao/CCM_Component.idl
blob: 3dcc86e4dd3ab99d789c6e79e70893f1ebbed852 (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
// $Id$

/**
 * @@ Compile this file with:
 *
 *     tao_idl -Gv -I ../.. -I ../../orbsvcs/orbsvcs \
 *          -Wb,export_macro=CIAO_Export \
 *          -Wb,export_include=CIAO_export.h \
 *          -Wb,pre_include="ace/pre.h" \
 *          -Wb,post_include="ace/post.h" \
 *          CCM_Component.idl
 */

#if !defined (CCM_COMPONENT_IDL)
#define CCM_COMPONENT_IDL

#include "CCM_Event.idl"
#include "tao/IFR_Client/IFR_Base.pidl"

module Components
{
  typeprefix Components "omg.org";

  abstract valuetype PrimaryKeyBase {};

  interface CCMObject; //forward reference

  interface CCMHome
  {
    CORBA::IRObject get_component_def ();
    CORBA::IRObject get_home_def ();
    void remove_component ( in CCMObject comp)
      raises (RemoveFailure);
  };
  typedef sequence<CCMHome> CCMHomes;

  interface KeylessCCMHome
  {
    CCMObject create_component()
      raises (CreateFailure);
  };

  interface HomeFinder
  {
    CCMHome find_home_by_component_type (in CORBA::RepositoryId comp_repid)
      raises (HomeNotFound);

    CCMHome find_home_by_home_type (in CORBA::RepositoryId home_repid)
      raises (HomeNotFound);

    CCMHome find_home_by_name (in string home_name)
      raises (HomeNotFound);
  };

  interface Configurator
  {
    void configure (in CCMObject comp)
      raises (WrongComponentType);
  };

  valuetype ConfigValue
  {
    public FeatureName name;
    public any value;
  };

  typedef sequence<ConfigValue> ConfigValues;

  interface StandardConfigurator : Configurator
  {
    void set_configuration (in ConfigValues descr);
  };

  interface HomeConfiguration : CCMHome
  {
    void set_configurator (in Configurator cfg);
    void set_configuration_values (in ConfigValues config);
    void complete_component_configuration (in boolean b);
    void disable_home_configuration();
  };

  valuetype ComponentPortDescription
  {
    public FacetDescriptions facets;
    public ReceptacleDescriptions receptacles;
    public ConsumerDescriptions consumers;
    public EmitterDescriptions emitters;
    public PublisherDescriptions publishers;
  };

  interface CCMObject : Navigation, Receptacles, Events
  {
    CORBA::IRObject get_component_def ( );
    CCMHome get_ccm_home( );
    PrimaryKeyBase get_primary_key( )
      raises (NoKeyAvailable);

    /// CIAO specific operations to have some control on when and how
    /// to activate  components.
    /**
     * This is all from our work on ARMS where we needed to know whether
     * every component has been configured, say for example to use
     * logging in the assembly which could in turn be provided by a
     * component. To get around all this we are adding some methods on
     * this till we think of some standard way to do this. The problem
     * is that the deployer should be able to call this as opposed to
     * the home calling it as soon as the component is created.
     *
     * All these operations are called in the order mentioned, ie. the
     * deployer calls ciao_preactivate () on all components, then
     * ciao_activate and then ciao_postactivate (). The speciality is
     * that these operations would be invoked on every target object
     * before the next call is made. It is similar to the way
     * portable interceptors work, trying to get everything onto the
     * flow stack, but differ in the intention.
     */
    void ciao_preactivate ()
      raises (InvalidConfiguration);

    void ciao_activate ()
      raises (InvalidConfiguration);

    void ciao_postactivate ()
      raises (InvalidConfiguration);

    void configuration_complete ()
      raises (InvalidConfiguration);

    void remove()
      raises (RemoveFailure);
    ComponentPortDescription get_all_ports ();
  };

  // @@ Enumeration and DefaultEnumeration are only for EJB to CCM
  // mapping?  At any rate, we should be able to skip them for now.
  abstract valuetype Enumeration
  {
    boolean has_more_elements();
    CCMObject next_element();
  };

  typedef sequence<CCMObject> CCMObjectSeq;

  valuetype DefaultEnumeration : Enumeration
  {
    private CCMObjectSeq objects;
  };
};
#endif /* CCM_COMPONENT_IDL */