1
1
"""
2
2
Example template classes
3
3
"""
4
- from typing import Callable
4
+ from typing import Any , Callable
5
5
import autosar .xml .template as ar_template
6
6
import autosar .xml .element as ar_element
7
7
import autosar .xml .enumeration as ar_enum
@@ -294,7 +294,7 @@ def create(self,
294
294
295
295
class GenericPortInterfaceTemplate (ar_template .ElementTemplate ):
296
296
"""
297
- Generic element template
297
+ Generic port interface element template
298
298
"""
299
299
300
300
def __init__ (self ,
@@ -315,3 +315,113 @@ def create(self,
315
315
"""
316
316
elem = self .create_func (element_ref , workspace , dependencies , ** kwargs )
317
317
return elem
318
+
319
+
320
+ class SenderReceiverInterfaceTemplate (ar_template .ElementTemplate ):
321
+ """
322
+ Sender receiver port interface template restricted to a single data element
323
+ It is assumed that the element name ends with "_I"
324
+ """
325
+
326
+ def __init__ (self ,
327
+ element_name : str ,
328
+ namespace_name : str ,
329
+ data_element_template : ar_template .ElementTemplate ,
330
+ data_element_name : str | None = None ) -> None :
331
+ super ().__init__ (element_name , namespace_name , ar_enum .PackageRole .PORT_INTERFACE , [data_element_template ])
332
+ self .data_element_template = data_element_template
333
+ self .data_element_name = data_element_name
334
+
335
+ def create (self ,
336
+ element_ref : str ,
337
+ workspace : ar_workspace .Workspace ,
338
+ dependencies : dict [str , ar_element .ARElement ] | None ,
339
+ ** kwargs ) -> ar_element .SenderReceiverInterface :
340
+ """
341
+ Create method
342
+ """
343
+ elem_type = dependencies [self .data_element_template .ref (workspace )]
344
+ port_interface = ar_element .SenderReceiverInterface (self .element_name )
345
+ elem_name = self .data_element_name
346
+ if elem_name is None :
347
+ if self .element_name .endswith ("_I" ):
348
+ elem_name = self .element_name [:- 2 ]
349
+ else :
350
+ elem_name = self .element_name
351
+ port_interface .create_data_element (elem_name , type_ref = elem_type .ref ())
352
+ return port_interface
353
+
354
+
355
+ class GenericComponentTypeTemplate (ar_template .ElementTemplate ):
356
+ """
357
+ Generic component type element template
358
+ """
359
+
360
+ def __init__ (self ,
361
+ element_name : str ,
362
+ namespace_name : str ,
363
+ create_func : CreateFuncType ,
364
+ depends : list [TemplateBase ] | None = None ) -> None :
365
+ super ().__init__ (element_name , namespace_name , ar_enum .PackageRole .COMPONENT_TYPE , depends )
366
+ self .create_func = create_func
367
+
368
+ def create (self ,
369
+ element_ref : str ,
370
+ workspace : ar_workspace .Workspace ,
371
+ dependencies : dict [str , ar_element .ARElement ] | None ,
372
+ ** kwargs ) -> ar_element .PortInterface :
373
+ """
374
+ Create method
375
+ """
376
+ elem = self .create_func (element_ref , workspace , dependencies , ** kwargs )
377
+ return elem
378
+
379
+
380
+ class SwcImplementationTemplate (ar_template .ElementTemplate ):
381
+ """
382
+ SwcImplementation template
383
+ """
384
+
385
+ def __init__ (self ,
386
+ element_name : str ,
387
+ namespace_name : str ,
388
+ component_type : ar_template .ElementTemplate ) -> None :
389
+ super ().__init__ (element_name , namespace_name , ar_enum .PackageRole .COMPONENT_TYPE , [component_type ])
390
+ self .component_type = component_type
391
+
392
+ def create (self ,
393
+ _0 : str ,
394
+ workspace : ar_workspace .Workspace ,
395
+ dependencies : dict [str , ar_element .ARElement ] | None ,
396
+ ** kwargs ) -> ar_element .SwBaseType :
397
+ """
398
+ Factory method for creating a new SwcImplementation
399
+ """
400
+ swc_type = dependencies [self .component_type .ref (workspace )]
401
+ elem = ar_element .SwcImplementation (self .element_name ,
402
+ behavior_ref = swc_type .internal_behavior .ref ())
403
+
404
+ return elem
405
+
406
+
407
+ class ConstantTemplate (ar_template .ElementTemplate ):
408
+ """
409
+ Constant template
410
+ """
411
+
412
+ def __init__ (self ,
413
+ element_name : str ,
414
+ namespace_name : str ,
415
+ value : Any ) -> None :
416
+ super ().__init__ (element_name , namespace_name , ar_enum .PackageRole .CONSTANT )
417
+ self .value = value
418
+
419
+ def create (self ,
420
+ _0 : str ,
421
+ _1 : ar_workspace .Workspace ,
422
+ _2 : dict [str , ar_element .ARElement ] | None ,
423
+ ** _3 ) -> ar_element .SwBaseType :
424
+ """
425
+ Factory method for creating a new SwcImplementation
426
+ """
427
+ return ar_element .ConstantSpecification .make_constant (self .element_name , self .value )
0 commit comments