diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/AbstractSignalTableTransform.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/AbstractSignalTableTransform.java index bc6d567f1..074f4b40d 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/AbstractSignalTableTransform.java +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/AbstractSignalTableTransform.java @@ -10,7 +10,12 @@ */ package org.eclipse.set.feature.table.pt1.ssks; -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.*; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_HOCH; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_HOCH; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_NIEDRIG; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_HOCH; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_NIEDRIG; import java.math.BigDecimal; import java.util.ArrayList; @@ -21,7 +26,6 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.eclipse.set.basis.graph.TopPoint; import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; @@ -37,7 +41,6 @@ import org.eclipse.set.model.planpro.Signale.Signal; import org.eclipse.set.model.planpro.Signale.Signal_Befestigung; import org.eclipse.set.model.planpro.Signale.Signal_Rahmen; -import org.eclipse.set.model.planpro.Verweise.ID_Regelzeichnung_TypeClass; import org.eclipse.set.model.tablemodel.ColumnDescriptor; import org.eclipse.set.model.tablemodel.Table; import org.eclipse.set.model.tablemodel.TableRow; @@ -257,21 +260,6 @@ protected void fillGenerallyColumns(final TableRow row, .collect(Collectors.toSet()), null); - // konstruktive_Merkmale.Anordnung.Regelzeichnung - fillIterable(row, getRegelzeichnungColumn(), signalRahmen, - rahmen -> rahmen.stream().flatMap(r -> { - final Signal_Befestigung signalBefestigung = SignalRahmenExtensions - .getSignalBefestigung(r); - if (signalBefestigung == null) { - return Stream.empty(); - } - return signalBefestigung.getIDRegelzeichnung() - .stream() - .map(ID_Regelzeichnung_TypeClass::getValue) - .filter(Objects::nonNull) - .map(z -> fillRegelzeichnung(z)); - }).toList(), null); - // konstruktive_Merkmale.Fundament.Art_Regelzeichnung fillIterable(row, getArtRegelzeichnungColumn(), signalRahmen, rahmen -> transformRegelzeichnungArt(row, rahmen), @@ -362,8 +350,6 @@ protected void fillAbstandMastMitte(final TableRow row, protected abstract ColumnDescriptor getArtRegelzeichnungColumn(); - protected abstract ColumnDescriptor getRegelzeichnungColumn(); - protected abstract ColumnDescriptor getBefestigungColumn(); protected abstract Map getAbstandMastMitteColumn(); diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/SsksTransformator.xtend b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/SsksTransformator.xtend index 69cd406dc..c0d99a2bd 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/SsksTransformator.xtend +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/SsksTransformator.xtend @@ -50,7 +50,6 @@ import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.MsWsGeWs import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.MsWsRtWs import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.MsWsSwWs import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne14 -import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne2 import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.OzBk import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Sh1 import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Vr0 @@ -91,6 +90,18 @@ import org.osgi.service.event.EventAdmin import static org.eclipse.set.feature.table.pt1.ssks.SsksColumns.* import static org.eclipse.set.model.planpro.Ansteuerung_Element.ENUMAussenelementansteuerungArt.* import static org.eclipse.set.model.planpro.Signale.ENUMAnschaltdauer.* +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_ARBEITSBUEHNE +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_DACH_DECKE +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_OL_MAST +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_PFOSTEN_HOCH +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_PFOSTEN_NIEDRIG +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_HOCH +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_HOCH +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_NIEDRIG +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_HOCH +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_NIEDRIG +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_WAND import static org.eclipse.set.model.planpro.Signale.ENUMBeleuchtet.* import static org.eclipse.set.model.planpro.Signale.ENUMFiktivesSignalFunktion.* import static org.eclipse.set.model.planpro.Signale.ENUMGeltungsbereich.* @@ -112,18 +123,6 @@ import static extension org.eclipse.set.ppmodel.extensions.StellelementExtension import static extension org.eclipse.set.ppmodel.extensions.UnterbringungExtensions.* import static extension org.eclipse.set.ppmodel.extensions.UrObjectExtensions.* import static extension org.eclipse.set.utils.math.BigDecimalExtensions.* -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_HOCH -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_PFOSTEN_HOCH -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_HOCH -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_DACH_DECKE -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_ARBEITSBUEHNE -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_WAND -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_HOCH -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_PFOSTEN_NIEDRIG -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_NIEDRIG -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_OL_MAST -import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_NIEDRIG /** * Table transformation for a Signaltabelle (Ssks). @@ -269,6 +268,10 @@ class SsksTransformator extends AbstractSignalTableTransform { ] ) + // R: Ssks.konstruktive_Merkmale.Anordnung.Regelzeichnung + fillIterable(row, cols.getColumn(Anordnung_Regelzeichnung), + signalRahmen, [transformRegelzeichnungen(row, it)], null); + // S: Ssks.konstruktive_Merkmale.Obere_Lichtpunkthoehe fillIterable( row, @@ -679,6 +682,22 @@ class SsksTransformator extends AbstractSignalTableTransform { ENUM_SIGNAL_FUNKTION_ALLEINSTEHENDES_ZUSATZSIGNAL) } + private static def Iterable transformRegelzeichnungen(TableRow row, + List rahmen) { + // transform all regelzeichnungen of the signal befestigungen until the + // fundament + val regelzeichnungen = rahmen.flatMap [ + #[#[it.signalBefestigung], it.befestigungUntilFundament].flatten + ].flatMap[IDRegelzeichnung].map[r|r?.value].filterNull.map [ + fillRegelzeichnung + ].toList(); + // transform all regelzeichnungen of the signal rahmen itself + val rahmenRegelzeichnungen = rahmen.map[IDRegelzeichnung?.value]. + filterNull.map[fillRegelzeichnung].toList(); + // collect them + return #[regelzeichnungen, rahmenRegelzeichnungen].flatten + } + private static def boolean hasSchaltkastenSeparatBezeichnung( Signal signal) { val stellelement = signal.stellelement @@ -992,26 +1011,11 @@ class SsksTransformator extends AbstractSignalTableTransform { private static def List fillSignalisierungWeitere(Signal signal, List signalRahmen) { - // 1.Case: Signal_Rahmen contains Ne2 or Ne14 - val rahmen = signalRahmen.filter [ - !signalbegriffe.filter [ - signalbegriffID instanceof Ne2 || - signalbegriffID instanceof Ne14 - ].empty - ].toList - if (!rahmen.nullOrEmpty) { - return rahmen.map[IDRegelzeichnung?.value].filterNull.map [ - fillRegelzeichnung - ].toList - } - - // 2.Case: It give another Signal Ne2/Ne14, which have same Mast with current Signal val sameMastSignal = signalRahmen.map[IDSignalBefestigung?.value]. filterNull.flatMap [ attachmentSignal ].filter [ - it !== signal && (hasSignalbegriffID(typeof(Ne2)) || - hasSignalbegriffID(typeof(Ne14))) + it !== signal ].toList if (sameMastSignal.nullOrEmpty) { return #[] @@ -1221,10 +1225,6 @@ class SsksTransformator extends AbstractSignalTableTransform { return cols.getColumn(Lichtraumprofil) } - override protected getRegelzeichnungColumn() { - return cols.getColumn(Anordnung_Regelzeichnung) - } - override protected getStreckeColumn() { return cols.getColumn(Strecke) } @@ -1243,19 +1243,18 @@ class SsksTransformator extends AbstractSignalTableTransform { [throw new RuntimeException(e)] ) } - + override protected getSideDistanceMastType() { return List.of(ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_HOCH, - ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG, - ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_HOCH, - ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_NIEDRIG, - ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_HOCH, - ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_NIEDRIG, - ENUM_BEFESTIGUNG_ART_PFOSTEN_HOCH, - ENUM_BEFESTIGUNG_ART_PFOSTEN_NIEDRIG, - ENUM_BEFESTIGUNG_ART_ARBEITSBUEHNE, - ENUM_BEFESTIGUNG_ART_OL_MAST, ENUM_BEFESTIGUNG_ART_WAND, - ENUM_BEFESTIGUNG_ART_DACH_DECKE); + ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG, + ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_HOCH, + ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_SONSTIGE_NIEDRIG, + ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_HOCH, + ENUM_BEFESTIGUNG_ART_SONDERANORDNUNG_MAST_NIEDRIG, + ENUM_BEFESTIGUNG_ART_PFOSTEN_HOCH, + ENUM_BEFESTIGUNG_ART_PFOSTEN_NIEDRIG, + ENUM_BEFESTIGUNG_ART_ARBEITSBUEHNE, ENUM_BEFESTIGUNG_ART_OL_MAST, + ENUM_BEFESTIGUNG_ART_WAND, ENUM_BEFESTIGUNG_ART_DACH_DECKE); } } diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformator.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformator.java index 9b2b55b72..d3b19e361 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformator.java +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformator.java @@ -54,8 +54,10 @@ import org.eclipse.set.model.planpro.Signale.ENUMGeltungsbereich; import org.eclipse.set.model.planpro.Signale.ENUMSignalFunktion; import org.eclipse.set.model.planpro.Signale.Signal; +import org.eclipse.set.model.planpro.Signale.Signal_Befestigung; import org.eclipse.set.model.planpro.Signale.Signal_Rahmen; import org.eclipse.set.model.planpro.Signale.Signal_Signalbegriff; +import org.eclipse.set.model.planpro.Verweise.ID_Regelzeichnung_TypeClass; import org.eclipse.set.model.tablemodel.ColumnDescriptor; import org.eclipse.set.model.tablemodel.TableRow; import org.eclipse.set.model.tablemodel.extensions.FootnoteExtensions; @@ -169,6 +171,21 @@ protected void fillSpecifyColumns(final TableRow row, .toList(), MIXED_STRING_COMPARATOR); + // J: Sskx.konstruktive_Merkmale.Anordnung.Regelzeichnung + fillIterable(row, getColumn(cols, SskxColumns.Regelzeichnung), + signalRahmen, rahmen -> rahmen.stream().flatMap(r -> { + final Signal_Befestigung signalBefestigung = SignalRahmenExtensions + .getSignalBefestigung(r); + if (signalBefestigung == null) { + return Stream.empty(); + } + return signalBefestigung.getIDRegelzeichnung() + .stream() + .map(ID_Regelzeichnung_TypeClass::getValue) + .filter(Objects::nonNull) + .map(z -> fillRegelzeichnung(z)); + }).toList(), null); + // M: Sskx.Signalisierung.Signalbegriffe.Bezeichnung fillIterable(row, getColumn(cols, SskxColumns.Signalbegriffe_Bezeichnung), signal, @@ -223,11 +240,6 @@ protected ColumnDescriptor getArtRegelzeichnungColumn() { return getColumn(cols, SskxColumns.Art_Regelzeichnung); } - @Override - protected ColumnDescriptor getRegelzeichnungColumn() { - return getColumn(cols, SskxColumns.Regelzeichnung); - } - @Override protected ColumnDescriptor getBefestigungColumn() { return getColumn(cols, SskxColumns.Befestigung); diff --git a/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/ssks_vorlage.xlsx b/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/ssks_vorlage.xlsx index 4bce469c0..2e3894e3f 100644 Binary files a/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/ssks_vorlage.xlsx and b/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/ssks_vorlage.xlsx differ diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalRahmenExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalRahmenExtensions.xtend index c12567829..886eccca2 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalRahmenExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalRahmenExtensions.xtend @@ -24,6 +24,7 @@ import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.* import static extension org.eclipse.set.ppmodel.extensions.SignalBefestigungExtensions.* import static extension org.eclipse.set.ppmodel.extensions.SignalbegriffExtensions.* +import java.util.List /** * This class extends {@link Signal_Rahmen}. @@ -157,4 +158,18 @@ class SignalRahmenExtensions extends BasisObjektExtensions { Signal_Rahmen signalRahmen) { return new SignalBefestigungIterator(signalRahmen) } + + /** + * @param signalRahmen this Signalrahmen + * + * @returns chain of Signalbefestigungen until the fundament. The chain is excluding the fundament. + */ + def static List getBefestigungUntilFundament(Signal_Rahmen signalRahmen) { + val befestigungen = signalRahmen?.signalBefestigungIterator?.takeWhile[ + signalBefestigungAllg?.befestigungArt?.wert != + ENUM_BEFESTIGUNG_ART_FUNDAMENT + ].toList + return befestigungen; + + } } diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/ssks_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/ssks_reference.csv index 5c7efb104..980c9f30b 100644 --- a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/ssks_reference.csv +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/ssks_reference.csv @@ -23,7 +23,7 @@ schaltung​​​​​​​​​​​​​​​​​​​​​​​ (Zusatzanzeiger)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";"Nach- geordnetes Signal​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";Mastschild​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;"Weitere (z. B. ETCS-Halttafel, -Vorsignaltafel)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";Automatische Fahrtstellung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;"Dunkel- +Lf-Signal)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";Automatische Fahrtstellung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;"Dunkel- schaltung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​";Durchfahrt erlaubt​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;Besetzte Ausfahrt​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;Löschung Zs 1/Zs 7​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;Überwachung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;Überwachung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ;Bezeichnung Signal;Reales Signal​;Funktion ohne Signal​​;Fiktives Signal​​​;Strecke​​​​;km​​​​​;Sonstige zulässige Anordnung​​​​​​;"Lichtraum- profil​​​​​​​";"Über-