From c284fdddb82b0e99a6d0d9d5cbed65b9cd71d782 Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Fri, 3 Jul 2026 15:17:47 +0200 Subject: [PATCH 1/2] Sskp: fix wrong value by column K and L --- .../table/pt1/sskp/SskpTransformator.xtend | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend index 214c8f2132..d1e059e346 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend @@ -73,8 +73,8 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { TMFactory factory) { for (PZB_Element pzb : container.PZBElement.filter [ - PZBElementGUE?.IDPZBElementMitnutzung?.value === null - ]) { + PZBElementGUE?.IDPZBElementMitnutzung?.value === null + ]) { if (Thread.currentThread.interrupted) { return null @@ -103,11 +103,11 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { private def fillRowGroupContent(TableRow instance, PZB_Element pzb, Fstr_DWeg dweg) { - + val pzbGUEs = (pzb.container.PZBElement.map[PZBElementGUE].filterNull. filter[IDPZBElementMitnutzung?.value === pzb] + #[pzb.PZBElementGUE]).filterNull - + // A: Sskp.Bezug.BezugsElement fillIterable( instance, @@ -122,7 +122,9 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { instance, cols.getColumn(Wirkfrequenz), pzb, - ['''«PZBArt?.translate»«IF !pzbGUEs.nullOrEmpty» «GUE_ADDITION»«ENDIF»'''] + [ + '''«PZBArt?.translate»«IF !pzbGUEs.nullOrEmpty» «GUE_ADDITION»«ENDIF»''' + ] ) val isPZB2000 = pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_2000_HZ || @@ -385,18 +387,22 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { INAGefahrstelle ].flatten - val isGefahrstelle = inaGefahrstelles.exists [ + val gefahrstelle = inaGefahrstelles.filter [ prioritaetGefahrstelle?.wert.intValue === 1 - ] && !inaGefahrstelles.map[IDMarkanterPunkt].empty + ].toSet val scaleValue = pzb.distanceScale // K: Sskp.Ina.Gef_Stelle fillIterableWithConditional( instance, cols.getColumn(Gef_Stelle), pzb, - [isGefahrstelle], [ - inaGefahrstelles.map [ + !gefahrstelle.nullOrEmpty && !inaGefahrstelles.map [ + IDMarkanterPunkt + ].empty + ], + [ + gefahrstelle.map [ IDMarkanterPunkt?.value?.bezeichnung?. bezeichnungMarkanterPunkt?.wert ] @@ -406,19 +412,26 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { ) // L: Sskp.Ina.Gef_Stelle_abstand - fillConditional( + fillIterableWithConditional( instance, cols.getColumn(Gef_Stelle_Abstand), pzb, - [isGefahrstelle], [ - val markanteStelle = inaGefahrstelles.map [ + !gefahrstelle.nullOrEmpty && !inaGefahrstelles.map [ + IDMarkanterPunkt + ].empty + ], + [ + val markanteStelle = gefahrstelle.map [ IDMarkanterPunkt?.value?.IDMarkanteStelle?.value ].filter(Punkt_Objekt) - return AgateRounding.roundDown( - getDistanceOfPoints(markanteStelle, it), scaleValue). - toTableDecimal(scaleValue) - ] + return markanteStelle.map [ ms | + AgateRounding.roundDown(getPointsDistance(ms, it).min, + scaleValue).toTableDecimal(scaleValue) + ] + ], + MIXED_STRING_COMPARATOR, + ITERABLE_FILLING_SEPARATOR ) val bahnSteigKantes = pzb?.PZBElementZuordnungBP?.map [ @@ -647,8 +660,8 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { static dispatch def String fillBezugsElement(Signal object) { return object?.signalReal?.signalFunktion?.wert === ENUMSignalFunktion.ENUM_SIGNAL_FUNKTION_BUE_UEBERWACHUNGSSIGNAL - ? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»''' - : object?.bezeichnung?.bezeichnungTabelle?.wert + ? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»''' : object?. + bezeichnung?.bezeichnungTabelle?.wert } private dispatch def String getDistanceSignalTrackSwitch(PZB_Element pzb, @@ -664,9 +677,9 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { getPointsDistance(pzb, signal).min, scaleValue) val directionSign = topGraphService. isInWirkrichtungOfSignal(signal, pzb) ? "+" : "-" - return distance == 0.0 - ? distance.toTableDecimal(scaleValue) - : '''«directionSign»«distance.toTableDecimal(scaleValue)»''' + return distance == 0.0 ? distance. + toTableDecimal( + scaleValue) : '''«directionSign»«distance.toTableDecimal(scaleValue)»''' } val bueSpezifischesSignal = signal.container.BUESpezifischesSignal. From 658756575699db47c0e6e1116e99aeb8ea79003f Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Mon, 6 Jul 2026 11:23:01 +0200 Subject: [PATCH 2/2] Add NPE check --- .../table/pt1/sskp/SskpTransformator.xtend | 28 ++++++++++--------- .../extensions/PZBElementExtensions.xtend | 6 ++-- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend index d1e059e346..aa65a256b7 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskp/SskpTransformator.xtend @@ -279,7 +279,7 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { ], [ PZBElementZuordnungFstr.map [ pzbZuordnung | - val wirksamKeit = pzbZuordnung.wirksamkeitFstr?. + val wirksamKeit = pzbZuordnung?.wirksamkeitFstr?. translate val fstrZugRangier = pzbZuordnung.IDFstrZugRangier?. value?.fstrZugRangierBezeichnung @@ -297,12 +297,11 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { ] ], [ - IDPZBElementZuordnung?.value?.PZBElementZuordnungFstr. - flatMap [ - wirksamkeitFstr?.IDBearbeitungsvermerk - ].map [ - value?.bearbeitungsvermerkAllg?.kurztext?.wert - ].filterNull + PZBElementZuordnungFstr.flatMap [ + wirksamkeitFstr?.IDBearbeitungsvermerk + ].map [ + value?.bearbeitungsvermerkAllg?.kurztext?.wert + ].filterNull ], ITERABLE_FILLING_SEPARATOR, MIXED_STRING_COMPARATOR @@ -541,7 +540,10 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { pzb, [pzbGUEs], null, - [pruefgeschwindigkeit?.wert.intValue.toString] + [ + val wert = pruefgeschwindigkeit?.wert + return wert !== null ? wert.intValue.toString : "" + ] ) // S: Sskp.Gue.Pruefzeit @@ -660,8 +662,8 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { static dispatch def String fillBezugsElement(Signal object) { return object?.signalReal?.signalFunktion?.wert === ENUMSignalFunktion.ENUM_SIGNAL_FUNKTION_BUE_UEBERWACHUNGSSIGNAL - ? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»''' : object?. - bezeichnung?.bezeichnungTabelle?.wert + ? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»''' + : object?.bezeichnung?.bezeichnungTabelle?.wert } private dispatch def String getDistanceSignalTrackSwitch(PZB_Element pzb, @@ -677,9 +679,9 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator { getPointsDistance(pzb, signal).min, scaleValue) val directionSign = topGraphService. isInWirkrichtungOfSignal(signal, pzb) ? "+" : "-" - return distance == 0.0 ? distance. - toTableDecimal( - scaleValue) : '''«directionSign»«distance.toTableDecimal(scaleValue)»''' + return distance == 0.0 + ? distance.toTableDecimal(scaleValue) + : '''«directionSign»«distance.toTableDecimal(scaleValue)»''' } val bueSpezifischesSignal = signal.container.BUESpezifischesSignal. diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/PZBElementExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/PZBElementExtensions.xtend index 894e3bf71c..3eda85e1d7 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/PZBElementExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/PZBElementExtensions.xtend @@ -67,12 +67,14 @@ class PZBElementExtensions extends BasisObjektExtensions { def static Iterable getPZBElementZuordnungBP( PZB_Element pzb) { - return pzb.IDPZBElementZuordnung?.value?.PZBElementZuordnungBP + return pzb.IDPZBElementZuordnung?.value?.PZBElementZuordnungBP?. + filterNull ?: #[] } def static Iterable getPZBElementZuordnungFstr( PZB_Element pzb) { - return pzb.IDPZBElementZuordnung?.value?.PZBElementZuordnungFstr + return pzb.IDPZBElementZuordnung?.value?.PZBElementZuordnungFstr?. + filterNull ?: #[] } def static Iterable getPZBZuordnungSignal(