Version: 9.16.0
CalStreamPort.cxx
Go to the documentation of this file.
1// Copyright (C) 2006-2026 CEA, EDF
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20#include "CalStreamPort.hxx"
21#include "SalomeComponent.hxx"
22#include "CORBANode.hxx"
23#include "Calcium_Ports.hh"
24#include <iostream>
25
26//#define _DEVDEBUG_
27#include "YacsTrace.hxx"
28
29using namespace YACS::ENGINE;
30using namespace std;
31
32const char InputCalStreamPort::NAME[]="InputCalStreamPort";
33
34InputCalStreamPort::InputCalStreamPort(const std::string& name, Node *node, TypeCode* type):
35 InputDataStreamPort(name, node, type),
36 DataPort(name, node, type),
37 Port(node),_depend("TIME_DEPENDENCY"),_schema("TI_SCHEM"),_delta(-1.),_level(-1),_alpha(0.),
38 _interp("L1_SCHEM"),_extrap("UNDEFINED_EXTRA_SCHEM")
39{
40}
42 InputDataStreamPort(other,newHelder),
43 DataPort(other,newHelder),
44 Port(other,newHelder),_depend(other._depend),_schema(other._schema),_delta(other._delta),_level(other._level),
45 _alpha(other._alpha),_interp(other._interp),_extrap(other._extrap)
46{
47}
48
50{
51}
52
53void InputCalStreamPort::setDepend(const std::string& depend)
54{
55 DEBTRACE("InputCalStreamPort::setDepend: " << edGetNumberOfLinks());
56 if(edGetNumberOfLinks() > 0)
57 {
58 throw Exception("Can not modify DependencyType property on a connected port");
59 }
60 if(depend != "TIME_DEPENDENCY" && depend != "ITERATION_DEPENDENCY")
61 {
62 throw Exception("DependencyType property must be TIME_DEPENDENCY or ITERATION_DEPENDENCY");
63 }
64 _depend=depend;
65}
66
67void InputCalStreamPort::setSchema(const std::string& schema)
68{
69 if(schema != "TI_SCHEM" && schema != "TF_SCHEM" && schema != "ALPHA_SCHEM")
70 {
71 throw Exception("DateCalSchem property must be TI_SCHEM, TF_SCHEM or ALPHA_SCHEM");
72 }
73 _schema=schema;
74}
75void InputCalStreamPort::setLevel(const std::string& value)
76{
77 DEBTRACE("InputCalStreamPort::setLevel: " << value);
78 std::istringstream iss(value);
79 int temp;
80 if (!(iss >> temp)|| temp<1)
81 throw Exception("StorageLevel property must be an integer > 0");
82 _level=temp;
83}
84void InputCalStreamPort::setAlpha(const std::string& value)
85{
86 std::istringstream iss(value);
87 double temp;
88 if (!(iss >> temp)||temp<0. || temp >1.)
89 throw Exception("Alpha property must be a float > 0 and < 1");
90 _alpha=temp;
91}
92void InputCalStreamPort::setDelta(const std::string& value)
93{
94 std::istringstream iss(value);
95 double temp;
96 if (!(iss >> temp)||temp<0. || temp >1.)
97 throw Exception("DeltaT property must be > 0 and < 1");
98 _delta=temp;
99}
100void InputCalStreamPort::setInterp(const std::string& value)
101{
102 if(value != "L0_SCHEM" && value != "L1_SCHEM")
103 {
104 throw Exception("InterpolationSchem property must be L0_SCHEM or L1_SCHEM");
105 }
106 _interp=value;
107}
108void InputCalStreamPort::setExtrap(const std::string& value)
109{
110 if(value != "E0_SCHEM" && value != "E1_SCHEM")
111 {
112 throw Exception("ExtrapolationSchem property must be E0_SCHEM or E1_SCHEM");
113 }
114 _extrap=value;
115}
116
117void InputCalStreamPort::setProperty(const std::string& name, const std::string& value)
118{
119 DEBTRACE("InputCalStreamPort::setProperty: " << name << " " << value);
120 if(name == "DependencyType")
121 setDepend(value);
122 else if(name == "DateCalSchem")
123 setSchema(value);
124 else if(name == "StorageLevel")
125 setLevel(value);
126 else if(name == "Alpha")
127 setAlpha(value);
128 else if(name == "DeltaT")
129 setDelta(value);
130 else if(name == "InterpolationSchem")
131 setInterp(value);
132 else if(name == "ExtrapolationSchem")
133 setExtrap(value);
135}
136
137#ifdef DSC_PORTS
139{
140
141 CORBA::Object_var objComponent=((SalomeComponent*)((SalomeNode*)_node)->getComponent())->getCompoPtr();
142 Engines::Superv_Component_var compo=Engines::Superv_Component::_narrow(objComponent);
143 Ports::PortProperties_var port_properties=compo->get_port_properties(getName().c_str());
144 CORBA::Any a;
145 std::string prop;
146 try
147 {
149 if(_level>0)
150 {
151 prop="StorageLevel";
152 a <<= (CORBA::Long)_level;
153 port_properties->set_property(prop.c_str(),a);
154 }
155
156 if(_schema != "TI_SCHEM")
157 {
158 prop="DateCalSchem";
159 if(_schema == "TF_SCHEM")
160 a <<= Ports::Calcium_Ports::TF_SCHEM;
161 else if(_schema == "ALPHA_SCHEM")
162 a <<= Ports::Calcium_Ports::ALPHA_SCHEM;
163 port_properties->set_property(prop.c_str(),a);
164 }
165
166 if(_schema == "ALPHA_SCHEM" && _alpha > 0.)
167 {
168 prop="Alpha";
170 port_properties->set_property(prop.c_str(),a);
171 }
172
173 if(_delta >= 0.)
174 {
175 prop="DeltaT";
177 port_properties->set_property(prop.c_str(),a);
178 }
179 if(_interp == "L0_SCHEM" )
180 {
181 prop="InterpolationSchem";
182 a <<= Ports::Calcium_Ports::L0_SCHEM;
183 port_properties->set_property(prop.c_str(),a);
184 }
185 if(_extrap != "UNDEFINED_EXTRA_SCHEM" )
186 {
187 prop="ExtrapolationSchem";
188 if(_extrap == "E0_SCHEM" )
189 a <<= Ports::Calcium_Ports::E0_SCHEM;
190 else if(_extrap == "E1_SCHEM" )
191 a <<= Ports::Calcium_Ports::E1_SCHEM;
192 port_properties->set_property(prop.c_str(),a);
193 }
194 }
195 catch(Ports::NotDefined& ex)
196 {
197 throw Exception("Property "+prop+ " not defined on that port: "+getName());
198 }
199}
200#endif
201
203{
204 return NAME;
205}
206
208{
209 return new InputCalStreamPort(*this,newHelder);
210}
211
212const char OutputCalStreamPort::NAME[]="OutputCalStreamPort";
213
214OutputCalStreamPort::OutputCalStreamPort(const std::string& name, Node *node, TypeCode* type):
215 OutputDataStreamPort(name, node, type),
216 DataPort(name, node, type),
217 Port(node),_depend("TIME_DEPENDENCY"),_schema("TI_SCHEM"),_level(-1)
218{
219}
220
222 OutputDataStreamPort(other,newHelder),
223 DataPort(other,newHelder),
224 Port(other,newHelder),
225 _depend(other._depend),_schema(other._schema),_level(other._level)
226{
227}
228
230{
231}
232
233void OutputCalStreamPort::setDepend(const std::string& depend)
234{
235 DEBTRACE("OutputCalStreamPort::setDepend: " << edGetNumberOfOutLinks());
236 if(edGetNumberOfOutLinks() > 0)
237 {
238 throw Exception("Can not modify DependencyType property on a connected port");
239 }
240 if(depend != "TIME_DEPENDENCY" && depend != "ITERATION_DEPENDENCY")
241 {
242 throw Exception("DependencyType property must be TIME_DEPENDENCY or ITERATION_DEPENDENCY");
243 }
244 _depend=depend;
245}
246
247void OutputCalStreamPort::setSchema(const std::string& schema)
248{
249 if(schema != "TI_SCHEM" && schema != "TF_SCHEM" && schema != "ALPHA_SCHEM")
250 {
251 throw Exception("DateCalSchem property must be TI_SCHEM, TF_SCHEM or ALPHA_SCHEM");
252 }
253 _schema=schema;
254}
255void OutputCalStreamPort::setLevel(const std::string& level)
256{
257 _level =atoi(level.c_str());
258}
259
260void OutputCalStreamPort::setProperty(const std::string& name, const std::string& value)
261{
262 if(name == "DependencyType")
263 setDepend(value);
264 else if(name == "DateCalSchem")
265 setSchema(value);
266 else if(name == "StorageLevel")
267 setLevel(value);
269}
270
272{
273 return NAME;
274}
275
277{
278 return new OutputCalStreamPort(*this,newHelder);
279}
280
282{
283 DEBTRACE("OutputCalStreamPort::addInPort " << InputCalStreamPort::NAME );
285 {
286 string what="not compatible type of port requested during building of link FROM ";
287 what+=NAME; what+=" TO "; what+=inPort->getNameOfTypeOfCurrentInstance();
288 throw Exception(what);
289 }
290
291 InputCalStreamPort* port=static_cast<InputCalStreamPort*>(inPort);
292 if(port->getDepend() != _depend)
293 {
294 std::string what= "incompatible DependencyType properties: "+_depend+" != "+ port->getDepend();
295 throw Exception(what);
296 }
297 bool ret;
298 ret= edAddInputDataStreamPort(port);
299 return ret;
300}
301
302
304{
305 DEBTRACE("OutputCalStreamPort::removeInPort");
307 {
308 string what="not compatible type of port requested during destruction of for link FROM ";
309 what+=NAME; what+=" TO "; what+=inPort->getNameOfTypeOfCurrentInstance();
310 throw Exception(what);
311 }
312 return edRemoveInputDataStreamPort(static_cast<InputDataStreamPort *>(inPort),forward);
313}
314
#define DEBTRACE(msg)
Definition: YacsTrace.hxx:31
std::string getNameOfTypeOfCurrentInstance() const
Definition: DataPort.cxx:56
std::string getName() const
Definition: DataPort.hxx:55
virtual void initPortProperties()
Initialize port properties at the start of calculation phase.
virtual void setProperty(const std::string &name, const std::string &value)
Set a new value for a property of the port.
virtual int edGetNumberOfLinks() const
Returns number of physical backlinks NOT number of user backlinks.
Definition: InPort.cxx:45
Class for Input Calcium DataStream Ports.
void setSchema(const std::string &value)
void setProperty(const std::string &name, const std::string &value)
Set a new value for a property of the port.
void setLevel(const std::string &value)
void setDepend(const std::string &value)
InputCalStreamPort(const std::string &name, Node *node, TypeCode *type)
void setAlpha(const std::string &value)
void setExtrap(const std::string &value)
void setDelta(const std::string &value)
std::string getNameOfTypeOfCurrentInstance() const
InputCalStreamPort * clone(Node *newHelder) const
void setInterp(const std::string &value)
Base class for all nodes.
Definition: Node.hxx:70
virtual int edGetNumberOfOutLinks() const
Definition: OutPort.cxx:50
Class for Output Calcium DataStream Ports.
void setSchema(const std::string &schema)
virtual int removeInPort(InPort *inPort, bool forward)
std::string getNameOfTypeOfCurrentInstance() const
void setProperty(const std::string &name, const std::string &value)
Set a new value for a property of the port.
void setDepend(const std::string &depend)
virtual bool addInPort(InPort *inPort)
OutputCalStreamPort(const std::string &name, Node *node, TypeCode *type)
void setLevel(const std::string &schema)
OutputCalStreamPort * clone(Node *newHelder) const
int edRemoveInputDataStreamPort(InputDataStreamPort *inPort, bool forward)
virtual bool edAddInputDataStreamPort(InputDataStreamPort *port)
Base class for all ports.
Definition: Port.hxx:43
Node * _node
Definition: Port.hxx:55
Class for Salome component instance.
Class for Salome component Service Node.
Definition: CORBANode.hxx:68
Base class for all type objects.
Definition: TypeCode.hxx:68