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 73889f77a2..db96d1a321 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 @@ -18,10 +18,13 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.eclipse.emf.common.util.EList; import org.eclipse.set.basis.graph.TopPoint; import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; import org.eclipse.set.core.services.graph.BankService; @@ -37,6 +40,7 @@ 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; @@ -50,6 +54,7 @@ import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup; import org.eclipse.set.ppmodel.extensions.geometry.GEOKanteGeometryExtensions; import org.eclipse.set.utils.math.BigDecimalExtensions; +import org.eclipse.set.utils.table.AbstractTableModelTransformator; import org.eclipse.set.utils.table.RowFactory; import org.eclipse.set.utils.table.TMFactory; import org.eclipse.xtext.xbase.lib.Pair; @@ -266,6 +271,10 @@ protected void fillGenerallyColumns(final TableRow row, rahmen -> transformRegelzeichnungArt(row, rahmen), MIXED_STRING_COMPARATOR); + // konstruktive_Merkmale.Anordnung.Regelzeichnung + fillIterable(row, getAnordnungRegelzeichnungColumn(), signalRahmen, + this::transformRegelZeichnungen); + // konstruktive_Merkmale.Fundament.Hoehe fillIterable(row, getFundamentHoeheColumn(), signalRahmen, rahmen -> rahmen.stream() @@ -368,6 +377,8 @@ protected void fillAbstandMastMitte(final TableRow row, final Signal signal, protected abstract ColumnDescriptor getBezeichnungColumn(); + protected abstract ColumnDescriptor getAnordnungRegelzeichnungColumn(); + protected abstract void handledThrowException(TMFactory row, Signal signal, Exception e); @@ -407,4 +418,46 @@ private String fillBefestigung(final Signal_Befestigung befestigung) { }; } + protected Iterable transformRegelZeichnungen( + final List rahmen) { + final List befestigungRegelzeichnungen = rahmen.stream() + .flatMap(r -> { + final List result = new ArrayList<>(); + + final List befestigungUtilFundament = SignalRahmenExtensions + .getBefestigungUntilFundament(r); + result.addAll(befestigungUtilFundament); + final Signal_Befestigung signalBefestigung = SignalRahmenExtensions + .getSignalBefestigung(r); + result.add(signalBefestigung); + return result.stream(); + }) + .flatMap(befesitung -> { + final Optional> nullableObject = EObjectExtensions + .getNullableObject(befesitung, + b -> b.getIDRegelzeichnung()); + if (nullableObject.isPresent()) { + return nullableObject.get().stream(); + } + return Stream.empty(); + }) + .map(id -> id.getValue()) + .filter(Objects::nonNull) + .map(AbstractTableModelTransformator::fillRegelzeichnung) + .toList(); + final List rahmenRegelzeichnungen = rahmen.stream() + .map(Signal_Rahmen::getIDRegelzeichnung) + .map(id -> EObjectExtensions + .getNullableObject(id, i -> i.getValue()) + .orElse(null)) + .filter(Objects::nonNull) + .map(AbstractTableModelTransformator::fillRegelzeichnung) + .toList(); + + return Stream + .concat(befestigungRegelzeichnungen.stream(), + rahmenRegelzeichnungen.stream()) + .toList(); + } + } 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 95494d1286..37089e502b 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 @@ -268,10 +268,6 @@ 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, @@ -682,22 +678,6 @@ 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 @@ -1234,6 +1214,10 @@ class SsksTransformator extends AbstractSignalTableTransform { return cols.getColumn(Ueberhoehung) } + override protected getAnordnungRegelzeichnungColumn() { + return cols.getColumn(Anordnung_Regelzeichnung) + } + override protected handledThrowException(TMFactory factory, Signal signal, Exception e) { val TableRow row = factory.newTableRow(signal); 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 8ae62387b7..63be546506 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 @@ -10,19 +10,8 @@ */ package org.eclipse.set.feature.table.pt1.sskx; -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_SCHIENENFUSS; -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.feature.table.pt1.sskx.SskxColumns.Regelzeichnung; +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.*; import java.util.LinkedList; import java.util.List; @@ -54,10 +43,8 @@ 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; @@ -171,21 +158,6 @@ 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, @@ -291,6 +263,11 @@ protected ColumnDescriptor getBezeichnungColumn() { return getColumn(cols, SskxColumns.Bezeichnung_Signal); } + @Override + protected ColumnDescriptor getAnordnungRegelzeichnungColumn() { + return getColumn(cols, Regelzeichnung); + } + @Override protected void handledThrowException(final TMFactory factory, final Signal signal, final Exception e) {