Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.ToIntFunction;

import org.eclipse.nebula.widgets.nattable.sort.SortDirectionEnum;
import org.eclipse.set.basis.constants.TableType;
Expand Down Expand Up @@ -153,16 +153,15 @@ public Comparator<RowGroup> getRowGroupComparator(

}

@SuppressWarnings("boxing")
private static Comparator<String> frequencyComparator() {
return (first, second) -> {
final Function<String, Integer> getPiority = value -> {
final ToIntFunction<String> getPiority = value -> {
return FREQUENCY_ODER.indexOf(
value.replace(SskpTransformator.GUE_ADDITION, "") //$NON-NLS-1$
.trim());
};
return Integer.compareUnsigned(getPiority.apply(first),
getPiority.apply(second));
return Integer.compareUnsigned(getPiority.applyAsInt(first),
getPiority.applyAsInt(second));
};
}

Expand All @@ -176,9 +175,8 @@ public ColumnDescriptor fillHeaderDescriptions(
SskpColumns.GeschwindigkeitsKlasse, //
SskpColumns.PZB_Schutzstrecke_Soll, //
SskpColumns.PZB_Schutzstrecke_Ist)
.forEach(it -> getColumnDescriptor(it).ifPresent(col -> {
col.setMergeCommonValues(RowMergeMode.DISABLED);
}));
.forEach(it -> getColumnDescriptor(it).ifPresent(col -> col
.setMergeCommonValues(RowMergeMode.DISABLED)));

return cd;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.eclipse.set.model.planpro.Fahrstrasse.Fstr_DWeg
import org.eclipse.set.model.planpro.PZB.ENUMPZBArt
import org.eclipse.set.model.planpro.PZB.ENUMWirksamkeitFstr
import org.eclipse.set.model.planpro.PZB.PZB_Element
import org.eclipse.set.model.planpro.PZB.PZB_Element_Zuordnung_BP_AttributeGroup
import org.eclipse.set.model.planpro.PZB.util.PZBValidator
import org.eclipse.set.model.planpro.Signalbegriffe_Ril_301.Ne5
import org.eclipse.set.model.planpro.Signale.ENUMSignalArt
Expand All @@ -38,6 +39,7 @@ import static org.eclipse.set.basis.constants.ToolboxConstants.NUMERIC_COMPARATO
import static org.eclipse.set.feature.table.pt1.sskp.SskpColumns.*

import static extension org.eclipse.set.ppmodel.extensions.BasisAttributExtensions.*
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.PZBElementExtensions.*
import static extension org.eclipse.set.ppmodel.extensions.PunktObjektExtensions.*
Expand Down Expand Up @@ -84,37 +86,40 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
val isPZB2000 = pzb.PZBArt?.wert ===
ENUMPZBArt.ENUMPZB_ART_2000_HZ ||
pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_1000_2000_HZ
val fstrDwegs = pzb?.fstrDWegs

if (!isPZB2000 || fstrDwegs.nullOrEmpty ||
pzb.PZBElementGM === null) {
val instance = rg.newTableRow()
fillRowGroupContent(instance, pzb, null)
} else {
pzb?.fstrDWegs?.forEach [
pzb.PZBElementZuordnungBP.forEach [
val fstrDwegs = pzb?.getFstrDWegs(
IDPZBElementBezugspunkt?.value).toList

if (!isPZB2000 || fstrDwegs.nullOrEmpty ||
pzb.PZBElementGM === null) {
val instance = rg.newTableRow()
fillRowGroupContent(instance, pzb, it)
]
}
fillRowContent(instance, pzb, it, null)
} else {
fstrDwegs.forEach [ dweg |
val instance = rg.newTableRow()
fillRowContent(instance, pzb, it, dweg)
]
}
]
}

return factory.table
}

