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 @@ -49,6 +49,7 @@ import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensi
import static extension org.eclipse.set.utils.math.BigDecimalExtensions.*
import static extension org.eclipse.set.utils.math.BigIntegerExtensions.*
import static extension org.eclipse.set.utils.math.DoubleExtensions.*
import org.eclipse.set.model.planpro.PZB.PZB_Element_Zuordnung_BP_AttributeGroup

/**
* Table transformation for a PZB-Tabelle (Sskp)
Expand Down Expand Up @@ -84,37 +85,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 +133,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 +232,57 @@ 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
]
: #[]

fillSwitch(
instance,
cols.getColumn(Wirksamkeit_Bedingung),
pzb,
new Case<PZB_Element>(
[
!PZBElementZuordnungFstr.map[IDFstrZugRangier?.value].
empty || (PZBElementGUE !== null &&
PZBElementZuordnungFstr.exists [
wirksamkeitFstr?.wert === ENUMWirksamkeitFstr.
ENUM_WIRKSAMKEIT_FSTR_STAENDIG_WIRKSAM_WENN_FAHRSTRASSE_EINGESTELLT
])
!pzb.PZBElementZuordnungFstr.map[IDFstrZugRangier?.value].
empty ||
(PZBElementGUE !== null &&
pzb.PZBElementZuordnungFstr.exists [
wirksamkeitFstr?.wert === ENUMWirksamkeitFstr.
ENUM_WIRKSAMKEIT_FSTR_STAENDIG_WIRKSAM_WENN_FAHRSTRASSE_EINGESTELLT
])
],
[
PZBElementZuordnungFstr.map [ pzbZuordnung |
pzb.PZBElementZuordnungFstr.map [ pzbZuordnung |
val wirksamKeit = pzbZuordnung?.wirksamkeitFstr?.
translate
val fstrZugRangier = pzbZuordnung.IDFstrZugRangier?.
Expand All @@ -291,13 +295,13 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
),
new Case<PZB_Element>(
[
PZBElementZuordnungFstr.exists [
pzb.PZBElementZuordnungFstr.exists [
wirksamkeitFstr?.wert == ENUMWirksamkeitFstr.
ENUM_WIRKSAMKEIT_FSTR_SONSTIGE
]
],
[
PZBElementZuordnungFstr.flatMap [
pzb.PZBElementZuordnungFstr.flatMap [
wirksamkeitFstr?.IDBearbeitungsvermerk
].map [
value?.bearbeitungsvermerkAllg?.kurztext?.wert
Expand All @@ -310,8 +314,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 +324,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 +395,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 +487,6 @@ class SskpTransformator extends AbstractPlanPro2TableModelTransformator {
pzb,
[""]
)

} else {
for (var i = 10; i < 17; i++) {
fillBlank(instance, i)
Expand Down Expand Up @@ -695,8 +692,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 +705,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
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,13 @@ class PZBElementExtensions extends BasisObjektExtensions {
] ?: emptyList
}

def static Iterable<Fstr_DWeg> getFstrDWegs(PZB_Element pzb) {
val bezugspunkts = pzb.PZBElementBezugspunkt?.filter(Signal)
val fstrFahrwegs = pzb.container.fstrFahrweg.filter [ fstrFahrweg |
(bezugspunkts ?: #[]).filterNull.exists [
it === fstrFahrweg?.IDStart?.value
]
]
return fstrFahrwegs.map[fstrDweg].flatten
def static Iterable<Fstr_DWeg> getFstrDWegs(PZB_Element pzb,
Basis_Objekt bezugspunkt) {
if (bezugspunkt !== null && bezugspunkt instanceof Signal) {
return pzb.container.fstrFahrweg.filter[bezugspunkt === IDStart?.value].
filterNull.flatMap[fstrDweg]
}
return #[]
}

def static Iterable<PZB_Element_Zuordnung_BP_AttributeGroup> getPZBElementZuordnungBP(
Expand Down Expand Up @@ -109,8 +108,7 @@ class PZBElementExtensions extends BasisObjektExtensions {
]
}

static dispatch def String getBezugElementBezeichnung(
Basis_Objekt object) {
static dispatch def String getBezugElementBezeichnung(Basis_Objekt object) {
throw new IllegalArgumentException(object.class.simpleName)
}

Expand All @@ -119,12 +117,11 @@ class PZBElementExtensions extends BasisObjektExtensions {
return object?.bezeichnung?.bezeichnungTabelle?.wert
}

static dispatch def String getBezugElementBezeichnung(
Signal object) {
static dispatch def String getBezugElementBezeichnung(Signal object) {
return object?.signalReal?.signalFunktion?.wert ===
ENUMSignalFunktion.ENUM_SIGNAL_FUNKTION_BUE_UEBERWACHUNGSSIGNAL
? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»''' : object?.
bezeichnung?.bezeichnungTabelle?.wert
? '''BÜ-K «object?.bezeichnung?.bezeichnungTabelle?.wert»'''
: object?.bezeichnung?.bezeichnungTabelle?.wert
}

private def static dispatch Stellelement getStellelement(
Expand Down
Loading
Loading