Salome HOME
NRI : Merge from 1.2c.
[modules/superv.git] / src / GraphExecutor / DataFlowExecutor_DynInvoke.cxx
index 8e4ae74b8deb5be97a2c53fd352e4822a99ee33c..dba4753571490f3445df170f8ce343e39f21bd5b 100644 (file)
@@ -36,80 +36,159 @@ using namespace CORBA ;
 
 
 
-void GraphExecutor::InNode::DynInvoke(Engines::Component_ptr obj ,
+void GraphExecutor::InNode::DynInvoke(Engines::Component_ptr objComponent ,
                                      const char *method , 
                                      ServicesAnyData * inParams , int nInParams ,
                                      ServicesAnyData * outParams , int nOutParams ) {
-  Request_var req = obj->_request( method ) ;
-  const char *s ;
+  Request_var req = objComponent->_request( method ) ;
+  const char *ArgName ;
+  int Type ;
 
-  NVList_ptr arguments =req->arguments() ;
+  NVList_ptr arguments = req->arguments() ;
 
   int i ;
 
   int n_in  = nInParams ;
   int n_out = nOutParams ;
 
+  char * aComponent = ObjectToString( objComponent ) ;
+  MESSAGE( aComponent << "->" << method ) ;
   for ( i = 0 ; i < n_in ; i++ ) {
     CORBA::Any & data = inParams[i].Value ;
-    s                 = inParams[i].Name.c_str() ;
-    arguments->add_value( s , data , CORBA::ARG_IN ) ;
-#if 0
-    switch ( data.type()->kind() ) {
-    case CORBA::tk_string :
+    ArgName           = inParams[i].Name.c_str() ;
+    Type              = data.type()->kind() ;
+    arguments->add_value( ArgName , data , CORBA::ARG_IN ) ;
+//#if 0
+    switch ( Type ) {
+    case CORBA::tk_string : {
       char * t ;
       data >>= t ;
-      MESSAGE( "ArgIn" << i << " : " << s << " Value " << t << " (string)") ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << t << " (string)" ) ;
       break ;
-    case CORBA::tk_double :
-      double d ;
-      data >>= d ;
-      MESSAGE( "ArgIn" << i << " : " << s << " Value " << d << " (double)") ;
+    }
+    case CORBA::tk_boolean : {
+      bool b ;
+      data >>= (CORBA::Any::to_boolean ) b ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << b << " (boolean)" ) ;
+      break ;
+    }
+    case CORBA::tk_char : {
+      unsigned char c ;
+      data >>= (CORBA::Any::to_char ) c ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << (int ) c << " (char)" ) ;
+      break ;
+    }
+    case CORBA::tk_short : {
+      short s ;
+      data >>= s ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << s << " (short)" ) ;
       break ;
-    case CORBA::tk_long :
+    }
+    case CORBA::tk_long : {
       long l ;
       data >>= l ;
-      MESSAGE( "ArgIn" << i << " : " << s << " Value " << l << " (long)") ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << l << " (long)" ) ;
       break ;
-    case CORBA::tk_objref :
-      MESSAGE( "ArgIn" << i << " : " << s << " Value " << "(object reference)") ;
+    }
+    case CORBA::tk_float : {
+      float f ;
+      data >>= f ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << f << " (float)" ) ;
       break ;
-    default :
-      MESSAGE( "ArgIn" << i << " : " << s << " Value " << "(other ERROR)") ;
     }
-    MESSAGE() ;
-#endif
+    case CORBA::tk_double : {
+      double d ;
+      data >>= d ;
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << d << " (double)" ) ;
+      break ;
+    }
+    case CORBA::tk_objref : {
+      CORBA::Object_ptr obj ;
+      char * retstr = "Catched ERROR";
+      try {
+        data >>= obj ;
+        retstr = ObjectToString( obj ) ;
+      }
+      catch( ... ) {
+      }
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << retstr << "(object reference)" ) ;
+      break ;
+    }
+    default : {
+      MESSAGE( "ArgIn" << i << " : " << ArgName << " Value " << "(other ERROR) kind " << Type ) ;
+    }
+    }
+    MESSAGE("") ;
+//#endif
   }
 
   for ( i = 0 ; i < n_out ; i++ ) {
     CORBA::Any & data = outParams[i].Value ;
-    s                 = outParams[i].Name.c_str() ;
-    arguments->add_value( s , data , CORBA::ARG_OUT ) ;
-#if 0
-    switch ( data.type()->kind() ) {
-    case CORBA::tk_string :
+    ArgName           = outParams[i].Name.c_str() ;
+    Type              = data.type()->kind() ;
+    arguments->add_value( ArgName , data , CORBA::ARG_OUT ) ;
+//#if 0
+    switch ( Type ) {
+    case CORBA::tk_string : {
       char * t ;
       data >>= t ;
-      MESSAGE( "ArgOut" << i << " : " << s << " Value " << t << " (string)") ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << t << " (string)" ) ;
       break ;
-    case CORBA::tk_double :
-      double d ;
-      data >>= d ;
-      MESSAGE( "ArgOut" << i << " : " << s << " Value " << d << " (double)") ;
+    }
+    case CORBA::tk_boolean : {
+      bool b ;
+      data >>= (CORBA::Any::to_boolean ) b ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << b << " (boolean)" ) ;
       break ;
-    case CORBA::tk_long :
+    }
+    case CORBA::tk_char : {
+      unsigned char c ;
+      data >>= (CORBA::Any::to_char ) c ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << (int ) c << " (char)" ) ;
+      break ;
+    }
+    case CORBA::tk_short : {
+      short s ;
+      data >>= s ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << s << " (short)" ) ;
+      break ;
+    }
+    case CORBA::tk_long : {
       long l ;
       data >>= l ;
-      MESSAGE( "ArgOut" << i << " : " << s << " Value " << l << " (long)") ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << l << " (long)" ) ;
       break ;
-    case CORBA::tk_objref :
-      MESSAGE( "ArgOut" << i << " : " << s << " Value " << "(object reference)") ;
+    }
+    case CORBA::tk_float : {
+      float f ;
+      data >>= f ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << f << " (float)" ) ;
+      break ;
+    }
+    case CORBA::tk_double : {
+      double d ;
+      data >>= d ;
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << d << " (double)" ) ;
       break ;
-    default :
-      MESSAGE( "ArgOut" << i << " : " << s << " Value " << "(other ERROR)") ;
     }
-    MESSAGE() ;
-#endif
+    case CORBA::tk_objref : {
+      CORBA::Object_ptr obj ;
+      char * retstr = "Catched ERROR";
+      try {
+        data >>= obj ;
+        retstr = ObjectToString( obj ) ;
+      }
+      catch( ... ) {
+      }
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << retstr << "(object reference)" ) ;
+      break ;
+    }
+    default : {
+      MESSAGE( "ArgOut" << i << " : " << ArgName << " Value " << "(other ERROR) kind " << Type ) ;
+    }
+    }
+    MESSAGE("") ;
+//#endif
   }
 
   req->invoke();
@@ -133,7 +212,6 @@ void GraphExecutor::InNode::DynInvoke( Engines::Component_ptr obj ,
                                       const char * aGraphName ,
                                       const char * aNodeName ) {
   Request_var req = obj->_request( method ) ;
-  const char *s;
 
   NVList_ptr arguments =req->arguments() ;