Skip to content

Commit 87dff31

Browse files
Footnotes: determine route km footnotes (#2161)
* Footnotes: determine route km footnotes * Apply suggestions from code review Co-authored-by: Marius Heine <m.heine@geprog.com> --------- Co-authored-by: Marius Heine <m.heine@geprog.com>
1 parent 98b0d58 commit 87dff31

1 file changed

Lines changed: 162 additions & 7 deletions

File tree

java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/FootnoteTransformation.xtend

Lines changed: 162 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
*/
99
package 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
1116
import org.eclipse.set.model.planpro.BasisTypen.ID_Bearbeitungsvermerk_TypeClass
1217
import org.eclipse.set.model.planpro.Basisobjekte.Basis_Objekt
1318
import 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
1424
import org.eclipse.set.model.planpro.Signale.Signal
1525
import org.eclipse.set.model.planpro.Signale.Signal_Befestigung
1626
import org.eclipse.set.model.planpro.Signale.Signal_Rahmen
@@ -19,10 +29,21 @@ import org.eclipse.set.model.tablemodel.SimpleFootnoteContainer
1929
import org.eclipse.set.model.tablemodel.TableRow
2030
import 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.*
2240
import static extension org.eclipse.set.ppmodel.extensions.SignalBefestigungExtensions.*
2341
import static extension org.eclipse.set.ppmodel.extensions.SignalExtensions.*
2442
import 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.*
2545
import 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

Comments
 (0)