Salome HOME
NRI : Merge from 1.2c.
[modules/superv.git] / src / Supervision / batchmode_SuperV.py
1 #! /usr/bin/env python
2 #
3 #  SUPERV Supervision : contains the implementation of interfaces of SuperVision described in SUPERV.idl
4 #
5 #  Copyright (C) 2003  CEA/DEN, EDF R&D
6 #
7 #
8 #
9 #  File   : batchmode_SuperV.py
10 #  Module : SUPERV
11
12 try :
13     from batchmode_salome import orb
14     from batchmode_salome import lcc
15     from batchmode_salome import naming_service
16     from batchmode_salome import CORBA
17     from batchmode_salome import myStudy
18     import SUPERV
19     import SUPERV_idl
20 except :
21     import curses
22     from LifeCycleCORBA import *
23     from SALOME_NamingServicePy import *
24     import SUPERV
25     import SUPERV_idl
26     from batchmode_salome import *
27 #    try :
28 #        from libSuperVision_Swig import SuperV_Swig
29 #        print 'SuperV_Swig imported'
30 #    except :
31 #        SuperV_Swig = None
32     orb = CORBA.ORB_init([''], CORBA.ORB_ID)
33     lcc = LifeCycleCORBA(orb)
34     naming_service = SALOME_NamingServicePy_i(orb)
35
36 import re
37 from types import *
38 import SALOMEDS
39 import SALOMEDS_Attributes_idl
40 #try :
41 #    SuperVision = SuperV_Swig( len(sys.argv) , sys.argv )
42 #    SuperVision.Swig = 1
43 #    print 'SuperV_Swig created'
44 #except :
45 #    SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
46 #    SuperVision.Swig = 0
47 #    print 'Supervision Component loaded'
48                     
49 SuperVision = lcc.FindOrLoadComponent("SuperVisionContainer","SUPERV")
50 SuperVision.Swig = 0
51
52 modulecatalog = naming_service.Resolve("/Kernel/ModulCatalog")
53
54 myBuilder = myStudy.NewBuilder()
55 father = myStudy.FindComponent("SUPERV")
56 if father is None:
57         father = myBuilder.NewComponent("SUPERV")
58         A1 = myBuilder.FindOrCreateAttribute(father, "AttributeName");
59         FName = A1._narrow(SALOMEDS.AttributeName)
60
61 #        FName.SetValue("Supervision")
62         Comp = modulecatalog.GetComponent( "SUPERV" )
63         FName.SetValue( Comp._get_componentusername() )
64
65         A2 = myBuilder.FindOrCreateAttribute(father, "AttributePixMap");
66         aPixmap = A2._narrow(SALOMEDS.AttributePixMap);
67         aPixmap.SetPixMap( "ICON_OBJBROWSER_Supervision" );
68         myBuilder.DefineComponentInstance(father,SuperVision)
69
70
71 def PortInputFloat(obj, x):
72     return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
73
74 def PortInputLong(obj, x):
75     return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
76
77 def PortInputObject(obj, x):
78     try:
79         return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
80     except:
81         return obj.Input( SuperVision.AnyValue( x ) )
82
83 def PortInputString(obj, x):
84     return obj.Input( SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
85
86 def InputFloat(obj, nodein_port, x):
87     return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_double, x)))
88
89 def InputLong(obj, nodein_port, x):
90     return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_long, x)))
91
92 def InputObject(obj, nodein_port, x):
93     try:
94         return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_Object, x)))
95     except:
96         return obj.Input(nodein_port, SuperVision.AnyValue( x ) )
97
98 def InputString(obj, nodein_port, x):
99         return obj.Input(nodein_port, SuperVision.AnyValue( CORBA.Any(CORBA.TC_string, x)))
100
101
102 def addStudy(ior):
103     dataflow = SuperVision.getGraph(ior)
104     name=dataflow.Name()
105     itr = myStudy.NewChildIterator(father)
106     while itr.More():
107         item=itr.Value()
108         res,A=item.FindAttribute("AttributeName")
109         if res:
110             aName = A._narrow(SALOMEDS.AttributeName)
111             if aName.Value() == name :
112                 res, A = myBuilder.FindOrCreateAttribute(item, "AttributeIOR")
113                 anIOR  = A._narrow(SALOMEDS.AttributeIOR);
114                 anIOR.SetValue(dataflow.getIOR()) 
115                 return
116         itr.Next()
117     obj = myBuilder.NewObject(father)
118     A=myBuilder.FindOrCreateAttribute(obj, "AttributeName")
119     aName=A._narrow(SALOMEDS.AttributeName)
120     aName.SetValue(name)
121     A=myBuilder.FindOrCreateAttribute(obj, "AttributeIOR")
122     anIOR  = A._narrow(SALOMEDS.AttributeIOR)
123     anIOR.SetValue(dataflow.getIOR())
124
125 typestring = re.compile(r"_[^_]+_([^_]+)_.*")
126  
127 def getRealArgs(self,args):
128     types = []
129     realargs = []
130  
131     try:
132         t = self.this
133         types.append(typestring.match(self).group(1))
134         realargs.append(t)
135     except:
136         types.append(type(self))
137         realargs.append(self)
138     for a in args:
139         try:
140             t = a.this
141             types.append(typestring.match(a).group(1))
142             realargs.append(t)
143         except:
144             types.append(type(a))
145             realargs.append(a)
146  
147     return tuple(types), tuple(realargs)
148
149 bs_AddInput_valuedict = {
150      (InstanceType, FloatType) : PortInputFloat,
151      (InstanceType, IntType) : PortInputLong,
152      (InstanceType, StringType) : PortInputString,
153      (InstanceType, InstanceType) : PortInputObject,
154      (InstanceType, StringType, FloatType) : InputFloat,
155      (InstanceType, StringType, IntType) : InputLong,
156      (InstanceType, StringType, StringType) : InputString,
157      (InstanceType, StringType, InstanceType) : InputObject,
158      (InstanceType, StringType, ListType) : InputObject,
159 }
160
161
162 def Args( aService , aNodeName , verbose ):
163     lenin = len( aService.ServiceinParameter )
164     infos = aNodeName + 'info = "'
165     infos = infos + 'NodeName    : ' + aNodeName + '\\n'
166     infos = infos + 'ServiceName : ' + aService.ServiceName + '\\n'
167     infos = infos + 'PortNames   : \\n'
168     defnames = aNodeName + " = " + "'" + aNodeName + "' ; "
169     i = 0
170     while i < lenin :
171         argname = aNodeName + aService.ServiceinParameter[ i ].Parametername
172         valname = aNodeName + "\\\\"
173         valname = valname + aService.ServiceinParameter[ i ].Parametername
174         defnames = defnames + argname + " = " + "'" + valname + "' ; "
175         infos = infos + str(i) + '. ' + argname + ' : Input'
176         infos = infos + str(i) + ' '
177         infos = infos + aService.ServiceinParameter[ i ].Parametername + ' '
178         infos = infos + aService.ServiceinParameter[ i ].Parametertype + '\\n'
179         i = i + 1
180     lenout = len( aService.ServiceoutParameter )
181     i = 0
182     while i < lenout :
183         argname = aNodeName +  aService.ServiceoutParameter[ i ].Parametername
184         valname = aNodeName + "\\\\"
185         valname = valname + aService.ServiceoutParameter[ i ].Parametername
186         defnames = defnames + argname + " = " + "'" + valname + "' ; "
187         infos = infos + str(lenin+i) + '. ' + argname + ' : Output'
188         infos = infos + str(i) + ' '
189         infos = infos + aService.ServiceoutParameter[ i ].Parametername + ' '
190         infos = infos + aService.ServiceoutParameter[ i ].Parametertype + '\\n'
191         i = i + 1
192     infos = infos + '"'
193     defnames = defnames + infos
194     if verbose :
195         defnames = defnames + " ; print " + aNodeName + "info"
196     return defnames
197
198 def Service_Swig( aCatalogService ) :
199     aService = SuperVision.Service()
200     aService.ServiceName = aCatalogService.ServiceName
201     i = 0
202     while i < len( aCatalogService.ServiceinParameter ) :
203         p = SuperVision.ServicesParameter( aCatalogService.ServiceinParameter[i].Parametertype , aCatalogService.ServiceinParameter[i].Parametername )
204         SuperVision.AddInParameter( aService , p )
205         i = i + 1
206     i = 0
207     while i < len( aCatalogService.ServiceoutParameter ) :
208         p = SuperVision.ServicesParameter( aCatalogService.ServiceoutParameter[i].Parametertype , aCatalogService.ServiceoutParameter[i].Parametername )
209         SuperVision.AddOutParameter( aService , p )
210         i = i + 1
211     return aService
212
213 ##########################################################
214 class CNode:
215 ##########################################################
216     def __init__( self , aNode , Verbose ):
217         self.N = aNode
218         self.N.Verbose = Verbose
219     def Name( self ):
220         return self.N.Name()
221     def Service( self ):
222         return self.N.Service()
223     def Kind( self ):
224         return self.N.Kind()
225     def CreationDate( self ):
226         return self.N.CreationDate()
227     def LastUpdateDate( self ):
228         return self.N.LastUpdateDate()
229     def Version( self ):
230         return self.N.Version()
231     def Author( self ):
232         return self.N.Author()
233     def Comment( self ):
234         return self.N.Comment()
235
236     def SetName( self , aNewName ):
237         return self.N.SetName( aNewName )
238     def SetAuthor( self , anAuthor ):
239         return self.N.SetAuthor( anAuthor )
240     def SetComment( self , aComment ):
241         return self.N.SetComment( aComment )
242
243     def Print( self ):
244         print "Name          ",self.N.Name()
245         if self.N.IsFactory() :
246             print "ComponentName ",self.N.GetComponentName()
247             print "InterfaceName ",self.N.GetInterfaceName()
248         aService = self.N.Service()
249         print "Service Name  ",aService.ServiceName
250         lenin = len( aService.ServiceinParameter )
251         print "   ",lenin," input argument(s) :"
252         i = 0
253         while i < lenin :
254             print "      ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
255             i = i + 1
256         lenout = len( aService.ServiceoutParameter )
257         print "   ",lenout," output argument(s) :"
258         i = 0
259         while i < lenout :
260             print "      ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
261             i = i + 1
262         aKind = self.N.Kind()
263         print "KindOfNode",aKind
264         aFirstCreation = self.N.CreationDate()
265         print "Creation Date ",aFirstCreation.Day,"-",aFirstCreation.Month,"-",aFirstCreation.Year," ",aFirstCreation.Hour,":",aFirstCreation.Minute,":",aFirstCreation.Second
266         aLastModification = self.N.LastUpdateDate()
267         print "Update Date   ",aLastModification.Day,"-",aLastModification.Month,"-",aLastModification.Year," ",aLastModification.Hour,":",aLastModification.Minute,":",aLastModification.Second
268         print "Version       ",self.N.Version()
269         print "Author        ",self.N.Author()
270         if self.N.IsFactory() :
271             print "Container     ",self.N.GetContainer()
272         print "Comment       ",self.N.Comment()
273         print "Coords        ",self.N.X()," ",self.N.Y()
274     def Port( self , aPortName ):
275         aPort = self.N.Port( aPortName )
276         if aPort != None :
277             myPort = Port( aPort , self.N.Verbose )
278             return myPort
279         if self.N.Verbose :
280             print "Error while creating the Port : ",aPortName
281         return None
282     def Input( self , *args ):
283         types, realargs = getRealArgs(self.N,args)
284         fn = bs_AddInput_valuedict[types]
285         anInput = apply( fn, realargs)
286         if anInput != None :
287             myInput = Port( anInput , self.N.Verbose )
288             return myInput
289         ErrMsg = "Failed to create the Input"
290         if self.N.Verbose :
291             print ErrMsg
292         return anInput
293 #    def BusPort( self , InOutParameterName , InOutParameterType ):
294 #        sts,inp,outp = self.N.BusPort( InOutParameterName ,
295 #                                       InOutParameterType )
296 #        inp = Port( inp , self.N.Verbose )
297 #        outp = Port( outp , self.N.Verbose )
298 #        return sts,inp,outp
299 #    def BusPorts( self , InputParameterName , InputParameterType ,
300 #                  OutputParameterName , OutputParameterType ):
301 #        sts,inp,outp = self.N.BusPorts( InputParameterName ,
302 #                                        InputParameterType ,
303 #                                        OutputParameterName ,
304 #                                        OutputParameterType )
305 #        inp = Port( inp , self.N.Verbose )
306 #        outp = Port( outp , self.N.Verbose )
307 #        return sts,inp,outp
308     def Ports( self ):
309         ports = self.N.Ports()
310         i = 0
311         while i < len( ports ) :
312             ports[ i ] = Port( ports[i] , self.N.Verbose )
313             i = i + 1
314         return ports
315     def ListPorts( self , *args ):
316         if len( args ) == 0 :
317             aName = self.N.Name()
318         else :
319             aName = args[ 0 ]
320         ports = self.N.Ports()
321         listofports = ""
322         if len( ports ) :
323             portsname = ports[ 0 ].Name()
324             bs = portsname.find('\\')
325             if bs != -1 :
326                 portsname1,portsname2 = portsname.split('\\')
327                 portsname = portsname1 + portsname2
328             listofports = aName + portsname
329             i = 1
330             while i < len( ports ) :
331                 portsname = ports[ i ].Name()
332                 bs = portsname.find('\\')
333                 if bs != -1 :
334                     portsname1,portsname2 = portsname.split('\\')
335                     portsname = portsname1 + portsname2
336                 listofports = listofports + ',' + aName + portsname
337                 i = i + 1
338         print listofports
339         if len( ports ) == 1 :
340             listofports = "[" + listofports + "] = " + aName + ".Ports()"
341         else :
342             listofports = listofports + " = " + aName + ".Ports()"
343         return listofports
344     def PrintPorts( self ):
345         ports = self.N.Ports()
346         i = 0
347         while i < len( ports ) :
348             Direction = "Out"
349             if ports[ i ].IsInput() :
350                 Direction = "In"
351             print Direction,self.N.Name(),'(',ports[ i ].Name(),ports[ i ].Kind(),ports[ i ].Type(),') = ',ports[ i ].ToString()
352             i = i + 1
353     def Links( self ) :
354         links = self.N.Links()
355         i = 0
356         while i < len( links ) :
357             links[ i ] = Link( links[i] , self.N.Verbose )
358             i = i + 1
359         return links
360     def PrintLinks( self ):
361         links = self.Links()
362         i = 0
363         while i < len( links ) :
364             links[i].Print()
365             i = i + 1
366     def IsGraph( self ):
367         return self.N.IsGraph()
368     def IsComputing( self ):
369         return self.N.IsComputing()
370     def IsFactory( self ):
371         return self.N.IsFactory()
372     def IsInLine( self ):
373         return self.N.IsInLine()
374     def IsGOTO( self ):
375         return self.N.IsGOTO()
376     def IsLoop( self ):
377         return self.N.IsLoop()
378     def IsEndLoop( self ):
379         return self.N.IsEndLoop()
380     def IsSwitch( self ):
381         return self.N.IsSwitch()
382     def IsEndSwitch( self ):
383         return self.N.IsEndSwitch()
384     def SubGraph( self ):
385         return self.N.SubGraph()
386     def Thread( self ):
387         return self.N.Thread()
388     def IsWaiting( self ):
389         return self.N.IsWaiting()
390     def IsRunning( self ):
391         return self.N.IsRunning()
392     def IsDone( self ):
393         return self.N.IsDone()
394     def IsSuspended( self ):
395         return self.N.IsSuspended()
396     def State( self ):
397         return self.N.State()
398     def Control( self ):
399         return self.N.Control()
400     def ControlClear( self ):
401         return self.N.ControlClear()
402     def AutoState( self ):
403         return self.N.AutoState()
404     def ReadyW( self ):
405         return self.N.ReadyW()
406     def RunningW( self ):
407         return self.N.RunningW()
408     def DoneW( self ):
409         return self.N.DoneW()
410     def SuspendedW( self ):
411         return self.N.SuspendedW()
412     def ReRun( self ):
413         return self.N.ReRun()
414     def ReStart( self ):
415         return self.N.ReStart()
416     def ReRunAt( self , aNodeName ):
417         return self.N.ReRunAt( aNodeName )
418     def ReStartAt( self , aNodeName ):
419         return self.N.ReStartAt( aNodeName )
420     def Ping( self ):
421         return self.N.ping()
422     def Kill( self ):
423         return self.N.Kill()
424     def KillDone( self ):
425         return self.N.KillDone()
426     def Suspend( self ):
427         return self.N.Suspend()
428     def SuspendDone( self ):
429         return self.N.SuspendDone()
430     def Resume( self ):
431         return self.N.Resume()
432     def Stop( self ):
433         return self.N.Stop()
434     def Coords( self , X , Y ):
435         return self.N.Coords( X , Y )
436     def X( self ):
437         return self.N.X()
438     def Y( self ):
439         return self.N.Y()
440     def destroy( self ):
441         self.N.destroy()
442
443 ##########################################################
444 class FNode(CNode):
445 ##########################################################
446     def __init__( self , aNode , Verbose ):
447         self.N = aNode
448         self.N.Verbose = Verbose
449     def GetComponentName( self ):
450         return self.N.ComponentName()
451     def GetInterfaceName( self ):
452         return self.N._get_interfaceName()
453     def GetContainer( self ):
454         return self.N.Container()
455     def SetComponentName( self , aComponentName ):
456         return self.N.SetComponentName( aComponentName )
457     def SetInterfaceName( self , anInterfaceName ):
458         return self.N.SetInterfaceName( anInterfaceName )
459     def SetContainer( self , aComputer ):
460         return self.N.SetContainer( aComputer )
461
462 ##########################################################
463 class INode(CNode):
464 ##########################################################
465     def __init__( self , aNode , Verbose ):
466         self.N = aNode
467         self.N.Verbose = Verbose
468     def Edit( self , FuncName , PyFunc ) :
469         import os
470         file = '/tmp/' + FuncName + '.py' 
471         i = 0
472         fd = os.open( file , os.O_CREAT | os.O_WRONLY | os.O_TRUNC )
473         while ( i < len( PyFunc ) ) :
474             os.write( fd , PyFunc[ i ] + '\n' )
475             i = i + 1
476         edit = '${EDITOR} ' + file
477         os.system( edit )
478         fd = os.open( file , os.O_RDONLY )
479         line = os.read( fd , 132 )
480         res = ''
481         while len( line ) :
482             res = res + line
483             line = os.read( fd , 132 )
484         PyFunc = res.splitlines()
485         i = 0
486         while i < len( PyFunc ) :
487             print PyFunc[i]
488             i = i + 1
489         return PyFunc
490     def SetPyFunction( self , FuncName , aPyFunction ):
491         return self.N.SetPyFunction( FuncName , aPyFunction )
492     def PyFunction( self ):
493         return self.N.PyFunction()
494     def PyFuncName( self ):
495         return self.N.PyFuncName()
496     def EPyFunc( self ):
497         PyFunc = self.N.PyFunction()
498         PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
499         self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
500     def InPort( self , aParameterName , aParameterType ):
501         aPort = self.N.InPort( aParameterName ,
502                              aParameterType )
503         if aPort != None :
504             myPort = Port( aPort , self.N.Verbose )
505             return myPort
506         if self.N.Verbose :
507             print "Error while creating the Port : ",aParameterName
508         return None
509     def OutPort( self , aParameterName , aParameterType ):
510         aPort = self.N.OutPort( aParameterName ,
511                                 aParameterType )
512         if aPort != None :
513             myPort = Port( aPort , self.N.Verbose )
514             return myPort
515         if self.N.Verbose :
516             print "Error while creating the Port : ",aParameterName
517         return None
518
519 ##########################################################
520 class GNode(INode):
521 ##########################################################
522     def __init__( self , aNode , Verbose ):
523         self.N = aNode
524         self.N.Verbose = Verbose
525     def SetCoupled( self , anInLineNode ):
526         if self.N.IsGOTO() :
527             node = self.N.SetCoupled( anInLineNode )
528         else :
529             node = None
530         return node
531     def Coupled( self ):
532         node = self.N.Coupled()
533         if node != None :
534             if node.IsInLine() :
535                 node = INode( node , self.N.Verbose )
536             elif node.IsLoop() :
537                 node = LNode( node , self.N.Verbose )
538             elif node.IsEndLoop() :
539                 node = ELNode( node , self.N.Verbose )
540             elif node.IsSwitch() :
541                 node = SNode( node , self.N.Verbose )
542             elif node.IsEndSwitch() :
543                 node = ESNode( node , self.N.Verbose )
544         return node
545
546 ##########################################################
547 class LNode(GNode):
548 ##########################################################
549     def __init__( self , aNode , Verbose ):
550         self.N = aNode
551         self.N.Verbose = Verbose
552     def SetPyInit( self , InitName , aPyFunction ):
553         return self.N.SetPyInit( InitName , aPyFunction )
554     def PyInit( self ):
555         return self.N.PyInit()
556     def PyInitName( self ) :
557         return self.N.PyInitName()
558     def EPyInit( self ):
559         PyFunc = self.N.PyFunction()
560         PyFunc = self.Edit( self.N.PyFuncName() , PyFunc )
561         self.N.SetPyFunction( self.N.PyFuncName() , PyFunc )
562     def SetPyMore( self , MoreName , aPyFunction ):
563         return self.N.SetPyMore( MoreName , aPyFunction )
564     def PyMore( self ):
565         return self.N.PyMore()
566     def PyMoreName( self ) :
567         return self.N.PyMoreName()
568     def EPyMore( self ):
569         PyMore = self.N.PyMore()
570         PyMore = self.Edit( self.N.PyMoreName() , PyMore )
571         self.N.SetPyMore( self.N.PyMoreName() , PyMore )
572     def SetPyNext( self , NextName , aPyFunction ):
573         return self.N.SetPyNext( NextName , aPyFunction )
574     def PyNext( self ):
575         return self.N.PyNext()
576     def PyNextName( self ) :
577         return self.N.PyNextName()
578     def EPyNext( self ):
579         PyNext = self.N.PyNext()
580         PyNext = self.Edit( self.N.PyNextName() , PyNext )
581         self.N.SetPyNext( self.N.PyNextName() , PyNext )
582
583 ##########################################################
584 class ELNode(GNode):
585 ##########################################################
586     def __init__( self , aNode , Verbose ):
587         self.N = aNode
588         self.N.Verbose = Verbose
589
590 ##########################################################
591 class SNode(GNode):
592 ##########################################################
593     def __init__( self , aNode , Verbose ):
594         self.N = aNode
595         self.N.Verbose = Verbose
596
597 ##########################################################
598 class ESNode(GNode):
599 ##########################################################
600     def __init__( self , aNode , Verbose ):
601         self.N = aNode
602         self.N.Verbose = Verbose
603
604 ##########################################################
605 #class ServicesParameter_Swig :
606 ##########################################################
607 #    def __init__( self , aServicesParameter ):
608 #        self.Parametertype = aServicesParameter.Parametertype
609 #        self.Parametername = aServicesParameter.Parametername
610
611 ##########################################################
612 class Graph(INode):
613 ##########################################################
614     def __init__( self , aName ):
615         try:
616             graph = SuperVision.Graph( aName )
617         except:
618             try:
619                 graph = aName.G.Copy()
620             except:
621                 graph = None
622         if graph != None :
623             self.G = graph
624             self.G.Verbose = 1
625             self.N = graph
626             self.N.Verbose = 1
627         else :
628             print "Graph creation failed"
629     def CNode( self , *args ):
630         if len( args ) == 1 :
631             aService = args[ 0 ]
632         else :
633             aComponent = args[ 0 ]
634             anInterface = args[ 1 ]
635             aService = args[ 2 ]
636             NodeComponent = modulecatalog.GetComponent( aComponent )
637             aService = NodeComponent.GetService( anInterface , aService )
638         aNode = self.G.CNode( aService )
639         if aNode != None :
640             myNode = CNode( aNode , self.G.Verbose )
641             return myNode
642         ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
643         if self.G.Verbose :
644             print ErrMsg
645         return aNode
646     def Node( self , aComponent , anInterface , aService ):
647         if SuperVision.Swig :
648             aService = Service_Swig( aService )
649         return self.FNode( aComponent , anInterface , aService )
650     def FNode( self , aComponent , anInterface , aService ):
651         NodeComponent = modulecatalog.GetComponent( aComponent )
652         aService = NodeComponent.GetService( anInterface , aService )
653         if SuperVision.Swig :
654             aService = Service_Swig( aService )
655         aNode = self.G.FNode( aComponent , anInterface , aService )
656         if aNode != None :
657             myNode = FNode( aNode , self.G.Verbose )
658             return myNode
659         ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
660         if self.G.Verbose :
661             print ErrMsg
662         return aNode
663     def INode( self , FuncName , aPythonFunction ):
664         aNode = self.G.INode( FuncName , aPythonFunction )
665         if aNode != None :
666             myNode = INode( aNode , self.G.Verbose )
667             return myNode
668         ErrMsg = "Failed to create a Node"
669         if self.G.Verbose :
670             print ErrMsg
671             return aNode
672     def GNode( self , FuncName , aPythonFunction , anINode ):
673         aNode = self.G.GNode( FuncName , aPythonFunction , anINode )
674         if aNode != None :
675             myNode = GNode( aNode , self.G.Verbose )
676             return myNode
677         ErrMsg = "Failed to create a Node"
678         if self.G.Verbose :
679             print ErrMsg
680             return aNode
681     def LNode( self , InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction ):
682         aNode,anEndOfLoop = self.G.LNode( InitName , InitFunction , MoreName , MoreFunction , NextName , NextFunction )
683         if aNode != None :
684             myNode = LNode( aNode , self.G.Verbose )
685             myEndOfLoop = INode( anEndOfLoop , self.G.Verbose )
686             return myNode,myEndOfLoop
687         ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
688         if self.G.Verbose :
689             print ErrMsg
690         return aNode
691     def SNode( self , FuncName , aPythonFunction ):
692         aNode,anEndOfSwitch = self.G.SNode( FuncName , aPythonFunction )
693         if aNode != None :
694             myNode = SNode( aNode , self.G.Verbose )
695             myEndOfSwitch = INode( anEndOfSwitch , self.G.Verbose )
696             return myNode,myEndOfSwitch
697         ErrMsg = "Failed to create a Node"
698         if self.G.Verbose :
699             print ErrMsg
700         return aNode
701 #    def LoopNode( self , aComponent , anInterface , aService , aNodeName ):
702 #        NodeComponent = modulecatalog.GetComponent( aComponent )
703 #        aService = NodeComponent.GetService( anInterface , aService )
704 #        aNode,anEndNode = self.G.LoopNode( aComponent , anInterface , aService , aNodeName )
705 #        myNode = aNode
706 #        myEndNode = anEndNode
707 #        if aNode != None :
708 #            myNode = Node( aNode , self.G.Verbose )
709 #        if anEndNode != None :
710 #            myEndNode = Node( anEndNode , self.G.Verbose )
711 #        if ( aNode != None ) & ( anEndNode != None ) :
712 #            return myNode,myEndNode
713 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
714 #        if self.G.Verbose :
715 #            print ErrMsg
716 #        return aNode,anEndNode
717 #    def SwitchNode( self , aComponent , anInterface , aService , aNodeName ):
718 #        NodeComponent = modulecatalog.GetComponent( aComponent )
719 #        aService = NodeComponent.GetService( anInterface , aService )
720 #        aNode,anEndNode = self.G.SwitchNode( aComponent , anInterface , aService , aNodeName )
721 #        myNode = aNode
722 #        myEndNode = anEndNode
723 #        if aNode != None :
724 #            myNode = Node( aNode , self.G.Verbose )
725 #        if anEndNode != None :
726 #            myEndNode = Node( anEndNode , self.G.Verbose )
727 #        if ( aNode != None ) & ( anEndNode != None ) :
728 #            return myNode,myEndNode
729 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
730 #        if self.G.Verbose :
731 #            print ErrMsg
732 #        return aNode,anEndNode
733 #    def LNode( self , aNodeName ):
734 #        aNode = self.G.LNode( aNodeName )
735 #        if aNode != None :
736 #            myNode = Node( aNode , self.G.Verbose )
737 #            return myNode
738 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
739 #        if self.G.Verbose :
740 #            print ErrMsg
741 #        return aNode
742 #    def LService( self , aComponent , anInterface , aService ):
743 #        NodeComponent = modulecatalog.GetComponent( aComponent )
744 #        aService = NodeComponent.GetService( anInterface , aService )
745 #        aNode = self.G.LService( aComponent , anInterface , aService )
746 #        if aNode != None :
747 #            myNode = Node( aNode , self.G.Verbose )
748 #            return myNode
749 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
750 #        if self.G.Verbose :
751 #            print ErrMsg
752 #        return aNode
753 #    def CNode( self , aNodeName ):
754 #        aNode = self.G.CNode( aNodeName )
755 #        if aNode != None :
756 #            myNode = Node( aNode , self.G.Verbose )
757 #            return myNode
758 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
759 #        if self.G.Verbose :
760 #            print ErrMsg
761 #        return aNode
762 #    def CService( self , aComponent , anInterface , aService ):
763 #        NodeComponent = modulecatalog.GetComponent( aComponent )
764 #        aService = NodeComponent.GetService( anInterface , aService )
765 #        aNode = self.G.CService( aComponent , anInterface , aService )
766 #        if aNode != None :
767 #            myNode = Node( aNode , self.G.Verbose )
768 #            return myNode
769 #        ErrMsg = "Failed to create a Node with Service " + aService.ServiceName
770 #        if self.G.Verbose :
771 #            print ErrMsg
772 #        return aNode
773     def PrintService( self , aComponent , anInterface , aService ):
774         NodeComponent = modulecatalog.GetComponent( aComponent )
775         aService = NodeComponent.GetService( anInterface , aService )
776         print "ServiceName ",aService.ServiceName," :"
777         lenin = len( aService.ServiceinParameter )
778         print "   ",lenin," input argument(s) :"
779         i = 0
780         while i < lenin :
781             print "      ",i,". ",aService.ServiceinParameter[ i ].Parametername," ",aService.ServiceinParameter[ i ].Parametertype
782             i = i + 1
783         lenout = len( aService.ServiceoutParameter )
784         print "   ",lenout," output argument(s) :"
785         i = 0
786         while i < lenout :
787             print "      ",i,". ",aService.ServiceoutParameter[ i ].Parametername," ",aService.ServiceoutParameter[ i ].Parametertype
788             i = i + 1
789     def Link( self , aFromNodePort , aToNodePort ):
790         aLink = self.G.Link( aFromNodePort.P , aToNodePort.P )
791         if aLink != None :
792             myLink = Link( aLink , self.G.Verbose )
793             return myLink
794         ErrMsg = "Failed to create a Link from " + aFromNodePort.Node().Name() + "(" + aFromNodePort.Name() + ") to " + aToNodePort.Node().Name() + "(" + aToNodePort.Name() + ")"
795         if self.G.Verbose :
796             print ErrMsg
797         return aLink
798     def Import( self , anXmlFileName ):
799         return self.G.Import( anXmlFileName )
800     def Export( self , anXmlFileName ):
801         return self.G.Export( anXmlFileName )
802     def IsReadOnly( self ) :
803         return self.G.IsReadOnly()
804     def ComponentRef( self , aFactoryServer , aComponent ) :
805         return self.G.ComponentRef( aFactoryServer , aComponent )
806     def IsValid( self ):
807         return self.G.IsValid()
808     def IsExecutable( self ):
809         return self.G.IsExecutable()
810     def IsEditing( self ):
811         return self.G.IsEditing()
812     def IsExecuting( self ):
813         return self.G.IsExecuting()
814     def LevelMax( self ):
815         return self.G.LevelMax()
816     def ThreadsMax( self ):
817         return self.G.ThreadsMax()
818     def GraphsNumber( self ):
819         return self.G.GraphsNumber()
820     def LevelNodes( self , aLevel ):
821         nodes = self.G.LevelNodes( aLevel )
822         return self.nodesTuple( nodes )
823     def Run( self , *args ):
824         self.S = -1
825         aService = self.Service()
826         nargs = len( args )
827         i = 0
828         while nargs > 0 :
829             print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
830             self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
831             i = i + 1
832             nargs = nargs - 1
833         return self.G.Run()
834     def Start( self , *args ):
835         self.S = -1
836         aService = self.Service()
837         nargs = len( args )
838         i = 0
839         while nargs > 0 :
840             print aService.ServiceinParameter[ i ].Parametername," = ",args[i]
841             self.Input( aService.ServiceinParameter[ i ].Parametername , args[i] )
842             i = i + 1
843             nargs = nargs - 1
844         return self.G.Start()
845     def Event( self ):
846         sts,aNode,anEvent,aState = self.G.Event()
847         self.S = sts
848         return sts,aNode,anEvent,aState
849     def EventW( self ):
850         sts,aNode,anEvent,aState = self.G.EventW()
851         self.S = sts
852         return sts,aNode,anEvent,aState
853     def NextW( self ):
854         if self.S != 0 :
855             sts,aNode,anEvent,aState = self.G.EventW()
856             self.S = sts
857             print sts,aNode.Thread(),aNode.SubGraph(),aNode.Name(),anEvent,aState
858         return sts
859     def Threads( self ):
860         return self.G.Threads()
861     def SuspendedThreads( self ):
862         return self.G.SuspendedThreads()
863     def LastLevelDone( self ):
864         return self.G.LastLevelDone()
865     def Verbose( self , verbose ):
866         preverbose = self.G.Verbose
867         self.G.Verbose = verbose
868         return preverbose
869     def Nodes( self ):
870         nodes = self.G.Nodes()
871         return self.nodesTuple( nodes )
872     def nodesTuple( self , nodes ) :
873         n = len( nodes.CNodes )
874         i = 0
875         j = 0
876         pynodes = []
877         while i < n :
878             pynodes.append( CNode( nodes.CNodes[i] , self.G.Verbose ) )
879             i = i + 1
880             j = j + 1
881         n = len( nodes.FNodes )
882         i = 0
883         while i < n :
884             pynodes.append( FNode( nodes.FNodes[i] , self.G.Verbose ) )
885             i = i + 1
886             j = j + 1
887         n = len( nodes.INodes )
888         i = 0
889         while i < n :
890             pynodes.append( INode( nodes.INodes[i] , self.G.Verbose ) )
891             i = i + 1
892             j = j + 1
893         n = len( nodes.GNodes )
894         i = 0
895         while i < n :
896             pynodes.append( GNode( nodes.GNodes[i] , self.G.Verbose ) )
897             i = i + 1
898             j = j + 1
899         n = len( nodes.LNodes )
900         i = 0
901         while i < n :
902             pynodes.append( LNode( nodes.LNodes[i] , self.G.Verbose ) )
903             i = i + 1
904             j = j + 1
905         n = len( nodes.ELNodes )
906         i = 0
907         while i < n :
908             pynodes.append( GNode( nodes.ELNodes[i] , self.G.Verbose ) )
909             i = i + 1
910             j = j + 1
911         n = len( nodes.SNodes )
912         i = 0
913         while i < n :
914             pynodes.append( SNode( nodes.SNodes[i] , self.G.Verbose ) )
915             i = i + 1
916             j = j + 1
917         n = len( nodes.ESNodes )
918         i = 0
919         while i < n :
920             pynodes.append( GNode( nodes.ESNodes[i] , self.G.Verbose ) )
921             i = i + 1
922             j = j + 1
923         return pynodes
924     def ListNodes( self , *args ):
925         nodes = self.Nodes()
926         listofnodes = ""
927         if len( nodes ) :
928             listofnodes = nodes[ 0 ].Name()
929             i = 1
930             while i < len( nodes ) :
931                 listofnodes = listofnodes + ',' + nodes[ i ].Name()
932                 i = i + 1
933         print listofnodes
934         if len( args ) == 0 :
935             aName = self.N.Name()
936         else :
937             aName = args[ 0 ]
938         if len( nodes ) == 1 :
939             listofnodes = "[" + listofnodes + "] = " + aName + ".Nodes()"
940         else :
941             listofnodes = listofnodes + " = " + aName + ".Nodes()"
942         return listofnodes
943     def PrintNodes( self ):
944         nodes = self.Nodes()
945         n = len( nodes )
946         i = 0
947         while i < n :
948             print ' '
949             nodes[i].Print()
950             i = i + 1
951     def PrintThreads( self ):
952         nodes = self.Nodes()
953         i = 0
954         while i < len( nodes ) :
955             print nodes[i].Name(),nodes[i].Thread(),nodes[i].State(),nodes[i].Control(),nodes[i].AutoState()
956             i = i + 1
957     def GLinks( self ):
958         links = self.G.GLinks()
959         i = 0
960         while i < len( links ) :
961             links[ i ] = Link( links[i] , self.G.Verbose )
962             i = i + 1
963         return links
964     def ListLinks( self , *args ):
965         links = self.G.GLinks()
966         if len( links ) :
967             listoflinks = links[ 0 ].InPort().Node().Name()
968             listoflinks = listoflinks + links[ 0 ].InPort().Name()
969             i = 1
970             while i < len( links ) :
971                 listoflinks = listoflinks + ',' + links[ i ].InPort().Node().Name()
972                 listoflinks = listoflinks + links[ i ].InPort().Name()
973                 i = i + 1
974         print listoflinks
975         if len( args ) == 0 :
976             aName = self.N.Name()
977         else :
978             aName = args[ 0 ]
979         if len( links ) == 1 :
980             listoflinks = "[" + listoflinks + "] = " + aName + ".GLinks()"
981         else :
982             listoflinks = listoflinks + " = " + aName + ".GLinks()"
983         return listoflinks
984     def PrintLinks( self ):
985         links = self.G.GLinks()
986         i = 0
987         while i < len( links ) :
988             Link( links[ i ] , self.G.Verbose ).Print()
989             i = i + 1
990     def Graphs( self ):
991         graphs = self.G.Graphs()
992         outgraphs = graphs
993         i = 0
994         while i < len( graphs ) :
995             outgraphs[ i ] = Graph( graphs[i].Name() , self.G.Verbose )
996             outgraphs[ i ].Merge( graphs[i] )
997             i = i + 1
998         return outgraphs
999     def Copy( self ):
1000         aCopy = self.G.Copy()
1001         if aCopy != None:
1002             myCopy = Graph( aCopy )
1003             return myCopy
1004         ErrMsg = "Failed to get a Copy of " + self.G.Name()
1005         if self.G.Verbose :
1006             print ErrMsg
1007         return aCopy
1008     def Merge( self , aGraph ):
1009         return self.G.Merge( aGraph.G )
1010     def Destroy( self ):
1011         self.N.destroy()
1012
1013 ##########################################################
1014 class GraphE(Graph):
1015 ##########################################################
1016     def __init__( self , aName ):
1017         graph = SuperVision.GraphE( aName )
1018         self.G = graph
1019         self.G.Verbose = 1
1020         self.N = graph
1021         self.N.Verbose = 1
1022
1023 ##########################################################
1024 class Value:
1025 ##########################################################
1026     def __init__( self , aValue , Verbose ):
1027         self.V = aValue
1028         self.V.Verbose = Verbose
1029     def ToString( self ):
1030         return self.V.ToString()
1031     def ToAny( self ):
1032         return self.V.ToAny()
1033     def Destroy( self ):
1034         self.N.destroy()
1035
1036 ##########################################################
1037 class Port:
1038 ##########################################################
1039     def __init__( self , aPort , Verbose ):
1040         self.P = aPort
1041         self.P.Verbose = Verbose
1042     def Input( self , *args ):
1043         types, realargs = getRealArgs(self.P,args)
1044         fn = bs_AddInput_valuedict[types]
1045         anInput = apply( fn, realargs)
1046         return anInput
1047     def Node( self ):
1048         aNode = self.P.Node()
1049         if aNode != None :
1050             if aNode.IsComputing() :
1051                 myNode = CNode( aNode , self.P.Verbose )
1052             elif aNode.IsFactory() :
1053                 myNode = FNode( aNode , self.P.Verbose )
1054             elif aNode.IsInLine() :
1055                 myNode = INode( aNode , self.P.Verbose )
1056             elif aNode.IsGOTO() :
1057                 myNode = GNode( aNode , self.P.Verbose )
1058             elif aNode.IsLoop() :
1059                 myNode = LNode( aNode , self.P.Verbose )
1060             elif aNode.IsEndLoop() :
1061                 myNode = ELNode( aNode , self.P.Verbose )
1062             elif aNode.IsSwitch() :
1063                 myNode = SNode( aNode , self.P.Verbose )
1064             elif aNode.IsEndSwitch() :
1065                 myNode = ESNode( aNode , self.P.Verbose )
1066             else :
1067                 myNode = None
1068             return myNode
1069         return aNode
1070     def Name( self ):
1071         return self.P.Name()
1072     def Type( self ):
1073         return self.P.Type()
1074     def Link( self ):
1075         aLink = self.P.Link()
1076         if aLink != None :
1077             myLink = Link( aLink , self.P.Verbose )
1078             return myLink
1079         ErrMsg = "Failed to get a Link to " + self.P.Node().Name() + "(" + self.P.Name() + ")"
1080         if self.P.Verbose :
1081             print ErrMsg
1082         return aLink
1083     def Links( self ):
1084         links = self.P.Links()
1085         i = 0
1086         while i < len( links ) :
1087             links[ i ] = Link( links[i] , self.P.Verbose )
1088             i = i + 1
1089         return links
1090     def PrintLinks( self ):
1091         links = self.P.Links()
1092         i = 0
1093         while i < len( links ) :
1094             Link( links[ i ] , self.P.Verbose ).Print()
1095             i = i + 1
1096     def IsInput( self ):
1097         return self.P.IsInput()
1098     def IsLinked( self ):
1099         return self.P.IsLinked()
1100     def HasInput( self ):
1101         return self.P.HasInput()
1102     def Kind( self ) :
1103         return self.P.Kind()
1104     def IsParam( self ):
1105         return self.P.IsParam()
1106     def IsGate( self ):
1107         return self.P.IsGate()
1108     def IsLoop( self ):
1109         return self.P.IsLoop()
1110     def IsInLine( self ):
1111         return self.P.IsInLine()
1112     def IsSwitch( self ):
1113         return self.P.IsSwitch()
1114     def IsEndSwitch( self ):
1115         return self.P.IsEndSwitch()
1116 #    def IsBus( self ):
1117 #        return self.P.IsBus()
1118     def Done( self ):
1119         return self.P.Done()
1120     def State( self ):
1121         return self.P.State()
1122     def ToString( self ):
1123         return self.P.ToString()
1124     def ToAny( self ):
1125         return self.P.ToAny()
1126     def Print( self ):
1127         if self.P.IsInput() :
1128             if self.P.IsLinked() :
1129                 print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString(),' from ',self.Link().OutPort().Print()
1130             else :
1131                 print "In",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
1132         else :
1133             print "Out",self.P.Node().Name(),'(',self.P.Name(),self.P.Kind(),self.P.Type(),') = ',self.P.ToString()
1134     def Destroy( self ):
1135         self.P.destroy()
1136
1137 ##########################################################
1138 class Link:
1139 ##########################################################
1140     def __init__( self , aLink , Verbose ):
1141         self.L = aLink
1142         self.L.Verbose = Verbose
1143     def OutPort( self ):
1144         aPort = self.L.OutPort()
1145         if aPort != None :
1146             myPort = Port( aPort , self.L.Verbose )
1147             return myPort
1148         if self.L.Verbose :
1149             print "Error while getting the Port : "
1150         return None
1151     def InPort( self ):
1152         aPort = self.L.InPort()
1153         if aPort != None :
1154             myPort = Port( aPort , self.L.Verbose )
1155             return myPort
1156         if self.L.Verbose :
1157             print "Error while getting the Port : "
1158         return None
1159     def Print( self ):
1160         anOutPort = self.L.OutPort()
1161         anInPort = self.L.InPort()
1162         print anOutPort.Node().Name(),'(',anOutPort.Name(),' ',anOutPort.Kind(),') =',anOutPort.ToString(),' --> ',anInPort.Node().Name(),'(',anInPort.Name(),')',' ',anInPort.Kind()
1163     def CoordsSize( self ):
1164         return self.L.CoordsSize()
1165     def AddCoord( self , index , X , Y ):
1166         return self.L.AddCoord( index , X , Y )
1167     def ChangeCoord( self , index , X , Y ):
1168         return self.L.ChangeCoord( index , X , Y )
1169     def RemoveCoord( self , index ):
1170         return self.L.RemoveCoord( index )
1171     def Coords( self , index ):
1172         return self.L.Coords( index )
1173     def destroy( self ):
1174         self.L.destroy()
1175
1176