1 // SUPERV GraphBase : contains fondamental classes for Services, Input Ports, Output Ports Links and Nodes.
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 // File : DataFlowBase_InPort.cxx
25 // Author : Jean Rahuel, CEA
30 #include "DataFlowBase_InPort.hxx"
31 #include "DataFlowBase_OutPort.hxx"
33 char ** _PortStateName ;
35 GraphBase::InPort::InPort() :
37 _PortState = SUPERV::UndefinedState ;
39 _InitialOutPort = NULL ;
42 GraphBase::InPort::InPort(
43 const char *const * Name ,
44 const SALOME_ModuleCatalog::ServicesParameter aserviceParameter ,
45 const SUPERV::KindOfPort aKind ,
46 const SALOME_ModuleCatalog::DataStreamDependency aDependency ) :
47 Port( Name , aserviceParameter , aKind , aDependency ) {
48 _PortState = SUPERV::UndefinedState ;
50 _InitialOutPort = NULL ;
53 //GraphBase::InPort::~InPort() {
54 // cout << "InPort::~InPort()" << endl ;
57 const StatusOfPort GraphBase::InPort::PortStatus() const {
59 return GetOutPort()->PortStatus() ;
64 bool GraphBase::InPort::IsNotConnected() const {
65 return ( GetOutPort() == NULL || GetOutPort()->IsNotConnected() ) ;
68 //bool GraphBase::InPort::IsConnected() const {
69 // return ( GetOutPort() && ( GetOutPort()->IsPortConnected() || GetOutPort()->IsExternConnected() ) ) ;
72 bool GraphBase::InPort::IsPortConnected() const {
73 return ( GetOutPort() && GetOutPort()->IsPortConnected() ) ;
76 bool GraphBase::InPort::IsDataConnected() const {
77 return ( GetOutPort() && GetOutPort()->IsDataConnected() ) ;
80 bool GraphBase::InPort::IsExternConnected() const {
81 return ( GetOutPort() && GetOutPort()->IsExternConnected() ) ;
84 void GraphBase::InPort::StringValue(ostream & f ) const {
86 GetOutPort()->StringValue( f ) ;
91 bool GraphBase::InPort::ChangeOutPort( OutPort * anOutPort ) {
93 // cdebug << "InPort::ChangeOutPort OutPort of InPort " << NodeName() << "( "
94 // << PortName() << " ) : " << _OutPort->NodeName() << "( "
95 // << _OutPort->PortName() << " ) changed to " << anOutPort->NodeName()
96 // << "( " << anOutPort->PortName() << " )" << endl ;
97 // cout << "InPort::ChangeOutPort OutPort of InPort " << NodeName() << "( "
98 // << PortName() << " ) : " << _OutPort->NodeName() << "( "
99 // << _OutPort->PortName() << " ) changed to " << anOutPort->NodeName()
100 // << "( " << anOutPort->PortName() << " )" << endl ;
102 if ( _InitialOutPort == NULL ) {
103 _InitialOutPort = _OutPort ;
105 _OutPort = anOutPort ;
109 bool GraphBase::InPort::RemoveOutPort( bool DoRemoveInPort ) {
110 // Before to return the real status, callers should be checked ...
111 if ( _OutPort == NULL ) {
112 cdebug << "InPort::RemoveOutPort no OutPort in InPort " << PortName() << " of " << NodeName() << endl ;
115 cdebug << "InPort::RemoveOutPort " << _OutPort->NodeName() << "(" << _OutPort->PortName() << ") --> "
116 << NodeName() << "(" << PortName() << ") in InPort " << PortName() << " of " << NodeName() << endl ;
117 if ( !IsEndSwitch() ) {
118 //JR 08.06.2005 : RemoveOutPort <==> delete of a link ==> RemoveInPort corresponding
119 if ( DoRemoveInPort ) {
120 _OutPort->RemoveInPort( this ) ;
127 Kind( SUPERV::InLineParameter ) ;
132 ostream & operator<< (ostream &f ,const GraphBase::InPort &P) {
133 f << P.PortName() << ", " << "type : " << P.PortType() << ", " << P.PortStatus() << ", " ;
134 f << "from Node " << P.NodeName() << ", ";
135 f << "kind " << P.Kind() << ", ";
136 f << "Status " << P.PortStatus() << ", ";
137 GraphBase::OutPort * anOutPort = P.GetOutPort() ;
139 f << "Linked from OutPort " << anOutPort->PortName() << ", " << "type : " << anOutPort->PortType() << ", " ;
140 f << "from Node " << anOutPort->NodeName() << ", ";
141 f << "kind " << anOutPort->Kind() << ", ";
142 f << "Status " << anOutPort->PortStatus() << ", ";
147 ostream & operator<< (ostream &f ,const SUPERV::GraphState & aPortState ) {
148 switch (aPortState) {
149 case SUPERV::UndefinedState :
150 f << "UndefinedState";
152 case SUPERV::NoState :
155 case SUPERV::EditingState :
158 case SUPERV::SuspendState :
161 case SUPERV::WaitingState :
164 case SUPERV::ReadyState :
167 case SUPERV::SuspendReadyState :
168 f << "SuspendReadyState";
170 case SUPERV::RunningState :
173 case SUPERV::DoneState :
176 case SUPERV::ErrorState :
179 case SUPERV::SuspendDoneState :
180 f << "SuspendDoneState";
182 case SUPERV::SuspendErroredState :
183 f << "SuspendErroredState";
185 case SUPERV::KillState :
188 case SUPERV::StopState :
192 f << "SUPERV::GraphState_?";