Salome HOME
SMH: 3.0.0 preparation = merged version (POLYWORK + RTVDEBUG01) + adopation for new GUI
[modules/superv.git] / src / GraphBase / DataFlowBase_InPort.cxx
1 //  SUPERV GraphBase : contains fondamental classes for Services, Input Ports, Output Ports Links and Nodes.
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
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. 
10 // 
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. 
15 // 
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 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : DataFlowBase_InPort.cxx
25 //  Author : Jean Rahuel, CEA
26 //  Module : SUPERV
27 //  $Header:
28
29 using namespace std;
30 #include "DataFlowBase_InPort.hxx"
31 #include "DataFlowBase_OutPort.hxx"
32
33 char ** _PortStateName ;
34
35 GraphBase::InPort::InPort() :
36            Port() {
37   _PortState = SUPERV::UndefinedState ;
38   _OutPort = NULL ;
39   _InitialOutPort = NULL ;
40 }
41
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 ;
49   _OutPort = NULL ;
50   _InitialOutPort = NULL ;
51 }
52
53 //GraphBase::InPort::~InPort() {
54 //  cout << "InPort::~InPort()" << endl ;
55 //}
56
57 const StatusOfPort GraphBase::InPort::PortStatus() const {
58   if ( GetOutPort() ) {
59     return GetOutPort()->PortStatus() ;
60   }
61   return NotConnected ;
62 }
63
64 bool GraphBase::InPort::IsNotConnected() const {
65   return ( GetOutPort() == NULL || GetOutPort()->IsNotConnected() ) ;
66 }
67
68 //bool GraphBase::InPort::IsConnected() const {
69 //  return ( GetOutPort() && ( GetOutPort()->IsPortConnected() || GetOutPort()->IsExternConnected() ) ) ;
70 //}
71
72 bool GraphBase::InPort::IsPortConnected() const {
73   return ( GetOutPort() && GetOutPort()->IsPortConnected() ) ;
74 }
75
76 bool GraphBase::InPort::IsDataConnected() const {
77   return ( GetOutPort() && GetOutPort()->IsDataConnected() ) ;
78 }
79
80 bool GraphBase::InPort::IsExternConnected() const {
81   return ( GetOutPort() && GetOutPort()->IsExternConnected() ) ;
82 }
83
84 void GraphBase::InPort::StringValue(ostream & f ) const {
85   if ( GetOutPort() )
86     GetOutPort()->StringValue( f ) ;
87   else
88     f << "(undefined)" ;
89 }
90
91 bool GraphBase::InPort::ChangeOutPort( OutPort * anOutPort ) {
92   if ( _OutPort ) {
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 ;
101   }
102   if ( _InitialOutPort == NULL ) {
103     _InitialOutPort = _OutPort ;
104   }
105   _OutPort = anOutPort ;
106   return true ;
107 }
108
109 bool GraphBase::InPort::RemoveOutPort() {
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 ;
113     return false ;
114   }
115   cdebug << "InPort::RemoveOutPort " << _OutPort->NodeName() << "(" << _OutPort->PortName() << ") --> "
116          << NodeName() << "(" << PortName() << ") in InPort " << PortName() << " of " << NodeName() << endl ;
117   _OutPort = NULL ;
118   if ( !IsEndSwitch() ) {
119     RemoveCoords() ;
120   }
121   else {
122     Kind( SUPERV::InLineParameter ) ;
123   }
124   return true ;
125 }
126
127 ostream & operator<< (ostream &f ,const GraphBase::InPort &P) {
128   f << P.PortName() << ", " << "type : " << P.PortType() << ", " << P.PortStatus() << ", " ;
129   f << "from Node " << P.NodeName() << ", ";
130   f << "kind " << P.Kind() << ", ";
131   f << "Status " << P.PortStatus() << ", ";
132   GraphBase::OutPort * anOutPort = P.GetOutPort() ;
133   if ( anOutPort ) {
134     f << "Linked from OutPort " << anOutPort->PortName() << ", " << "type : " << anOutPort->PortType() << ", " ;
135     f << "from Node " << anOutPort->NodeName() << ", ";
136     f << "kind " << anOutPort->Kind() << ", ";
137     f << "Status " << anOutPort->PortStatus() << ", ";
138   }
139   return f;
140 }
141
142 ostream & operator<< (ostream &f ,const SUPERV::GraphState & aPortState ) {
143   switch (aPortState) {
144   case SUPERV::UndefinedState :
145     f << "UndefinedState";
146     break;
147   case SUPERV::NoState :
148     f << "NoState";
149     break;
150   case SUPERV::EditingState :
151     f << "EditingState";
152     break;
153   case SUPERV::SuspendState :
154     f << "SuspendState";
155     break;
156   case SUPERV::WaitingState :
157     f << "WaitingState";
158     break;
159   case SUPERV::ReadyState :
160     f << "ReadyState";
161     break;
162   case SUPERV::SuspendReadyState :
163     f << "SuspendReadyState";
164     break;
165   case SUPERV::RunningState :
166     f << "RunningState";
167     break;
168   case SUPERV::DoneState :
169     f << "DoneState";
170     break;
171   case SUPERV::ErrorState :
172     f << "ErrorState";
173     break;
174   case SUPERV::SuspendDoneState :
175     f << "SuspendDoneState";
176     break;
177   case SUPERV::SuspendErroredState :
178     f << "SuspendErroredState";
179     break;
180   case SUPERV::KillState :
181     f << "KillState";
182     break;
183   case SUPERV::StopState :
184     f << "StopState";
185     break;
186   default :
187     f << "SUPERV::GraphState_?";
188     break;
189   }
190
191   return f;
192 }
193