From: rahuel Date: Tue, 30 Aug 2005 06:12:36 +0000 (+0000) Subject: PAL9122 and Error messages X-Git-Tag: V_3_0_2~29 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=a1fd999446f902fd3a40685c5259e0e85d98b6b1;p=modules%2Fsuperv.git PAL9122 and Error messages --- diff --git a/src/GraphBase/DataFlowBase_ComputingNode.cxx b/src/GraphBase/DataFlowBase_ComputingNode.cxx index 5978f09..54139b0 100644 --- a/src/GraphBase/DataFlowBase_ComputingNode.cxx +++ b/src/GraphBase/DataFlowBase_ComputingNode.cxx @@ -598,10 +598,195 @@ void GraphBase::ComputingNode::SetMacroDatas( GraphBase::Graph * aGraph , } void GraphBase::ComputingNode::DelInPort( const char * InputParameterName ) { +//PAL9122 +//JR 07.06.2005 Debug : LinkedNodes and LinkedFromNode must be updated +// LinkedInPortsNumber and LinkedFromInPortsNumber must be updated + cdebug_in << "ComputingNode::DelInPort " << Name() << "( " << InputParameterName << " )" + << endl; + bool RetVal = true ; + if ( !IsEndSwitchNode() ) { + GraphBase::InPort * anInPort = GetChangeInPort( InputParameterName ) ; + cdebug << "ComputingNode::DelInPort InPort " << Name() << "( " + << anInPort->PortName() << " ) " << anInPort->PortStatus() << " <-- " ; + GraphBase::OutPort * anOutPort = anInPort->GetOutPort() ; + if ( anOutPort && !( IsEndLoopNode() && anInPort->IsLoop() ) ) { + cdebug << anOutPort->NodeName() << "( " << anOutPort->PortName() << ") " + << anOutPort->PortStatus() ; + } + cdebug << endl ; + if ( !anInPort->IsNotConnected() ) { + GraphBase::ComputingNode * FromNode = NULL ; + RetVal = true ; + if ( anOutPort->IsDataConnected() || anOutPort->IsExternConnected() ) { + cdebug << " Data/Extern ignored" << endl ; + } + else { + FromNode = GraphOfNode()->GetChangeGraphNode( anOutPort->NodeName() ) ; + } + if ( FromNode ) { + cdebug << "FromNode " << FromNode->Name() << " LinkedNodesSize " + << FromNode->LinkedNodesSize() << " and " << Name() + << " LinkedFromNodesSize " << LinkedFromNodesSize() << endl ; + if ( !FromNode->IsGOTONode() && + !( FromNode->IsEndLoopNode() && anInPort->IsLoop() ) ) { + if ( anInPort->IsDataStream() ) { + RetVal = FromNode->RemoveStreamLinkedNode( this ) ; + } + else { + RetVal = FromNode->RemoveLinkedNode( this ) ; + } + if ( !RetVal ) { + cdebug << "ComputingNode::DelInPort anOutPort->RemoveLinkedNode Error RetVal " + << RetVal << endl ; + } + } + } + } + } +//We have an EndSwitchNode : + else { + int i ; + for ( i = LinkedFromNodesSize() - 1 ; i >= 0 ; i-- ) { + GraphBase::ComputingNode * aLinkedFromNode = (GraphBase::ComputingNode * ) LinkedFromNodes( i ) ; + cdebug << aLinkedFromNode->Name() << " linked to " << Name() << endl ; + int j ; + for ( j = aLinkedFromNode->GetNodeOutPortsSize() - 1 ; j >= 0 ; j-- ) { + GraphBase::OutPort * anOutPort = aLinkedFromNode->GetChangeNodeOutPort( j ) ; + cdebug << "ComputingNode::DelInPort OutPort" << j << ". Remove " << anOutPort->InPortsSize() + << " InPortsof OutPort : " << anOutPort->NodeName() << "( " + << anOutPort->PortName() << ") " + << anOutPort->PortStatus() << " :" << endl ; + int k ; +//Process concerned OutPorts of LinkedFromNodes of that EndSwitchNode + for ( k = anOutPort->InPortsSize() - 1 ; k >= 0 ; k-- ) { + GraphBase::InPort * anInPort = anOutPort->ChangeInPorts( k ) ; + if ( !strcmp( anInPort->NodeName() , Name() ) && + !strcmp( anInPort->PortName() , InputParameterName ) ) { +// InPort of the EndSwitchNode + cdebug << " to InPort" << j << ". " << anInPort->NodeName() << "( " + << anInPort->PortName() << ") " + << anInPort->PortStatus() << endl ; + anInPort->RemoveOutPort() ; + if ( anOutPort->IsDataStream() ) { + aLinkedFromNode->RemoveStreamLinkedNode( this ) ; + } + else { +// false ==> No error for aNode->LinkedFromNode() + RetVal = aLinkedFromNode->RemoveLinkedNode( this , false ) ; + if ( !RetVal ) { + cdebug << "ComputingNode::DelInPort aLinkedFromNode->RemoveLinkedNode Error RetVal " + << RetVal << endl ; + break ; + } + } +// Remove the InPort of the EndSwitchNode from that OutPort + RetVal = anOutPort->RemoveInPort( anInPort ) ; + if ( !RetVal ) { + cdebug << "ComputingNode::DelInPort anOutPort->RemoveInPort( anInPort ) Error RetVal " + << RetVal << endl ; + break ; + } + } + } + } + } + } + GraphBase::PortsOfNode::DelInPort( InputParameterName ) ; + cdebug_out << "ComputingNode::DelInPort " << Name() << "( " << InputParameterName << " )" + << endl; } void GraphBase::ComputingNode::DelOutPort( const char * OutputParameterName ) { +//PAL9122 +//JR 07.06.2005 Debug : LinkedNodes and LinkedFromNode must be updated +// LinkedInPortsNumber and LinkedFromInPortsNumber must be updated + cdebug_in << "ComputingNode::DelOutPort " << Name() << "( " << OutputParameterName << " )" + << endl; + bool RetVal = true ; + GraphBase::OutPort * anOutPort = GetChangeOutPort( OutputParameterName ) ; + cdebug << "ComputingNode::DelOutPort OutPort " << " InPortof OutPort : " + << anOutPort->NodeName() << "( " << anOutPort->PortName() << ") " + << anOutPort->PortStatus() << " :" << endl ; + int j ; + for ( j = anOutPort->InPortsSize() - 1 ; j >= 0 ; j-- ) { + GraphBase::InPort * anInPort = anOutPort->ChangeInPorts( j ) ; + GraphBase::ComputingNode * ToNode = NULL ; + cdebug << " to InPort" << j << ". " << anInPort->NodeName() << "( " + << anInPort->PortName() << ") " << anInPort->PortStatus() ; + if ( anInPort->IsExternConnected() ) { + cdebug << " ExternConnected ignored" << endl ; + } + else { + cdebug << endl ; + ToNode = GraphOfNode()->GetChangeGraphNode( anInPort->NodeName() ) ; + } + if ( ToNode ) { + RetVal = anInPort->RemoveOutPort() ; +// JR 04.02.2005 : Bug if it is a link to an EndSwitchNode. The InPort may be multiple linked !!! +// PAL7990 + if ( !RetVal ) { + cdebug << "ComputingNode::DelOutPort anOutPort->RemoveOutPort Error RetVal " << RetVal + << endl ; + break ; + } + if ( ( IsGOTONode() && ToNode->IsOneOfInLineNodes() ) || + ( IsEndLoopNode() && ToNode->IsLoopNode( ) ) ) { + } + else if ( anOutPort->IsDataStream() ) { + RetVal = RemoveStreamLinkedNode( ToNode ) ; + } + else { + RetVal = RemoveLinkedNode( ToNode ) ; + } + if ( !RetVal ) { + cdebug << "ComputingNode::DelOutPort anOutPort->RemoveLinkedNode Error RetVal " << RetVal + << endl ; + break ; + } + if ( ToNode->IsEndSwitchNode() ) { + int i ; + int done = false ; + for ( i = 0 ; i < ToNode->LinkedFromNodesSize() ; i++ ) { + GraphBase::StreamNode * fromNode = ToNode->LinkedFromNodes( i ) ; +// Not the node that we are deleting ... : + if ( strcmp( fromNode->Name() , Name() ) ) { + int j ; + for ( j = 0 ; j < fromNode->GetNodeOutPortsSize() ; j++ ) { + GraphBase::OutPort * fromOutPort = fromNode->GetChangeNodeOutPort( j ) ; + int k ; + for ( k = 0 ; k < fromOutPort->InPortsSize() ; k++ ) { + if ( strcmp( ToNode->Name() , fromOutPort->InPorts( k )->NodeName() ) == 0 ) { + if ( strcmp( anInPort->PortName() , fromOutPort->InPorts( k )->PortName() ) == 0 ) { +// Restore an OutPort in the InPort + anInPort->ChangeOutPort( fromOutPort ) ; + cdebug << "ComputingNode::DelOutPort reestablish " << fromOutPort->NodeName() << "( " + << fromOutPort->PortName() << " ) in the InPort of EndSwitch : " + << ToNode->Name() << "( " << anInPort->PortName() << " )" + << anInPort->Kind() << " " << anInPort->PortStatus() << endl; + done = true ; + break ; + } + } + } + if ( done ) { + break ; + } + } + if ( done ) { + break ; + } + } + } + } + } + } + if ( !RetVal ) { + cdebug << "Error RetVal " << RetVal << endl ; + } + GraphBase::PortsOfNode::DelOutPort( OutputParameterName ) ; + cdebug_out << "ComputingNode::DelOutPort " << Name() << "( " << OutputParameterName << " )" + << endl; } GraphBase::InPort * GraphBase::ComputingNode::AddInPort( const char * InputParameterName , @@ -684,17 +869,20 @@ GraphBase::OutDataStreamPort * GraphBase::ComputingNode::AddOutDataStreamPort( c } -bool GraphBase::ComputingNode::CheckLoop(GraphBase::LoopNode * aLoopNode , - GraphBase::EndOfLoopNode * anEndLoopNode ) const { +bool GraphBase::ComputingNode::CheckLoop( GraphBase::LoopNode * aLoopNode , + GraphBase::EndOfLoopNode * anEndLoopNode , + string & anErrorMessage ) const { cdebug_in << Name() << "->ComputingNode::CheckLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedNodesSize " << LinkedNodesSize() << endl; int i ; if ( LinkedNodesSize() == 0 && !IsDataFlowNode() && !IsDataStreamNode() ) { + anErrorMessage = anErrorMessage + string( "The node " ) + string( Name() ) + + string( " has no linked Nodes. Loop not valid\n" ) ; cdebug_out << Name() << "->ComputingNode::CheckLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedNodesSize " - << LinkedNodesSize() << " WARNING false" << endl; + << LinkedNodesSize() << " ERROR false" << endl; return false ; } // We check that all nodes linked to that node go to the end of LoopNode : @@ -702,10 +890,10 @@ bool GraphBase::ComputingNode::CheckLoop(GraphBase::LoopNode * aLoopNode , GraphBase::ComputingNode * aNode = (GraphBase::ComputingNode * ) LinkedNodes( i ) ; cdebug << i << ". " << Name() << " Linked to " << aNode->Name() << endl ; if ( !aNode->IsEndLoopNode() || aNode != anEndLoopNode ) { - if ( !aNode->CheckLoop( aLoopNode , anEndLoopNode ) ) { + if ( !aNode->CheckLoop( aLoopNode , anEndLoopNode , anErrorMessage) ) { cdebug_out << Name() << "->ComputingNode::CheckLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedNodesSize " - << LinkedNodesSize() << " WARNING false" << endl; + << LinkedNodesSize() << " ERROR false" << endl; return false ; } } @@ -717,16 +905,19 @@ bool GraphBase::ComputingNode::CheckLoop(GraphBase::LoopNode * aLoopNode , } bool GraphBase::ComputingNode::CheckEndLoop(GraphBase::LoopNode * aLoopNode , - GraphBase::EndOfLoopNode * anEndLoopNode ) const { + GraphBase::EndOfLoopNode * anEndLoopNode , + string & anErrorMessage ) const { cdebug_in << Name() << "->ComputingNode::CheckEndLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedFromNodesSize " << LinkedFromNodesSize() << endl; int i ; if ( LinkedFromNodesSize() == 0 ) { + anErrorMessage = anErrorMessage + string( "The node " ) + string( Name() ) + + string( " has no reversed linked Nodes. Loop not valid\n" ) ; cdebug_out << Name() << "->ComputingNode::CheckEndLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedFromNodesSize " - << LinkedFromNodesSize() << " WARNING false" << endl; + << LinkedFromNodesSize() << " ERROR false" << endl; return false ; } // We have to check that all nodes linked from that node go to the beginning of LoopNode : @@ -734,10 +925,10 @@ bool GraphBase::ComputingNode::CheckEndLoop(GraphBase::LoopNode * aLoopNode , GraphBase::ComputingNode * aNode = (GraphBase::ComputingNode * ) LinkedFromNodes( i ) ; cdebug << i << ". " << Name() << " Linked from " << aNode->Name() << endl ; if ( !aNode->IsLoopNode() || aNode != aLoopNode ) { - if ( !aNode->CheckEndLoop( aLoopNode , anEndLoopNode ) ) { + if ( !aNode->CheckEndLoop( aLoopNode , anEndLoopNode , anErrorMessage ) ) { cdebug_out << Name() << "->ComputingNode::CheckEndLoop( " << aLoopNode->Name() << " , " << anEndLoopNode->Name() << ") LinkedFromNodesSize " - << LinkedFromNodesSize() << " WARNING false" << endl; + << LinkedFromNodesSize() << " ERROR false" << endl; return false ; } } @@ -748,29 +939,35 @@ bool GraphBase::ComputingNode::CheckEndLoop(GraphBase::LoopNode * aLoopNode , return true ; } -bool GraphBase::ComputingNode::InitBranchOfSwitchDone(bool AllInit , - GraphBase::EndOfSwitchNode * anEndSwitchNode ) { +bool GraphBase::ComputingNode::InitBranchOfSwitchDone( bool AllInit , + GraphBase::EndOfSwitchNode * anEndSwitchNode , + string & anErrorMessage ) { + bool RetVal = true ; bool sts = BranchOfSwitchDone( false ) ; if ( !sts && !AllInit && anEndSwitchNode != this ) { // Common Node in branchs : - cdebug << Name() << "->ComputingNode::InitBranchOfSwitchDone WARNING false" + anErrorMessage = anErrorMessage + string( "Common Node between some SwitchBranches : " ) + + string( Name() ) + string("\n" ) ; + cdebug << Name() << "->ComputingNode::InitBranchOfSwitchDone ERROR false" << endl ; - return false ; + RetVal = false ; } int i ; if ( !IsGOTONode() && anEndSwitchNode != this ) { for ( i = 0 ; i < LinkedNodesSize() ; i++ ) { GraphBase::ComputingNode * aNode ; aNode = (GraphBase::ComputingNode * ) LinkedNodes( i ) ; - if ( !aNode->InitBranchOfSwitchDone( AllInit , anEndSwitchNode ) ) { - return false ; + if ( !aNode->InitBranchOfSwitchDone( AllInit , anEndSwitchNode , anErrorMessage ) ) { + RetVal = false ; } } } - return true ; + return RetVal ; } -bool GraphBase::ComputingNode::CheckSwitch(GraphBase::EndOfSwitchNode * anEndSwitchNode ) { +bool GraphBase::ComputingNode::CheckSwitch( GraphBase::EndOfSwitchNode * anEndSwitchNode , + string & anErrorMessage ) { + bool RetVal = true ; cdebug_in << Name() << "->ComputingNode::CheckSwitch( " << anEndSwitchNode->Name() << " ) " << Kind() << endl; if ( anEndSwitchNode == this ) { @@ -781,10 +978,10 @@ bool GraphBase::ComputingNode::CheckSwitch(GraphBase::EndOfSwitchNode * anEndSwi anOtherEndSwitchNode = (GraphBase::EndOfSwitchNode * ) ((GraphBase::SwitchNode * ) this)->CoupledNode() ; cdebug << Name() << "->ComputingNode::CheckSwitch will Check " << anOtherEndSwitchNode->Name() << endl ; - if ( !anOtherEndSwitchNode->CheckSwitch( anEndSwitchNode ) ) { + if ( !anOtherEndSwitchNode->CheckSwitch( anEndSwitchNode , anErrorMessage ) ) { cdebug_out << Name() << "->ComputingNode::CheckSwitch " - << anOtherEndSwitchNode->Name() << " WARNING false" << endl; - return false ; + << anOtherEndSwitchNode->Name() << " ERROR false" << endl; + RetVal = false ; } } else { @@ -816,7 +1013,10 @@ bool GraphBase::ComputingNode::CheckSwitch(GraphBase::EndOfSwitchNode * anEndSwi << anInPort->NodeName() << "( " << anInPort->PortName() << " )" << endl ; } else if ( aNode == anEndSwitchNode ) { - ((GraphBase::EndOfSwitchNode * ) aNode)->DecrEndSwitchInPortLinked( anInPort ) ; + if ( !((GraphBase::EndOfSwitchNode * ) aNode)->DecrEndSwitchInPortLinked( anInPort , + anErrorMessage ) ) { + RetVal = false ; + } } else if ( aNode->BranchOfSwitchDone() ) { cdebug << Name() << "->ComputingNode::CheckSwitch will NOT Check " @@ -839,10 +1039,10 @@ bool GraphBase::ComputingNode::CheckSwitch(GraphBase::EndOfSwitchNode * anEndSwi else { cdebug << Name() << "->ComputingNode::CheckSwitch will Check " << anInPort->NodeName() << "( " << anInPort->PortName() << " )" << endl ; - if ( !aNode->CheckSwitch( anEndSwitchNode ) ) { + if ( !aNode->CheckSwitch( anEndSwitchNode , anErrorMessage ) ) { cdebug_out << Name() << "->ComputingNode::CheckSwitch " - << anEndSwitchNode->Name() << " WARNING false" << endl; - return false ; + << anEndSwitchNode->Name() << " ERROR false" << endl; + RetVal = false ; } // aNode->BranchOfSwitchDone( true ) ; } @@ -851,10 +1051,12 @@ bool GraphBase::ComputingNode::CheckSwitch(GraphBase::EndOfSwitchNode * anEndSwi } } } - BranchOfSwitchDone( true ) ; - cdebug_out << Name() << "->ComputingNode::CheckSwitch BranchOfSwitchDone == true " - << anEndSwitchNode->Name() << " true" << endl; - return true ; + if ( RetVal ) { + BranchOfSwitchDone( true ) ; + } + cdebug_out << Name() << "->ComputingNode::CheckSwitch " + << anEndSwitchNode->Name() << " RetVal " << RetVal << endl; + return RetVal ; } #include