]> SALOME platform Git repositories - modules/superv.git/blob - idl/SUPERV.idl
Salome HOME
DCQ : Merge with Ecole_Ete_a6.
[modules/superv.git] / idl / SUPERV.idl
1 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 //
4 //  This library is free software; you can redistribute it and/or
5 //  modify it under the terms of the GNU Lesser General Public
6 //  License as published by the Free Software Foundation; either
7 //  version 2.1 of the License.
8 //
9 //  This library is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 //  Lesser General Public License for more details.
13 //
14 //  You should have received a copy of the GNU Lesser General Public
15 //  License along with this library; if not, write to the Free Software
16 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
19 //
20 //
21 //
22 //  File   : SUPERV.idl
23 //  Author : Jean Rahuel
24 //  $Header:
25
26 /*! \file SUPERV.idl This file contains a set of interfaces of the %SUPERVISION module
27 */
28
29 #ifndef __SUPERV_IDL__
30 #define __SUPERV_IDL__
31
32 #include "SALOME_ModuleCatalog.idl"
33 #include "SALOME_Component.idl"
34 #include "SALOMEDS.idl"
35 /*!
36  The main package of interfaces of %SUPERVISION module
37 */
38 module SUPERV {
39
40 /*!
41 This enumeration contains a set of elements defining the type of the port.
42 \note  <BR>In general, ports represent <STRONG>input or output parameters</STRONG> of the functions,
43 implemented in different kinds of nodes of the graph.
44 */
45   enum KindOfPort { UndefinedParameter , ServiceParameter , GateParameter ,
46                     InLineParameter , LoopParameter , SwitchParameter ,
47                     EndSwitchParameter , GOTOParameter , DataStreamParameter } ;
48
49 /*!
50 This enumeration contains a set of dependencies of InPorts and OutPorts.
51 */
52 //  enum KindOfDependency { UndefinedDependency , TimeDependency , IterationDependency } ;
53
54 /*!
55 This enumeration contains a set of schemas of InPorts.
56 */
57   enum KindOfSchema { SCHENULL , TI , TF , DELTA } ;
58
59 /*!
60 This enumeration contains a set of interpolations of InPorts.
61 */
62   enum KindOfInterpolation { INTERNULL , L0 , L1 } ;
63
64 /*!
65 This enumeration contains a set of extrapolations of InPorts.
66 */
67   enum KindOfExtrapolation { EXTRANULL , E0 , E1 } ;
68
69 /*!
70 This enumeration contains a set of dependencies of Ports.
71 */
72   enum KindOfDataStreamTrace { WithoutTrace , SummaryTrace , DetailedTrace } ;
73
74 /*!
75 This enumeration contains a set of elements defining the type of the node.
76 */
77   enum KindOfNode { FactoryNode , DataFlowGraph , ComputingNode ,
78                     InLineNode , LoopNode , EndLoopNode ,
79                     SwitchNode , EndSwitchNode , GOTONode , DataStreamGraph ,
80                     UnknownNode };
81
82 /*!
83 This struct contains fields defining the date.
84 */
85   struct SDate {
86     short Second;
87     short Minute;
88     short Hour;
89     short Day;
90     short Month;
91     short Year;
92   };
93 /*!
94 This enumeration contains a set of elements defining the type of operation, which has been performed
95 on this node(graph).
96 */
97
98   enum GraphEvent { UndefinedEvent , NoEvent , NewThreadEvent ,
99                     WaitingEvent , ReadyEvent ,
100                     RunningEvent , DoneEvent , ErroredEvent ,
101                     SuspendEvent , ResumeEvent ,
102                     KillEvent , StopEvent ,
103                     ReRunEvent , ReStartEvent } ;
104
105   // UndefinedState : Non existing Node, Port etc...
106 /*!
107 This enumeration contains a set of elements defining the current state of the node(graph).
108 */
109
110   enum GraphState { UndefinedState , NoState , EditingState , SuspendState ,
111                     WaitingState , ReadyState , SuspendReadyState ,
112                     RunningState ,
113                     DoneState , ErrorState ,
114                     SuspendDoneState , SuspendErroredState ,
115                     KillState , StopState ,
116                     ReRunState , ReStartState ,
117                     NumberOfGraphStates } ;
118
119 /*! A sequence of string values.
120 */
121   typedef sequence<string> ListOfStrings ;
122
123   interface Value ;
124
125   interface Link ;
126   interface StreamLink ;
127
128   typedef sequence<Link> ListOfLinks ;
129   typedef sequence<StreamLink> ListOfStreamLinks ;
130
131   interface Port ;
132   interface StreamPort ;
133
134   typedef sequence<Port> ListOfPorts ;
135   typedef sequence<StreamPort> ListOfStreamPorts ;
136
137   interface CNode ;
138   interface FNode ;
139   interface INode ;
140   interface GNode ;
141   interface LNode ;
142   interface ELNode ;
143   interface SNode ;
144   interface ESNode ;
145   interface StreamGraph ;
146   interface Graph ;
147
148   typedef sequence<CNode>  ListOfCNodes ;
149   typedef sequence<FNode>  ListOfFNodes ;
150   typedef sequence<INode>  ListOfINodes ;
151   typedef sequence<GNode>  ListOfGNodes ;
152   typedef sequence<LNode>  ListOfLNodes ;
153   typedef sequence<ELNode> ListOfELNodes ;
154   typedef sequence<SNode>  ListOfSNodes ;
155   typedef sequence<ESNode> ListOfESNodes ;
156   typedef sequence<Graph> ListOfGraphs ;
157
158 /*!
159 This struct contains fields defining different types of nodes.
160 */
161
162   struct ListOfNodes {
163     ListOfCNodes  CNodes ;
164     ListOfFNodes  FNodes ;
165     ListOfINodes  INodes ;
166     ListOfGNodes  GNodes ;
167     ListOfLNodes  LNodes ;
168     ListOfELNodes ELNodes ;
169     ListOfSNodes  SNodes ;
170     ListOfESNodes ESNodes ;
171     ListOfGraphs  Graphs ;
172   } ;
173
174   // ToSuspendState : will be Suspended before running if waiting or
175   //                  will be Suspended while running or
176   //                  will be Suspended after run
177   // ToSuspendStartState : will be Suspended at the beginning of execution
178   // ToSuspendDoneState : will be Suspended after run
179 /*!
180 This enumeration contains a set of elements defining the %ControlState of the node.
181 The %ControlState gives a possibility to determine the "control actions" which have been done by
182 the user (Suspend, SuspendDone, Kill, etc...).
183 */
184   enum ControlState { VoidState , ToSuspendStartState ,
185                       ToSuspendState , ToSuspendDoneState ,
186                       ToKillState , ToKillDoneState , ToStopState ,
187                       NumberOfControlStates } ;
188 /*!
189 The AutomatonState is an internal state of the automaton of the Executor
190 of the %Supervision %Engine. It is used for inner debugging purposes only.
191 */
192
193   enum AutomatonState { UnKnownState ,
194                         DataUndefState ,
195                         DataWaitingState ,
196                         DataReadyState ,
197                         SuspendedReadyState,
198                         SuspendedReadyToResumeState ,
199                         ResumedReadyState ,
200                         KilledReadyState ,
201                         StoppedReadyState ,
202                         ExecutingState ,
203                         SuspendedExecutingState ,
204                         ResumedExecutingState ,
205                         KilledExecutingState ,
206                         StoppedExecutingState ,
207                         SuccessedExecutingState ,
208                         ErroredExecutingState ,
209                         SuspendedSuccessedState ,
210                         SuspendedErroredState,
211                         ResumedSuccessedState ,
212                         ResumedErroredState ,
213                              KilledSuccessedState ,
214                         KilledErroredState ,
215                              StoppedSuccessedState ,
216                         StoppedErroredState ,
217                         SuccessedState ,
218                         ErroredState ,
219                         SuspendedState ,
220                         KilledState ,
221                         StoppedState ,
222                         SuspendedSuccessedToReStartState ,
223                         SuspendedErroredToReStartState ,
224                         ReRunnedState ,
225                         ReStartedState ,
226                         NumberOfAutomatonStates
227                      } ;
228
229
230
231
232
233
234
235
236   ////////////////
237 /*! \brief interface %SuperG
238
239 This interface contains a set of methods necessary for management of a %graph.
240 */
241   interface SuperG : Engines::Component, SALOMEDS::Driver {
242   ////////////////
243 /*!
244   Constructs a graph with possibility to read/edit it
245   \param aGraph  %aGraphName or %aGraphXmlFile
246 */
247     SUPERV::Graph Graph(in string aGraph ) ; // aGraphName or aGraphXmlFile
248
249 /*!
250   Constructs a read Only graph ( for execution ).
251  \note <BR>In this graph there is also a possibility to update nodes, coordinates of the links,
252   of container names and input data.
253   \param aGraph  %aGraphName or %aGraphXmlFile
254 */
255     SUPERV::Graph GraphE(in string aGraph ) ; // aGraphName or aGraphXmlFile
256
257 /*!
258   Constructs a StreamGraph with possibility to read/edit it
259   \param aGraph  %aGraphName or %aGraphXmlFile
260 */
261     SUPERV::StreamGraph StreamGraph(in string aGraph ) ; // aGraphName or aGraphXmlFile
262
263 /*!
264   Constructs a read Only StreamGraph ( for execution ).
265  \note <BR>In this graph there is also a possibility to update nodes, coordinates of the links,
266   of container names and input data.
267   \param aGraph  %aGraphName or %aGraphXmlFile
268 */
269     SUPERV::StreamGraph StreamGraphE(in string aGraph ) ; // aGraphName or aGraphXmlFile
270
271 /*!
272 Creates a value of <b>string</b> type which will be used for <VAR>Input</VAR> method in the interface %Node.
273 \param aString Input value of string type.
274 */
275     SUPERV::Value StringValue( in string aString ) ;
276 /*!
277 Creates a value of <b>any</b> type which will be used for <VAR>Input</VAR> method in the interface %Node.
278 \param anAny Input value of any type.
279 */
280     SUPERV::Value AnyValue( in any anAny ) ;
281 /*!
282  Gets a graph with a definite %IOR
283 \param ior String parameter defining %IOR of the graph.
284 */
285     SUPERV::Graph getGraph(in string ior); // get Graph from is IOR
286
287 /*!
288  Gets a graph with a definite %IOR
289 \param ior String parameter defining %IOR of the graph.
290 */
291     SUPERV::StreamGraph getStreamGraph(in string ior); // get Graph from is IOR
292
293   };
294
295 /*! \brief %CNode interface
296
297 This is a base class of the SUPERVISION module. It contains a set of methods allowing:
298 <ul>
299     <li>creating a <b>Computation</b> node and setting its parameters (Name, Author, Comments etc.)
300     <li>checking the current state of the node in the data flow
301     <li>node execution follow-up
302     <li>management of the components, which can be initialized for execution of calculations in the data flow. (For that purpose %CNode class inherits the methods of the %Engines:Component class)
303 </ul>
304 */
305
306   //////////////
307   interface CNode : Engines::Component {
308   //////////////
309
310
311 /*!
312 Returns the name of the node(graph).
313 */
314     string Name() ;
315 /*!
316 Returns the service of this node .
317 */
318     SALOME_ModuleCatalog::Service Service() ;
319 /*!
320 Returns the type of the node.
321 */
322     SUPERV::KindOfNode Kind() ;
323 /*!
324 Returns the date of creation of the node(graph).
325 */
326     SUPERV::SDate CreationDate() ;
327 /*!
328 Returns the date of last update of the node(graph).
329 */
330     SUPERV::SDate LastUpdateDate() ;
331 /*!
332 Returns the name of the version of the node(graph).
333 */
334     string Version() ;
335 /*!
336 Returns the name of the author of the node(graph).
337 */
338     string Author() ;
339 /*!
340 Returns the string containing comments about this node(graph).
341 */
342     string Comment() ;
343
344
345 /*!
346 Sets the name of the node(graph).
347 \param aNewName String value defining the name of the node(graph).
348 \return True if the name has been updated.
349 */
350     boolean SetName(in string aNewName ) ;
351 /*!
352 Sets the name of the author. Returns True if it is updated.
353 \param anAuthor String value defining the name of the author.
354 \return True if the name has been updated.
355 */
356     boolean SetAuthor(in string anAuthor ) ;
357 /*!
358 Allows to update the comments about this node(graph).
359 \param aComment String value containing a comment to this node(graph).
360 \return True if the old comment has been updated.
361 */
362     boolean SetComment(in string aComment ) ;
363
364 /*!
365  Gets a port of the node (for compatibility : see GetInPort - GetOutPort).
366 */
367     SUPERV::Port Port( in string aParameterName ) ;
368
369 /*! Gets an Input port in a node.
370 \param aParameterName This value sets the name of the parameter which will be defined in this port.
371 */
372     SUPERV::Port GetInPort( in string aParameterName ) ;
373
374 /*! Gets an Output port in a node.
375 \param aParameterName This value sets the name of the parameter which will be defined in this port.
376 */
377     SUPERV::Port GetOutPort( in string aParameterName ) ;
378
379 /*! Gets an Input StreamPort in a node.
380 \param aParameterName This value sets the name of the parameter which will be defined in this port.
381 */
382     SUPERV::StreamPort GetInStreamPort( in string aParameterName ) ;
383
384 /*! Gets an Output StreamPort in a node.
385 \param aParameterName This value sets the name of the parameter which will be defined in this port.
386 */
387     SUPERV::StreamPort GetOutStreamPort( in string aParameterName ) ;
388
389 /*!
390  Enters a value into an Input %Port
391 */
392     SUPERV::Port Input( in string InputParameterName ,
393                         in Value aValue ) ;
394
395 /*!
396   Gets a list of ports of the node(graph)
397 */
398     SUPERV::ListOfPorts Ports() ;
399
400 /*!
401   Gets a list of ports of the node(graph)
402 */
403     SUPERV::ListOfStreamPorts StreamPorts() ;
404
405 /*! Gets a list of links of a node(graph)
406 */
407     SUPERV::ListOfLinks Links() ;
408
409 /*! Gets a list of StreamLinks of a node(graph)
410 */
411     SUPERV::ListOfStreamLinks StreamLinks() ;
412
413 /*!
414 Returns True if this node is a graph.
415 \note <BR>A node of the graph can also represent in its turn another graph.
416 */
417     boolean IsStreamGraph() ;
418 /*!
419 Returns True if this node is a graph.
420 \note <BR>A node of the graph can also represent in its turn another graph.
421 */
422     boolean IsGraph() ;
423 /*!
424 Returns True if the node appears to be a %computing node.
425 */
426     boolean IsComputing() ;
427 /*!
428 Returns True if the node appears to be a %factory node.
429 */
430     boolean IsFactory() ;
431 /*!
432 Returns True if the node appears to be an %inline node.
433 */
434     boolean IsInLine() ;
435 /*!
436 Returns True if the node appears to be a %GOTO node.
437 */
438     boolean IsGOTO() ;
439 /*!
440 Returns True if the node appears to be a %loop node.
441 */
442     boolean IsLoop() ;
443 /*!
444 Returns True if the node appears to be an %endloop node.
445 */
446     boolean IsEndLoop() ;
447 /*!
448 Returns True if the node appears to be a %switch node.
449 */
450     boolean IsSwitch() ;
451 /*!
452 Returns True if the node appears to be a %endswitch node.
453 */
454     boolean IsEndSwitch() ;
455
456 /*!
457  Returns the numero of subgraph of a node.
458 */
459     long SubGraph() ;
460 /*!
461  Returns the numero of substreamgraph of a node.
462 */
463     long SubStreamGraph() ;
464
465 /*!
466 Returns the number of threads of the graph.
467 */
468     long Thread() ;
469
470 /*!
471  Returns True if the node(graph) is waiting for Data input
472 */
473     boolean IsWaiting() ;
474
475 /*!
476  Returns True if the node(graph) is ready for execution
477 */
478      boolean IsReady() ;
479
480 /*!
481  Returns True if the node(graph) is currently running
482 */
483     boolean IsRunning() ;
484
485 /*!
486  Returns True if execution is finished
487 */
488
489     boolean IsDone() ;
490 /*!
491  Returns True if execution is suspended
492 */
493
494     boolean IsSuspended() ;
495 /*!
496 Returns the current state of the graph.
497 */
498     SUPERV::GraphState State() ;
499
500 /*!
501  Waits for ready_to_run state, Suspend and return.
502 */
503     boolean ReadyW() ;
504
505 /*! Waits for running state, Suspend and return.
506 */
507     boolean RunningW() ;
508
509 /*! Waits for done state, Suspend and return.
510 */
511     boolean DoneW() ;
512
513 /*! Waits for Suspend state and return.
514 */
515     boolean SuspendedW() ;
516
517     //    boolean Ping();
518
519 /*! Kills execution.
520 <br>
521 If not running : will be killed when ready to run.
522 If running : kills immediatly.
523 */
524     boolean Kill();
525
526 /*! Kills execution.
527 <br>
528 Execution will be killed only just after running (only for nodes).
529 */
530     boolean KillDone();
531
532 /*! Stops execution.
533 <br>
534 If not running : will be stopped when ready to run.
535 If running : stops immediatly
536 */
537     boolean Stop();
538 /*! Suspends execution.
539 <br>
540 If not running : will be Suspended when ready to run. It is used in step-by-step execution.
541 If running : suspends immediatly
542 */
543     boolean Suspend();
544 /*! Suspends execution only just after running.
545 */
546     boolean SuspendDone();
547
548 /*! Resumes execution.
549 <br>
550 If Suspended : running will be continued.
551 If not Suspended : cancels the current ControlState ( Suspend, Kill, ...)
552 */
553     boolean Resume();
554
555 /*!
556  Restarts execution of the node.
557 */
558     boolean ReRun();
559 /*!
560 Restarts execution of the graph beginning from a definite node.
561 */
562     boolean ReRunAt( in string aNodeName );
563
564 /*!
565  Restarts and suspends execution of the node(graph).
566 */
567     boolean ReStart();
568 /*!
569 Restarts and suspends execution of the graph beginning from a definite node.
570 \param aNodeName String parameter defining the name of the node.
571 */
572     boolean ReStartAt( in string aNodeName );
573
574 /*!
575  Returns automaton execution state of the node(graph).
576 */
577     SUPERV::AutomatonState AutoState() ;
578
579     // Control state required : Kill, Suspend, Stop
580 /*!
581  Returns control state of the node(graph).
582 */
583     SUPERV::ControlState Control() ;
584 /*!
585 Clears the control state of the node(graph).
586 */
587     void ControlClear() ;
588
589     boolean ContainerKill();
590 /*!
591 Sets the position of the node in the window.
592 */
593     void Coords( in long X , in long Y ) ;
594 /*!
595 Returns the position of the node along X-axis.
596 */
597     long X() ;
598 /*!
599 Returns the position of the node along Y-axis.
600 */
601     long Y() ;
602 /*!
603 Returns the Cpu used by a node for execution of calculations in seconds.
604 */
605     long CpuUsed() ;
606
607   } ;
608 /*! \brief %FNode class
609
610 This class is necessary for management of factory nodes in a data flow. Besides the inherited methods it contains some methods allowing to define
611 the component from the container, which will be called for execution of the calculation.
612 */
613   //////////////
614   interface FNode : CNode {
615   //////////////
616 /*! Gets the name of the component, which will be called for execution of the calculation.
617 */
618     string GetComponentName() ;
619 /*! Gets the name of the interface of the component.
620 */
621     string GetInterfaceName() ;
622 /*! Gets the container containing the component, which will be called for execution of the calculation.
623 */
624     string GetContainer() ;
625 /*! Sets the name of the component, which will be called for execution of the calculation.
626 \param aComponentName Name of the component.
627 */
628     boolean SetComponentName(in string aComponentName ) ;
629 /*! Sets the name of the interface of the component.
630 \param anInterfaceName Name of the interface.
631 */
632     boolean SetInterfaceName(in string anInterfaceName ) ;
633 /*! Gets the container containing the component, which will be called for execution of the calculation.
634 \param aContainer Container containing the component.
635 */
636     boolean SetContainer(in string aContainer ) ;
637   } ;
638 /*! \brief %INode class
639
640 This class is necessary for management of inline nodes in a data flow. Besides the inherited methods it contains some methods allowing to set a Python function, which will be
641 executed for performing calculations, as well as input and output parameters for the node.
642 */
643   // InLine Nodes
644   //////////////
645   interface INode : CNode {
646   //////////////
647
648 /*! Sets Python function for the InLine Node.
649 \param FuncName Name of the function
650 \param aPyInitFunction Python initialization function of the InLine Node
651 */
652     void SetPyFunction( in string FuncName ,
653                         in SUPERV::ListOfStrings aPyInitFunction ) ;
654 /*! Returns Python function of the InLine Node.
655 */
656     SUPERV::ListOfStrings PyFunction() ;
657 /*! Returns the name of the Python function of the InLine Node.
658 */
659     string PyFuncName() ;
660
661 /*! Creates an Input port in a node.
662 \param aParameterName This value sets the name of the parameter which will be defined in this port.
663 \param aParameterType This value sets the type of the parameter which will be defined in this port.
664 */
665     SUPERV::Port InPort( in string aParameterName , in string aParameterType ) ;
666 /*! Creates an Output port in an Inline node.
667 \param aParameterName This value sets the name of the parameter which will be defined in this port.
668 \param aParameterType This value sets the type of the parameter which will be defined in this port.
669 */
670     SUPERV::Port OutPort( in string aParameterName , in string aParameterType ) ;
671
672 /*! Creates an Input DataStreamPort in an Inline node.
673 \param aParameterName This value sets the name of the parameter which will be defined in this port.
674 \param aParameterType This value sets the type of the parameter which will be defined in this port.
675 */
676     SUPERV::StreamPort InStreamPort( in string aParameterName , in SALOME_ModuleCatalog::DataStreamType aParameterType , in SALOME_ModuleCatalog::DataStreamDependency aDependency ) ;
677
678 /*! Creates an Output DataStreamPort in an Inline node.
679 \param aParameterName This value sets the name of the parameter which will be defined in this port.
680 \param aParameterType This value sets the type of the parameter which will be defined in this port.
681 */
682     SUPERV::StreamPort OutStreamPort( in string aParameterName , in SALOME_ModuleCatalog::DataStreamType aParameterType , in SALOME_ModuleCatalog::DataStreamDependency aDependency ) ;
683
684   } ;
685 /*! \brief %GNode class
686
687 This class is necessary for management of GOTO/EndLoop/EndSwitch nodes in the dataflow.
688 Besides the inherited methods it contains some methods allowing to define the couple node, which will be linked to this one.
689 */
690   // GOTO/EndLoop/EndSwitch Nodes
691   ///////////////
692   interface GNode : INode {
693   ///////////////
694 /*! Sets the coupled InLine Node to this GOTO/EndLoop/EndSwitch Node.
695 */
696     boolean SetCoupled( in string anInLineNode ) ;
697 /*! Returns the coupled InLine Node to this GOTO/EndLoop/EndSwitch Node.
698 */
699     SUPERV::INode Coupled() ;
700   } ;
701 /*! %Loop Nodes class
702 */
703   // Loop Nodes
704   ///////////////
705   interface LNode : GNode {
706   ///////////////
707 /*! Sets Python Init function of the Loop Node.
708 \param InitName Name of the Init function
709 \param aPyInitFunction Python Init function
710 */
711     void SetPyInit( in string InitName ,
712                             in SUPERV::ListOfStrings aPyInitFunction ) ;
713 /*! Returns Python Init function of the Loop Node.
714 */
715     SUPERV::ListOfStrings PyInit() ;
716 /*! Returns the name of the Python Init function of the Loop  Node.
717 */
718     string PyInitName() ;
719
720 /*! Sets Python More function of the Loop Node.
721 \param MoreName Name of the More function
722 \param aPyMoreFunction Python More function
723 */
724     void SetPyMore( in string MoreName ,
725                             in SUPERV::ListOfStrings aPyMoreFunction ) ;
726 /*! Returns Python More function of the Loop Node.
727 */
728     SUPERV::ListOfStrings PyMore() ;
729 /*! Returns the name of the Python More function of the Loop Node.
730 */
731     string PyMoreName() ;
732
733 /*! Sets Python Next function of the Loop Node.
734 \param  NextName Name of the  Next function
735 \param aPy NextFunction Python  Next function
736 */
737     void SetPyNext( in string NextName ,
738                             in SUPERV::ListOfStrings aPyNextFunction ) ;
739
740 /*! Returns Python Next function of the Loop Node.
741 */
742     SUPERV::ListOfStrings PyNext() ;
743 /*! Returns the name of the Python Next function of the Loop Node.
744 */
745     string PyNextName() ;
746
747   } ;
748
749   // EndOfLoop Nodes
750   ////////////////
751   interface ELNode : GNode {
752   ////////////////
753   } ;
754
755   // Switch Nodes
756   ///////////////
757   interface SNode : GNode {
758   ///////////////
759   } ;
760
761   // EndOfSwitch Nodes
762   ////////////////
763   interface ESNode : GNode {
764   ////////////////
765   } ;
766
767 /*! \brief Interface of a graph
768
769 This interface includes a set of methods used for management of the graphs in %SUPERVISION module.
770 */
771
772   ///////////////
773   interface Graph : INode {
774   ///////////////
775
776     /*! Creates a Computing Node in a Graph.
777     */
778     SUPERV::CNode CNode( in SALOME_ModuleCatalog::Service aService ) ;
779
780     /*! Creates a Factory Node in a Graph.
781     */
782     SUPERV::FNode FNode( in string aComponentName ,
783                          in string anInterfaceName ,
784                          in SALOME_ModuleCatalog::Service aService ) ;
785
786     /*! Creates an InLine Node in a Graph.
787     */
788     SUPERV::INode INode( in string FuncName , in ListOfStrings aPythonFunction ) ;
789
790     /*! Creates a GOTO Node and links it to the corresponding InLine node.
791     */
792     SUPERV::GNode GNode( in string FuncName , in ListOfStrings aPythonFunction ,
793                          in string anINode ) ;
794
795     /*! Creates a Loop Node ("for" or "while" loop) and links it to the corresponding end of loop node.
796     */
797     SUPERV::LNode LNode( in string InitName , in ListOfStrings InitFunction ,
798                          in string MoreName , in ListOfStrings MoreFunction ,
799                          in string NextName , in ListOfStrings NextFunction ,
800                          out SUPERV::INode anEndOfLoop ) ;
801
802     /*! Creates a conditional "if/elseif/else" or "switch" node and the corresponding end node
803     */
804     SUPERV::SNode SNode( in string FuncName , in ListOfStrings aPythonFunction ,
805                          out SUPERV::INode anEndOfSwitch ) ;
806
807     /*! Returns an existing node with a definite name.
808     \param aNodeName Name of the Node.
809     */
810     SUPERV::CNode Node( in string aNodeName ) ;
811
812     /*! Creates a CORBA Component Object Reference
813     */
814     Engines::Component ComponentRef( in string aComputerContainer ,
815                                      in string aComponentName ) ;
816
817 /*!
818  Creates a link  connecting two ports (%Output %Port and %Input %Port) of the nodes in a Graph
819 */
820     SUPERV::Link Link( in SUPERV::Port OutputPort ,
821                        in SUPERV::Port InputPort ) ;
822
823 /*!
824 Imports a graph into a file with XML format
825 \param anXmlFile String parameter defining the name of the XML file.
826 \return True, if the graph has been successfully imported.
827 */
828     boolean Import( in string anXmlFile ) ;
829 /*!
830 Exports a graph from a file with XML format
831 \param anXmlFile String parameter defining the name of the XML file.
832 \return True, if the graph has been successfully imported.
833 */
834     boolean Export( in string anXmlFile ) ;
835 /*!
836 Returns True if the graph is read Only.
837 */
838     boolean IsReadOnly() ;
839
840 /*!
841  Starts asynchronous execution of the graph.
842 */
843     boolean Run() ;
844
845 /*!
846  Assigns to the %Node an %Event and a %State of the %Node, if the Event is
847  available. And returns immediately Nil, NoEvent and NoState if not.
848  Returns false if the graph is finished, suspended, killed or stopped.
849 \param aNode  %Node for which this method is called
850 \param anEvent  An operation, which has been performed on this node(graph).
851 \param aState   Current state of the graph
852 */
853     boolean EventNoW( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent ,
854                       out SUPERV::GraphState aState ) ;
855
856 /*!
857  Assigns to the %Node an %Event and a %State of the %Node, if the Event is
858  available. Waits if it is not available at the current moment.
859  Returns false if the graph is finished, suspended, killed or stopped.
860 \param aNode  %Node for which this method is called
861 \param anEvent  An operation, which has been performed on this node(graph).
862 \param aState   Current state of the graph
863 */
864     boolean Event( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent ,
865                    out SUPERV::GraphState aState ) ;
866
867     // Same as Event but execution of the thread is suspended between the
868     // return of EventW and the next call to EventW
869 /*!
870  Assigns to the %Node an %Event and a %State of the %Node, if the Event is
871  available. And returns immediately Nil, NoEvent and NoState if not.
872  Returns false if the graph is finished, suspended, killed or stopped.
873 \note <BR>Execution of the thread is suspended between the return of this
874 method and its next usage.
875 \param aNode  %Node for which this method is called
876 \param anEvent  An operation, which has been performed on this node(graph).
877 \param aState   Current state of the graph
878 */
879     boolean EventW( out SUPERV::CNode aNode , out SUPERV::GraphEvent anEvent ,
880                     out SUPERV::GraphState aState ) ;
881 /*! \name Methods used for inner debugging purposes of threads management :
882 */
883 /*@{*/
884
885     long EventQSize() ;
886     long LevelMax() ;
887     SUPERV::ListOfNodes LevelNodes( in long aLevel ) ;
888     long ThreadsMax() ;
889
890 /*@}*/
891
892 /*!
893 Returns the number of currently running threads.
894 */
895     long Threads();
896 /*!
897 Returns the number of suspended threads.
898 */
899     long SuspendedThreads();
900 /*!
901 Returns True if the graph is valid.
902 */
903     boolean IsValid() ;
904 /*!
905 Returns True if the graph can be executed.
906 */
907     boolean IsExecutable() ;
908 /*!
909 Returns True if the graph is being currently edited.
910 */
911     boolean IsEditing() ;
912 /*!
913 Returns True if the graph is being currently executed.
914 */
915     boolean IsExecuting() ;
916
917     long LastLevelDone() ;
918
919 /*!
920  Launches step-by-step execution of the graph.
921 \note  The execution is suspended immediatly after performance of operations of the first node and
922 user can specify the nodes, where execution will be again suspended after its resuming.
923 */
924     boolean Start() ;
925 /*!
926 Allows to copy one graph into another.
927 */
928     SUPERV::Graph Copy() ;
929 /*!
930 Convert a FlowGraph to a StreamGraph.
931 */
932     SUPERV::StreamGraph ToStreamGraph() ;
933 /*!
934 Merges two graphs
935 */
936     boolean Merge( in Graph aGraph ) ;
937 /*!
938 Returns a list of nodes of the graph.
939 */
940     SUPERV::ListOfNodes Nodes() ;
941 /*!
942 Returns a list of links of the graph.
943 */
944     SUPERV::ListOfLinks GLinks() ;
945 /*!
946 Gets IOR of the garph.
947 */
948     string getIOR();
949
950 /*!
951 Returns the number of independent subgraphs
952 */
953     long SubGraphsNumber() ;
954 /*!
955 Returns a list of Nodes of a SubGraph.
956 */
957     SUPERV::ListOfNodes SubGraphsNodes( in long SubGraphNumber ) ;
958
959   } ;
960
961
962
963
964
965 /*! \brief Interface of a StreamGraph
966
967 This interface includes a set of methods used for management of the graphs in %SUPERVISION module.
968 */
969
970   /////////////////////
971   interface StreamGraph : Graph {
972   /////////////////////
973
974 /*!
975 Allows to copy one graph into another.
976 */
977     SUPERV::StreamGraph StreamCopy() ;
978 /*!
979  Creates a link  connecting two ports (%Output %Port and %Input %Port) of the nodes in a Graph
980 */
981     SUPERV::StreamLink StreamLink( in SUPERV::StreamPort OutputPort ,
982                                    in SUPERV::StreamPort InputPort ) ;
983
984 /*!
985 Returns a list of links of the graph.
986 */
987     SUPERV::ListOfStreamLinks GStreamLinks() ;
988     boolean SetStreamParams( in long Timeout ,
989                              in SUPERV::KindOfDataStreamTrace DataStreamTrace ,
990                              in double DeltaTime ) ;
991     void StreamParams( out long Timeout ,
992                        out SUPERV::KindOfDataStreamTrace DataStreamTrace ,
993                        out double DeltaTime ) ;
994
995 /*!
996 Returns the number of independent subStreamgraphs
997 */
998     long SubStreamGraphsNumber() ;
999 /*!
1000 Returns a list of Nodes of a SubStreamGraph.
1001 */
1002     SUPERV::ListOfNodes SubStreamGraphsNodes( in long SubStreamGraphNumber ) ;
1003
1004 /*!
1005 Convert a StreamGraph to a FlowGraph.
1006 */
1007     SUPERV::Graph ToFlowGraph() ;
1008
1009 /*!
1010 Merge a StreamGraph.
1011 */
1012     boolean StreamMerge( in StreamGraph aStreamGraph ) ;
1013
1014   } ;
1015
1016
1017
1018
1019
1020
1021 /*! \brief Interface of the %link
1022
1023 This interface contains a set of methods used for representation and management of the links
1024 connecting nodes in a %graph.
1025 */
1026
1027   //////////////
1028   interface Link : Engines::Component {
1029   //////////////
1030 /*!
1031 Returns the %Output %Port of the Link
1032 */
1033     SUPERV::Port OutPort() ;
1034
1035 /*!
1036 Returns the %Input %Port of the Link
1037 */
1038     SUPERV::Port InPort() ;
1039
1040     // For GUI :
1041 /*! \name Methods used for representation of links in GUI of %SALOME application :
1042 */
1043 /*@{*/
1044 /*!
1045 Returns the number of coordinate points which are included in the link.
1046 \note  <BR>Every link can contain a set of coordinate points which constitute it. These points have
1047 index numbers (beginning from 1) and coordinates defining their position in the window. Indexing of
1048 the points starts from input port to output port of the corresponding link.
1049 */
1050     long CoordsSize() ;
1051 /*!
1052 Adds a coordinate point to the link.
1053 \param index  Index of the point.
1054 \param X  Coordinates of the point.
1055 \param Y  Coordinates of the point.
1056 */
1057     boolean AddCoord( in long index , in long X , in long Y ) ;
1058 /*!
1059 Changes the location of a definite coordinate point of the link.
1060 \param index  Index of the point.
1061 \param X  Coordinates of the point.
1062 \param Y  Coordinates of the point.
1063 */
1064
1065     boolean ChangeCoord( in long index , in long X , in long Y ) ;
1066 /*!
1067 Removes a coordinate point of the link.
1068 \param index  Index of the point.
1069 */
1070
1071     boolean RemoveCoord( in long index ) ;
1072
1073 /*!
1074 Sets the location of a coordinate point of the link.
1075 \param index  Index of the point.
1076 \param X  Coordinates of the point.
1077 \param Y  Coordinates of the point.
1078 */
1079
1080     boolean Coords( in long index , out long X , out long Y ) ;
1081 /*@}*/
1082
1083     //    void Destroy() ;
1084
1085   } ;
1086
1087
1088
1089
1090
1091
1092 /*! \brief Interface of the %link
1093
1094 This interface contains a set of methods used for representation and management of the links
1095 connecting nodes in a %graph.
1096 */
1097
1098   ////////////////////
1099   interface StreamLink : Link {
1100   ////////////////////
1101 /*!
1102 Returns the %Output %StreamPort of the StreamLink
1103 */
1104     SUPERV::StreamPort OutStreamPort() ;
1105
1106 /*!
1107 Returns the %Input %StreamPort of the StreamLink
1108 */
1109     SUPERV::StreamPort InStreamPort() ;
1110
1111
1112   } ;
1113
1114
1115
1116
1117
1118 /*! \brief  %Value interface
1119
1120 This interface contains a set of methods used for setting initial parameters of the ports
1121 */
1122
1123   ///////////////
1124   interface Value : Engines::Component {
1125   ///////////////
1126 /*!
1127 Converts the given value into a value of string type.
1128 */
1129     string ToString() ;
1130 /*!
1131 Converts the given value into a value of independant data type.
1132 */
1133     any ToAny() ;
1134 /*!
1135 Returns True if the value represents an IOR.
1136 */
1137     boolean IsIOR() ;
1138 /*!
1139 Gets data type of the component.
1140 */
1141     string ComponentDataType() ;
1142
1143     //    void Destroy() ;
1144
1145   } ;
1146 /*! \brief  %Port interface
1147
1148 This interface contains a set of methods used for management of the ports.
1149 */
1150
1151   //////////////
1152   interface Port : Value {
1153   //////////////
1154
1155 /*!
1156   Gives a value to an Input %Port
1157 \param aValue This parameter defines the input value
1158 */
1159     boolean Input( in SUPERV::Value aValue ) ;
1160
1161 /*!
1162 Returns the node of the port
1163 */
1164     SUPERV::CNode Node() ;
1165 /*!
1166 Sets the name of the port.
1167 */
1168     string Name() ;
1169
1170 /* Gets the type of a port.
1171 \return A string defining the type of a port
1172 */
1173
1174     string Type() ;
1175
1176     // Link of an Input Port
1177 /*!
1178 Returns the link of an %Input %Port
1179 */
1180     SUPERV::Link Link() ;
1181
1182 /*!
1183 Returns a list of links of an Input %Port of an EndSwitchNode
1184 */
1185     SUPERV::ListOfLinks Links() ;
1186
1187 /*!
1188 Returns True if this port appears to be an %Input %Port of a Node
1189 */
1190     boolean IsInput() ;
1191
1192 /*!
1193 Returns True if an %Input %Value exists for that %Input %Port (without link)
1194 */
1195     boolean HasInput() ;
1196
1197 /*!
1198 Returns True if the %Port is linked (without value)
1199 */
1200 // Port with link (without Value)
1201     boolean IsLinked() ;
1202
1203     // Kind of a Port
1204 /*! Returns the type of this port.
1205 */
1206     SUPERV::KindOfPort Kind() ;
1207
1208     // Port from the service of the node
1209 /*!
1210 Returns True if the %Port is a parameter of a service
1211 */
1212     boolean IsParam() ;
1213     // Port is a Gate of the node
1214 /*!
1215 Returns True if the %Port appears to be a Gate Port of the Node
1216 */
1217     boolean IsGate() ;
1218     // Port is a parameter of an InLineNode
1219 /*!
1220 Returns True if the %Port appears to be a parameter of an InLine Node.
1221 */
1222     boolean IsInLine() ;
1223
1224     // Port is a LoopParameter (InitLoop or DoLoop) of an LoopNode
1225 /*!
1226 Returns True if the %Port appears to be a Loop Parameter (InitLoop or DoLoop) of a Loop Node
1227 */
1228     boolean IsLoop() ;
1229     // Port is an output parameter of a SwitchNode connected to an InGate
1230 /*!
1231 Returns True if the %Port appears to be a parameter of a switch node
1232 */
1233     // Port is a parameter of a switch node
1234     boolean IsSwitch() ;
1235     // Port is an Input parameter of a EndSwitchNode connected to several output ports
1236 /*!
1237 Returns True if the %Port appears to be an EndSwitch Node connected to several output ports.
1238 */
1239     boolean IsEndSwitch() ;
1240
1241     boolean IsDataStream() ;
1242
1243 /*! Returns the current state of the port.
1244 */
1245     SUPERV::GraphState State() ;
1246 /*! Returns True if computation is finished.
1247 */
1248     boolean IsDone() ;
1249
1250   } ;
1251
1252   ////////////////////
1253   interface StreamPort : Port {
1254   ////////////////////
1255
1256     // Link of a StreamPort
1257 /*!
1258 Returns the link of a %StreamPort
1259 */
1260     SUPERV::StreamLink StreamLink() ;
1261
1262 /*! Returns the current Dependency of the DataStreamPort : TimeDependency or IterationDependency
1263 */
1264     SALOME_ModuleCatalog::DataStreamDependency Dependency() ;
1265     boolean SetDependency( in SALOME_ModuleCatalog::DataStreamDependency aDependency ) ;
1266
1267 /*! Sets or Returns the current kinds of Schema, Interpolation and Extrapolation of the InDataStreamPort
1268 */
1269     boolean SetParams( in KindOfSchema aKindOfSchema ,
1270                        in KindOfInterpolation aKindOfInterpolation ,
1271                        in KindOfExtrapolation aKindOfExtrapolation ) ;
1272     boolean Params( out KindOfSchema aKindOfSchema ,
1273                     out KindOfInterpolation aKindOfInterpolation ,
1274                     out KindOfExtrapolation aKindOfExtrapolation ) ;
1275
1276 /*! Sets or Returns the current number of values ("NIVEAU") of the OutDataStreamPort
1277 */
1278     boolean SetNumberOfValues( in long aNumberOfValues ) ;
1279     long NumberOfValues() ;
1280
1281   } ;
1282
1283 };
1284 #endif