5
5
6
6
from .admindata import AdminData
7
7
from .dataobjectproperty import DataObjectProperty
8
+ from .diagcomm import DiagComm
8
9
from .element import IdentifiableElement
9
- from .exceptions import odxassert
10
+ from .exceptions import odxassert , odxrequire
10
11
from .nameditemlist import NamedItemList
11
- from .odxlink import OdxDocFragment , OdxLinkDatabase , OdxLinkId , OdxLinkRef
12
+ from .odxlink import OdxDocFragment , OdxLinkDatabase , OdxLinkId , OdxLinkRef , resolve_snref
12
13
from .snrefcontext import SnRefContext
13
14
from .specialdatagroup import SpecialDataGroup
14
15
from .tablerow import TableRow
15
16
from .utils import dataclass_fields_asdict
16
17
17
18
19
+ @dataclass
20
+ class TableDiagCommConnector :
21
+ semantic : str
22
+
23
+ diag_comm_ref : Optional [OdxLinkRef ]
24
+ diag_comm_snref : Optional [str ]
25
+
26
+ @property
27
+ def diag_comm (self ) -> DiagComm :
28
+ return self ._diag_comm
29
+
30
+ @staticmethod
31
+ def from_et (et_element : ElementTree .Element ,
32
+ doc_frags : List [OdxDocFragment ]) -> "TableDiagCommConnector" :
33
+
34
+ semantic = odxrequire (et_element .findtext ("SEMANTIC" ))
35
+ diag_comm_ref = OdxLinkRef .from_et (et_element .find ("DIAG-COMM-REF" ), doc_frags )
36
+ diag_comm_snref = None
37
+ if (dc_snref_elem := et_element .find ("DIAG-COMM-SNREF" )) is not None :
38
+ diag_comm_snref = odxrequire (dc_snref_elem .get ("SHORT-NAME" ))
39
+
40
+ return TableDiagCommConnector (
41
+ semantic = semantic , diag_comm_ref = diag_comm_ref , diag_comm_snref = diag_comm_snref )
42
+
43
+ def _build_odxlinks (self ) -> Dict [OdxLinkId , Any ]:
44
+ return {}
45
+
46
+ def _resolve_odxlinks (self , odxlinks : OdxLinkDatabase ) -> None :
47
+ if self .diag_comm_ref is not None :
48
+ self ._diag_comm = odxlinks .resolve (self .diag_comm_ref , DiagComm )
49
+
50
+ def _resolve_snrefs (self , context : SnRefContext ) -> None :
51
+ if self .diag_comm_snref is not None :
52
+ dl = odxrequire (context .diag_layer )
53
+ self ._diag_comm = resolve_snref (self .diag_comm_snref , dl .diag_comms , DiagComm )
54
+
55
+
18
56
@dataclass
19
57
class Table (IdentifiableElement ):
20
58
"""This class represents a TABLE."""
@@ -24,7 +62,7 @@ class Table(IdentifiableElement):
24
62
admin_data : Optional [AdminData ]
25
63
key_dop_ref : Optional [OdxLinkRef ]
26
64
table_rows_raw : List [Union [TableRow , OdxLinkRef ]]
27
- # TODO: table_diag_comm_connectors
65
+ table_diag_comm_connectors : List [ TableDiagCommConnector ]
28
66
sdgs : List [SpecialDataGroup ]
29
67
30
68
@staticmethod
@@ -47,6 +85,10 @@ def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) ->
47
85
elif sub_elem .tag == "TABLE-ROW-REF" :
48
86
table_rows_raw .append (OdxLinkRef .from_et (sub_elem , doc_frags ))
49
87
88
+ table_diag_comm_connectors = [
89
+ TableDiagCommConnector .from_et (dcc_elem , doc_frags ) for dcc_elem in et_element .iterfind (
90
+ "TABLE-DIAG-COMM-CONNECTORS/TABLE-DIAG-COMM-CONNECTOR" )
91
+ ]
50
92
sdgs = [
51
93
SpecialDataGroup .from_et (sdge , doc_frags ) for sdge in et_element .iterfind ("SDGS/SDG" )
52
94
]
@@ -58,6 +100,7 @@ def from_et(et_element: ElementTree.Element, doc_frags: List[OdxDocFragment]) ->
58
100
admin_data = admin_data ,
59
101
key_dop_ref = key_dop_ref ,
60
102
table_rows_raw = table_rows_raw ,
103
+ table_diag_comm_connectors = table_diag_comm_connectors ,
61
104
sdgs = sdgs ,
62
105
** kwargs )
63
106
@@ -78,6 +121,9 @@ def _build_odxlinks(self) -> Dict[OdxLinkId, Any]:
78
121
if isinstance (table_row_wrapper , TableRow ):
79
122
result .update (table_row_wrapper ._build_odxlinks ())
80
123
124
+ for dcc in self .table_diag_comm_connectors :
125
+ result .update (dcc ._build_odxlinks ())
126
+
81
127
return result
82
128
83
129
def _resolve_odxlinks (self , odxlinks : OdxLinkDatabase ) -> None :
@@ -98,7 +144,13 @@ def _resolve_odxlinks(self, odxlinks: OdxLinkDatabase) -> None:
98
144
99
145
self ._table_rows = NamedItemList (table_rows )
100
146
147
+ for dcc in self .table_diag_comm_connectors :
148
+ dcc ._resolve_odxlinks (odxlinks )
149
+
101
150
def _resolve_snrefs (self , context : SnRefContext ) -> None :
102
151
for table_row_wrapper in self .table_rows_raw :
103
152
if isinstance (table_row_wrapper , TableRow ):
104
153
table_row_wrapper ._resolve_snrefs (context )
154
+
155
+ for dcc in self .table_diag_comm_connectors :
156
+ dcc ._resolve_snrefs (context )
0 commit comments