Salome HOME
SMH: 3.0.0 preparation = merged version (POLYWORK + RTVDEBUG01) + adopation for new GUI
[modules/superv.git] / src / GraphEditor / DataFlowEditor_OutNode.cxx
index e0dfda434566994cda13652263df5710dec001f1..95bd6c040df4b4b55e16e97a7060f0931fa6b6d1 100644 (file)
@@ -206,7 +206,8 @@ bool GraphEditor::OutNode::LoadDataFlow( const GraphBase::SGraph * aDataFlow ) {
     cdebug << "GraphEditor::OutNode::LoadDataFlow() LoadDatas GraphNodesSize " << Graph()->GraphNodesSize() << endl;
     RetVal = LoadDatas( aMapOfNodes , (*aDataFlow).Datas ) ;
   }
-  cdebug_out << "GraphEditor::OutNode::LoadDataFlow done GraphNodesSize " << Graph()->GraphNodesSize() << endl;
+  cdebug_out << "GraphEditor::OutNode::LoadDataFlow done GraphNodesSize " << Graph()->GraphNodesSize()
+             << " RetVal " << RetVal << endl;
   return RetVal ;
 }
 
@@ -445,6 +446,7 @@ bool GraphEditor::OutNode::LoadNodes(map< string , int > & aMapOfNodes ,
 bool GraphEditor::OutNode::LoadLinks(map< string , int > & aMapOfNodes ,
                                      const GraphBase::ListOfSLinks &aListOfLinks ) {
   bool RetVal = true ;
+  bool RetAddLink ;
   cdebug_in << "GraphEditor::OutNode::LoadLinks" << endl ;
 //  MESSAGE( "GraphEditor::OutNode::LoadLinks" );
   int i , j ;
@@ -458,21 +460,16 @@ bool GraphEditor::OutNode::LoadLinks(map< string , int > & aMapOfNodes ,
            << aLink.ToServiceParameterName.c_str() << " )" << endl ;
     if ( Graph()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] ) &&
          Graph()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] ) ) {
-//      GraphBase::ComputingNode * aFromNode = (GraphBase::ComputingNode * ) Graph()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] ) ;
-//      const GraphBase::OutPort * anOutPort = aFromNode->GetOutPort( aLink.FromServiceParameterName.c_str() ) ;
-      RetVal = AddLink( Graph()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] )->Name() ,
-                        aLink.FromServiceParameterName.c_str() ,
-                        Graph()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
-                        aLink.ToServiceParameterName.c_str() ) ;
-//                        , *anOutPort->Value() ) ;
+//JR 08.02.2005 : Rule of CEA : a bad graph may be stored in a xml
+      RetAddLink = AddLink( Graph()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] )->Name() ,
+                            aLink.FromServiceParameterName.c_str() ,
+                            Graph()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
+                            aLink.ToServiceParameterName.c_str() ) ;
     }
     else {
       RetVal = false ;
     }
