88 */
99package org.eclipse.set.feature.table.pt1
1010
11+ import org.eclipse.set.model.planpro.Ansteuerung_Element.Aussenelementansteuerung
12+ import org.eclipse.set.model.planpro.Ansteuerung_Element.ESTW_Zentraleinheit
13+ import org.eclipse.set.model.planpro.Ansteuerung_Element.Technik_Standort
14+ import org.eclipse.set.model.planpro.Balisentechnik_ETCS.ETCS_Signal
15+ import org.eclipse.set.model.planpro.Balisentechnik_ETCS.ETCS_W_Kr
1116import org.eclipse.set.model.planpro.BasisTypen.ID_Bearbeitungsvermerk_TypeClass
1217import org.eclipse.set.model.planpro.Basisobjekte.Basis_Objekt
1318import org.eclipse.set.model.planpro.Basisobjekte.Bearbeitungsvermerk
19+ import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt
20+ import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt_Strecke_AttributeGroup
21+ import org.eclipse.set.model.planpro.Bedienung.Bedien_Einrichtung_Oertlich
22+ import org.eclipse.set.model.planpro.Bedienung.Bedien_Standort
23+ import org.eclipse.set.model.planpro.Schluesselabhaengigkeiten.Schloss
1424import org.eclipse.set.model.planpro.Signale.Signal
1525import org.eclipse.set.model.planpro.Signale.Signal_Befestigung
1626import org.eclipse.set.model.planpro.Signale.Signal_Rahmen
@@ -19,10 +29,21 @@ import org.eclipse.set.model.tablemodel.SimpleFootnoteContainer
1929import org.eclipse.set.model.tablemodel.TableRow
2030import org.eclipse.set.model.tablemodel.TablemodelFactory
2131
32+ import static extension org.eclipse.set.ppmodel.extensions.AussenelementansteuerungExtensions.*
33+ import static extension org.eclipse.set.ppmodel.extensions.BedienEinrichtungOertlichExtensions.*
34+ import static extension org.eclipse.set.ppmodel.extensions.BedienStandortExtensions.*
35+ import static extension org.eclipse.set.ppmodel.extensions.ESTW_ZentraleinheitExtensions.*
36+ import static extension org.eclipse.set.ppmodel.extensions.ETCSWKrExtensions.*
37+ import static extension org.eclipse.set.ppmodel.extensions.SchlossExtensions.*
38+ import static extension org.eclipse.set.ppmodel.extensions.SchlosskombinationExtensions.*
39+ import static extension org.eclipse.set.ppmodel.extensions.SchluesselsperreExtensions.*
2240import static extension org.eclipse.set.ppmodel.extensions.SignalBefestigungExtensions.*
2341import static extension org.eclipse.set.ppmodel.extensions.SignalExtensions.*
2442import static extension org.eclipse.set.ppmodel.extensions.SignalRahmenExtensions.*
43+ import static extension org.eclipse.set.ppmodel.extensions.TechnikStandortExtensions.*
44+ import static extension org.eclipse.set.ppmodel.extensions.WKrAnlageExtensions.*
2545import static extension org.eclipse.set.ppmodel.extensions.WKrGspElementExtensions.*
46+ import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensions.*
2647
2748/**
2849 * Transform basis objects to footnotes.
@@ -46,6 +67,7 @@ class FootnoteTransformation {
4667 return object. IDBearbeitungsvermerk
4768 }
4869
70+ // Determine Footnotes for Ssks Table
4971 private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
5072 Signal signal ) {
5173 val signalFootNotes = signal? . IDBearbeitungsvermerk
@@ -58,10 +80,14 @@ class FootnoteTransformation {
5880 objectFootnotes
5981 ]
6082
83+ // Strecke & Km footnotes
84+ val posFootNotes = signal? . punktObjektStrecke. flatMap[objectFootnotes]
85+
6186 return #[signalFootNotes, signalRahmenFootNotes,
62- signalBefestigungFootNotes]. filterNull. flatten
87+ signalBefestigungFootNotes, posFootNotes ]. filterNull. flatten
6388 }
6489
90+ // Determine Footnotes for Ssks Table
6591 private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
6692 Signal_Befestigung signalBefestigung ) {
6793 if (signalBefestigung == = null ) {
@@ -72,6 +98,17 @@ class FootnoteTransformation {
7298 ]. flatMap[IDBearbeitungsvermerk ]
7399 }
74100
101+ // Determine Footnotes for Ssks Table
102+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
103+ Signal_Rahmen signalRahmen ) {
104+ val rahmenFootnotes = signalRahmen. IDBearbeitungsvermerk . filterNull
105+ val signalBegriffFootntoes = signalRahmen. signalbegriffe. flatMap [
106+ IDBearbeitungsvermerk
107+ ]. filterNull
108+ return #[rahmenFootnotes, signalBegriffFootntoes]. flatten
109+ }
110+
111+ // Determine Footnotes for Sskw Table
75112 private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
76113 W_Kr_Gsp_Element gspElement ) {
77114 val gspElementFootNotes = gspElement? . IDBearbeitungsvermerk
@@ -83,13 +120,131 @@ class FootnoteTransformation {
83120 gspAnlageFootNotes]. filterNull. flatten
84121 }
85122
123+ // Determine Footnotes for Ssbb & Ssit Table
86124 private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
87- Signal_Rahmen signalRahmen ) {
88- val rahmenFootnotes = signalRahmen. IDBearbeitungsvermerk . filterNull
89- val signalBegriffFootntoes = signalRahmen. signalbegriffe. flatMap [
90- IDBearbeitungsvermerk
91- ]. filterNull
92- return #[rahmenFootnotes, signalBegriffFootntoes]. flatten
125+ Bedien_Einrichtung_Oertlich einrichtung ) {
126+ val directFootnotes = einrichtung. IDBearbeitungsvermerk
127+ val routeKmFootnotes = einrichtung. unterbringung? . punktObjektStrecke? .
128+ flatMap [
129+ objectFootnotes
130+ ] ?: #[]
131+ return #[directFootnotes, routeKmFootnotes]. flatten
132+ }
133+
134+ // Determine Footnotes for Sska Table
135+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
136+ Aussenelementansteuerung element ) {
137+ val directFootnotes = element. IDBearbeitungsvermerk
138+ val routeKmFootnotes = element. unterbringung? . punktObjektStrecke? .
139+ flatMap [
140+ objectFootnotes
141+ ] ?: #[]
142+ return #[directFootnotes, routeKmFootnotes]. flatten
143+ }
144+
145+ // Determine Footnotes for Sska Table
146+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
147+ ESTW_Zentraleinheit element ) {
148+ val directFootnotes = element. IDBearbeitungsvermerk
149+ val routeKmFootnotes = element. unterbringung? . punktObjektStrecke? .
150+ flatMap [
151+ objectFootnotes
152+ ] ?: #[]
153+ return #[directFootnotes, routeKmFootnotes]. flatten
154+ }
155+
156+ // Determine Footnotes for Ssko Table
157+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
158+ Schloss schloss
159+ ) {
160+ val result = newArrayList()
161+ result. addAll(schloss. IDBearbeitungsvermerk )
162+ if (schloss. schlossSk !== null ) {
163+ result. addAll(
164+ schloss. schlossKombination? . unterbringung? . punktObjektStrecke? .
165+ flatMap[objectFootnotes] ?: [])
166+ }
167+
168+ if (schloss. schlossSsp !== null ) {
169+ result. addAll(
170+ schloss. schluesselsperre? . unterbringung? . punktObjektStrecke? .
171+ flatMap[objectFootnotes] ?: [])
172+ }
173+ return result
174+ }
175+
176+ // Determine Footnotes for Sskt table
177+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
178+ Technik_Standort element ) {
179+ val directFootnotes = element. IDBearbeitungsvermerk
180+ val routeKmFootnotes = element. unterbringung? . punktObjektStrecke? .
181+ flatMap [
182+ objectFootnotes
183+ ] ?: #[]
184+ return #[directFootnotes, routeKmFootnotes]. flatten
185+ }
186+
187+ // Determine Footnotes for Sskt table
188+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
189+ Bedien_Standort element ) {
190+ val directFootnotes = element. IDBearbeitungsvermerk
191+ val routeKmFootnotes = element. unterbringung? . punktObjektStrecke? .
192+ flatMap [
193+ objectFootnotes
194+ ] ?: #[]
195+ return #[directFootnotes, routeKmFootnotes]. flatten
196+ }
197+
198+ // Determine Footnotes for Sszs table
199+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
200+ ETCS_Signal element ) {
201+ val directFootnotes = element. IDBearbeitungsvermerk
202+ val routeKmFootnotes = element? . IDSignal ? . value? . punktObjektStrecke? .
203+ flatMap [
204+ objectFootnotes
205+ ] ?: #[]
206+ return #[directFootnotes, routeKmFootnotes]. flatten
207+ }
208+
209+ // Determine Footnotes for Sszw table
210+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
211+ ETCS_W_Kr element ) {
212+ val directionFootnotes = element. IDBearbeitungsvermerk
213+ val routeKmFootnotes = switch (element. IDWKrAnlage ? . value? . WKrAnlageArt ) {
214+ case ENUMW_KR_ART_EW ,
215+ case ENUMW_KR_ART_IBW ,
216+ case ENUMW_KR_ART_ABW ,
217+ case ENUMW_KR_ART_DW ,
218+ case ENUMW_KR_ART_KLOTHOIDENWEICHE ,
219+ case ENUMW_KR_ART_KORBBOGENWEICHE : {
220+ val gspKomponent = element. WKrGspKomponents . firstOrNull
221+ return gspKomponent. objectFootnotes ?: #[]
222+ }
223+ case ENUMW_KR_ART_DKW ,
224+ case ENUMW_KR_ART_EKW ,
225+ case ENUMW_KR_ART_FLACHKREUZUNG ,
226+ case ENUMW_KR_ART_KR : {
227+ // TODO: not clear how to get Km footnotes for this
228+ return #[]
229+ }
230+ default:
231+ #[]
232+ }
233+ return #[directionFootnotes, routeKmFootnotes]. flatten
234+ }
235+
236+ // Determine Footnotes for Sskg, Ssza table
237+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
238+ Punkt_Objekt po ) {
239+ val directFootnotes = po. IDBearbeitungsvermerk
240+ val routeKmFootnotes = po? . punktObjektStrecke? .
241+ flatMap[objectFootnotes] ?: #[]
242+ return #[directFootnotes, routeKmFootnotes]. flatten
243+ }
244+
245+ private def dispatch Iterable<ID_Bearbeitungsvermerk_TypeClass > getObjectFootnotes (
246+ Punkt_Objekt_Strecke_AttributeGroup pos ) {
247+ return pos? . streckeKm? . IDBearbeitungsvermerk ?: #[]
93248 }
94249
95250 private def void addFootnote (Bearbeitungsvermerk comment ) {
0 commit comments