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 @@ -99,6 +99,7 @@ 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 extension org.eclipse.set.ppmodel.extensions.AussenelementansteuerungExtensions.*
import static extension org.eclipse.set.ppmodel.extensions.BasisAttributExtensions.*
import static extension org.eclipse.set.ppmodel.extensions.GeoPunktExtensions.*
import static extension org.eclipse.set.ppmodel.extensions.PunktObjektExtensions.*
Expand Down Expand Up @@ -138,7 +139,7 @@ class SsksTransformator extends AbstractSignalTableTransform {
super(cols, enumTranslationService, bankingService, eventAdmin,
tableShortCut)
}

override protected fillSpecifyColumns(TableRow row,
MultiContainer_AttributeGroup container, Signal signal,
boolean isHauptbefestigung, List<Signal_Rahmen> signalRahmen) {
Expand Down Expand Up @@ -299,32 +300,35 @@ class SsksTransformator extends AbstractSignalTableTransform {
streuscheibeBetriebsstellung?.translate ?: ""
]
)
try {
// X: Ssks.Anschluss.Schaltkasten.Bezeichnung
val energieAea = signal.getControlElement([stellelement?.energie],
#[ENUM_AUSSENELEMENTANSTEUERUNG_ART_OBJEKTCONTROLLER])
fill(
row,
cols.getColumn(Schaltkasten_Bezeichnung),
signal,
[
energieAea?.bezeichnung?.bezeichnungAEA?.wert
]
)

// 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
]
)
// Y: Ssks.Anschluss.Schaltkasten.Entfernung
fillConditional(
row,
cols.getColumn(Schaltkasten_Entfernung),
signal,
[energieAea?.unterbringung !== null],
[
distance(energieAea?.unterbringung).toTableIntegerAgateUp
]
)
} catch (Exception e) {
handleFillingException(e, row,
cols.getColumn(Schaltkasten_Bezeichnung))
handleFillingException(e, row,
cols.getColumn(Schaltkasten_Entfernung))
}