-//                      aLink.aLinkValue ) ;
-    if ( !RetVal )
-      break ;
-    else {
+    if ( RetVal && RetAddLink ) {
       for ( j = 0 ; j < (int ) aLink.aListOfCoords.size() ; j++ ) {
         RetVal = AddLinkCoord( Graph()->GetGraphNode( aMapOfNodes[ aLinkFromNodeName->c_str() ] )->Name() ,
                                         aLink.FromServiceParameterName.c_str() ,
@@ -488,13 +485,14 @@ bool GraphEditor::OutNode::LoadLinks(map< string , int > & aMapOfNodes ,
     delete aLinkFromNodeName ;
     delete aLinkToNodeName ;
   }
-  cdebug_out << "GraphEditor::OutNode::LoadLinks" << endl ;
+  cdebug_out << "GraphEditor::OutNode::LoadLinks " << RetVal << endl ;
   return RetVal ;
 }
 
 bool GraphEditor::OutNode::LoadDatas(map< string , int > & aMapOfNodes ,
                                      const GraphBase::ListOfSLinks &aListOfDatas ) {
   bool RetVal = true ;
+  bool RetAddLink ;
   cdebug_in << "GraphEditor::OutNode::LoadDatas" << endl ;
 //  MESSAGE( "GraphEditor::OutNode::LoadDatas" );
   int i ;
@@ -509,15 +507,15 @@ bool GraphEditor::OutNode::LoadDatas(map< string , int > & aMapOfNodes ,
 //           << aMapOfNodes[ aLinkFromNodeName->c_str() ] << endl ;
 //      cout << "          " << aLink.ToNodeName.c_str() << " "
 //           << aMapOfNodes[ aLinkToNodeName->c_str() ] << endl ;
-    RetVal = Graph()->AddInputData( Graph()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
-                                    aLink.ToServiceParameterName.c_str() ,
-                                    aLink.aLinkValue ) ;
+    RetAddLink = Graph()->AddInputData( Graph()->GetGraphNode( aMapOfNodes[ aLinkToNodeName->c_str() ] )->Name() ,
+                                        aLink.ToServiceParameterName.c_str() ,
+                                        aLink.aLinkValue ) ;
     delete aLinkFromNodeName ;
     delete aLinkToNodeName ;
     if ( !RetVal )
       break ;
   }
-  cdebug_out << "GraphEditor::OutNode::LoadDatas" << endl ;
+  cdebug_out << "GraphEditor::OutNode::LoadDatas " << RetVal << endl ;
   return RetVal ;
 }
 
@@ -540,7 +538,7 @@ bool GraphEditor::OutNode::SaveXml(const char* filename) {
 //    cout << "GraphEditor::OutNode::SaveXML " << xml << endl ;
 //    f << xml << endl ;
 //  }
-  cdebug_out << "GraphEditor::OutNode::SaveXml" << endl;
+  cdebug_out << "GraphEditor::OutNode::SaveXml " << test << endl;
   return test;
 }
 
@@ -690,7 +688,9 @@ GraphEditor::InNode * GraphEditor::OutNode::AddNode(
         if ( aNodeName ) {
           delete [] aNodeName ;
        }
-        int num = Graph()->GetServiceNameNumber( NodeService ) ;
+//        int num = Graph()->GetServiceNameNumber( NodeService ) ;
+        char * aServiceName = (CORBA::String_member ) NodeService.ServiceName ;
+        int num = Graph()->GetNewServiceInstanceNumber( aServiceName ) ;
         ostringstream astr ;
         astr << num << ends ;
         const char * n_instance = astr.str().c_str() ;
@@ -732,7 +732,8 @@ GraphEditor::InNode * GraphEditor::OutNode::AddNode(
       for ( i = 0 ; i < NodeService.ServiceinDataStreamParameter.length() ; i++ ) {
         GraphBase::InDataStreamPort * aDataStreamPort ;
         aDataStreamPort = Nd->ComputingNode()->AddInDataStreamPort(
-                                         my_strdup( NodeService.ServiceinDataStreamParameter[i].Parametername ) ,
+//JR 17.02.2005 Memory Leak                                         my_strdup( NodeService.ServiceinDataStreamParameter[i].Parametername ) ,
+                                         NodeService.ServiceinDataStreamParameter[i].Parametername ,
                                          NodeService.ServiceinDataStreamParameter[i].Parametertype ,
                                          NodeService.ServiceinDataStreamParameter[i].Parameterdependency ,
                                         SUPERV::DataStreamParameter ) ;
@@ -740,7 +741,8 @@ GraphEditor::InNode * GraphEditor::OutNode::AddNode(
       for ( i = 0 ; i < NodeService.ServiceoutDataStreamParameter.length() ; i++ ) {
         GraphBase::OutDataStreamPort * aDataStreamPort ;
         aDataStreamPort = Nd->ComputingNode()->AddOutDataStreamPort(
-                                         my_strdup( NodeService.ServiceoutDataStreamParameter[i].Parametername ) ,
+//JR 17.02.2005 Memory Leak                                         my_strdup( NodeService.ServiceoutDataStreamParameter[i].Parametername ) ,
+                                         NodeService.ServiceoutDataStreamParameter[i].Parametername ,
                                          NodeService.ServiceoutDataStreamParameter[i].Parametertype ,
                                          NodeService.ServiceoutDataStreamParameter[i].Parameterdependency ,
                                         SUPERV::DataStreamParameter ) ;
@@ -759,8 +761,13 @@ GraphEditor::InNode * GraphEditor::OutNode::AddNode(
     cdebug << "ERROR NodeName is NULL or already exists." << endl ;
   }
 //  delete [] aNodeName ;
-  cdebug_out << "GraphEditor::OutNode::AddNode" << endl;
   _Valid = false ;
+  if ( Nd == NULL ) {
+    cdebug_out << "GraphEditor::OutNode::AddNode : NULL" << endl;
+  }
+  else {
+    cdebug_out << "GraphEditor::OutNode::AddNode : " << Nd << " " << Nd->Name() << endl;
+  }
   return Nd ;
 }
 
@@ -931,7 +938,9 @@ bool GraphEditor::OutNode::UnValid() {
   return RetVal ;
 }
 
-bool GraphEditor::OutNode::Valid() {
+//JR Optional parameter kLoopSwitch (default = true) :
+//In some cases we do not need to check the validity of loops and switchs
+bool GraphEditor::OutNode::Valid(bool kLoopSwitch ) {
   if ( _Valid )
     return true ;
 
@@ -966,21 +975,30 @@ bool GraphEditor::OutNode::Valid() {
   if ( Graph()->IsDataStreamNode() ) {
     StreamGraph()->SubStreamGraphsNumber( SubStreamGraphsNumber ) ;
   }
-  if ( !Graph()->ValidLoops() ) {
-    cdebug_out << "This DataFlow have not valid Loops." << endl ;
-    return false ;
+
+  Graph()->InLineServices() ;
+
+  if ( kLoopSwitch ) {
+    if ( !Graph()->ValidLoops() ) {
+      cdebug_out << "This DataFlow have not valid Loops." << endl ;
+      return false ;
+    }
+    if ( !Graph()->ValidSwitchs() ) {
+      cdebug_out << "This DataFlow have not valid Switchs." << endl ;
+      return false ;
+    }
   }
   
 //  CreateService() ;
 
-  Graph()->InLineServices() ;
-
   Graph()->ComputingNodes() ;
 
-  _Valid = true ;
+  if ( kLoopSwitch ) {
+    _Valid = true ;
+  }
 
   cdebug_out << "GraphEditor::OutNode::Valid " << _Valid << endl;
-  return _Valid ;
+  return true ;
 }
 
 bool GraphEditor::OutNode::Executable() {
@@ -1022,22 +1040,26 @@ bool GraphEditor::OutNode::Executable() {
   return _Executable ;
 }
 
-const CORBA::Any *GraphEditor::OutNode::GetInData(
+//JR 30.03.2005const CORBA::Any *GraphEditor::OutNode::GetInData(
+const CORBA::Any GraphEditor::OutNode::GetInData(
                               const char * ToNodeName ,
                               const char * ToParameterName ) {
 //  cdebug_in << "GraphEditor::OutNode::GetInData " << ToNodeName
 //            << " " << ToParameterName << endl ;
-  const CORBA::Any * retdata = Graph()->PortInData( ToNodeName , ToParameterName ) ;
+//JR 30.03.2005  const CORBA::Any * retdata = Graph()->PortInData( ToNodeName , ToParameterName ) ;
+  const CORBA::Any retdata = Graph()->PortInData( ToNodeName , ToParameterName ) ;
 //  cdebug_out << "GraphEditor::OutNode::GetInData" << endl ;
   return retdata ;
 }
 
-const CORBA::Any *GraphEditor::OutNode::GetOutData(
+//JR 30.03.2005const CORBA::Any *GraphEditor::OutNode::GetOutData(
+const CORBA::Any GraphEditor::OutNode::GetOutData(
                               const char * FromNodeName ,
                               const char * FromParameterName ) {
 //  cdebug_in << "GraphEditor::OutNode::GetOutData " << FromNodeName
 //            << " " << FromParameterName << endl ;
-  const CORBA::Any * retdata = Graph()->PortOutData( FromNodeName , FromParameterName ) ;
+//JR 30.03.2005  const CORBA::Any * retdata = Graph()->PortOutData( FromNodeName , FromParameterName ) ;
+  const CORBA::Any retdata = Graph()->PortOutData( FromNodeName , FromParameterName ) ;
 //  cdebug_out << "GraphEditor::OutNode::GetOutData" << endl ;
   return retdata ;
 }
@@ -1433,6 +1455,7 @@ bool GraphEditor::OutNode::SaveXML( ostream & f , QDomDocument & GraphQDom ,
 bool GraphEditor::OutNode::SavePY( ostream & f , bool importSuperV ) {
   int i ;
   int j ;
+  const GraphBase::ListOfSLinks * Links ;
   if ( importSuperV ) {
     f << endl << "# Generated python file of Graph " << Graph()->Name() << endl << endl ;
 
@@ -1549,7 +1572,7 @@ bool GraphEditor::OutNode::SavePY( ostream & f , bool importSuperV ) {
     }
   }
 
-  const GraphBase::ListOfSLinks * Links = Graph()->GetLinks() ;
+  Links = Graph()->GetLinks() ;
 //  bool intervar ;
 //  map< string , int > aMapOfOutPorts ;
   first = true ;