Salome HOME
copy tag mergefrom_BR_V0_1_CC_Salome_04oct07
[modules/yacs.git] / src / runtime / RuntimeSALOME.hxx
1
2 #ifndef _RUNTIMESALOME_HXX_
3 #define _RUNTIMESALOME_HXX_
4
5 #include <Python.h>
6 #include <omniORB4/CORBA.h>
7 #include "Runtime.hxx"
8
9 #include<string>
10 #include<set>
11
12 namespace YACS
13 {
14   namespace ENGINE
15   {
16
17     //--- from omniORBpy.h (not present on Debian Sarge packages)
18     
19     struct omniORBpyAPI
20     {
21       
22       PyObject* (*cxxObjRefToPyObjRef)(const CORBA::Object_ptr cxx_obj,
23                                        CORBA::Boolean hold_lock);
24       // Convert a C++ object reference to a Python object reference.
25       // If <hold_lock> is true, caller holds the Python interpreter lock.
26       
27       CORBA::Object_ptr (*pyObjRefToCxxObjRef)(PyObject* py_obj,
28                                                CORBA::Boolean hold_lock);
29       // Convert a Python object reference to a C++ object reference.
30       // Raises BAD_PARAM if the Python object is not an object reference.
31       // If <hold_lock> is true, caller holds the Python interpreter lock.
32       
33       
34       omniORBpyAPI();
35       // Constructor for the singleton. Sets up the function pointers.
36     };
37
38     class RuntimeSALOME;
39     RuntimeSALOME* getSALOMERuntime();
40
41     class InputCorbaPort;
42     class InputPyPort;
43     class InputXmlPort;
44     class InputCppPort;
45
46
47     class RuntimeSALOME: public Runtime
48     {
49     public:
50       
51       static enum 
52       {
53               IsPyExt = 1,
54         UsePython = 2,
55               UseCorba = 4,
56               UseXml = 8,
57               UseCpp = 16,
58               UseSalome = 32
59       } FLAGS;
60
61       static void setRuntime(long flags = UsePython+UseCorba+UseXml+UseCpp+UseSalome); // singleton creation
62       
63       friend RuntimeSALOME* getSALOMERuntime();
64
65       virtual void init(long flags);
66       virtual void fini();
67
68       virtual InputPort* createInputPort(const std::string& name,
69                                          const std::string& impl,
70                                          Node * node,
71                                          TypeCode * type);
72
73       virtual OutputPort* createOutputPort(const std::string& name,
74                                            const std::string& impl,
75                                            Node * node,
76                                            TypeCode * type);
77       virtual InputDataStreamPort* createInputDataStreamPort(const std::string& name,
78                                                              Node *node,TypeCode *type);
79
80       virtual OutputDataStreamPort* createOutputDataStreamPort(const std::string& name,
81                                                                Node *node,TypeCode *type);
82
83       virtual InlineFuncNode* createFuncNode(const std::string& kind,const std::string& name);
84       virtual InlineNode* createScriptNode(const std::string& kind,const std::string& name);
85
86       virtual ServiceNode* createRefNode(const std::string& kind,const std::string& name);
87       virtual ServiceNode* createCompoNode(const std::string& kind,const std::string& name);
88       virtual ServiceInlineNode *createSInlineNode(const std::string& kind, const std::string& name);
89       virtual ComponentInstance* createComponentInstance(const std::string& name,
90                                                          const std::string& kind="");
91       virtual Container *createContainer(const std::string& kind="");
92       virtual WhileLoop* createWhileLoop(const std::string& name);
93       virtual ForLoop* createForLoop(const std::string& name);
94       virtual Bloc* createBloc(const std::string& name);
95       virtual Proc* createProc(const std::string& name);
96
97       virtual InputPort* adapt(InputPort* source,
98                                const std::string& impl,
99                                TypeCode * type) throw (ConversionException);
100
101       virtual InputPort* adaptNeutral(InputPort* source,
102                                       const std::string& impl,
103                                       TypeCode * type) throw (ConversionException);
104
105       virtual InputPort* adapt(InputCorbaPort* source,
106                                const std::string& impl,
107                                TypeCode * type) throw (ConversionException);
108
109       virtual InputPort* adaptCorbaToCorba(InputCorbaPort* source,
110                                            TypeCode * type) throw (ConversionException);
111   
112       virtual InputPort* adaptCorbaToNeutral(InputCorbaPort* source,
113                                              TypeCode * type) throw (ConversionException);
114
115       virtual InputPort* adaptCorbaToPython(InputCorbaPort* source,
116                                             TypeCode * type) throw (ConversionException);
117
118       virtual InputPort* adaptCorbaToCpp(InputCorbaPort* source,
119                                          TypeCode * type) throw (ConversionException);
120
121       virtual InputPort* adaptCorbaToXml(InputCorbaPort* source,
122                                          TypeCode * type) throw (ConversionException);
123
124       virtual InputPort* adapt(InputPyPort* source,
125                                const std::string& impl,
126                                TypeCode * type) throw (ConversionException);
127
128       virtual InputPort* adaptPythonToCorba(InputPyPort* source,
129                                             TypeCode * type) throw (ConversionException);
130       
131       virtual InputPort* adaptPythonToNeutral(InputPyPort* source,
132                                               TypeCode * type) throw (ConversionException);
133
134       virtual InputPort* adaptPythonToPython(InputPyPort* source,
135                                              TypeCode * type) throw (ConversionException);
136       
137       virtual InputPort* adaptPythonToXml(InputPyPort* source,
138                                           TypeCode * type) throw (ConversionException);
139
140       virtual InputPort* adaptPythonToCpp(InputPyPort* source,
141                                           TypeCode * type) throw (ConversionException);
142
143       virtual InputPort* adapt(InputCppPort* source,
144                                const std::string& impl,
145                                TypeCode * type) throw (ConversionException);
146                                
147       virtual InputPort* adaptCppToCorba(InputCppPort* source,
148                                             TypeCode * type) throw (ConversionException);
149       
150       virtual InputPort* adaptCppToNeutral(InputCppPort* source,
151                                               TypeCode * type) throw (ConversionException);
152
153       virtual InputPort* adaptCppToPython(InputCppPort* source,
154                                              TypeCode * type) throw (ConversionException);
155       
156       virtual InputPort* adaptCppToXml(InputCppPort* source,
157                                           TypeCode * type) throw (ConversionException);
158
159       virtual InputPort* adaptCppToCpp(InputCppPort* source,
160                                           TypeCode * type) throw (ConversionException);
161
162       virtual InputPort* adapt(InputXmlPort* source,
163                                const std::string& impl,
164                                TypeCode * type) throw (ConversionException);
165
166       virtual InputPort* adaptXmlToCorba(InputXmlPort* source,
167                                          TypeCode * type) throw (ConversionException);
168
169       virtual InputPort* adaptXmlToPython(InputXmlPort* inport,
170                                           TypeCode * type) throw (ConversionException);
171
172       virtual InputPort* adaptXmlToCpp(InputXmlPort* inport,
173                                           TypeCode * type) throw (ConversionException);
174
175       virtual InputPort* adaptXmlToNeutral(InputXmlPort* inport,
176                                           TypeCode * type) throw (ConversionException);
177
178       virtual InputPort* adaptNeutralToXml(InputPort* inport,
179                                            TypeCode * type) throw (ConversionException);
180
181       virtual InputPort* adaptNeutralToPython(InputPort* inport,
182                                               TypeCode * type) throw (ConversionException);
183
184       virtual InputPort* adaptNeutralToCorba(InputPort* inport,
185                                              TypeCode * type) throw (ConversionException);
186
187       virtual InputPort* adaptNeutralToCpp(InputPort* inport,
188                                              TypeCode * type) throw (ConversionException);
189       virtual ~RuntimeSALOME(); 
190
191       CORBA::ORB_ptr getOrb();
192       PyObject * getPyOrb();
193       PyObject * getBuiltins();
194       DynamicAny::DynAnyFactory_ptr getDynFactory();
195       omniORBpyAPI* getApi();
196
197     protected:
198       RuntimeSALOME();  // singleton
199       RuntimeSALOME(long flags);  // singleton
200       CORBA::ORB_var _orb;
201       PyObject * _pyorb;
202       PyObject * _bltins;
203       DynamicAny::DynAnyFactory_var _dynFactory;
204       omniORBpyAPI* _api;
205       long _flags;
206       bool _usePython, _useCorba, _useCpp, _useXml;
207
208     };
209   }
210 }
211
212 #endif