private def fillRowGroupContent(TableRow instance, PZB_Element pzb,
private def fillRowContent(TableRow instance, PZB_Element pzb,
PZB_Element_Zuordnung_BP_AttributeGroup pzbElementZuordnungBP,
Fstr_DWeg dweg) {

val pzbGUEs = (pzb.container.PZBElement.map[PZBElementGUE].filterNull.
filter[IDPZBElementMitnutzung?.value === pzb] +
#[pzb.PZBElementGUE]).filterNull

val bezugsElement = pzbElementZuordnungBP?.IDPZBElementBezugspunkt?.
value
// A: Sskp.Bezug.BezugsElement
fillIterable(
fill(
instance,
cols.getColumn(Bezugselement),
pzb,
[bezugsElementBezeichnungen],
MIXED_STRING_COMPARATOR
bezugsElement,
[bezugElementBezeichnung]
)

// B: Sskp.Bezug.Wirkfrequenz
Expand All @@ -129,7 +134,6 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {

val isPZB2000 = pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_2000_HZ ||
pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_1000_2000_HZ

if (isPZB2000 && dweg !== null && pzb.PZBElementGM !== null) {
// C: Sskp.PZB_Schutzstrecke.PZB_Schutzpunkt
fill(
Expand Down Expand Up @@ -229,56 +233,59 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
}

// G: Sskp.Gleismagnete.Wirksamkeit
fillIterable(
fill(
instance,
cols.getColumn(Wirksamkeit),
pzb,
pzbElementZuordnungBP,
[
PZBElementZuordnungBP.map [ pzbZuordnungBp |
switch (pzbZuordnungBp.wirksamkeit?.wert) {
case ENUM_WIRKSAMKEIT_SCHALTBAR_VON_SIGNAL,
case ENUM_WIRKSAMKEIT_SONSTIGE: {
pzbZuordnungBp.wirksamkeit?.translate
}
case ENUM_WIRKSAMKEIT_STAENDIG_WIRKSAM: {
// IMPROVE: Special case due to model limitatations. A future model should introduce
// separate values for STAENDING_WIRKSAM and STAENDING_AKTIV
if (pzb.PZBElementGUE !== null &&
pzb.PZBElementGUE.IDPZBElementMitnutzung ===
null) {
"stä. akt."
} else {
"stä. wirk."
}

switch (wirksamkeit?.wert) {
case ENUM_WIRKSAMKEIT_SCHALTBAR_VON_SIGNAL,
case ENUM_WIRKSAMKEIT_SONSTIGE: {
wirksamkeit?.translate
}
case ENUM_WIRKSAMKEIT_STAENDIG_WIRKSAM: {
// IMPROVE: Special case due to model limitatations. A future model should introduce
// separate values for STAENDING_WIRKSAM and STAENDING_AKTIV
if (pzb.PZBElementGUE !== null &&
pzb.PZBElementGUE.IDPZBElementMitnutzung === null) {
"stä. akt."
} else {
"stä. wirk."
}
}
]
],
null
}
]
)

// H: Sskp.Gleismagnete.Wirksamkeit_Bedingung
val bueSpezifischeSignals = pzb.container.BUESpezifischesSignal.filter [
pzb.PZBElementBezugspunkt.filter(Signal).filter [
signalReal.signalFunktion.wert === ENUMSignalFunktion.
ENUM_SIGNAL_FUNKTION_BUE_UEBERWACHUNGSSIGNAL
].exists[signal|signal === IDSignal.value]
val bueSpezifischeSignals = bezugsElement instanceof Signal
? pzb.container.BUESpezifischesSignal.filter [
IDSignal?.value === bezugsElement &&
IDSignal?.value?.signalReal?.signalFunktion?.wert ===
ENUMSignalFunktion.
ENUM_SIGNAL_FUNKTION_BUE_UEBERWACHUNGSSIGNAL
]
: #[]
val zuordnungFstr = pzb.PZBElementZuordnungFstr.filter [
!(bezugsElement instanceof Signal) ||
IDFstrZugRangier?.value?.fstrFahrweg.zielSignal ===
bezugsElement
]
fillSwitch(
instance,
cols.getColumn(Wirksamkeit_Bedingung),
pzb,
new Case<PZB_Element>(
[
!PZBElementZuordnungFstr.map[IDFstrZugRangier?.value].
empty || (PZBElementGUE !== null &&
PZBElementZuordnungFstr.exists [
!zuordnungFstr.empty || (PZBElementGUE !== null &&
zuordnungFstr.exists [
wirksamkeitFstr?.wert === ENUMWirksamkeitFstr.
ENUM_WIRKSAMKEIT_FSTR_STAENDIG_WIRKSAM_WENN_FAHRSTRASSE_EINGESTELLT
])
],
[
PZBElementZuordnungFstr.map [ pzbZuordnung |
zuordnungFstr.map [ pzbZuordnung |
val wirksamKeit = pzbZuordnung?.wirksamkeitFstr?.
translate
val fstrZugRangier = pzbZuordnung.IDFstrZugRangier?.
Expand All @@ -291,13 +298,13 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
),
new Case<PZB_Element>(
[
PZBElementZuordnungFstr.exists [
zuordnungFstr.exists [
wirksamkeitFstr?.wert == ENUMWirksamkeitFstr.
ENUM_WIRKSAMKEIT_FSTR_SONSTIGE
]
],
[
PZBElementZuordnungFstr.flatMap [
zuordnungFstr.flatMap [
wirksamkeitFstr?.IDBearbeitungsvermerk
].map [
value?.bearbeitungsvermerkAllg?.kurztext?.wert
Expand All @@ -310,8 +317,8 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
[!bueSpezifischeSignals.empty],
[
bueSpezifischeSignals.map [
IDBUEAnlage?.value?.bezeichnung?.bezeichnungTabelle?.
wert
IDBUEAnlage?.value?.bezeichnung?.
bezeichnungTabelle?.wert
]
],
ITERABLE_FILLING_SEPARATOR,
Expand All @@ -320,35 +327,29 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
)

// I: Sskp.Gleismagnete.Abstand_Signal_Weiche
fillIterable(
fill(
instance,
cols.getColumn(Abstand_Signal_Weiche),
pzb,
[
PZBElementBezugspunkt.filterNull.map [ bezugpunkt |
getDistanceSignalTrackSwitch(it, bezugpunkt,
getDistanceScale)
]
],
null
getDistanceSignalTrackSwitch(it, bezugsElement,
getDistanceScale)
]
)

// J: Sskp.Gleismagnete.Abstand_GM_2000
fillIterable(
instance,
cols.getColumn(Abstand_GM_2000),
pzb,
[distanceToPZB2000],
[distanceToPZB2000(bezugsElement)],
MIXED_STRING_COMPARATOR
)

if (pzb.PZBElementZuordnungBP !== null &&
pzb.PZBElementZuordnungBP.exists [
PZBElementZuordnungINA !== null
] && isPZB2000) {
val inaGefahrstelles = pzb.PZBElementZuordnungBP.map [
INAGefahrstelle
].flatten
if (pzbElementZuordnungBP !== null &&
pzbElementZuordnungBP.PZBElementZuordnungINA !== null &&
isPZB2000) {
val inaGefahrstelles = pzbElementZuordnungBP.INAGefahrstelle

val gefahrstelle = inaGefahrstelles.filter [
prioritaetGefahrstelle?.wert.intValue === 1
Expand Down Expand Up @@ -397,12 +398,12 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
ITERABLE_FILLING_SEPARATOR
)

val bahnSteigKantes = pzb?.PZBElementZuordnungBP?.map [
PZBElementZuordnungINA
]?.map[IDBahnsteigKante?.value].toList
val bahnSteigKante = pzbElementZuordnungBP.PZBElementZuordnungINA.
IDBahnsteigKante?.value

val bahnsteigDistance = SskpBahnsteigUtils.
getBahnsteigDistances(bahnSteigKantes, pzb)
getBahnsteigDistances(#[bahnSteigKante], pzb)

// M: Sskp.Ina.Abstand_GM_2000_Bahnsteig.Abstand_GM_2000_Bahnsteig_Anfang
fillConditional(
instance,
Expand Down Expand Up @@ -489,7 +490,6 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
pzb,
[""]
)

} else {
for (var i = 10; i < 17; i++) {
fillBlank(instance, i)
Expand Down Expand Up @@ -628,9 +628,9 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
getPointsDistance(pzb, signal).min, scaleValue)
val directionSign = topGraphService.
isInWirkrichtungOfSignal(signal, pzb) ? "+" : "-"
return distance == 0.0
? distance.toTableDecimal(scaleValue)
: '''«directionSign»«distance.toTableDecimal(scaleValue)»'''
return distance == 0.0 ? distance.
toTableDecimal(
scaleValue) : '''«directionSign»«distance.toTableDecimal(scaleValue)»'''
}

val bueSpezifischesSignal = signal.container.BUESpezifischesSignal.
Expand Down Expand Up @@ -695,8 +695,10 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
return 0;
}

private def Iterable<String> distanceToPZB2000(PZB_Element pzb) {
if (pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_2000_HZ) {
private def Iterable<String> distanceToPZB2000(PZB_Element pzb,
Basis_Objekt bezugsElement) {
if (pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_2000_HZ ||
!(bezugsElement instanceof Signal)) {
return #[]
}
val pzbGM2000 = pzb.container.PZBElement.filter [ pzbEle |
Expand All @@ -706,17 +708,16 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
ENUMPZBArt.ENUMPZB_ART_1000_2000_HZ) &&
pzbEle?.PZBElementGM !== null
].toList
val bezugspunktSignals = pzb.PZBElementBezugspunkt.filter(Signal)
val relevantPZB2000 = pzbGM2000.filter [ pzbEle |
if (pzb.PZBArt?.wert === ENUMPZBArt.ENUMPZB_ART_500_HZ) {
return pzbEle.PZBElementBezugspunkt.filter(Signal).exists [ signal |
bezugspunktSignals.contains(signal)
signal === bezugsElement
]
}

return pzbEle.PZBZuordnungSignal.map[IDSignal?.value].filterNull.
exists [ signal |
bezugspunktSignals.contains(signal)
signal === bezugsElement
]
].filterNull
return relevantPZB2000.map [ pzbEle |
Expand Down
Loading
Loading