diff --git a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/graph/BankServiceImpl.java b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/graph/BankServiceImpl.java index 62c1492ca8..bd1c9f23dd 100644 --- a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/graph/BankServiceImpl.java +++ b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/graph/BankServiceImpl.java @@ -501,10 +501,12 @@ public List findBankValue(final TopPoint point) { final BigDecimal distanceLeft = leftPosition.subtract(pointDistance) .abs(); - - return List.of( - bankingDefault(ueRight.subtract(ueLeft), distanceLeft, length) - .add(ueLeft)); + final BigDecimal defaultValue = bankingDefault(ueRight.subtract(ueLeft), + distanceLeft, length); + if (defaultValue == null) { + return Collections.emptyList(); + } + return List.of(defaultValue.add(ueLeft)); } static BigDecimal findBankingValue(final TopPoint point, @@ -633,6 +635,9 @@ private static BigDecimal bankingOfRampeS(final BigDecimal h_between, */ private static BigDecimal bankingDefault(final BigDecimal h_between, final BigDecimal distanceFromLeft, final BigDecimal length) { + if (length.compareTo(BigDecimal.ZERO) == 0) { + return null; + } return h_between.multiply(distanceFromLeft) .divide(length, ToolboxConstants.ROUNDING_TO_PLACE, RoundingMode.HALF_EVEN); diff --git a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/table/TableMenuServiceImpl.java b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/table/TableMenuServiceImpl.java index 447b8fd977..e7466c7219 100644 --- a/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/table/TableMenuServiceImpl.java +++ b/java/bundles/org.eclipse.set.application/src/org/eclipse/set/application/table/TableMenuServiceImpl.java @@ -19,7 +19,6 @@ import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer; import org.eclipse.set.application.Messages; import org.eclipse.set.basis.constants.Events; -import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.core.services.Services; import org.eclipse.set.core.services.part.ToolboxPartService; import org.eclipse.set.utils.events.JumpToSiteplanEvent; @@ -141,11 +140,9 @@ public void widgetSelected(final SelectionEvent e) { || tableShortcut.isEmpty()) { return; } - String tableIdPrefix = ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX; - if (jumpEvent.getTableCategory() - .equals(Pt1TableCategory.ETCS.getId())) { - tableIdPrefix = ToolboxConstants.ETCS_TABLE_PART_ID_PREFIX; - } + final String category = jumpEvent.getTableCategory(); + final String tableIdPrefix = Pt1TableCategory + .getTablePartPrefix(category); toolboxPartService.showPart(tableIdPrefix + "." //$NON-NLS-1$ + tableShortcut.toLowerCase()); ToolboxEvents.send(broker, jumpEvent); diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/META-INF/MANIFEST.MF b/java/bundles/org.eclipse.set.feature.table.pt1/META-INF/MANIFEST.MF index 8a93c5fbb3..128e950f9a 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/META-INF/MANIFEST.MF +++ b/java/bundles/org.eclipse.set.feature.table.pt1/META-INF/MANIFEST.MF @@ -132,6 +132,8 @@ Service-Component: OSGI-INF/org.eclipse.set.feature.table.pt1.messages.Messages. OSGI-INF/org.eclipse.set.feature.table.pt1.sskt.SsktTransformationService.xml, OSGI-INF/org.eclipse.set.feature.table.pt1.sskw.SskwDescriptionService.xml, OSGI-INF/org.eclipse.set.feature.table.pt1.sskw.SskwTransformationService.xml, + OSGI-INF/org.eclipse.set.feature.table.pt1.sskx.SskxDescriptionService.xml, + OSGI-INF/org.eclipse.set.feature.table.pt1.sskx.SskxTransformationService.xml, OSGI-INF/org.eclipse.set.feature.table.pt1.sskz.SskzDescriptionService.xml, OSGI-INF/org.eclipse.set.feature.table.pt1.sskz.SskzTransformationService.xml, OSGI-INF/org.eclipse.set.feature.table.pt1.ssla.SslaDescriptionService.xml, diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/OSGI-INF/l10n/bundle.properties b/java/bundles/org.eclipse.set.feature.table.pt1/OSGI-INF/l10n/bundle.properties index 3fb5c71b8f..d1cd6b907c 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/OSGI-INF/l10n/bundle.properties +++ b/java/bundles/org.eclipse.set.feature.table.pt1/OSGI-INF/l10n/bundle.properties @@ -216,3 +216,11 @@ ToolboxTableNameSxxxShort=Sxxx ToolboxTableNameSxxxLong=Tabelle der Bearbeitungsvermerke ToolboxTableNameSxxxPlanningNumber=?? ToolboxTableNameSxxxRil= + +SskxTableView_Heading=Tabelle der Tafeln – Sskx +ToolboxTableNameSskxLong=Tabelle der Tafeln +ToolboxTableNameSskxPlanningNumber=??? +ToolboxTableNameSskxShort=Sskx +SskxDescriptionService_ViewTooltip=Tabelle der Tafeln +SskxDescriptionService_ViewName=Sskx – Tabelle der Tafeln +ToolboxTableNameSskxRil= \ No newline at end of file diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/AbstractPlanPro2TableModelTransformator.xtend b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/AbstractPlanPro2TableModelTransformator.xtend index 597c946a1a..469342ccdb 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/AbstractPlanPro2TableModelTransformator.xtend +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/AbstractPlanPro2TableModelTransformator.xtend @@ -302,5 +302,4 @@ abstract class AbstractPlanPro2TableModelTransformator extends AbstractTableMode topologicalCells.put(row, newHashSet(col)) } } - } diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/messages/Messages.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/messages/Messages.java index 0f0f09bb72..63a6733674 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/messages/Messages.java +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/messages/Messages.java @@ -954,4 +954,39 @@ private void bindBundleLocalization( */ public String ToolboxTableNameSxxxRil; + /** + * Tabelle der Tafeln – Sskx + */ + public String SskxTableView_Heading; + + /** + * Tabelle der Tafeln + */ + public String ToolboxTableNameSskxLong; + + /** + * ??? + */ + public String ToolboxTableNameSskxPlanningNumber; + + /** + * Sskx + */ + public String ToolboxTableNameSskxShort; + + /** + * Tabelle der Tafeln + */ + public String SskxDescriptionService_ViewTooltip; + + /** + * Sskx – Tabelle der Tafeln + */ + public String SskxDescriptionService_ViewName; + + /** + * + */ + public String ToolboxTableNameSskxRil; + } 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 new file mode 100644 index 0000000000..af07f1f4c1 --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/ssks/AbstractSignalTableTransform.java @@ -0,0 +1,416 @@ +/** + * Copyright (c) 2026 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table.pt1.ssks; + +import static org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt.*; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +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; +import org.eclipse.set.core.services.graph.BankService; +import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator; +import org.eclipse.set.feature.table.pt1.ssks.SignalSideDistance.SideDistance; +import org.eclipse.set.model.planpro.BasisTypen.ENUMLinksRechts; +import org.eclipse.set.model.planpro.BasisTypen.ID_Bearbeitungsvermerk_TypeClass; +import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt_TOP_Kante_AttributeGroup; +import org.eclipse.set.model.planpro.Geodaten.Strecke; +import org.eclipse.set.model.planpro.Gleis.Gleis_Lichtraum; +import org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt; +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; +import org.eclipse.set.ppmodel.extensions.BereichObjektExtensions; +import org.eclipse.set.ppmodel.extensions.EObjectExtensions; +import org.eclipse.set.ppmodel.extensions.PunktObjektExtensions; +import org.eclipse.set.ppmodel.extensions.PunktObjektTopKanteExtensions; +import org.eclipse.set.ppmodel.extensions.SignalExtensions; +import org.eclipse.set.ppmodel.extensions.SignalRahmenExtensions; +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.RowFactory; +import org.eclipse.set.utils.table.TMFactory; +import org.eclipse.xtext.xbase.lib.Pair; +import org.osgi.service.event.EventAdmin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Streams; + +/** + * This + */ +public abstract class AbstractSignalTableTransform + extends AbstractPlanPro2TableModelTransformator { + static final Logger LOGGER = LoggerFactory + .getLogger(AbstractSignalTableTransform.class); + BankService bankingService; + String tableShortCut; + Map sideDistancesSignal; + + private static final List mastTypeOfSignalWithTwoMast = 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); + + protected AbstractSignalTableTransform(final Set cols, + final EnumTranslationService enumTranslationService, + final BankService bankingService, final EventAdmin eventAdmin, + final String tableShortCut) { + super(cols, enumTranslationService, eventAdmin); + this.bankingService = bankingService; + this.tableShortCut = tableShortCut; + } + + @Override + public Table transformTableContent( + final MultiContainer_AttributeGroup container, + final TMFactory factory) { + sideDistancesSignal = new HashMap<>(); + for (final Signal signal : getRelevantSignal(container)) { + Thread.currentThread(); + if (Thread.interrupted()) { + return null; + } + transformSignal(factory, container, signal); + } + return factory.getTable(); + } + + protected abstract Iterable getRelevantSignal( + MultiContainer_AttributeGroup contanier); + + protected void transformSignal(final TMFactory factory, + final MultiContainer_AttributeGroup container, + final Signal signal) { + try { + final RowFactory newRowGroup = factory.newRowGroup(signal); + final List> befestigungsgruppen = SignalExtensions + .getBefestigungsgruppen(signal, + mastTypeOfSignalWithTwoMast); + for (int i = 0; i < 2 && i < befestigungsgruppen.size(); i++) { + final boolean isHauptbefestigung = i == 0; + final Set gruppe = new HashSet<>( + befestigungsgruppen.get(i)); + if (isHauptbefestigung || !gruppe.isEmpty()) { + final List signalRahmen = SignalExtensions + .signalRahmenForBefestigung(signal, gruppe); + final TableRow row = newRowGroup.newTableRow(); + fillGenerallyColumns(row, container, signal, + isHauptbefestigung, signalRahmen); + fillSpecifyColumns(row, container, signal, + isHauptbefestigung, signalRahmen); + } + } + } catch (final Exception e) { + LOGGER.error("{0}: {1} - failed to transform table contents", //$NON-NLS-1$ + e.getClass().getSimpleName(), e.getMessage()); + handledThrowException(factory, signal, e); + } + } + + /** + * Fill the specify column of table + * + * @param row + * the {@link TableRow} + * @param container + * the {@link MultiContainer_AttributeGroup} + * @param signal + * the {@link Signal} + * @param isHauptbefestigung + * is this signal an main mast + * @param signalRahmen + * the list of {@link Signal_Rahmen} + */ + protected abstract void fillSpecifyColumns(TableRow row, + MultiContainer_AttributeGroup container, Signal signal, + boolean isHauptbefestigung, List signalRahmen); + + /** + * Fill the generally columns, which are same at all Signal table + * + * @param row + * @param container + * @param signal + * @param isHauptBefestigung + * @param signalRahmen + */ + @SuppressWarnings("boxing") + protected void fillGenerallyColumns(final TableRow row, + final MultiContainer_AttributeGroup container, final Signal signal, + final boolean isHauptBefestigung, + final List signalRahmen) { + // Bezeichnung.Signal + fillConditional(row, getBezeichnungColumn(), signal, + s -> isHauptBefestigung, SignalExtensions::getTableBezeichnung, + s -> ""); //$NON-NLS-1$ + + final List>> streckeAndKm = PunktObjektExtensions + .getStreckeAndKm(signal); + if (signal.getPunktObjektStrecke().size() > 1 + && signal.getPunktObjektStrecke() + .stream() + .noneMatch(pos -> pos.getKmMassgebend() != null + && pos.getKmMassgebend().getWert() != null)) { + addTopologicalCell(row, getStreckeColumn()); + addTopologicalCell(row, getKmColumn()); + } + // Standortmerkmale.Standort.Strecke + fillIterableWithConditional(row, getStreckeColumn(), signal, + s -> isHauptBefestigung, + s -> streckeAndKm.stream().map(Pair::getKey).toList(), + MIXED_STRING_COMPARATOR, ITERABLE_FILLING_SEPARATOR); + + // Standortmerkmale.Standort.km + fillIterableSingleCellWhenAllowed(row, getKmColumn(), signal, + () -> GEOKanteGeometryExtensions.isFindGeometryComplete() + || streckeAndKm.stream() + .flatMap(p -> p.getValue().stream()) + .anyMatch(s -> s != null && !s.isEmpty()), + s -> { + final List kmValues = streckeAndKm.stream() + .flatMap(p -> p.getValue().stream()) + .toList(); + if (kmValues.stream() + .anyMatch(km -> km != null && !km.isEmpty())) { + return kmValues; + } + + final Punkt_Objekt_TOP_Kante_AttributeGroup potk = PunktObjektExtensions + .getSinglePoint(s); + final List routeThroughBereichObjekt = PunktObjektTopKanteExtensions + .getStreckenThroughBereichObjekt(potk); + return PunktObjektExtensions.getStreckeKm(signal, + routeThroughBereichObjekt); + }, null, ITERABLE_FILLING_SEPARATOR, tableShortCut); + + // Standortmerkmale.Lichtraumprofil + fillIterableWithConditional(row, getLichtraumProfilColumn(), signal, + s -> signal.getSignalReal() != null, s -> { + final List lichtraeume = Streams + .stream(container.getGleisLichtraum()) + .filter(lichtRaum -> BereichObjektExtensions + .contains(lichtRaum, s)) + .toList(); + final Set translateValues = lichtraeume.stream() + .map(Gleis_Lichtraum::getLichtraumprofil) + .filter(Objects::nonNull) + .map(this::translate) + .collect(Collectors.toSet()); + final List sortedList = new ArrayList<>( + translateValues); + sortedList.sort(Comparable::compareTo); + return sortedList; + }, null, ITERABLE_FILLING_SEPARATOR); + + // Standortmerkmale.Ueberhoehung + if (signal.getSignalReal() != null) { + fillIterableSingleCellWhenAllowed(row, getUeberhoehungColumn(), + signal, () -> bankingService.isFindBankingComplete(), s -> { + final TopPoint topPoint = new TopPoint(s); + final List bankValues = bankingService + .findBankValue(topPoint); + return bankValues.stream() + .filter(Objects::nonNull) + .map(value -> BigDecimalExtensions + .toTableInteger(value.multiply( + new BigDecimal(1000)))) + .toList(); + }, null, ITERABLE_FILLING_SEPARATOR, tableShortCut); + } + + // Standortmerkmale.Abstand_Mastmitte.links + // Standortmerkmale.Abstand_Mastmitte.rechts + fillAbstandMastMitte(row, signal); + + // konstruktive_Merkmale.Anordnung.Befestigung + fillIterable(row, getBefestigungColumn(), signalRahmen, + rahmen -> rahmen.stream() + .map(r -> fillBefestigung( + SignalRahmenExtensions.getSignalBefestigung(r))) + .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), + MIXED_STRING_COMPARATOR); + + // konstruktive_Merkmale.Fundament.Hoehe + fillIterable(row, getFundamentHoeheColumn(), signalRahmen, + rahmen -> rahmen.stream() + .map(r -> EObjectExtensions.getNullableObject(r, + e -> SignalRahmenExtensions.getFundament(e) + .getSignalBefestigungAllg() + .getHoeheFundamentoberkante() + .getWert()) + .orElse(null)) + .filter(Objects::nonNull) + .toList(), + null, + value -> BigDecimalExtensions.toTableInteger(value, 1000)); + } + + protected Iterable transformRegelzeichnungArt(final TableRow row, + final List rahmen) { + final List fundamenten = rahmen.stream() + .map(SignalRahmenExtensions::getFundament) + .filter(Objects::nonNull) + .toList(); + final List fundamentArt = fundamenten.stream() + .map(fund -> EObjectExtensions + .getNullableObject(fund, + f -> f.getSignalBefestigungAllg() + .getFundamentArt()) + .orElse(null)) + .filter(Objects::nonNull) + .map(this::translate) + .filter(Objects::nonNull) + .toList(); + final List regelzeichnungen = fundamenten.stream() + .flatMap(fund -> fund.getIDRegelzeichnung().stream()) + .map(id -> { + if (id == null) { + return null; + } + return fillRegelzeichnung(id.getValue()); + }) + .filter(Objects::nonNull) + .toList(); + if (!regelzeichnungen.isEmpty()) { + addTopologicalCell(row, getArtRegelzeichnungColumn()); + } + final Set result = new HashSet<>(regelzeichnungen); + result.addAll(fundamentArt); + return result; + } + + protected void fillAbstandMastMitte(final TableRow row, + final Signal signal) { + getAbstandMastMitteColumn().forEach( + (linksrechts, column) -> fillIterableMultiCellWhenAllow(row, + column, signal, + GEOKanteGeometryExtensions::isFindGeometryComplete, + s -> { + final SignalSideDistance signalSideDistances = sideDistancesSignal + .computeIfAbsent(s, + SignalSideDistance::new); + final Set distances = switch (linksrechts) { + case ENUM_LINKS_RECHTS_LINKS -> signalSideDistances + .getSideDistancesLeft(); + case ENUM_LINKS_RECHTS_RECHTS -> signalSideDistances + .getSideDistancesRight(); + }; + + if (distances.stream() + .anyMatch(v -> v + .getDistanceToNeighborTrack() > 0)) { + addTopologicalCell(row, column); + } + return distances.stream() + .map(SideDistance::toString) + .toList(); + }, null, ITERABLE_FILLING_SEPARATOR)); + } + + protected abstract ColumnDescriptor getFundamentHoeheColumn(); + + protected abstract ColumnDescriptor getArtRegelzeichnungColumn(); + + protected abstract ColumnDescriptor getRegelzeichnungColumn(); + + protected abstract ColumnDescriptor getBefestigungColumn(); + + protected abstract Map getAbstandMastMitteColumn(); + + protected abstract ColumnDescriptor getUeberhoehungColumn(); + + protected abstract ColumnDescriptor getLichtraumProfilColumn(); + + protected abstract ColumnDescriptor getStreckeColumn(); + + protected abstract ColumnDescriptor getKmColumn(); + + protected abstract ColumnDescriptor getBezeichnungColumn(); + + protected abstract void handledThrowException(TMFactory row, Signal signal, + Exception e); + + @SuppressWarnings("nls") + private String fillBefestigung(final Signal_Befestigung befestigung) { + final ENUMBefestigungArt art = EObjectExtensions.getNullableObject( + befestigung, + b -> b.getSignalBefestigungAllg().getBefestigungArt().getWert()) + .orElse(null); + return switch (art) { + case ENUM_BEFESTIGUNG_ART_SONSTIGE -> { + final List bearbeitungsvermerke = EObjectExtensions + .getNullableObject(befestigung, + b -> b.getSignalBefestigungAllg() + .getBefestigungArt() + .getIDBearbeitungsvermerk()) + .orElse(null); + if (bearbeitungsvermerke == null + || bearbeitungsvermerke.isEmpty()) { + throw new IllegalArgumentException(String.format( + "'Befestigung Art of Befestigung %s has no Bearbeitungsvermerke.", + befestigung.getIdentitaet().getWert())); + } + yield bearbeitungsvermerke.stream() + .map(b -> b.getValue() + .getBearbeitungsvermerkAllg() + .getKurztext() + .getWert()) + .collect(Collectors.joining(",")); + } + default -> translate( + EObjectExtensions + .getNullableObject(befestigung, + b -> b.getSignalBefestigungAllg() + .getBefestigungArt()) + .orElse(null)); + }; + } + +} 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 fb671383b4..53be092a2d 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 @@ -12,13 +12,13 @@ import java.math.BigDecimal import java.util.Collections import java.util.LinkedList import java.util.List +import java.util.Map import java.util.Set import org.eclipse.set.basis.MixedStringComparator -import org.eclipse.set.basis.graph.TopPoint import org.eclipse.set.core.services.enumtranslation.EnumTranslationService import org.eclipse.set.core.services.graph.BankService -import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator import org.eclipse.set.model.planpro.Ansteuerung_Element.Unterbringung +import org.eclipse.set.model.planpro.BasisTypen.ENUMLinksRechts import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt import org.eclipse.set.model.planpro.Geodaten.Technischer_Punkt import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Hl10 @@ -78,7 +78,6 @@ import org.eclipse.set.model.planpro.Signalbegriffe_Struktur.Signalbegriff_ID_Ty import org.eclipse.set.model.planpro.Signale.ENUMAutoEinstellung import org.eclipse.set.model.planpro.Signale.ENUMGeltungsbereich 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.tablemodel.ColumnDescriptor @@ -88,13 +87,10 @@ import org.eclipse.set.ppmodel.extensions.utils.Case import org.eclipse.set.utils.table.TMFactory import org.locationtech.jts.geom.Coordinate import org.osgi.service.event.EventAdmin -import org.slf4j.Logger -import org.slf4j.LoggerFactory 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.* 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.* @@ -102,10 +98,8 @@ import static org.eclipse.set.model.planpro.Signale.ENUMRahmenArt.* import static org.eclipse.set.model.planpro.Signale.ENUMSignalArt.* import static org.eclipse.set.model.planpro.Signale.ENUMSignalFunktion.* import static org.eclipse.set.model.planpro.Signale.ENUMTunnelsignal.* -import static org.eclipse.set.ppmodel.extensions.geometry.GEOKanteGeometryExtensions.* import static extension org.eclipse.set.ppmodel.extensions.BasisAttributExtensions.* -import static extension org.eclipse.set.ppmodel.extensions.BereichObjektExtensions.* import static extension org.eclipse.set.ppmodel.extensions.GeoPunktExtensions.* import static extension org.eclipse.set.ppmodel.extensions.PunktObjektExtensions.* import static extension org.eclipse.set.ppmodel.extensions.PunktObjektTopKanteExtensions.* @@ -116,7 +110,6 @@ import static extension org.eclipse.set.ppmodel.extensions.SignalbegriffExtensio import static extension org.eclipse.set.ppmodel.extensions.StellelementExtensions.* import static extension org.eclipse.set.ppmodel.extensions.UnterbringungExtensions.* import static extension org.eclipse.set.ppmodel.extensions.UrObjectExtensions.* -import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensions.* import static extension org.eclipse.set.utils.math.BigDecimalExtensions.* /** @@ -124,19 +117,10 @@ import static extension org.eclipse.set.utils.math.BigDecimalExtensions.* * * @author Dittmer */ -class SsksTransformator extends AbstractPlanPro2TableModelTransformator { +class SsksTransformator extends AbstractSignalTableTransform { - static val Logger LOGGER = LoggerFactory.getLogger( - typeof(SsksTransformator)) static val SIGNALBEGRIFF_COMPARATOR = new MixedStringComparator( "(?[A-Za-z]*)(?[0-9]*)(?[A-Za-z]*)") - static val mastTypeOfSignalWithTwoMast = #[ - 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] static val inRelevantFiktivFunktion = #[ ENUM_FIKTIVES_SIGNAL_FUNKTION_ZUG_START_ZIEL_BK_MIT_ZS_1, ENUM_FIKTIVES_SIGNAL_FUNKTION_ZUG_START_ZIEL_BK_MIT_ZS_7, @@ -145,815 +129,499 @@ class SsksTransformator extends AbstractPlanPro2TableModelTransformator { ENUM_FIKTIVES_SIGNAL_FUNKTION_ZUG_START_ZIEL_NE_14_MIT_ZS_8, ENUM_FIKTIVES_SIGNAL_FUNKTION_RANGIER_START_ZIEL_NE_14 ] - val BankService bankingService - val String tableShortCut // Container the thread, which will be refresh table after all thread is done new(Set cols, EnumTranslationService enumTranslationService, BankService bankingService, EventAdmin eventAdmin, String tableShortCut) { - super(cols, enumTranslationService, eventAdmin) - this.bankingService = bankingService - this.tableShortCut = tableShortCut + super(cols, enumTranslationService, bankingService, eventAdmin, + tableShortCut) } + + override protected fillSpecifyColumns(TableRow row, + MultiContainer_AttributeGroup container, Signal signal, + boolean isHauptbefestigung, List signalRahmen) { + + // B: Ssks.Signal_Art.Reales_Signal + fillSwitch( + row, + cols.getColumn(Reales_Signal), + signal, + new Case( + [ + isHauptbefestigung && (isETCSMarker || + (signalReal?.signalRealAktiv !== null && + signalReal?.signalFunktion.wert === + ENUM_SIGNAL_FUNKTION_ALLEINSTEHENDES_ZUSATZSIGNAL)) + ], + ["W"] + ), + new Case( + [isHauptbefestigung], + [ + signalReal?.signalRealAktivSchirm?.signalArt?.translate + ] + ) + ) - override transformTableContent(MultiContainer_AttributeGroup container, - TMFactory factory) { - // iterate signal-wise - val sideDistancesSignal = newHashMap - for (Signal signal : container?.signal?.filter[ssksSignal]) { - if (Thread.currentThread.interrupted) { - return null - } - try { - val rowGroup = factory.newRowGroup(signal) - - // iterate over Befestigungen - val befestigungsgruppen = signal.befestigungsgruppen - for (var int i = 0; i < 2 && - i < befestigungsgruppen.size; i++) { - val isHauptbefestigung = (i == 0) - val gruppe = befestigungsgruppen.get(i)?.toSet - - // Certain columns have the same values in the rows for the "Haupt-" and "Nebenbefestigung". - // In order to avoid the redundant display, we only display these values in the line of the "Hauptbefestigung" - if (isHauptbefestigung || !gruppe.nullOrEmpty) { - val signalRahmen = signal. - signalRahmenForBefestigung(gruppe) - val TableRow row = rowGroup.newTableRow - - // A: Ssks.Bezeichnung_Signal - fillConditional( - row, - cols.getColumn(Bezeichnung_Signal), - signal, - [isHauptbefestigung], - [bezeichnung.bezeichnungTabelle.wert], - [""] - ) - - // B: Ssks.Signal_Art.Reales_Signal - fillSwitch( - row, - cols.getColumn(Reales_Signal), - signal, - new Case( - [ - isHauptbefestigung && (isETCSMarker || - (signalReal?.signalRealAktiv !== null && - signalReal?.signalFunktion.wert === - ENUM_SIGNAL_FUNKTION_ALLEINSTEHENDES_ZUSATZSIGNAL)) - ], - ["W"] - ), - new Case( - [isHauptbefestigung], - [ - signalReal?.signalRealAktivSchirm?. - signalArt?.translate - ] - ) - ) - - // C: Ssks.Signal_Art.Funktion_Ohne_Signal - fillConditional( - row, - cols.getColumn(Funktion_Ohne_Signal), - signal, - [isHauptbefestigung], - [ - signalReal?.funktionOhneSignal?.translate - ] - ) - - // D: Ssks.Signal_Art.Fiktives_Signal - fillIterable( - row, - cols.getColumn(Fiktives_Signal), - signal, - [ - signalFiktiv?.fiktivesSignalFunktion?.map [ fiktivSignalFunktion | - fiktivSignalFunktion?.translate - ] ?: Collections.emptyList - ], - null - ) - - val streckAndKm = getStreckeAndKm(signal) - if (signal.punktObjektStrecke.size > 1 && - !signal.punktObjektStrecke.exists [ - kmMassgebend?.wert !== null - ]) { - row.addTopologicalCell(cols.getColumn(Km)) - row.addTopologicalCell(cols.getColumn(Strecke)) - } - - // E: Ssks.Standortmerkmale.Standort.Strecke - fillIterableWithConditional( - row, - cols.getColumn(Strecke), - signal, - [isHauptbefestigung], - [ - streckAndKm.map[key] - ], - MIXED_STRING_COMPARATOR, - ITERABLE_FILLING_SEPARATOR - ) - - // F: Ssks.Standortmerkmale.Standort.km - fillIterableSingleCellWhenAllowed( - row, - cols.getColumn(Km), - signal, - [ - isFindGeometryComplete || streckAndKm.flatMap [ - value - ].exists[!nullOrEmpty] - ], - [ - if (streckAndKm.flatMap[value].exists [ - !nullOrEmpty - ]) { - return streckAndKm.flatMap[value].toList - } - val routeThroughBereichObjekt = singlePoint. - streckenThroughBereichObjekt - return getStreckeKm(routeThroughBereichObjekt). - toList - ], - null, - ITERABLE_FILLING_SEPARATOR, - tableShortCut - ) - - // G: Ssks.Standortmerkmale.Sonstige_Zulaessige_Anordnung - fill( - row, - cols.getColumn(Sonstige_Zulaessige_Anordnung), - signal, - [ - signalReal?.signalRealAktiv?. - sonstigeZulaessigeAnordnung?.translate - ] - ) - - // H: Ssks.Standortmerkmale.Lichtraumprofil - fillIterableWithConditional( - row, - cols.getColumn(Lichtraumprofil), - signal, - [signalReal !== null], - [ - val s = it - val lichtraeume = it.container.gleisLichtraum. - filter[contains(s)] - lichtraeume.map [ - lichtraumprofil?.translate - ].toSet.toList.sort - ], - null, - ITERABLE_FILLING_SEPARATOR - ) - - // I: Ssks.Standortmerkmale.Ueberhoehung - if (signal.signalReal !== null) { - fillIterableSingleCellWhenAllowed( - row, - cols.getColumn(Ueberhoehung), - signal, - [bankingService.isFindBankingComplete], - [ - bankingService.findBankValue( - new TopPoint(it)).map [ - multiply(new BigDecimal(1000)). - toTableInteger ?: "" - ] - ], - null, - ITERABLE_FILLING_SEPARATOR, - tableShortCut - ) - } - - // J: Ssks.Standortmerkmale.Abstand_Mastmitte.links - // K: Ssks.Standortmerkmale.Abstand_Mastmitte.rechts - #[Mastmitte_Links, Mastmitte_Rechts].forEach [ position | - val col = switch (position) { - case Mastmitte_Links: - cols.getColumn(Mastmitte_Links) - case Mastmitte_Rechts: - cols.getColumn(Mastmitte_Rechts) - } - - fillIterableMultiCellWhenAllow( - row, - col, - signal, - [isFindGeometryComplete], - [ - val signalSideDistances = sideDistancesSignal. - computeIfAbsent(it, [ s | - new SignalSideDistance(s) - ]) - val distances = switch (position) { - case Mastmitte_Links: - signalSideDistances. - sideDistancesLeft - case Mastmitte_Rechts: - signalSideDistances. - sideDistancesRight - } - if (distances.exists [ - distanceToNeighborTrack > 0 - ]) { - row.addTopologicalCell(col) - } - - return distances.map[toString].toList - ], - null, - ITERABLE_FILLING_SEPARATOR - ) + // C: Ssks.Signal_Art.Funktion_Ohne_Signal + fillConditional( + row, + cols.getColumn(Funktion_Ohne_Signal), + signal, + [isHauptbefestigung], + [ + signalReal?.funktionOhneSignal?.translate + ] + ) - ] + // D: Ssks.Signal_Art.Fiktives_Signal + fillIterable( + row, + cols.getColumn(Fiktives_Signal), + signal, + [ + signalFiktiv?.fiktivesSignalFunktion?.map [ fiktivSignalFunktion | + fiktivSignalFunktion?.translate + ] ?: Collections.emptyList + ], + null + ) - // L: Ssks.Standortmerkmale.Sichtbarkeit.Soll - fillConditional( - row, - cols.getColumn(Sichtbarkeit_Soll), - signal, - [isHauptbefestigung], - [ - signalReal?.signalsichtSoll?.wert?.toString - ] - ) - - // M: Ssks.Standortmerkmale.Sichtbarkeit.Mindest - fillConditional( - row, - cols.getColumn(Sichtbarkeit_Mindest), - signal, - [isHauptbefestigung], - [ - signalReal?.signalsichtMindest?.wert?.toString - ] - ) - - // N: Ssks.Standortmerkmale.Sichtbarkeit.Ist - fillConditional( - row, - cols.getColumn(Sichtbarkeit_Ist), - signal, - [isHauptbefestigung], - [ - signalReal?.signalsichtErreichbar?.wert?. - toString - ] - ) - - // O: Ssks.Standortmerkmale.Ausrichtung.Entfernung - fillConditional( - row, - cols.getColumn(Entfernung), - signal, - [isHauptbefestigung], - [ - signalReal?.signalRealAktivSchirm?. - richtpunktentfernung?.wert?.toString - ] - ) - - // P: Ssks.Standortmerkmale.Ausrichtung.Richtpunkt - fillConditional( - row, - cols.getColumn(Richtpunkt), - signal, - [isHauptbefestigung], - [ - signalReal?.signalRealAktivSchirm?. - richtpunkt?.wert - ] - ) - - // Q: Ssks.konstruktive_Merkmale.Anordnung.Befestigung - fillIterable( - row, - cols.getColumn(Befestigung), - signalRahmen, - [map[signalBefestigung.fillBefestigung].toSet], - null, - [toString] - ) - - // R: Ssks.konstruktive_Merkmale.Anordnung.Regelzeichnung - fillIterable( - row, - cols.getColumn(Anordnung_Regelzeichnung), - signalRahmen, - [fillRegelzeichnung.toSet], - null, - [toString] - ) - - // S: Ssks.konstruktive_Merkmale.Obere_Lichtpunkthoehe - fillIterable( - row, - cols.getColumn(Obere_Lichtpunkthoehe), - signalRahmen, - [ - map [ - signalBefestigung?.signalBefestigungAllg?. - obereLichtpunkthoehe?.wert - ].toSet.map [ b | - if (b !== null) - (Math.round(b.doubleValue * 1000)). - toString - else - "" - ] - ], - null, - [it] - ) - - // T: Ssks.konstruktive_Merkmale.Streuscheibe.Art - fillConditional( - row, - cols.getColumn(Streuscheibe_Art), - signal, - [isHauptbefestigung], - [ - signalReal?.signalRealAktivSchirm?. - streuscheibeArt?.translate ?: "" - ] - ) - - // U: Ssks.konstruktive_Merkmale.Streuscheibe.Stellung - fillConditional( - row, - cols.getColumn(Streuscheibe_Stellung), - signal, - [isHauptbefestigung], - [ - signalReal?.signalRealAktivSchirm?. - streuscheibeBetriebsstellung?. - translate ?: "" - ] - ) - - // V: Ssks.konstruktive_Merkmale.Fundament.Regelzeichnung - fillIterable( - row, - cols.getColumn(Fundament_Art_Regelzeichnung), - signalRahmen, - [ - val fundament = map[ - fundament?.signalBefestigungAllg?. - fundamentArt - ].filterNull.map[translate].filterNull - val regelzeichnung = map[getFundament]. - filterNull.flatMap[IDRegelzeichnung].map [ - value?.fillRegelzeichnung - ].filterNull - if (!regelzeichnung.isNullOrEmpty) { - row.addTopologicalCell( - cols.getColumn( - Fundament_Art_Regelzeichnung)) - } - return (regelzeichnung + fundament).toSet - ], - null, - [toString] - ) - - // W: Ssks.konstruktive_Merkmale.Fundament.Hoehe - fillIterable( - row, - cols.getColumn(Fundament_Hoehe), - signalRahmen, - [ - map[ - fundament?.signalBefestigungAllg?. - hoeheFundamentoberkante?.wert - ].filterNull.toSet - ], - null, - [toTableInteger(1000)] - ) - - // X: Ssks.Anschluss.Schaltkasten.Bezeichnung - fillConditional( - row, - cols.getColumn(Schaltkasten_Bezeichnung), - signal, - [ - stellelement?.energie?.AEAAllg?. - aussenelementansteuerungArt?.wert == - ENUM_AUSSENELEMENTANSTEUERUNG_ART_OBJEKTCONTROLLER - ], - [ - stellelement?.energie?.bezeichnung?. - bezeichnungAEA?.wert - ] - ) - - // Y: Ssks.Anschluss.Schaltkasten.Entfernung - fillConditional( - row, - cols.getColumn(Schaltkasten_Entfernung), - signal, - [controlBox !== null], - [ - distance(controlBox).toTableIntegerAgateUp - ] - ) - - // Z: Ssks.Anschluss.Schaltkasten_separat.Bezeichnung - fillConditional( - row, - cols.getColumn(Schaltkasten_Separat_Bezeichnung), - signal, - [hasSchaltkastenSeparatBezeichnung], - [ - stellelement?.information?.bezeichnung?. - bezeichnungAEA?.wert - ] - ) - - // AA: Ssks.Anschluss.Dauerhaft_Nacht - if (signal.isSsksSignalNichtAndere) { - fillConditional( - row, - cols.getColumn(Dauerhaft_Nacht), - signal, - [isHauptbefestigung], - [ - (signalReal?.signalRealAktiv?. - tunnelsignal?.wert == - ENUM_TUNNELSIGNAL_MIT_DAUERNACHTSCHALTUNG). - translate - ] - ) - } - - // AB: Ssks.Signalisierung.Signalbegriffe_Schirm.Hp_Hl - fillIterable( - row, - cols.getColumn(Schirm_Hp_Hl), - signalRahmen, - [fillSignalisierungHpHl], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AC: Ssks.Signalisierung.Signalbegriffe_Schirm.Ks_Vr - fillIterable( - row, - cols.getColumn(Schirm_Ks_Vr), - signalRahmen, - [fillSignalisierungKsVr], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AD: Ssks.Signalisierung.Signalbegriffe_Schirm.Zl_Kl - fillIterable( - row, - cols.getColumn(Schirm_Zl_Kl), - signalRahmen, - [fillSignalisierungZlKl], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AE: Ssks.Signalisierung.Signalbegriffe_Schirm.Ra_Sh - fillSwitch( - row, - cols.getColumn(Schirm_Ra_Sh), - signal, - new Case( - [ - hasSignalbegriffID(Sh1) && - signalReal?.geltungsbereich.exists [ - wert === ENUMGeltungsbereich. - ENUM_GELTUNGSBEREICH_DV - ] - ], - ["Ra 12"] - ), - new Case( - [ - hasSignalbegriffID(Sh1) && - signalReal?.geltungsbereich.exists [ - wert == ENUMGeltungsbereich. - ENUM_GELTUNGSBEREICH_DS - ] - ], - ["Sh 1"] - ), - new Case([hasSignalbegriffID(Sh1)], ["x"]) - ) - - // AF: Ssks.Signalisierung.Signalbegriffe_Schirm.Zs - fillIterable( - row, - cols.getColumn(Schirm_Zs), - signalRahmen, - [fillSignalisierungSchirmZs], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AG: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_2 - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zs_2), - signalRahmen, - [fillSignalisierungSymbol(typeof(Zs2))], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AH: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_2v - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zs_2v), - signalRahmen, - [fillSignalisierungSymbol(typeof(Zs2v))], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AI: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_3 - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zs_3), - signalRahmen, - [fillSignalisierungSymbolGeschaltet(typeof(Zs3))], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AJ: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_3v - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zs_3v), - signalRahmen, - [ - fillSignalisierungSymbolGeschaltet(typeof(Zs3v)) - ], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AK: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zs), - signalRahmen, - [fillSignalisierungZusatzanzeigerZs], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AL: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zp - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Zp), - signalRahmen, - [fillSignalisierungZp], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AM: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Kombination - fillIterable( - row, - cols.getColumn(Zusatzanzeiger_Kombination), - signalRahmen, - [fillSignalisierungKombination], - null, - [it], - ", " - ) - - // AN: Ssks.Signalisierung.Nachgeordnetes_Signal - fillIterable( - row, - cols.getColumn(Nachgeordnetes_Signal), - signalRahmen, - [ - filter[r|r.IDSignalNachordnung !== null].map [ r | - r.signalNachordnung.bezeichnung. - bezeichnungTabelle.wert - ] + container.signalRahmen.filter [ r | - r?.IDSignalNachordnung?.value?. - identitaet?.wert == - signal.identitaet.wert - ].map [ r | - r.signal.bezeichnung.bezeichnungTabelle.wert - ] - ], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AO: Ssks.Signalisierung.Mastschild - fillIterable( - row, - cols.getColumn(Mastschild), - signalRahmen, - [fillSignalisierungMastschild], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AP: Ssks.Signalisierung.Weitere.Regelzeichnung_Nr - fillIterable( - row, - cols.getColumn(Weitere_Regelzeichnung_Nr), - signal, - [fillSignalisierungWeitere(signalRahmen)], - MIXED_STRING_COMPARATOR, - [it] - ) - - // AQ: Ssks.Sonstiges.Automatische_Fahrtstellung - fill( - row, - cols.getColumn(Automatische_Fahrtstellung), - signal, - [fillSonstigesAutomatischeFahrtstellung] - ) - - // AR: Ssks.Sonstiges.Dunkelschaltung - fill( - row, - cols.getColumn(Dunkelschaltung), - signal, - [fillSonstigesDunkelschaltung] - ) - - // AS: Ssks.Sonstiges.Durchfahrt_erlaubt - fill( - row, - cols.getColumn(Durchfahrt_Erlaubt), - signal, - [fillSonstigesDurchfahrtErlaubt] - ) - - // AT: Ssks.Sonstiges.Besetzte_Ausfahrt - fillConditional( - row, - cols.getColumn(Besetzte_Ausfahrt), - signal, - [signalFstr?.besetzteAusfahrt?.wert !== null], - [signalFstr.besetzteAusfahrt.wert.translate] - ) - - // AU: Ssks.Sonstiges.Loeschung_Zs_1__Zs_7 - fill( - row, - cols.getColumn(Loeschung_Zs_1__Zs_7), - signalRahmen, - [fillSonstigesLoeschungZs1Zs7] - ) - - // AV: Ssks.Sonstiges.Ueberwachung.Zs_2 - fillIterable( - row, - cols.getColumn(Ueberwachung_Zs_2), - signal, - [ - val zs2 = getSignalbegriffe(Zs2).filterNull - // Is there any Zs2 without zs2Ueberwacht = true? - if (zs2.empty || zs2.findFirst [ - signalSignalbegriffAllg?. - zs2Ueberwacht === null || - signalSignalbegriffAllg. - zs2Ueberwacht.wert == false - ] !== null) - return #[""] - - return zs2.map [ - signalbegriffID?.symbol ?: "?" - ] - ], - null - ) - - // AW: Ssks.Sonstiges.Ueberwachung.Zs_2v - fillIterable( - row, - cols.getColumn(Ueberwachung_Zs_2v), - signal, - [ - val zs2v = getSignalbegriffe(Zs2v).filterNull - // Is there any Zs2v without zs2Ueberwacht = true? - if (zs2v.empty || zs2v.findFirst [ - signalSignalbegriffAllg?. - zs2Ueberwacht === null || - signalSignalbegriffAllg. - zs2Ueberwacht.wert == false - ] !== null) - return #[""] - - return zs2v.map [ - signalbegriffID?.symbol ?: "?" - ] - ], - null - ) - - // AX: Ssks.Bemerkung - fill( - row, - cols.getColumn(Bemerkung), - signal, - [fillBemerkung(signalRahmen, row)] - ) - } - } - - } catch (Exception e) { - LOGGER.error('''«e. - -class .simpleName»: «e.message» - failed to transform table contents''', e) - val TableRow row = factory.newTableRow(signal); - fill( - row, - cols.getColumn(Reales_Signal), - signal, - [throw new RuntimeException(e)] - ) - } + // G: Ssks.Standortmerkmale.Sonstige_Zulaessige_Anordnung + fill( + row, + cols.getColumn(Sonstige_Zulaessige_Anordnung), + signal, + [ + signalReal?.signalRealAktiv?.sonstigeZulaessigeAnordnung?. + translate + ] + ) - } + // L: Ssks.Standortmerkmale.Sichtbarkeit.Soll + fillConditional( + row, + cols.getColumn(Sichtbarkeit_Soll), + signal, + [isHauptbefestigung], + [ + signalReal?.signalsichtSoll?.wert?.toString + ] + ) - return factory.table - } + // M: Ssks.Standortmerkmale.Sichtbarkeit.Mindest + fillConditional( + row, + cols.getColumn(Sichtbarkeit_Mindest), + signal, + [isHauptbefestigung], + [ + signalReal?.signalsichtMindest?.wert?.toString + ] + ) - private static def List> getBefestigungsgruppen( - Signal signal) { - val result = new LinkedList> - val rahmen = signal.signalRahmen - val befestigungen = rahmen.map[it -> signalBefestigung].distinctBy [ - value - ].toList + // N: Ssks.Standortmerkmale.Sichtbarkeit.Ist + fillConditional( + row, + cols.getColumn(Sichtbarkeit_Ist), + signal, + [isHauptbefestigung], + [ + signalReal?.signalsichtErreichbar?.wert?.toString + ] + ) - switch mast : befestigungen.filter [ - mastTypeOfSignalWithTwoMast.contains( - value?.signalBefestigungAllg?.befestigungArt?.wert) - ] { - // condition "zwei Befestigungen" - case mast.size == 2: { - val mainMast = befestigungen.filter [ - key.rahmenArt?.wert == ENUM_RAHMEN_ART_SCHIRM - ].filter [ - mastTypeOfSignalWithTwoMast.contains( - value.signalBefestigungAllg?.befestigungArt?.wert) - ].map[value].toSet - val subMast = mast.map[value].filter[!mainMast.contains(it)] - result.add(0, mainMast.toList) - result.add(1, subMast.toList) - } - case mast.size > 2: - throw new IllegalArgumentException('''«signal.bezeichnung?.bezeichnungAussenanlage?.toString» has more than two Befestigung Signal''') - default: - result.add(befestigungen.map[value].toList) - } - return result - } + // O: Ssks.Standortmerkmale.Ausrichtung.Entfernung + fillConditional( + row, + cols.getColumn(Entfernung), + signal, + [isHauptbefestigung], + [ + signalReal?.signalRealAktivSchirm?.richtpunktentfernung?.wert?. + toString + ] + ) - private def String fillBefestigung(Signal_Befestigung befestigung) { - val art = befestigung.signalBefestigungAllg.befestigungArt.wert + // P: Ssks.Standortmerkmale.Ausrichtung.Richtpunkt + fillConditional( + row, + cols.getColumn(Richtpunkt), + signal, + [isHauptbefestigung], + [ + signalReal?.signalRealAktivSchirm?.richtpunkt?.wert + ] + ) - switch (art) { - case ENUM_BEFESTIGUNG_ART_SONSTIGE: - return befestigung.fillBearbeitungsvermerke - default: - return befestigung?.signalBefestigungAllg?.befestigungArt?. - translate - } - } + // S: Ssks.konstruktive_Merkmale.Obere_Lichtpunkthoehe + fillIterable( + row, + cols.getColumn(Obere_Lichtpunkthoehe), + signalRahmen, + [ + map [ + signalBefestigung?.signalBefestigungAllg?. + obereLichtpunkthoehe?.wert + ].toSet.map [ b | + if (b !== null) + (Math.round(b.doubleValue * 1000)).toString + else + "" + ] + ], + null, + [it] + ) - private def String fillBearbeitungsvermerke( - Signal_Befestigung befestigung) { - val bearbeitungsvermerke = befestigung?.signalBefestigungAllg?. - befestigungArt?.IDBearbeitungsvermerk + // T: Ssks.konstruktive_Merkmale.Streuscheibe.Art + fillConditional( + row, + cols.getColumn(Streuscheibe_Art), + signal, + [isHauptbefestigung], + [ + signalReal?.signalRealAktivSchirm?.streuscheibeArt?.translate ?: + "" + ] + ) - if (bearbeitungsvermerke.empty) { - throw new IllegalArgumentException( - '''Befestigung Art of Befestigung «befestigung.identitaet.wert» has no Bearbeitungsvermerke.''' + // U: Ssks.konstruktive_Merkmale.Streuscheibe.Stellung + fillConditional( + row, + cols.getColumn(Streuscheibe_Stellung), + signal, + [isHauptbefestigung], + [ + signalReal?.signalRealAktivSchirm?. + streuscheibeBetriebsstellung?.translate ?: "" + ] + ) + + // X: Ssks.Anschluss.Schaltkasten.Bezeichnung + fillConditional( + row, + cols.getColumn(Schaltkasten_Bezeichnung), + signal, + [ + stellelement?.energie?.AEAAllg?. + aussenelementansteuerungArt?.wert == + ENUM_AUSSENELEMENTANSTEUERUNG_ART_OBJEKTCONTROLLER + ], + [ + stellelement?.energie?.bezeichnung?.bezeichnungAEA?.wert + ] + ) + + // Y: Ssks.Anschluss.Schaltkasten.Entfernung + fillConditional( + row, + cols.getColumn(Schaltkasten_Entfernung), + signal, + [controlBox !== null], + [ + distance(controlBox).toTableIntegerAgateUp + ] + ) + + // Z: Ssks.Anschluss.Schaltkasten_separat.Bezeichnung + fillConditional( + row, + cols.getColumn(Schaltkasten_Separat_Bezeichnung), + signal, + [hasSchaltkastenSeparatBezeichnung], + [ + stellelement?.information?.bezeichnung?.bezeichnungAEA?.wert + ] + ) + + // AA: Ssks.Anschluss.Dauerhaft_Nacht + if (signal.isSsksSignalNichtAndere) { + fillConditional( + row, + cols.getColumn(Dauerhaft_Nacht), + signal, + [isHauptbefestigung], + [ + (signalReal?.signalRealAktiv?.tunnelsignal?.wert == + ENUM_TUNNELSIGNAL_MIT_DAUERNACHTSCHALTUNG).translate + ] ) } - return '''«FOR b : bearbeitungsvermerke SEPARATOR ", "»« - b.value.bearbeitungsvermerkAllg.kurztext.wert»«ENDFOR»''' + // AB: Ssks.Signalisierung.Signalbegriffe_Schirm.Hp_Hl + fillIterable( + row, + cols.getColumn(Schirm_Hp_Hl), + signalRahmen, + [fillSignalisierungHpHl], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AC: Ssks.Signalisierung.Signalbegriffe_Schirm.Ks_Vr + fillIterable( + row, + cols.getColumn(Schirm_Ks_Vr), + signalRahmen, + [fillSignalisierungKsVr], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AD: Ssks.Signalisierung.Signalbegriffe_Schirm.Zl_Kl + fillIterable( + row, + cols.getColumn(Schirm_Zl_Kl), + signalRahmen, + [fillSignalisierungZlKl], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AE: Ssks.Signalisierung.Signalbegriffe_Schirm.Ra_Sh + fillSwitch( + row, + cols.getColumn(Schirm_Ra_Sh), + signal, + new Case( + [ + hasSignalbegriffID(Sh1) && + signalReal?.geltungsbereich.exists [ + wert === ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DV + ] + ], + ["Ra 12"] + ), + new Case( + [ + hasSignalbegriffID(Sh1) && + signalReal?.geltungsbereich.exists [ + wert == ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DS + ] + ], + ["Sh 1"] + ), + new Case([hasSignalbegriffID(Sh1)], ["x"]) + ) + + // AF: Ssks.Signalisierung.Signalbegriffe_Schirm.Zs + fillIterable( + row, + cols.getColumn(Schirm_Zs), + signalRahmen, + [fillSignalisierungSchirmZs], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AG: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_2 + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zs_2), + signalRahmen, + [fillSignalisierungSymbol(typeof(Zs2))], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AH: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_2v + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zs_2v), + signalRahmen, + [fillSignalisierungSymbol(typeof(Zs2v))], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AI: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_3 + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zs_3), + signalRahmen, + [fillSignalisierungSymbolGeschaltet(typeof(Zs3))], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AJ: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs_3v + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zs_3v), + signalRahmen, + [ + fillSignalisierungSymbolGeschaltet(typeof(Zs3v)) + ], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AK: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zs + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zs), + signalRahmen, + [fillSignalisierungZusatzanzeigerZs], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AL: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Zp + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Zp), + signalRahmen, + [fillSignalisierungZp], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AM: Ssks.Signalisierung.Signalbegriffe_Zusatzanzeiger.Kombination + fillIterable( + row, + cols.getColumn(Zusatzanzeiger_Kombination), + signalRahmen, + [fillSignalisierungKombination], + null, + [it], + ", " + ) + + // AN: Ssks.Signalisierung.Nachgeordnetes_Signal + fillIterable( + row, + cols.getColumn(Nachgeordnetes_Signal), + signalRahmen, + [ + filter[r|r.IDSignalNachordnung !== null].map [ r | + r.signalNachordnung.bezeichnung.bezeichnungTabelle.wert + ] + signal.container.signalRahmen.filter [ r | + r?.IDSignalNachordnung?.value?.identitaet?.wert == + signal.identitaet.wert + ].map [ r | + r.signal.bezeichnung.bezeichnungTabelle.wert + ] + ], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AO: Ssks.Signalisierung.Mastschild + fillIterable( + row, + cols.getColumn(Mastschild), + signalRahmen, + [fillSignalisierungMastschild], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AP: Ssks.Signalisierung.Weitere.Regelzeichnung_Nr + fillIterable( + row, + cols.getColumn(Weitere_Regelzeichnung_Nr), + signal, + [fillSignalisierungWeitere(signalRahmen)], + MIXED_STRING_COMPARATOR, + [it] + ) + + // AQ: Ssks.Sonstiges.Automatische_Fahrtstellung + fill( + row, + cols.getColumn(Automatische_Fahrtstellung), + signal, + [fillSonstigesAutomatischeFahrtstellung] + ) + + // AR: Ssks.Sonstiges.Dunkelschaltung + fill( + row, + cols.getColumn(Dunkelschaltung), + signal, + [fillSonstigesDunkelschaltung] + ) + + // AS: Ssks.Sonstiges.Durchfahrt_erlaubt + fill( + row, + cols.getColumn(Durchfahrt_Erlaubt), + signal, + [fillSonstigesDurchfahrtErlaubt] + ) + + // AT: Ssks.Sonstiges.Besetzte_Ausfahrt + fillConditional( + row, + cols.getColumn(Besetzte_Ausfahrt), + signal, + [signalFstr?.besetzteAusfahrt?.wert !== null], + [signalFstr.besetzteAusfahrt.wert.translate] + ) + + // AU: Ssks.Sonstiges.Loeschung_Zs_1__Zs_7 + fill( + row, + cols.getColumn(Loeschung_Zs_1__Zs_7), + signalRahmen, + [fillSonstigesLoeschungZs1Zs7] + ) + + // AV: Ssks.Sonstiges.Ueberwachung.Zs_2 + fillIterable( + row, + cols.getColumn(Ueberwachung_Zs_2), + signal, + [ + val zs2 = getSignalbegriffe(Zs2).filterNull + // Is there any Zs2 without zs2Ueberwacht = true? + if (zs2.empty || zs2.findFirst [ + signalSignalbegriffAllg?.zs2Ueberwacht === null || + signalSignalbegriffAllg.zs2Ueberwacht.wert == false + ] !== null) + return #[""] + + return zs2.map [ + signalbegriffID?.symbol ?: "?" + ] + ], + null + ) + + // AW: Ssks.Sonstiges.Ueberwachung.Zs_2v + fillIterable( + row, + cols.getColumn(Ueberwachung_Zs_2v), + signal, + [ + val zs2v = getSignalbegriffe(Zs2v).filterNull + // Is there any Zs2v without zs2Ueberwacht = true? + if (zs2v.empty || zs2v.findFirst [ + signalSignalbegriffAllg?.zs2Ueberwacht === null || + signalSignalbegriffAllg.zs2Ueberwacht.wert == false + ] !== null) + return #[""] + + return zs2v.map [ + signalbegriffID?.symbol ?: "?" + ] + ], + null + ) + + // AX: Ssks.Bemerkung + fill( + row, + cols.getColumn(Bemerkung), + signal, + [fillBemerkung(signalRahmen, row)] + ) } + private static def boolean isSsksSignal(Signal signal) { if (signal?.signalFiktiv !== null && !signal?.signalFiktiv?.fiktivesSignalFunktion.exists [ @@ -993,15 +661,6 @@ class .simpleName»: «e.message» - failed to transform table contents''', e) ENUM_SIGNAL_FUNKTION_ALLEINSTEHENDES_ZUSATZSIGNAL) } - private static def List fillRegelzeichnung( - List signalRahmen) { - return signalRahmen.map [ - signalBefestigung.IDRegelzeichnung.map [ z | - z?.value.fillRegelzeichnung - ] - ].flatten.toList - } - private static def boolean hasSchaltkastenSeparatBezeichnung( Signal signal) { val stellelement = signal.stellelement @@ -1507,4 +1166,65 @@ class .simpleName»: «e.message» - failed to transform table contents''', e) } return BigDecimal.valueOf(c1.distance(c2)) } + + + override protected getRelevantSignal( + MultiContainer_AttributeGroup contanier) { + return contanier.signal.filter[isSsksSignal] + } + + override protected getAbstandMastMitteColumn() { + return Map.of(ENUMLinksRechts.ENUM_LINKS_RECHTS_LINKS, + cols.getColumn(Mastmitte_Links), + ENUMLinksRechts.ENUM_LINKS_RECHTS_RECHTS, + cols.getColumn(Mastmitte_Rechts)) + } + + override protected getArtRegelzeichnungColumn() { + return cols.getColumn(Fundament_Art_Regelzeichnung) + } + + override protected getBefestigungColumn() { + return cols.getColumn(Befestigung) + } + + override protected getBezeichnungColumn() { + return cols.getColumn(Bezeichnung_Signal) + } + + override protected getFundamentHoeheColumn() { + return cols.getColumn(Fundament_Hoehe) + } + + override protected getKmColumn() { + return cols.getColumn(Km) + } + + override protected getLichtraumProfilColumn() { + return cols.getColumn(Lichtraumprofil) + } + + override protected getRegelzeichnungColumn() { + return cols.getColumn(Anordnung_Regelzeichnung) + } + + override protected getStreckeColumn() { + return cols.getColumn(Strecke) + } + + override protected getUeberhoehungColumn() { + return cols.getColumn(Ueberhoehung) + } + + override protected handledThrowException(TMFactory factory, Signal signal, + Exception e) { + val TableRow row = factory.newTableRow(signal); + fill( + row, + cols.getColumn(Reales_Signal), + signal, + [throw new RuntimeException(e)] + ) + } + } diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxColumns.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxColumns.java new file mode 100644 index 0000000000..1248b4b997 --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxColumns.java @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2026 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table.pt1.sskx; + +/** + * Symbolic addressing for Sskx columns. + * + * @author Truong + */ +@SuppressWarnings("nls") +public class SskxColumns { + /** + * Sskx.Bezeichnung_Signal + */ + public static final String Bezeichnung_Signal = "A"; + + /** + * Sskx.Standortmerkmale.Standort.Strecke + */ + public static final String Strecke = "B"; + + /** + * Sskx.Standortmerkmale.Standort.km + */ + public static final String km = "C"; + + /** + * Sskx.Standortmerkmale.Standort.Gleis + */ + public static final String Gleis = "D"; + + /** + * Sskx.Standortmerkmale.Lichtraumprofil + */ + public static final String Lichtraumprofil = "E"; + + /** + * Sskx.Standortmerkmale.Ueberhoehung + */ + public static final String Ueberhoehung = "F"; + + /** + * Sskx.Standortmerkmale.Abstand_Mastmitte.links + */ + public static final String Abstand_Mastmitte_links = "G"; + + /** + * Sskx.Standortmerkmale.Abstand_Mastmitte.rechts + */ + public static final String Abstand_Mastmitte_rechts = "H"; + + /** + * Sskx.konstruktive_Merkmale.Anordnung.Befestigung + */ + public static final String Befestigung = "I"; + + /** + * Sskx.konstruktive_Merkmale.Anordnung.Regelzeichnung + */ + public static final String Regelzeichnung = "J"; + + /** + * Sskx.konstruktive_Merkmale.Fundament.Art_Regelzeichnung + */ + public static final String Art_Regelzeichnung = "K"; + + /** + * Sskx.konstruktive_Merkmale.Fundament.Hoehe + */ + public static final String Hoehe = "L"; + + /** + * Sskx.Signalisierung.Signalbegriffe.Bezeichnung + */ + public static final String Signalbegriffe_Bezeichnung = "M"; + + /** + * Sskx.Signalisierung.Signalbegriffe.Regelzeichnung + */ + public static final String Signalbegriffe_Regelzeichnung = "N"; + + /** + * Sskx.Bemerkung + */ + public static final String Bemerkung = "O"; +} diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxDescriptionService.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxDescriptionService.java new file mode 100644 index 0000000000..03cfe4b4bf --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxDescriptionService.java @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2024 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table.pt1.sskx; + +import org.eclipse.set.core.services.part.PartDescriptionService; +import org.eclipse.set.feature.table.AbstractESTWSupplementTableDesciption; +import org.eclipse.set.feature.table.pt1.messages.Messages; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * Part description for Sskz table view. + * + * @author Truong + */ +@Component(service = PartDescriptionService.class) +public class SskxDescriptionService + extends AbstractESTWSupplementTableDesciption { + @Reference + Messages messages; + + @Override + protected String getToolboxViewName() { + return messages.SskxDescriptionService_ViewName; + } + + @Override + protected String getToolboxViewTooltip() { + return messages.SskxDescriptionService_ViewTooltip; + } + + @Override + protected String getTableShortcut() { + return messages.ToolboxTableNameSskxShort; + } + +} diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformationService.java b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformationService.java new file mode 100644 index 0000000000..2d5e0f605f --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformationService.java @@ -0,0 +1,114 @@ +/** + * Copyright (c) 2024 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table.pt1.sskx; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.set.basis.constants.Events; +import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; +import org.eclipse.set.core.services.graph.BankService; +import org.eclipse.set.feature.table.PlanPro2TableTransformationService; +import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableTransformationService; +import org.eclipse.set.feature.table.pt1.messages.Messages; +import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup; +import org.eclipse.set.ppmodel.extensions.utils.TableNameInfo; +import org.eclipse.set.utils.table.TableModelTransformator; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventAdmin; +import org.osgi.service.event.EventConstants; +import org.osgi.service.event.EventHandler; + +/** + * Service for creating the Sskz table model. org.eclipse.set.feature.table + * + * @author Truong + */ +@Component(service = { + PlanPro2TableTransformationService.class }, immediate = true, property = { + "table.category=supplement-estw", "table.shortcut=sskx", + EventConstants.EVENT_TOPIC + "=" + Events.CLOSE_PART, + EventConstants.EVENT_TOPIC + "=" + Events.CLOSE_SESSION }) +public class SskxTransformationService extends + AbstractPlanPro2TableTransformationService implements EventHandler { + + @Reference + private Messages messages; + + @Reference + private EnumTranslationService enumTranslationService; + + @Reference + private BankService bankService; + @Reference + private EventAdmin eventAdmin; + + /** + * constructor. + */ + public SskxTransformationService() { + super(); + } + + @Override + protected String getTableHeading() { + return messages.SskxTableView_Heading; + } + + @Override + public TableNameInfo getTableNameInfo() { + return new TableNameInfo(messages.ToolboxTableNameSskxLong, + messages.ToolboxTableNameSskxPlanningNumber, + messages.ToolboxTableNameSskxShort, + messages.ToolboxTableNameSskxRil); + } + + @Override + public TableModelTransformator createTransformator() { + return new SskxTransformator(cols, enumTranslationService, bankService, + eventAdmin, messages.ToolboxTableNameSskxShort); + } + + @Override + public void handleEvent(final Event event) { + final String property = (String) event.getProperty(IEventBroker.DATA); + if (messages.ToolboxTableNameSskxShort.toLowerCase().equals(property) + || event.getTopic().equals(Events.CLOSE_SESSION)) { + Thread.getAllStackTraces().keySet().forEach(thread -> { + if (thread.getName() + .toLowerCase() + .startsWith(messages.ToolboxTableNameSskxShort + .toLowerCase())) { + thread.interrupt(); + } + }); + } + } + + @Override + protected String getShortcut() { + return messages.ToolboxTableNameSskxShort.toLowerCase(); + } + + @Override + protected List getTopologicalColumnPosition() { + return List.of(SskxColumns.Gleis, SskxColumns.Lichtraumprofil); + } + + @Override + protected Map, String> getFootnotesColumnReferences() { + return Collections.emptyMap(); + } +} 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 new file mode 100644 index 0000000000..6e99bac0d1 --- /dev/null +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskx/SskxTransformator.java @@ -0,0 +1,325 @@ +/** + * Copyright (c) 2026 DB InfraGO AG and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v2.0 which is available at + * https://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + */ +package org.eclipse.set.feature.table.pt1.sskx; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; +import org.eclipse.set.core.services.graph.BankService; +import org.eclipse.set.feature.table.pt1.ssks.AbstractSignalTableTransform; +import org.eclipse.set.model.planpro.BasisTypen.ENUMLinksRechts; +import org.eclipse.set.model.planpro.Basisobjekte.Basis_Objekt; +import org.eclipse.set.model.planpro.Geodaten.Technischer_Punkt; +import org.eclipse.set.model.planpro.Gleis.Gleis_Bezeichnung; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne14; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne31str; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne32str; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne33str; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne34str; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne35str; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.OzBk; +import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ra12; +import org.eclipse.set.model.planpro.Signalbegriffe_Struktur.Signalbegriff_ID_TypeClass; +import org.eclipse.set.model.planpro.Signale.ENUMBeleuchtet; +import org.eclipse.set.model.planpro.Signale.ENUMGeltungsbereich; +import org.eclipse.set.model.planpro.Signale.Signal; +import org.eclipse.set.model.planpro.Signale.Signal_Rahmen; +import org.eclipse.set.model.planpro.Signale.Signal_Signalbegriff; +import org.eclipse.set.model.tablemodel.ColumnDescriptor; +import org.eclipse.set.model.tablemodel.TableRow; +import org.eclipse.set.model.tablemodel.extensions.FootnoteExtensions; +import org.eclipse.set.ppmodel.extensions.BasisAttributExtensions; +import org.eclipse.set.ppmodel.extensions.BereichObjektExtensions; +import org.eclipse.set.ppmodel.extensions.EObjectExtensions; +import org.eclipse.set.ppmodel.extensions.SignalExtensions; +import org.eclipse.set.ppmodel.extensions.SignalRahmenExtensions; +import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup; +import org.eclipse.set.utils.table.TMFactory; +import org.osgi.service.event.EventAdmin; + +import com.google.common.collect.Streams; + +/** + * Table transformation for Tabelle der Tafeln (Sskx). + * + * @author Truong + */ +public class SskxTransformator extends AbstractSignalTableTransform { + + private static final String SIGNAL_BEGRIFFE_BEZEICHNUNG_SEPERATOR = ", "; //$NON-NLS-1$ + private static final List> SPEICAL_BEZEICHNUNG_HANDLE_BEGRIFFE = List + .of(Ne31str.class, Ne32str.class, Ne33str.class, Ne34str.class, + Ne35str.class); + + /** + * Constructor + * + * @param cols + * the table columns + * @param bankService + * the {@link BankService} + * @param enumTranslationService + * {@link EnumTranslationService} + * @param eventAdmin + * the {@link EventAdmin} + * @param tableShortcut + * the table shortcut + */ + SskxTransformator(final Set cols, + final EnumTranslationService enumTranslationService, + final BankService bankingService, final EventAdmin eventAdmin, + final String tableShortCut) { + super(cols, enumTranslationService, bankingService, eventAdmin, + tableShortCut); + } + + private static Predicate generalCondition() { + return signal -> { + if (signal.getSignalReal() == null) { + return false; + } + + if (signal.getSignalReal().getSignalRealAktiv() != null + || signal.getSignalReal() + .getSignalRealAktivSchirm() != null) { + return false; + } + + final Set signalbegriffe = SignalExtensions + .getSignalbegriffe(signal); + return signalbegriffe.stream() + .map(Signal_Signalbegriff::getSignalbegriffID) + .noneMatch(begriff -> begriff instanceof Ne14 + || begriff instanceof OzBk + || begriff instanceof Ra12); + }; + } + + private static List getRelevantGleisBezeichnuung( + final Signal signal) { + final MultiContainer_AttributeGroup container = BasisAttributExtensions + .getContainer(signal); + return Streams.stream(container.getGleisBezeichnung()) + .filter(g -> BereichObjektExtensions.contains(g, signal)) + .toList(); + } + + @Override + protected Iterable getRelevantSignal( + final MultiContainer_AttributeGroup container) { + return Streams.stream(container.getSignal()) + .filter(generalCondition()) + .toList(); + } + + @Override + protected void fillSpecifyColumns(final TableRow row, + final MultiContainer_AttributeGroup container, final Signal signal, + final boolean isHauptbefestigung, + final List signalRahmen) { + + // D: Sskx.Standortmerkmale.Standort.Gleis + fillIterable(row, getColumn(cols, SskxColumns.Gleis), signal, + s -> getRelevantGleisBezeichnuung(signal).stream() + .map(gleis -> EObjectExtensions + .getNullableObject(gleis, + g -> g.getBezeichnung() + .getBezGleisBezeichnung() + .getWert()) + .orElse(null)) + .filter(Objects::nonNull) + .toList(), + MIXED_STRING_COMPARATOR); + + // M: Sskx.Signalisierung.Signalbegriffe.Bezeichnung + fillIterable(row, + getColumn(cols, SskxColumns.Signalbegriffe_Bezeichnung), signal, + this::transformSignalbegriffeBezeichnung, + MIXED_STRING_COMPARATOR, s -> s, + SIGNAL_BEGRIFFE_BEZEICHNUNG_SEPERATOR); + + // Sskx.Bermerkung + fillFootnotes(row, signal); + fillIterable(row, getColumn(cols, SskxColumns.Bemerkung), signalRahmen, + rahmen -> rahmen.stream().map(r -> { + final boolean isAngestrahlt = Streams + .stream(SignalRahmenExtensions.getSignalbegriffe(r)) + .anyMatch(begriffe -> EObjectExtensions + .getNullableObject(begriffe, + b -> b.getSignalSignalbegriffAllg() + .getBeleuchtet() + .getWert()) + .orElse(null) == ENUMBeleuchtet.ENUM_BELEUCHTET_ANGESTRAHLT); + if (isAngestrahlt) { + return "angestrahlt"; //$NON-NLS-1$ + } + final Basis_Objekt befestigungBauwerk = EObjectExtensions + .getNullableObject(r, + e -> e.getIDSignalBefestigung() + .getValue() + .getIDBefestigungBauwerk() + .getValue()) + .orElse(null); + if (befestigungBauwerk != null + && befestigungBauwerk instanceof final Technischer_Punkt tp) { + return "Befestigung an " //$NON-NLS-1$ + + tp.getTPBeschreibung().getWert(); + } + + if (r.getRahmenHoehe() != null + && r.getRahmenHoehe().getWert() != null) { + return "Rahmenhöhen beachten"; //$NON-NLS-1$ + } + return null; + }).filter(Objects::nonNull).toList(), MIXED_STRING_COMPARATOR, + s -> s, SIGNAL_BEGRIFFE_BEZEICHNUNG_SEPERATOR); + } + + @Override + protected ColumnDescriptor getFundamentHoeheColumn() { + return getColumn(cols, SskxColumns.Hoehe); + } + + @Override + 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); + } + + @Override + protected Map getAbstandMastMitteColumn() { + return Map.of(ENUMLinksRechts.ENUM_LINKS_RECHTS_LINKS, + getColumn(cols, SskxColumns.Abstand_Mastmitte_links), + ENUMLinksRechts.ENUM_LINKS_RECHTS_RECHTS, + getColumn(cols, SskxColumns.Abstand_Mastmitte_rechts)); + } + + @Override + protected ColumnDescriptor getUeberhoehungColumn() { + return getColumn(cols, SskxColumns.Ueberhoehung); + } + + @Override + protected ColumnDescriptor getLichtraumProfilColumn() { + return getColumn(cols, SskxColumns.Lichtraumprofil); + } + + @Override + protected ColumnDescriptor getStreckeColumn() { + return getColumn(cols, SskxColumns.Strecke); + } + + @Override + protected ColumnDescriptor getKmColumn() { + return getColumn(cols, SskxColumns.km); + } + + @Override + protected ColumnDescriptor getBezeichnungColumn() { + return getColumn(cols, SskxColumns.Bezeichnung_Signal); + } + + @Override + protected void handledThrowException(final TMFactory factory, + final Signal signal, final Exception e) { + // do nothing + } + + private List transformSignalbegriffeBezeichnung( + final Signal signal) { + final List geltungsbereich = signal.getSignalReal() + .getGeltungsbereich() + .stream() + .map(bereich -> bereich.getWert()) + .filter(Objects::nonNull) + .toList(); + if (geltungsbereich.isEmpty()) { + return getSignalbegriffeBezeichnung(signal, + signalbegriffBezeichnungSelections(null)); + } + return geltungsbereich.stream().flatMap(geltung -> switch (geltung) { + case ENUM_GELTUNGSBEREICH_DS -> getSignalbegriffeBezeichnung(signal, + signalbegriffBezeichnungSelections( + ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DS)) + .stream(); + case ENUM_GELTUNGSBEREICH_DV -> getSignalbegriffeBezeichnung(signal, + signalbegriffBezeichnungSelections( + ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DV)) + .stream(); + default -> Stream.empty(); + }).toList(); + } + + private static List> signalbegriffBezeichnungSelections( + final ENUMGeltungsbereich geltung) { + final LinkedList> selectBezeichnungFuncs = new LinkedList<>(); + // When Geltungsbereich_DS or without Geltungsbereich + if (geltung == ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DS + || geltung == null) { + selectBezeichnungFuncs + .add(Signalbegriff_ID_TypeClass::getKurzbezeichnungDS); + } + + // When Geltungsbereich_DV or without Geltungsbereich + if (geltung == ENUMGeltungsbereich.ENUM_GELTUNGSBEREICH_DV + || geltung == null) { + selectBezeichnungFuncs + .add(Signalbegriff_ID_TypeClass::getKurzbezeichnungDV); + } + + selectBezeichnungFuncs + .add(Signalbegriff_ID_TypeClass::getLangbezeichnung); + selectBezeichnungFuncs.add(FootnoteExtensions::getSignalBregiffIDName); + return selectBezeichnungFuncs; + } + + private static List getSignalbegriffeBezeichnung( + final Signal signal, + final List> selectBezeichnungFunc) { + return SignalExtensions.getSignalbegriffe(signal) + .stream() + .map(Signal_Signalbegriff::getSignalbegriffID) + .map(signalBegriffe -> { + if (SPEICAL_BEZEICHNUNG_HANDLE_BEGRIFFE.stream() + .anyMatch(c -> c.isInstance(signalBegriffe))) { + return FootnoteExtensions + .getSignalBregiffIDName(signalBegriffe); + } + for (final Function function : selectBezeichnungFunc) { + final String bezeichnung = function + .apply(signalBegriffe); + if (bezeichnung != null && !bezeichnung.isEmpty()) { + return bezeichnung; + } + } + return null; + }) + .filter(Objects::nonNull) + .toList(); + + } +} diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractESTWSupplementTableDesciption.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractESTWSupplementTableDesciption.java index bc200d8e80..877e3ebfd6 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractESTWSupplementTableDesciption.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/AbstractESTWSupplementTableDesciption.java @@ -10,8 +10,8 @@ */ package org.eclipse.set.feature.table; +import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.basis.viewgroups.ToolboxViewGroup; -import org.eclipse.set.utils.table.TableInfo.Pt1TableCategory; import org.eclipse.set.utils.viewgroups.SetViewGroups; /** @@ -27,6 +27,6 @@ public ToolboxViewGroup getToolboxViewGroup() { @Override protected String getTableIdPrefix() { - return Pt1TableCategory.ESTW_SUPPLEMENT.getId(); + return ToolboxConstants.ESTW_SUPPLEMENT_PART_ID_PREFIX; } } diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java index 1cf90daa9e..7437fa52e0 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java @@ -181,7 +181,6 @@ private Table createDiffStateTable(final TableInfo tableInfo, final IModelSession modelSession) { final PlanPro2TableTransformationService modelService = getModelService( tableInfo); - final Table startTable = modelService .transform(PlanProSchnittstelleExtensions.getContainer( modelSession.getPlanProSchnittstelle(), @@ -403,7 +402,6 @@ public Table transformToTable(final TableInfo tableInfo, getModelService(tableInfo).buildHeading(emptyTable); return emptyTable; } - final Table resultTable = TableServiceUtils.filterRequestValue( EcoreUtil.copy(table), tableInfo, tableType, modelSession, controlAreaIds); diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java index 3e3d4d24d2..a593c4f193 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java @@ -37,6 +37,7 @@ import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; import org.eclipse.set.model.planpro.Block.Block_Anlage; import org.eclipse.set.model.planpro.Block.Block_Element; +import org.eclipse.set.model.planpro.Signale.Signal; import org.eclipse.set.model.tablemodel.CellContent; import org.eclipse.set.model.tablemodel.CompareFootnoteContainer; import org.eclipse.set.model.tablemodel.CompareStateCellContent; @@ -51,6 +52,7 @@ import org.eclipse.set.ppmodel.extensions.BasisAttributExtensions; import org.eclipse.set.ppmodel.extensions.EObjectExtensions; import org.eclipse.set.ppmodel.extensions.MultiContainer_AttributeGroupExtensions; +import org.eclipse.set.ppmodel.extensions.SignalExtensions; import org.eclipse.set.ppmodel.extensions.StellBereichExtensions; import org.eclipse.set.ppmodel.extensions.UrObjectExtensions; import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup; @@ -133,7 +135,7 @@ protected static List getCachedTableError( default -> throw new IllegalArgumentException(); }; return filterElementBelongToControlArea(errorsByCurrentTableState, - getObj, controlAreaIds, modelSession, null); + tableInfo, getObj, controlAreaIds, modelSession, null); } /** @@ -260,15 +262,14 @@ protected static Table filterRequestValue(final Table table, return result; } if (tableType == TableType.DIFF) { - filterRowGroupBelongToControlAreaByDiffState(result, modelsession, - controlAreaIds); + filterRowGroupBelongToControlAreaByDiffState(result, tableInfo, + modelsession, controlAreaIds); result.getTablecontent() .getRowgroups() .removeIf(group -> !UrObjectExtensions .isPlanningObject(group.getLeadingObject())); return result; } - result.getTablecontent().getRowgroups().removeIf(group -> { final Pair initalFinalObj = getInitalFinalObj( group.getLeadingObject(), modelsession); @@ -282,8 +283,8 @@ protected static Table filterRequestValue(final Table table, .toList(); return !UrObjectExtensions.isPlanningObject(leadingObj) || !areas.isEmpty() && areas.stream() - .noneMatch(area -> StellBereichExtensions - .isInControlArea(area, leadingObj)); + .noneMatch(area -> isLeadingObjecBelongToArea( + leadingObj, area, tableInfo)); }); return result; @@ -306,9 +307,8 @@ private static Table filterTableByState(final Table table, if (compareStateRows.isEmpty()) { return table; } - compareStateRows.forEach(row -> { - transformCompareCellContent(row, tableType); - }); + compareStateRows + .forEach(row -> transformCompareCellContent(row, tableType)); TableExtensions.getTableRows(table) .stream() @@ -363,13 +363,14 @@ private static void transformCompareFootnote(final TableRow compareRow, } private static void filterRowGroupBelongToControlAreaByDiffState( - final Table result, final IModelSession modelsession, + final Table result, final TableInfo tableInfo, + final IModelSession modelsession, final Set controlAreaIds) { if (controlAreaIds.isEmpty()) { return; } final List relevantRowGroup = filterElementBelongToControlArea( - result.getTablecontent().getRowgroups(), + result.getTablecontent().getRowgroups(), tableInfo, rowGroup -> UrObjektEachContainer.createInstance( rowGroup.getLeadingObject(), modelsession), controlAreaIds, modelsession, @@ -384,7 +385,7 @@ private static void filterRowGroupBelongToControlAreaByDiffState( } private static List filterElementBelongToControlArea( - final List listElement, + final List listElement, final TableInfo tableInfo, final Function getUrObj, final Set controlAreas, final IModelSession modelSession, final BiConsumer handleByInitialOrFinalElementNotBelongToArea) { @@ -396,7 +397,7 @@ private static List filterElementBelongToControlArea( .toList(); return listElement.stream().filter(ele -> { final Ur_Objekt obj = getUrObj.apply(ele).singleObj(); - return isElementBelongToAreas(obj, areas); + return isElementBelongToAreas(obj, tableInfo, areas); }).toList(); } final List inititalControlAreas = controlAreas.stream() @@ -412,9 +413,10 @@ private static List filterElementBelongToControlArea( return listElement.stream().filter(ele -> { final UrObjektEachContainer objEachContainer = getUrObj.apply(ele); final boolean isInitialObjBelongToAreas = isElementBelongToAreas( - objEachContainer.initalObj(), inititalControlAreas); + objEachContainer.initalObj(), tableInfo, + inititalControlAreas); final boolean isFinalObjBelongToAreas = isElementBelongToAreas( - objEachContainer.finalObj(), finalControlAreas); + objEachContainer.finalObj(), tableInfo, finalControlAreas); if (isInitialObjBelongToAreas != isFinalObjBelongToAreas && handleByInitialOrFinalElementNotBelongToArea != null) { handleByInitialOrFinalElementNotBelongToArea.accept(ele, @@ -445,14 +447,15 @@ private static Pair getInitalFinalObj( } private static boolean isElementBelongToAreas(final Ur_Objekt element, - final List areas) { + final TableInfo tableInfo, final List areas) { // Special case for block element: When this block element does not // belong // to area, but is relevant block element of another block element, // which belongs to control area, then return true // See: ppmtab - General condition and // SslbTransformator#findRelevantBlockElements for more information - if (element instanceof final Block_Element blockElement) { + if (tableInfo.shortcut().equalsIgnoreCase("Sslb") //$NON-NLS-1$ + && element instanceof final Block_Element blockElement) { if (isInControlArea(areas, blockElement)) { return true; } @@ -474,9 +477,32 @@ private static boolean isElementBelongToAreas(final Ur_Objekt element, : targetAnlage.get() .getIDBlockElementA() .getValue(); - return isInControlArea(areas, anotherBlockElement); + return isLeadObjecctBelongToArea(anotherBlockElement, areas, + tableInfo); + } + return isLeadObjecctBelongToArea(element, areas, tableInfo); + } + + private static boolean isLeadObjecctBelongToArea(final Ur_Objekt leadingObj, + final List areas, final TableInfo tableInfo) { + return areas.stream() + .anyMatch(area -> isLeadingObjecBelongToArea(leadingObj, area, + tableInfo)); + } + + private static boolean isLeadingObjecBelongToArea( + final Ur_Objekt leadingObj, final Stell_Bereich area, + final TableInfo tableInfo) { + // Specify handle for Signal tabelle + if (leadingObj instanceof final Signal signal) { + if (tableInfo.shortcut().equalsIgnoreCase("Ssks")) { //$NON-NLS-1$ + return SignalExtensions.isSsksSignalBelongToArea(signal, area); + } else if (tableInfo.shortcut().equalsIgnoreCase("Sskx")) { //$NON-NLS-1$ + return SignalExtensions.isSskxSignalBelongToArea(signal, area); + } } - return isInControlArea(areas, element); + + return StellBereichExtensions.isInControlArea(area, leadingObj); } private static BiConsumer handleTableRowNotBelongToArea() { diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableErrorTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableErrorTableView.java index 22797c0440..6a850ba312 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableErrorTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableErrorTableView.java @@ -14,7 +14,6 @@ import org.eclipse.emf.common.util.ECollections; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; -import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.basis.files.ToolboxFile; import org.eclipse.set.core.services.Services; import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; @@ -148,13 +147,9 @@ public String getTableShortcut() { @Override public String getTableCategory() { - if (part.getToolboxPart() - .getElementId() - .startsWith( - ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX)) { - return Pt1TableCategory.ESTW.getId(); - } - return Pt1TableCategory.ETCS.getId(); + final String elementId = part.getToolboxPart().getElementId(); + return Pt1TableCategory.getCategoryFromPartId(elementId) + .getId(); } }; } diff --git a/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/sskx_vorlage.xlsx b/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/sskx_vorlage.xlsx new file mode 100644 index 0000000000..2a96d2119e Binary files /dev/null and b/java/bundles/org.eclipse.set.feature/rootdir/data/export/excel/sskx_vorlage.xlsx differ diff --git a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java index 384c394dba..e46d977c66 100644 --- a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java +++ b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java @@ -298,21 +298,26 @@ private static Pair getPrefix( } final Signalbegriff_ID_TypeClass signalBegriffId = signalBegriff .getSignalbegriffID(); - final String prefix = getSignalBregiffIDName(signalBegriffId) - .replace("_", " ");//$NON-NLS-1$ //$NON-NLS-2$ + final String prefix = getSignalBregiffIDName(signalBegriffId); if (withSymbol && signalBegriffId.getSymbol() != null) { return new Pair<>(prefix, signalBegriffId.getSymbol()); } return new Pair<>(prefix, null); } - private static String getSignalBregiffIDName( + /** + * @param signalBegriffId + * the {@link Signalbegriff_ID_TypeClass} + * @return the name of this signalbegriff + */ + public static String getSignalBregiffIDName( final Signalbegriff_ID_TypeClass signalBegriffId) { try { return signalBegriffId.eClass() .getEAnnotation(ExtendedMetaData.ANNOTATION_URI) .getDetails() - .get("name"); //$NON-NLS-1$ + .get("name") //$NON-NLS-1$ + .replace("_", " "); //$NON-NLS-1$ //$NON-NLS-2$ } catch (final Exception e) { return signalBegriffId.eClass().getName(); } diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/DwegExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/DwegExtensions.xtend index 6f9d07584a..3fcad6f93d 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/DwegExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/DwegExtensions.xtend @@ -22,7 +22,7 @@ import org.eclipse.set.model.planpro.Ortung.FMA_Anlage import static extension org.eclipse.set.ppmodel.extensions.FahrwegExtensions.* import static extension org.eclipse.set.ppmodel.extensions.PunktObjektExtensions.* -import static extension org.eclipse.set.ppmodel.extensions.StellBereichExtensions.* +import static extension org.eclipse.set.ppmodel.extensions.SignalExtensions.* /** * Extensions for {@link Fstr_DWeg}. @@ -101,11 +101,11 @@ class DwegExtensions extends BasisObjektExtensions { pathToFma.getDistance(new TopPoint(it)).isPresent ] } - + def static boolean isBelongToControlArea(Fstr_DWeg fstrDWeg, Stell_Bereich controlArea) { - return controlArea. - isInControlArea(fstrDWeg.IDFstrFahrweg?.value?.IDStart?.value) + return fstrDWeg.IDFstrFahrweg?.value?.IDStart?.value. + isSsksSignalBelongToArea(controlArea) } } diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrAneinanderExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrAneinanderExtensions.xtend index d7f368e913..6a49c068fd 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrAneinanderExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrAneinanderExtensions.xtend @@ -19,7 +19,7 @@ import org.eclipse.set.model.planpro.Signale.Signal import static extension org.eclipse.set.ppmodel.extensions.FahrwegExtensions.* import static extension org.eclipse.set.ppmodel.extensions.FstrZugRangierExtensions.* -import static extension org.eclipse.set.ppmodel.extensions.StellBereichExtensions.* +import static extension org.eclipse.set.ppmodel.extensions.SignalExtensions.* /** * This class extends {@link Fstr_Aneinander}. @@ -138,7 +138,6 @@ class FstrAneinanderExtensions extends BasisObjektExtensions { def static boolean isBelongToControlArea(Fstr_Aneinander fstrAneinander, Stell_Bereich controlArea) { - return - controlArea.isInControlArea(fstrAneinander.startSignal) + return fstrAneinander.startSignal.isSsksSignalBelongToArea(controlArea) } } diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrZugRangierExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrZugRangierExtensions.xtend index 59e093738c..f45b9a92b8 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrZugRangierExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/FstrZugRangierExtensions.xtend @@ -52,7 +52,6 @@ import static extension org.eclipse.set.ppmodel.extensions.PunktObjektTopKanteEx import static extension org.eclipse.set.ppmodel.extensions.SignalExtensions.* import static extension org.eclipse.set.ppmodel.extensions.SignalRahmenExtensions.* import static extension org.eclipse.set.ppmodel.extensions.SignalbegriffExtensions.* -import static extension org.eclipse.set.ppmodel.extensions.StellBereichExtensions.* import static extension org.eclipse.set.ppmodel.extensions.WKrGspKomponenteExtensions.* import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensions.* import static extension org.eclipse.set.utils.math.BigIntegerExtensions.* @@ -446,7 +445,7 @@ class FstrZugRangierExtensions extends BasisObjektExtensions { return false } val startSignal = fstrZugRangier?.IDFstrFahrweg?.value?.IDStart?.value - return controlArea.isInControlArea(startSignal) + return startSignal.isSsksSignalBelongToArea(controlArea) } private def static boolean isZugStrBelongToControlArea( @@ -462,7 +461,7 @@ class FstrZugRangierExtensions extends BasisObjektExtensions { } // TODO: 2. Condition for target signal isn't clearly return startSignal !== null && - startSignal.isBelongToControlArea(controlArea) + startSignal.isSsksSignalBelongToArea(controlArea) } def static Signal getStartSignal(Fstr_Zug_Rangier fstrZug) { diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalExtensions.xtend b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalExtensions.xtend index 72e17dc64f..0fa8b6d78c 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalExtensions.xtend +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/SignalExtensions.xtend @@ -10,6 +10,7 @@ package org.eclipse.set.ppmodel.extensions import java.math.BigDecimal import java.util.Collections +import java.util.LinkedList import java.util.List import java.util.Set import org.eclipse.core.runtime.Assert @@ -29,6 +30,8 @@ import org.eclipse.set.model.planpro.Ortung.FMA_Komponente import org.eclipse.set.model.planpro.Ortung.Schaltmittel_Zuordnung import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Zs3v import org.eclipse.set.model.planpro.Signalbegriffe_Struktur.Signalbegriff_ID_TypeClass +import org.eclipse.set.model.planpro.Signale.ENUMBefestigungArt +import org.eclipse.set.model.planpro.Signale.ENUMRahmenArt 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 @@ -56,6 +59,7 @@ import static extension org.eclipse.set.ppmodel.extensions.SignalbegriffExtensio import static extension org.eclipse.set.ppmodel.extensions.StellelementExtensions.* import static extension org.eclipse.set.ppmodel.extensions.utils.CollectionExtensions.* import static extension org.eclipse.set.ppmodel.extensions.utils.Debug.* +import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensions.* /** * This class extends {@link Signal}. @@ -430,7 +434,7 @@ class SignalExtensions extends PunktObjektExtensions { // Tolerant distance in meter static final double tolerantDistance = 1 - def static boolean isBelongToControlArea(Signal signal, + def static boolean isSsksSignalBelongToArea(Signal signal, Stell_Bereich controlArea) { val stellElement = signal.stellelement if (stellElement?.IDEnergie?.value.isBelongToControlArea(controlArea) || @@ -473,6 +477,10 @@ class SignalExtensions extends PunktObjektExtensions { } return false } + + def static boolean isSskxSignalBelongToArea(Signal signal, Stell_Bereich area) { + return area.contains(signal, tolerantDistance) + } def static List getFmaKomponenten(Signal signal) { val fstrFahrwegs = signal.container.fstrFahrweg.filter [ @@ -489,4 +497,36 @@ class SignalExtensions extends PunktObjektExtensions { def static String getTableBezeichnung(Signal signal) { return signal?.bezeichnung?.bezeichnungTabelle?.wert } + + def static List> getBefestigungsgruppen( + Signal signal, List mastTypeOfSignalWithTwoMast) { + val result = new LinkedList> + val rahmen = signal.signalRahmen + val befestigungen = rahmen.map[it -> signalBefestigung].distinctBy [ + value + ].toList + + switch mast : befestigungen.filter [ + mastTypeOfSignalWithTwoMast.contains( + value?.signalBefestigungAllg?.befestigungArt?.wert) + ] { + // condition "zwei Befestigungen" + case mast.size == 2: { + val mainMast = befestigungen.filter [ + key.rahmenArt?.wert == ENUMRahmenArt.ENUM_RAHMEN_ART_SCHIRM + ].filter [ + mastTypeOfSignalWithTwoMast.contains( + value.signalBefestigungAllg?.befestigungArt?.wert) + ].map[value].toSet + val subMast = mast.map[value].filter[!mainMast.contains(it)] + result.add(0, mainMast.toList) + result.add(1, subMast.toList) + } + case mast.size > 2: + throw new IllegalArgumentException('''«signal.bezeichnung?.bezeichnungAussenanlage?.toString» has more than two Befestigung Signal''') + default: + result.add(befestigungen.map[value].toList) + } + return result + } } diff --git a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/StellBereichExtensions.java b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/StellBereichExtensions.java index d6df9e48e5..b37470fd2b 100644 --- a/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/StellBereichExtensions.java +++ b/java/bundles/org.eclipse.set.ppmodel.extensions/src/org/eclipse/set/ppmodel/extensions/StellBereichExtensions.java @@ -31,6 +31,7 @@ import org.eclipse.set.model.planpro.Bahnuebergang.BUE_Anlage; import org.eclipse.set.model.planpro.Bahnuebergang.BUE_Kante; import org.eclipse.set.model.planpro.Basisobjekte.Bereich_Objekt; +import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt; import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; import org.eclipse.set.model.planpro.Bedienung.Bedien_Bezirk; import org.eclipse.set.model.planpro.Bedienung.Bedien_Einrichtung_Oertlich; @@ -51,7 +52,6 @@ import org.eclipse.set.model.planpro.Ortung.Zugeinwirkung; import org.eclipse.set.model.planpro.PZB.PZB_Element; import org.eclipse.set.model.planpro.Schluesselabhaengigkeiten.Schloss; -import org.eclipse.set.model.planpro.Signale.Signal; import org.eclipse.set.model.planpro.Weichen_und_Gleissperren.W_Kr_Gsp_Element; import org.eclipse.set.model.planpro.Weichen_und_Gleissperren.W_Kr_Gsp_Komponente; import org.eclipse.set.model.planpro.Zugnummernmeldeanlage.ZN_ZBS; @@ -219,6 +219,7 @@ public static boolean isInControlArea(final List areas, * the element * @return true, if the element belong to the area */ + @SuppressWarnings("nls") public static boolean isInControlArea(final Stell_Bereich area, final Ur_Objekt object) { if (object == null) { @@ -239,8 +240,6 @@ public static boolean isInControlArea(final Stell_Bereich area, .isBelongToControlArea(zugeinwirkung, area); case final PZB_Element pzb -> PZBElementExtensions .isBelongToControlArea(pzb, area); - case final Signal signal -> SignalExtensions - .isBelongToControlArea(signal, area); case final Technik_Standort standort -> TechnikStandortExtensions .isBelongToControlArea(standort, area); case final Bedien_Standort standort -> BedienStandortExtensions @@ -287,6 +286,8 @@ public static boolean isInControlArea(final Stell_Bereich area, .intersects(area, bueAnlage); case final Schloss schloss -> SchlossExtensions .isBelongToControlArea(area, schloss); + case final Punkt_Objekt po -> BereichObjektExtensions.contains(area, + po, 1); default -> throw new IllegalArgumentException( "Unsupported object " + object.toString()); }; diff --git a/java/bundles/org.eclipse.set.swtbot/SWTBot.launch b/java/bundles/org.eclipse.set.swtbot/SWTBot.launch index ea4a8e20b8..83df9d82c0 100644 --- a/java/bundles/org.eclipse.set.swtbot/SWTBot.launch +++ b/java/bundles/org.eclipse.set.swtbot/SWTBot.launch @@ -26,22 +26,22 @@ - + - + - + - + @@ -438,9 +438,6 @@ - - - @@ -519,6 +516,7 @@ + @@ -566,12 +564,16 @@ + + + + diff --git a/java/bundles/org.eclipse.set.swtbot/src/org/eclipse/set/swtbot/table/PtTable.java b/java/bundles/org.eclipse.set.swtbot/src/org/eclipse/set/swtbot/table/PtTable.java index 579a47bea5..b1c9e45295 100644 --- a/java/bundles/org.eclipse.set.swtbot/src/org/eclipse/set/swtbot/table/PtTable.java +++ b/java/bundles/org.eclipse.set.swtbot/src/org/eclipse/set/swtbot/table/PtTable.java @@ -75,6 +75,8 @@ public record PtTable(String shortcut, String tableName, String category, "Sszw – ETCS Melde- und Kommandoanschaltung Weichen", "etcs", List.of(0)), new PtTable("sskz", "Sskz – Zuordnungstabelle FEAK/FEAS", - "supplement-estw", List.of(0))); + "supplement-estw", List.of(0)), + new PtTable("sskx", "Sskx – Tabelle der Tafeln", "supplement-estw", + List.of(0))); } diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A Linksdorf/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A Linksdorf/sskx_reference.csv new file mode 100644 index 0000000000..f7f6bf69b8 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A Linksdorf/sskx_reference.csv @@ -0,0 +1,21 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +2;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +3;"

Vorsignalbake ​km: ​117,730

";"

8980

";"

117,730

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +4;"

Vorsignalbake ​km: ​117,805

";"

8980

";"

117,805

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +5;"

Vorsignalbake ​km: ​117,880

";"

8980

";"

117,880

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A P-Hausen/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A P-Hausen/sskx_reference.csv new file mode 100644 index 0000000000..52c940eb34 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/ESTW-A P-Hausen/sskx_reference.csv @@ -0,0 +1,71 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Bü ​4 ​km: ​0,657

";"

8981

";"

0,657

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +2;"

Bü ​4 ​km: ​0,827

";"

8981

";"

0,827

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +3;"

Lf ​6 ​'10' ​km: ​119,685

";"

8980

";"

119,685

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​l

";"

";"

" +4;"

Lf ​6 ​'2' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +5;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

22

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​r

";"

";"

" +6;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

21

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +7;"

Lf ​7 ​'10' ​km: ​120,635

";"

8980

";"

120,635

";"

22

";"

GC

";"

40

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +8;"

Lf ​7 ​'10' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +9;"

Lf ​7 ​'10' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +10;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +11;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

(2)​ +

2

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +12;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

11

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +13;"

Lf ​7 ​'12' ​km: ​119,418

";"

8980

";"

119,418

";"

1

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +14;"

Lf ​7 ​'12' ​km: ​119,539

";"

8980

";"

119,539

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +15;"

Lf ​7 ​'12' ​km: ​120,637

";"

8980

";"

120,637

";"

21

";"

GC

";"

55

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +16;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +17;"

Lf ​7 ​'16' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +18;"

Lf ​7 ​'2' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +19;"

Lf ​7 ​'2' ​km: ​0,755

";"

8981

";"

0,755

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +20;"

Lf ​7 ​'5' ​km: ​18,363

";"

8982

";"

18,363

";"

23

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +21;"

Lf ​7 ​'6' ​km: ​18,718

";"

8982

";"

18,718

";"

3

";"

GC

";"

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +22;"

Lf ​7 ​'8' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +23;"

Lf ​7 ​'8' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +24;"

Lf ​7 ​'8' ​km: ​0,750

";"

8981

";"

0,750

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +25;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(2)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +26;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +27;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +28;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +29;"

Ra ​10 ​km: ​119,183

";"

8980

";"

119,183

";"

11

";"

GC

";"

35

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(1)​

";"

";"

";"

Ra ​10

";"

";"

" +30;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

22

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(2)​

";"

";"

";"

Ra ​10

";"

";"

" +31;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

21

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(7)​

";"

";"

";"

Ra ​10

";"

";"

" +32;"

Sh ​2 ​60W4R

";"

8980

";"

119,398

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +33;"

Sh ​2 ​60W52L

";"

8980

";"

119,899

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +34;"

Sh ​2 ​Gl. ​20

";"

8981

";"

-​0,152

";"

20

";"

GC

";"

0

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +35;"

Vorsignalbake ​km: ​117,754

";"

8980

";"

117,754

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +36;"

Vorsignalbake ​km: ​117,822

";"

8980

";"

117,822

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +37;"

Vorsignalbake ​km: ​117,890

";"

8980

";"

117,890

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +38;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +39;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +40;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +41;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +42;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +43;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 3/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 3/sskx_reference.csv new file mode 100644 index 0000000000..d685a295b7 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 3/sskx_reference.csv @@ -0,0 +1,24 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Lf ​6 ​'2' ​km: ​1,455

";"

8981

";"

1,455

";"

(1)​ +

20

";"

GC

";"

70

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +2;"

Vorsignalbake ​km: ​1,150

";"

8981

";"

1,150

";"

(1)​ +

20

";"

GC

";"

100

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +3;"

Vorsignalbake ​km: ​1,225

";"

8981

";"

1,225

";"

(1)​ +

20

";"

GC

";"

72

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +4;"

Vorsignalbake ​km: ​1,300

";"

8981

";"

1,300

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 4/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 4/sskx_reference.csv new file mode 100644 index 0000000000..319ba28762 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 4/sskx_reference.csv @@ -0,0 +1,17 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Vorsignalbake ​km: ​17,027

";"

8982

";"

17,027

";"

(1)​

";"

GC

";"

80

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 5/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 5/sskx_reference.csv new file mode 100644 index 0000000000..c5d7390d54 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/Stellbereich 5/sskx_reference.csv @@ -0,0 +1,18 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(2)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +2;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(1)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/sskx_reference.csv new file mode 100644 index 0000000000..f9345a522d --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/diffState/sskx_reference.csv @@ -0,0 +1,87 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Bü ​4 ​km: ​0,657

";"

8981

";"

0,657

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +2;"

Bü ​4 ​km: ​0,827

";"

8981

";"

0,827

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +3;"

Lf ​6 ​'10' ​km: ​119,685

";"

8980

";"

119,685

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​l

";"

";"

" +4;"

Lf ​6 ​'2' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +5;"

Lf ​6 ​'2' ​km: ​1,455

";"

8981

";"

1,455

";"

(1)​ +

20

";"

GC

";"

70

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +6;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

22

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​r

";"

";"

" +7;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

21

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +8;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(2)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +9;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(1)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +10;"

Lf ​7 ​'10' ​km: ​120,635

";"

8980

";"

120,635

";"

22

";"

GC

";"

40

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +11;"

Lf ​7 ​'10' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +12;"

Lf ​7 ​'10' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +13;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +14;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +15;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

(2)​ +

2

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +16;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

11

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +17;"

Lf ​7 ​'12' ​km: ​119,418

";"

8980

";"

119,418

";"

1

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +18;"

Lf ​7 ​'12' ​km: ​119,539

";"

8980

";"

119,539

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +19;"

Lf ​7 ​'12' ​km: ​120,637

";"

8980

";"

120,637

";"

21

";"

GC

";"

55

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +20;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +21;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +22;"

Lf ​7 ​'16' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +23;"

Lf ​7 ​'2' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +24;"

Lf ​7 ​'2' ​km: ​0,755

";"

8981

";"

0,755

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +25;"

Lf ​7 ​'5' ​km: ​18,363

";"

8982

";"

18,363

";"

23

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +26;"

Lf ​7 ​'6' ​km: ​18,718

";"

8982

";"

18,718

";"

3

";"

GC

";"

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +27;"

Lf ​7 ​'8' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +28;"

Lf ​7 ​'8' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +29;"

Lf ​7 ​'8' ​km: ​0,750

";"

8981

";"

0,750

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +30;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(2)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +31;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +32;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +33;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +34;"

Ra ​10 ​km: ​119,183

";"

8980

";"

119,183

";"

11

";"

GC

";"

35

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(1)​

";"

";"

";"

Ra ​10

";"

";"

" +35;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

22

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(2)​

";"

";"

";"

Ra ​10

";"

";"

" +36;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

21

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(7)​

";"

";"

";"

Ra ​10

";"

";"

" +37;"

Sh ​2 ​60W4R

";"

8980

";"

119,398

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +38;"

Sh ​2 ​60W52L

";"

8980

";"

119,899

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +39;"

Sh ​2 ​Gl. ​20

";"

8981

";"

-​0,152

";"

20

";"

GC

";"

0

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +40;"

Vorsignalbake ​km: ​1,150

";"

8981

";"

1,150

";"

(1)​ +

20

";"

GC

";"

100

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +41;"

Vorsignalbake ​km: ​1,225

";"

8981

";"

1,225

";"

(1)​ +

20

";"

GC

";"

72

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +42;"

Vorsignalbake ​km: ​1,300

";"

8981

";"

1,300

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +43;"

Vorsignalbake ​km: ​117,730

";"

8980

";"

117,730

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +44;"

Vorsignalbake ​km: ​117,754

";"

8980

";"

117,754

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +45;"

Vorsignalbake ​km: ​117,805

";"

8980

";"

117,805

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +46;"

Vorsignalbake ​km: ​117,822

";"

8980

";"

117,822

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +47;"

Vorsignalbake ​km: ​117,880

";"

8980

";"

117,880

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +48;"

Vorsignalbake ​km: ​117,890

";"

8980

";"

117,890

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +49;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +50;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +51;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +52;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +53;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +54;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +55;"

Vorsignalbake ​km: ​17,027

";"

8982

";"

17,027

";"

(1)​

";"

GC

";"

80

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/finalState/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/finalState/sskx_reference.csv new file mode 100644 index 0000000000..e251cd4a81 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/finalState/sskx_reference.csv @@ -0,0 +1,87 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

Bü ​4 ​km: ​0,657

";"

8981

";"

0,657

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +2;"

Bü ​4 ​km: ​0,827

";"

8981

";"

0,827

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +3;"

Lf ​6 ​'10' ​km: ​119,685

";"

8980

";"

119,685

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​l

";"

";"

" +4;"

Lf ​6 ​'2' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +5;"

Lf ​6 ​'2' ​km: ​1,455

";"

8981

";"

1,455

";"

(1)​ +

20

";"

GC

";"

70

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +6;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

22

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​r

";"

";"

" +7;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

21

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +8;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(2)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +9;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(1)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +10;"

Lf ​7 ​'10' ​km: ​120,635

";"

8980

";"

120,635

";"

22

";"

GC

";"

40

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +11;"

Lf ​7 ​'10' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +12;"

Lf ​7 ​'10' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +13;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +14;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +15;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

(2)​ +

2

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +16;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

11

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +17;"

Lf ​7 ​'12' ​km: ​119,418

";"

8980

";"

119,418

";"

1

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +18;"

Lf ​7 ​'12' ​km: ​119,539

";"

8980

";"

119,539

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +19;"

Lf ​7 ​'12' ​km: ​120,637

";"

8980

";"

120,637

";"

21

";"

GC

";"

55

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +20;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +21;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +22;"

Lf ​7 ​'16' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +23;"

Lf ​7 ​'2' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +24;"

Lf ​7 ​'2' ​km: ​0,755

";"

8981

";"

0,755

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +25;"

Lf ​7 ​'5' ​km: ​18,363

";"

8982

";"

18,363

";"

23

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +26;"

Lf ​7 ​'6' ​km: ​18,718

";"

8982

";"

18,718

";"

3

";"

GC

";"

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +27;"

Lf ​7 ​'8' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +28;"

Lf ​7 ​'8' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +29;"

Lf ​7 ​'8' ​km: ​0,750

";"

8981

";"

0,750

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +30;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(2)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +31;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +32;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +33;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +34;"

Ra ​10 ​km: ​119,183

";"

8980

";"

119,183

";"

11

";"

GC

";"

35

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(1)​

";"

";"

";"

Ra ​10

";"

";"

" +35;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

22

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(2)​

";"

";"

";"

Ra ​10

";"

";"

" +36;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

21

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(7)​

";"

";"

";"

Ra ​10

";"

";"

" +37;"

Sh ​2 ​60W4R

";"

8980

";"

119,398

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +38;"

Sh ​2 ​60W52L

";"

8980

";"

119,899

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +39;"

Sh ​2 ​Gl. ​20

";"

8981

";"

-​0,152

";"

20

";"

GC

";"

0

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +40;"

Vorsignalbake ​km: ​1,150

";"

8981

";"

1,150

";"

(1)​ +

20

";"

GC

";"

100

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +41;"

Vorsignalbake ​km: ​1,225

";"

8981

";"

1,225

";"

(1)​ +

20

";"

GC

";"

72

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +42;"

Vorsignalbake ​km: ​1,300

";"

8981

";"

1,300

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +43;"

Vorsignalbake ​km: ​117,730

";"

8980

";"

117,730

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +44;"

Vorsignalbake ​km: ​117,754

";"

8980

";"

117,754

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +45;"

Vorsignalbake ​km: ​117,805

";"

8980

";"

117,805

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +46;"

Vorsignalbake ​km: ​117,822

";"

8980

";"

117,822

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +47;"

Vorsignalbake ​km: ​117,880

";"

8980

";"

117,880

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +48;"

Vorsignalbake ​km: ​117,890

";"

8980

";"

117,890

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +49;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +50;"

Vorsignalbake ​km: ​122,586

";"

8980

";"

122,586

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +51;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +52;"

Vorsignalbake ​km: ​122,661

";"

8980

";"

122,661

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +53;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +54;"

Vorsignalbake ​km: ​122,731

";"

8980

";"

122,731

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +55;"

Vorsignalbake ​km: ​17,027

";"

8982

";"

17,027

";"

(1)​

";"

GC

";"

80

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/initialState/sskx_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/initialState/sskx_reference.csv new file mode 100644 index 0000000000..17ae6a16d0 --- /dev/null +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/initialState/sskx_reference.csv @@ -0,0 +1,87 @@ +Row;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O +;"Bezeichnung +Signal";Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Standortmerkmale​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Konstruktive Merkmale​​​​​​​​;Signalisierung​​​​​​​​​​​​;Signalisierung​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Standort​;Standort​;Standort​;Lichtraum-profil​​​​;Über-höhung​​​​​;"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";"Abstand +Mastmitte - Gleismitte +(Gleisabstand)​​​​​​";Anordnung​​​​​​​​;Anordnung​​​​​​​​;Fundament​​​​​​​​​​;Fundament​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Signalbegriff​​​​​​​​​​​​;Bemerkung​​​​​​​​​​​​​​ +;"Bezeichnung +Signal";Strecke​;km​​;Gleis​​​;Lichtraum-profil​​​​;Über-höhung​​​​​;Links​​​​​​;Rechts​​​​​​​;Befestigung​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​";"Art/ +Rz. Nr. (Bild)​​​​​​​​​​";"Höhe +u. SO​​​​​​​​​​​";Bezeichnung​​​​​​​​​​​​;"Regelzeichnung +Nr. (Bild)​​​​​​​​​​​​​";Bemerkung​​​​​​​​​​​​​​ +;;;;;;mm;mm;mm;;;;mm;;; +1;"

";"

8981

";"

1,150

";"

(1)​ +

20

";"

GC

";"

100

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +2;"

";"

8981

";"

1,225

";"

(1)​ +

20

";"

GC

";"

72

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +3;"

";"

8981

";"

1,300

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +4;"

";"

8980

";"

117,822

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +5;"

";"

8980

";"

117,880

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +6;"

";"

8980

";"

117,890

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +7;"

";"

8980

";"

122,586

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +8;"

";"

8980

";"

122,586

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +9;"

";"

8980

";"

122,661

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +10;"

";"

8980

";"

122,661

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" +11;"

";"

8980

";"

122,731

";"

(2)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +12;"

";"

8980

";"

122,731

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +13;"

";"

8982

";"

17,027

";"

(1)​

";"

GC

";"

80

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​1str

";"

";"

" +14;"

Bü ​4 ​km: ​0,657

";"

8981

";"

0,657

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +15;"

Bü ​4 ​km: ​0,827

";"

8981

";"

0,827

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

Regelanordnung ​Mast ​hoch

";"

";"

";"

";"

Bü ​4

";"

";"

" +16;"

Lf ​6 ​'10' ​km: ​119,685

";"

8980

";"

119,685

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​l

";"

";"

" +17;"

Lf ​6 ​'2' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +18;"

Lf ​6 ​'2' ​km: ​1,455

";"

8981

";"

1,455

";"

(1)​ +

20

";"

GC

";"

70

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +19;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

22

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6, ​Lf ​Pf ​r

";"

";"

" +20;"

Lf ​6 ​'9' ​km: ​121,200

";"

8980

";"

121,200

";"

21

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +21;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(2)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +22;"

Lf ​6 ​'9' ​km: ​124,570

";"

8980

";"

124,570

";"

(1)​

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​6

";"

";"

" +23;"

Lf ​7 ​'10' ​km: ​120,635

";"

8980

";"

120,635

";"

22

";"

GC

";"

40

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +24;"

Lf ​7 ​'10' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +25;"

Lf ​7 ​'10' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +26;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +27;"

Lf ​7 ​'12' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +28;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

(2)​ +

2

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +29;"

Lf ​7 ​'12' ​km: ​119,240

";"

8980

";"

119,240

";"

11

";"

GC

";"

35

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +30;"

Lf ​7 ​'12' ​km: ​119,418

";"

8980

";"

119,418

";"

1

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +31;"

Lf ​7 ​'12' ​km: ​119,539

";"

8980

";"

119,539

";"

2

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +32;"

Lf ​7 ​'12' ​km: ​120,637

";"

8980

";"

120,637

";"

21

";"

GC

";"

55

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

S ​501.34.3 ​(1)​

";"

";"

";"

Lf ​7

";"

";"

" +33;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(1)​

";"

GC

";"

67

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +34;"

Lf ​7 ​'16' ​km: ​117,100

";"

8980

";"

117,100

";"

(2)​ +

2

";"

GC

";"

65

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +35;"

Lf ​7 ​'16' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +36;"

Lf ​7 ​'2' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +37;"

Lf ​7 ​'2' ​km: ​0,755

";"

8981

";"

0,755

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +38;"

Lf ​7 ​'5' ​km: ​18,363

";"

8982

";"

18,363

";"

23

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +39;"

Lf ​7 ​'6' ​km: ​18,718

";"

8982

";"

18,718

";"

3

";"

GC

";"

";"

";"

";"

sonstige ​Regelanordnung ​niedrig

";"

S ​501.34.3 ​(3)​

";"

";"

";"

Lf ​7

";"

";"

" +40;"

Lf ​7 ​'8' ​km: ​0,065

";"

8981

";"

0,065

";"

20

";"

GC

";"

1

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +41;"

Lf ​7 ​'8' ​km: ​0,735

";"

8981

";"

0,735

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +42;"

Lf ​7 ​'8' ​km: ​0,750

";"

8981

";"

0,750

";"

(1)​ +

20

";"

GC

";"

0

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

BS ​Zusatz, ​Lf ​7

";"

";"

" +43;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(2)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +44;"

Lf ​7 ​'9' ​km: ​122,200

";"

8980

";"

122,200

";"

(1)​

";"

GC

";"

5

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +45;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(2)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +46;"

Lf ​7 ​'9' ​km: ​123,570

";"

8980

";"

123,570

";"

(1)​

";"

GC

";"

38

";"

";"

";"

sonstige ​Regelanordnung ​hoch

";"

";"

";"

";"

Lf ​7

";"

";"

" +47;"

Ra ​10 ​km: ​119,183

";"

8980

";"

119,183

";"

11

";"

GC

";"

35

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(1)​

";"

";"

";"

Ra ​10

";"

";"

" +48;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

22

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(2)​

";"

";"

";"

Ra ​10

";"

";"

" +49;"

Ra ​10 ​km: ​121,050

";"

8980

";"

121,050

";"

21

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​516.2.6 ​(7)​

";"

";"

";"

Ra ​10

";"

";"

" +50;"

Sh ​2 ​60W4R

";"

8980

";"

119,398

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +51;"

Sh ​2 ​60W52L

";"

8980

";"

119,899

";"

";"

GC

";"

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +52;"

Sh ​2 ​Gl. ​20

";"

8981

";"

-​0,152

";"

20

";"

GC

";"

0

";"

";"

";"

Prellbock

";"

";"

";"

";"

Sh ​2

";"

";"

" +53;"

Vorsignalbake ​km: ​117,730

";"

8980

";"

117,730

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +54;"

Vorsignalbake ​km: ​117,754

";"

8980

";"

117,754

";"

(2)​ +

2

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​3str

";"

";"

" +55;"

Vorsignalbake ​km: ​117,805

";"

8980

";"

117,805

";"

(1)​

";"

GC

";"

0

";"

";"

";"

Pfahl

";"

S ​526.2.6 ​(1)​

";"

";"

";"

Ne ​3 ​2str

";"

";"

" diff --git a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableInfo.java b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableInfo.java index b1d080f214..b530fba3c9 100644 --- a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableInfo.java +++ b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableInfo.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; +import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.utils.viewgroups.SetViewGroups; /** @@ -88,6 +89,55 @@ public static Pt1TableCategory getCategoryEnum( final String categoryId) { return categories.get(categoryId); } + + /** + * Get table part prefix from category + * + * @param categoryId + * the {@link Pt1TableCategory#getId()} + * @return the table part prefix + */ + public static String getTablePartPrefix(final String categoryId) { + return getTablePartPrefix(getCategoryEnum(categoryId)); + } + + /** + * Get table part prefix from category + * + * @param category + * the {@link Pt1TableCategory} + * @return the table part prefix + */ + public static String getTablePartPrefix( + final Pt1TableCategory category) { + return switch (category) { + case ESTW -> ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX; + case ETCS -> ToolboxConstants.ETCS_TABLE_PART_ID_PREFIX; + case ESTW_SUPPLEMENT -> ToolboxConstants.ESTW_SUPPLEMENT_PART_ID_PREFIX; + case SUPPLEMENT -> ToolboxConstants.SUPPLEMENT_TABLE_PART_ID_PREFIX; + }; + } + + /** + * Determine the table category from part id + * + * @param partId + * the part id + * @return the {@link Pt1TableCategory} + */ + public static Pt1TableCategory getCategoryFromPartId( + final String partId) { + if (partId.startsWith(ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX)) { + return Pt1TableCategory.ESTW; + } else if (partId + .startsWith(ToolboxConstants.ETCS_TABLE_PART_ID_PREFIX)) { + return Pt1TableCategory.ETCS; + } else if (partId.startsWith( + ToolboxConstants.ESTW_SUPPLEMENT_PART_ID_PREFIX)) { + return Pt1TableCategory.ESTW_SUPPLEMENT; + } + throw new IllegalArgumentException(); + } } /**