Salome HOME
25d3b22235fa0fdce0fe27233d14a695636df20d
[modules/superv.git] / src / GraphExecutor / DataFlowExecutor_DynInvoke.cxx
1 using namespace std;
2 //=============================================================================
3 // File      : DataFlowBase_DynInvoke.cxx
4 // Created   : 2002
5 // Author    : Marc Tajchman, CEA
6 // Project   : SALOME
7 // $Header:
8 //=============================================================================
9
10 #include <stdarg.h>
11 #include <map>
12
13 #include "DataFlowExecutor_InNode.hxx"
14
15 using namespace CORBA ;
16
17
18
19 void GraphExecutor::InNode::DynInvoke(Engines::Component_ptr obj ,
20                                       const char *method , 
21                                       ServicesAnyData * inParams , int nInParams ,
22                                       ServicesAnyData * outParams , int nOutParams ) {
23   Request_var req = obj->_request( method ) ;
24   const char *s ;
25
26   NVList_ptr arguments =req->arguments() ;
27
28   int i ;
29
30   int n_in  = nInParams ;
31   int n_out = nOutParams ;
32
33   for ( i = 0 ; i < n_in ; i++ ) {
34     CORBA::Any & data = inParams[i].Value ;
35     s                 = inParams[i].Name.c_str() ;
36     arguments->add_value( s , data , CORBA::ARG_IN ) ;
37 #if 0
38     switch ( data.type()->kind() ) {
39     case CORBA::tk_string :
40       char * t ;
41       data >>= t ;
42       MESSAGE( "ArgIn" << i << " : " << s << " Value " << t << " (string)") ;
43       break ;
44     case CORBA::tk_double :
45       double d ;
46       data >>= d ;
47       MESSAGE( "ArgIn" << i << " : " << s << " Value " << d << " (double)") ;
48       break ;
49     case CORBA::tk_long :
50       long l ;
51       data >>= l ;
52       MESSAGE( "ArgIn" << i << " : " << s << " Value " << l << " (long)") ;
53       break ;
54     case CORBA::tk_objref :
55       MESSAGE( "ArgIn" << i << " : " << s << " Value " << "(object reference)") ;
56       break ;
57     default :
58       MESSAGE( "ArgIn" << i << " : " << s << " Value " << "(other ERROR)") ;
59     }
60     MESSAGE() ;
61 #endif
62   }
63
64   for ( i = 0 ; i < n_out ; i++ ) {
65     CORBA::Any & data = outParams[i].Value ;
66     s                 = outParams[i].Name.c_str() ;
67     arguments->add_value( s , data , CORBA::ARG_OUT ) ;
68 #if 0
69     switch ( data.type()->kind() ) {
70     case CORBA::tk_string :
71       char * t ;
72       data >>= t ;
73       MESSAGE( "ArgOut" << i << " : " << s << " Value " << t << " (string)") ;
74       break ;
75     case CORBA::tk_double :
76       double d ;
77       data >>= d ;
78       MESSAGE( "ArgOut" << i << " : " << s << " Value " << d << " (double)") ;
79       break ;
80     case CORBA::tk_long :
81       long l ;
82       data >>= l ;
83       MESSAGE( "ArgOut" << i << " : " << s << " Value " << l << " (long)") ;
84       break ;
85     case CORBA::tk_objref :
86       MESSAGE( "ArgOut" << i << " : " << s << " Value " << "(object reference)") ;
87       break ;
88     default :
89       MESSAGE( "ArgOut" << i << " : " << s << " Value " << "(other ERROR)") ;
90     }
91     MESSAGE() ;
92 #endif
93   }
94
95   req->invoke();
96
97   if( req->env()->exception() ) {
98     req->env()->exception()->_raise() ;
99     return ; // pas utile ?
100   }
101
102   for ( i = 0 ; i < n_out ; i++ ) {
103
104       outParams[i].Value = *( arguments->item( i + n_in )->value() ) ;
105   }
106
107   return;
108
109 }
110
111 void GraphExecutor::InNode::DynInvoke( Engines::Component_ptr obj ,
112                                        const char *method , 
113                                        const char * aGraphName ,
114                                        const char * aNodeName ) {
115   Request_var req = obj->_request( method ) ;
116   const char *s;
117
118   NVList_ptr arguments =req->arguments() ;
119
120   CORBA::Any graph ;
121   graph <<= aGraphName ;
122   arguments->add_value( "aGraphName" , graph , CORBA::ARG_IN ) ;
123   CORBA::Any node ;
124   node <<= aNodeName ;
125   arguments->add_value( "aNodeName" , node , CORBA::ARG_IN ) ;
126
127   req->invoke() ;
128
129   if( req->env()->exception() ) {
130     req->env()->exception()->_raise();
131   }
132   return;
133
134 }