// Z: Ssks.Anschluss.Schaltkasten_separat.Bezeichnung
fillConditional(
Expand All @@ -333,7 +337,10 @@ class SsksTransformator extends AbstractSignalTableTransform {
signal,
[hasSchaltkastenSeparatBezeichnung],
[
stellelement?.information?.bezeichnung?.bezeichnungAEA?.wert
val informationAea = getControlElement([ s |
s?.stellelement?.information
], #[ENUM_AUSSENELEMENTANSTEUERUNG_ART_OBJEKTCONTROLLER])
informationAea?.bezeichnung?.bezeichnungAEA?.wert
]
)

Expand Down Expand Up @@ -621,7 +628,6 @@ class SsksTransformator extends AbstractSignalTableTransform {
)
}


private static def boolean isSsksSignal(Signal signal) {
if (signal?.signalFiktiv !== null &&
!signal?.signalFiktiv?.fiktivesSignalFunktion.exists [
Expand Down Expand Up @@ -1166,8 +1172,7 @@ class SsksTransformator extends AbstractSignalTableTransform {
}
return BigDecimal.valueOf(c1.distance(c2))
}



override protected getRelevantSignal(
MultiContainer_AttributeGroup contanier) {
return contanier.signal.filter[isSsksSignal]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

import org.eclipse.set.basis.Pair;
Expand All @@ -53,6 +54,7 @@
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.AussenelementansteuerungExtensions;
import org.eclipse.set.ppmodel.extensions.PZBElementExtensions;
import org.eclipse.set.ppmodel.extensions.PunktObjektTopKanteExtensions;
import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
Expand Down Expand Up @@ -355,7 +357,7 @@ private String getFieldElementDesignation(final Ur_Objekt object) {
@SuppressWarnings("nls")
private String getPzbDesignation(final PZB_Element pzb) {
final PZB_Art_TypeClass pzbArt = getNullableObject(pzb,
ele -> ele.getPZBArt()).orElse(null);
PZB_Element::getPZBArt).orElse(null);
if (pzbArt == null) {
return "";
}
Expand Down Expand Up @@ -418,10 +420,12 @@ private <T extends Ur_Objekt> List<T> getRelevantFieldElements(
final List<T> elements = Streams.stream(getElementFunc.apply(container))
.map(clazz::cast)
.toList();

final Predicate<Aussenelementansteuerung> findRecursiveCondition = aea -> AussenelementansteuerungExtensions
.findRecursiveAEAInformation(aea,
ele -> ele == control) != null;
return elements.parallelStream()
.filter(ele -> getControlFromFieldELement(ele)
.contains(control))
.filter(ele -> getControlFromFieldELement(ele).stream()
.anyMatch(findRecursiveCondition::test))
.toList();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import org.eclipse.set.model.planpro.Ansteuerung_Element.Stellelement
import org.eclipse.set.model.planpro.Ansteuerung_Element.Stell_Bereich

import static extension org.eclipse.set.ppmodel.extensions.StellBereichExtensions.*
import java.util.function.Predicate
import java.util.LinkedList

/**
* Extensions for {@link Aussenelementansteuerung}.
Expand Down Expand Up @@ -136,4 +138,41 @@ class AussenelementansteuerungExtensions extends BasisObjektExtensions {
aussenElement.isBelongToControlArea(area)
].toList
}

/**
* Find recursive Aussenelemntansteuerung throught
* Aussenelementansteuerung#IDInformationPrimaer und
* Aussenelementansteuerung#IDInformationSekundaer
* @param aea the Aussenelemntansteuerung
* @param condition the condition
* @param the Aussenelemntansteuerung or null, if it given't matched
*/
def static Aussenelementansteuerung findRecursiveAEAInformation(
Aussenelementansteuerung aea,
Predicate<Aussenelementansteuerung> condition) {
if (condition.test(aea)) {
return aea
}

val LinkedList<Aussenelementansteuerung> recursiveList = newLinkedList
val addToListFunc = [ Aussenelementansteuerung ele |
if (!recursiveList.exists[it === ele]) {
recursiveList.add(ele)
}
]
#[aea.informationPrimaer.filter(Aussenelementansteuerung),
aea.informationSekundaer].flatten.forEach[addToListFunc.apply(it)]
while (!recursiveList.nullOrEmpty) {
val head = recursiveList.pop
if (condition.test(head)) {
return head
}
#[head.informationPrimaer.filter(Aussenelementansteuerung),
head.informationSekundaer].flatten.forEach [
addToListFunc.apply(it)
]
}
return null

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ import java.util.Collections
import java.util.LinkedList
import java.util.List
import java.util.Set
import java.util.function.Predicate
import org.eclipse.core.runtime.Assert
import org.eclipse.set.basis.graph.Digraphs
import org.eclipse.set.basis.graph.TopPoint
import org.eclipse.set.core.services.graph.TopologicalGraphService
import org.eclipse.set.model.planpro.Ansteuerung_Element.Aussenelementansteuerung
import org.eclipse.set.model.planpro.Ansteuerung_Element.ENUMAussenelementansteuerungArt
import org.eclipse.set.model.planpro.Ansteuerung_Element.Stell_Bereich
import org.eclipse.set.model.planpro.Ansteuerung_Element.Stellelement
import org.eclipse.set.model.planpro.Ansteuerung_Element.Unterbringung
import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt
import org.eclipse.set.model.planpro.Basisobjekte.Punkt_Objekt_TOP_Kante_AttributeGroup
import org.eclipse.set.model.planpro.Fahrstrasse.Fstr_Zug_Rangier
Expand All @@ -42,7 +44,6 @@ import org.eclipse.set.ppmodel.extensions.utils.TopRouting
import org.slf4j.Logger
import org.slf4j.LoggerFactory

import static org.eclipse.set.model.planpro.Ansteuerung_Element.ENUMAussenelementansteuerungArt.*
import static org.eclipse.set.model.planpro.BasisTypen.ENUMWirkrichtung.*
import static org.eclipse.set.model.planpro.Signale.ENUMFiktivesSignalFunktion.*
import static org.eclipse.set.model.planpro.Signale.ENUMSignalFunktion.*
Expand All @@ -56,7 +57,6 @@ import static extension org.eclipse.set.ppmodel.extensions.FstrZugRangierExtensi
import static extension org.eclipse.set.ppmodel.extensions.PunktObjektTopKanteExtensions.*
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.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.*
Expand Down Expand Up @@ -294,17 +294,19 @@ class SignalExtensions extends PunktObjektExtensions {

/**
* @param signal this signal
*
* @return the Schaltkasten for this Signal; or {@code null}, if this
* signal has no Schaltkasten
* @param getFirstControlFunc the function to get Aussenelemntansteuerung from signal
* @return the relevant Aussenelementansteuerung or null, if no element matched the condition
*/
def static Unterbringung getControlBox(Signal signal) {
val energie = signal.realAktivStellelement?.energie
if (energie?.AEAAllg?.aussenelementansteuerungArt?.wert ===
ENUM_AUSSENELEMENTANSTEUERUNG_ART_OBJEKTCONTROLLER) {
return energie.unterbringung
}
return null
def static Aussenelementansteuerung getControlElement(Signal signal,
(Signal)=>Aussenelementansteuerung getFirstControlFunc, List<ENUMAussenelementansteuerungArt> requiredType) {
val aea = getFirstControlFunc.apply(signal)
val Predicate<Aussenelementansteuerung> isRelevantAea = [ ele |
requiredType.exists [
it == aea?.AEAAllg?.aussenelementansteuerungArt?.wert
]
]

return isRelevantAea.test(aea) ? aea : null
}

/**
Expand Down Expand Up @@ -477,8 +479,9 @@ class SignalExtensions extends PunktObjektExtensions {
}
return false
}

def static boolean isSskxSignalBelongToArea(Signal signal, Stell_Bereich area) {

def static boolean isSskxSignalBelongToArea(Signal signal,
Stell_Bereich area) {
return area.contains(signal, tolerantDistance)
}

Expand Down
Loading