Salome HOME
*** empty log message ***
[modules/superv.git] / src / GraphBase / DataFlowBase_ComputingNode.cxx
index aab8ceaafb814d38e79b5981f0b480d2cf333c7b..4e689ef3ea061248d36e7ea1b20120c90f07a635 100644 (file)
@@ -24,6 +24,8 @@ static void InitFields( SUPERV::KindOfNode &_Kind ,
                         char *             &_Comment ,
                         bool               &_HeadNode ,
                         bool               &_GeneratedName ,
+                        int                &_DataStreamInPortsNumber ,
+                        int                &_DataStreamOutPortsNumber ,
                         int                &_ConnectedInPortsNumber ,
                         int                &_DecrConnectedInPortsNumber,
                         int                &_LinkedNodesSize ,
@@ -51,6 +53,9 @@ static void InitFields( SUPERV::KindOfNode &_Kind ,
   _HeadNode = false ;
   _GeneratedName = false ;
 
+  _DataStreamInPortsNumber = 0 ;
+  _DataStreamOutPortsNumber = 0 ;
+
   _ConnectedInPortsNumber = 0 ;
   _DecrConnectedInPortsNumber = 0 ;
   _LinkedNodesSize = 0 ;
@@ -68,6 +73,8 @@ GraphBase::ComputingNode::ComputingNode() :
               _Comment ,
               _HeadNode ,
               _GeneratedName ,
+              _DataStreamInPortsNumber ,
+              _DataStreamOutPortsNumber ,
               _ConnectedInPortsNumber ,
               _DecrConnectedInPortsNumber ,
               _LinkedNodesSize ,
@@ -97,6 +104,8 @@ GraphBase::ComputingNode::ComputingNode( CORBA::ORB_ptr ORB ,
               _Comment ,
               _HeadNode ,
               _GeneratedName ,
+              _DataStreamInPortsNumber ,
+              _DataStreamOutPortsNumber ,
               _ConnectedInPortsNumber ,
               _DecrConnectedInPortsNumber ,
               _LinkedNodesSize ,
@@ -199,6 +208,9 @@ GraphBase::ComputingNode::ComputingNode( CORBA::ORB_ptr ORB ,
   _Name = new char[strlen(aNodeName)+1];
   strcpy(_Name , aNodeName);
 
+  _DataStreamInPortsNumber = 0 ;
+  _DataStreamOutPortsNumber = 0 ;
+
   _ConnectedInPortsNumber = 0 ;
   _DecrConnectedInPortsNumber = 0 ;
   _LinkedNodesSize = 0 ;
@@ -392,6 +404,19 @@ GraphBase::SNode * GraphBase::ComputingNode::GetInfo() {
   return Info ;
 }
 
+void GraphBase::ComputingNode::DelInPort( const char * InputParameterName ) {
+  if ( GetChangeInPort( InputParameterName )->IsDataStream() ) {
+    _DataStreamInPortsNumber-- ;
+  }
+  GraphBase::PortsOfNode::DelInPort( InputParameterName ) ;
+}
+void GraphBase::ComputingNode::DelOutPort( const char * OutputParameterName ) {
+  if ( GetChangeOutPort( OutputParameterName )->IsDataStream() ) {
+    _DataStreamOutPortsNumber-- ;
+  }
+  GraphBase::PortsOfNode::DelOutPort( OutputParameterName ) ;
+}
+
 GraphBase::InPort * GraphBase::ComputingNode::AddInPort( const char * InputParameterName ,
                                                 const char * InputParameterType ) {
   return GraphBase::PortsOfNode::AddInPort( _ORB , NamePtr() ,
@@ -523,6 +548,7 @@ bool GraphBase::ComputingNode::SaveXML( QDomDocument & Graph , QDomElement & inf
                                         const ListOfFuncName FuncNames ,
                                         const ListOfPythonFunctions PythonFunctions ,
                                         int XCoordinate , int YCoordinate ) const {
+  cdebug_in << "SaveXML Node " << Name() << endl ;
   QDomElement node = Graph.createElement( "node" ) ;
   info.appendChild( node ) ;
   QDomElement componentname = Graph.createElement( "component-name" ) ;
@@ -599,117 +625,127 @@ bool GraphBase::ComputingNode::SaveXML( QDomDocument & Graph , QDomElement & inf
   service.appendChild(servicename) ;
   servicename.appendChild( aField ) ;
 
-//  f << Tabs << "     <inParameter-list>" << endl ;
   QDomElement inParameterlist = Graph.createElement("inParameter-list") ;
   service.appendChild(inParameterlist) ;
   unsigned int i;
+  GraphBase::ComputingNode * aNode = (GraphBase::ComputingNode * ) this ;
   for ( i = 0 ; i < ServiceInParameter().length() ; i++ ) {
-//    f << Tabs << "           <inParameter>" << endl ;
-    QDomElement inParameter = Graph.createElement("inParameter") ;
-    inParameterlist.appendChild(inParameter) ;
-//    f << Tabs << "                   <inParameter-type>"
-//      << ServiceInParameter()[i].Parametertype << "</inParameter-type>"
-//      << endl ;
-    QDomElement inParametertype = Graph.createElement("inParameter-type") ;
-    // mpv: Linux 8.0 compiler compatibility
-//    aField = Graph.createTextNode( (char *)ServiceInParameter()[i].Parametertype ) ;
-    if ( strlen( ServiceInParameter()[i].Parametertype ) ) {
-      aField = Graph.createTextNode( strdup( ServiceInParameter()[i].Parametertype ) ) ;
-    }
-    else {
-      aField = Graph.createTextNode( "?" ) ;
-    }
-    inParameter.appendChild(inParametertype) ;
-    inParametertype.appendChild( aField ) ;
-//    f << Tabs << "                   <inParameter-name>"
-//      << ServiceInParameter()[i].Parametername << "</inParameter-name>"
-//      << endl ;
-    QDomElement inParametername = Graph.createElement("inParameter-name") ;
-    // mpv: Linux 8.0 compiler compatibility
-//    aField = Graph.createTextNode( (char *) ServiceInParameter()[i].Parametername ) ;
-    if ( strlen( ServiceInParameter()[i].Parametername ) ) {
-      aField = Graph.createTextNode( strdup(ServiceInParameter()[i].Parametername) ) ;
-    }
-    else {
-      aField = Graph.createTextNode( "?" ) ;
+    const GraphBase::InPort * anInPort ;
+    anInPort = aNode->GetInPort( ServiceInParameter()[i].Parametername ) ;
+    if ( !anInPort->IsDataStream() ) {
+      cdebug << "SaveXML " << i << ". " << ServiceInParameter()[i].Parametername
+             << " InParameterPort " << anInPort->Kind() << endl ;
+      QDomElement inParameter = Graph.createElement("inParameter") ;
+      inParameterlist.appendChild(inParameter) ;
+      QDomElement inParametertype = Graph.createElement("inParameter-type") ;
+      if ( strlen( ServiceInParameter()[i].Parametertype ) ) {
+        aField = Graph.createTextNode( strdup( ServiceInParameter()[i].Parametertype ) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      inParameter.appendChild(inParametertype) ;
+      inParametertype.appendChild( aField ) ;
+      QDomElement inParametername = Graph.createElement("inParameter-name") ;
+      if ( strlen( ServiceInParameter()[i].Parametername ) ) {
+        aField = Graph.createTextNode( strdup(ServiceInParameter()[i].Parametername) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      inParameter.appendChild(inParametername) ;
+      inParametername.appendChild( aField ) ;
     }
-    inParameter.appendChild(inParametername) ;
-    inParametername.appendChild( aField ) ;
-//    f << Tabs << "           </inParameter>" << endl ;
   }
-//  f << Tabs << "     </inParameter-list>" << endl ;
-//  f << Tabs << "     <outParameter-list>" << endl ;
   QDomElement outParameterlist = Graph.createElement("outParameter-list") ;
   service.appendChild(outParameterlist) ;
   for ( i = 0 ; i < ServiceOutParameter().length() ; i++ ) {
-//    f << Tabs << "           <outParameter>" << endl ;
-    QDomElement outParameter = Graph.createElement("outParameter") ;
-    outParameterlist.appendChild(outParameter) ;
-//    f << Tabs << "                   <outParameter-type>"
-//      << ServiceOutParameter()[i].Parametertype << "</outParameter-type>"
-//      << endl ;
-    QDomElement outParametertype = Graph.createElement("outParameter-type") ;
-    // mpv: Linux 8.0 compiler compatibility
-//    aField = Graph.createTextNode( (char *) ServiceOutParameter()[i].Parametertype ) ;
-    if ( strlen( ServiceOutParameter()[i].Parametertype ) ) {
-      aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametertype) ) ;
-    }
-    else {
-      aField = Graph.createTextNode( "?" ) ;
-    }
-    outParameter.appendChild(outParametertype) ;
-    outParametertype.appendChild( aField ) ;
-//    f << Tabs << "                   <outParameter-name>"
-//      << ServiceOutParameter()[i].Parametername << "</outParameter-name>"
-//      << endl ;
-    QDomElement outParametername = Graph.createElement("outParameter-name") ;
-    // mpv: Linux 8.0 compiler compatibility
-//    aField = Graph.createTextNode( (char *) ServiceOutParameter()[i].Parametername ) ;
-    if ( strlen( ServiceOutParameter()[i].Parametername ) ) {
-      aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametername) ) ;
-    }
-    else {
-      aField = Graph.createTextNode( "?" ) ;
+    const GraphBase::OutPort * anOutPort ;
+    anOutPort = aNode->GetOutPort( ServiceOutParameter()[i].Parametername ) ;
+    if ( !anOutPort->IsDataStream() ) {
+      cdebug << "SaveXML " << i << ". " << ServiceOutParameter()[i].Parametername
+             << " OutParameterPort " << anOutPort->Kind() << endl ;
+      QDomElement outParameter = Graph.createElement("outParameter") ;
+      outParameterlist.appendChild(outParameter) ;
+      QDomElement outParametertype = Graph.createElement("outParameter-type") ;
+      if ( strlen( ServiceOutParameter()[i].Parametertype ) ) {
+        aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametertype) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      outParameter.appendChild(outParametertype) ;
+      outParametertype.appendChild( aField ) ;
+      QDomElement outParametername = Graph.createElement("outParameter-name") ;
+      if ( strlen( ServiceOutParameter()[i].Parametername ) ) {
+        aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametername) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      outParameter.appendChild(outParametername) ;
+      outParametername.appendChild( aField ) ;
     }
-    outParameter.appendChild(outParametername) ;
-    outParametername.appendChild( aField ) ;
-//    f << Tabs << "           </outParameter>" << endl ;
   }
-//  f << Tabs << "     </outParameter-list>" << endl ;
-//  f << Tabs << "</service>" << endl ;
 
-//  f << Tabs << "<Parameter-list>" << endl ;
-  QDomElement Parameterlist = Graph.createElement("Parameter-list") ;
-  node.appendChild( Parameterlist ) ;
-#if 0
-  if ( IsInLineNode() || IsGOTONode() ||
-       IsLoopNode() || IsEndLoopNode() ||
-       IsSwitchNode() || IsEndSwitchNode() ) {
-    unsigned int i;
-    for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
-      const InPort * anInPort = GetNodeInPort( i ) ;
-      if ( anInPort->IsBus() ) {
-        f << Tabs << " <inParameter>" << endl ;
-        f << Tabs << "         <inParameter-type>"
-          << anInPort->PortType() << "</inParameter-type>"
-          << endl ;
-        f << Tabs << "         <inParameter-name>"
-          << anInPort->PortName() << "</inParameter-name>"
-          << endl ;
-        f << Tabs << " </inParameter>" << endl ;
-        const OutPort * anOutPort = GetNodeOutPort( anInPort->PortIndex() ) ;
-        f << Tabs << " <outParameter>" << endl ;
-        f << Tabs << "         <outParameter-type>"
-          << anOutPort->PortType() << "</outParameter-type>"
-          << endl ;
-        f << Tabs << "         <outParameter-name>"
-          << anOutPort->PortName() << "</outParameter-name>"
-          << endl ;
-        f << Tabs << " </outParameter>" << endl ;
+  QDomElement DataStreamlist = Graph.createElement("DataStream-list") ;
+  node.appendChild( DataStreamlist ) ;
+  for ( i = 0 ; i < ServiceInParameter().length() ; i++ ) {
+    const GraphBase::InPort * anInPort ;
+    anInPort = aNode->GetInPort( ServiceInParameter()[i].Parametername ) ;
+    if ( anInPort->IsDataStream() ) {
+      cdebug << "SaveXML " << ServiceInParameter()[i].Parametername
+             << " InDataStreamPort " << anInPort->Kind() << endl ;
+      QDomElement inParameter = Graph.createElement("inParameter") ;
+      DataStreamlist.appendChild(inParameter) ;
+      QDomElement inParametertype = Graph.createElement("inParameter-type") ;
+      if ( strlen( ServiceInParameter()[i].Parametertype ) ) {
+        aField = Graph.createTextNode( strdup( ServiceInParameter()[i].Parametertype ) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
       }
+      inParameter.appendChild(inParametertype) ;
+      inParametertype.appendChild( aField ) ;
+      QDomElement inParametername = Graph.createElement("inParameter-name") ;
+      if ( strlen( ServiceInParameter()[i].Parametername ) ) {
+        aField = Graph.createTextNode( strdup(ServiceInParameter()[i].Parametername) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      inParameter.appendChild(inParametername) ;
+      inParametername.appendChild( aField ) ;
+    }
+  }
+  for ( i = 0 ; i < ServiceOutParameter().length() ; i++ ) {
+    const GraphBase::OutPort * anOutPort ;
+    anOutPort = aNode->GetOutPort( ServiceOutParameter()[i].Parametername ) ;
+    if ( anOutPort->IsDataStream() ) {
+      cdebug << "SaveXML " << ServiceOutParameter()[i].Parametername
+             << " OutDataStreamPort " << anOutPort->Kind() << endl ;
+      QDomElement outParameter = Graph.createElement("outParameter") ;
+      DataStreamlist.appendChild(outParameter) ;
+      QDomElement outParametertype = Graph.createElement("outParameter-type") ;
+      if ( strlen( ServiceOutParameter()[i].Parametertype ) ) {
+        aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametertype) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      outParameter.appendChild(outParametertype) ;
+      outParametertype.appendChild( aField ) ;
+      QDomElement outParametername = Graph.createElement("outParameter-name") ;
+      if ( strlen( ServiceOutParameter()[i].Parametername ) ) {
+        aField = Graph.createTextNode( strdup(ServiceOutParameter()[i].Parametername) ) ;
+      }
+      else {
+        aField = Graph.createTextNode( "?" ) ;
+      }
+      outParameter.appendChild(outParametername) ;
+      outParametername.appendChild( aField ) ;
     }
   }
-#endif
 //  f << Tabs << "</Parameter-list>" << endl ;    
 
 //  f << Tabs << "<PyFunction-list>" << endl ;
@@ -828,6 +864,7 @@ bool GraphBase::ComputingNode::SaveXML( QDomDocument & Graph , QDomElement & inf
   aField = Graph.createTextNode( aYCoordinate ) ;
   node.appendChild( yposition ) ;
   yposition.appendChild( aField ) ;
+  cdebug_out << "SaveXML Node " << Name() << endl ;
   return true ;
 }
 
@@ -977,10 +1014,27 @@ bool GraphBase::ComputingNode::SavePY( ostream &f , const char * aGraphName ,
           << anInPort->PortType() << "' )" << endl ;
       }
     }
+//    for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
+//      const GraphBase::OutPort * anOutPort = GetNodeOutPort(i) ;
+//      if ( anOutPort->IsInLine() || anOutPort->IsSwitch() ) {
+//        f << Name() << ".OutPort( '" << anOutPort->PortName()
+//          << "' , '" << anOutPort->PortType() << "' )" << endl ;
+//      }
+//    }
+  }
+  if ( !IsDataFlowNode() ) {
+    int i ;
+    for ( i = 0 ; i < GetNodeInPortsSize() ; i++ ) {
+      const GraphBase::InPort * anInPort = GetNodeInPort(i) ;
+      if ( anInPort->IsDataStream() ) {
+        f << Name() << ".InDataStreamPort( '" << anInPort->PortName() << "' , '"
+          << anInPort->PortType() << "' )" << endl ;
+      }
+    }
     for ( i = 0 ; i < GetNodeOutPortsSize() ; i++ ) {
       const GraphBase::OutPort * anOutPort = GetNodeOutPort(i) ;
-      if ( anOutPort->IsInLine() || anOutPort->IsSwitch() ) {
-        f << Name() << ".OutPort( '" << anOutPort->PortName()
+      if ( anOutPort->IsDataStream() ) {
+        f << Name() << ".OutDataStreamPort( '" << anOutPort->PortName()
           << "' , '" << anOutPort->PortType() << "' )" << endl ;
       }
     }