Skip to content

Commit

Permalink
Modify Sskz & Ssks (#1173)
Browse files Browse the repository at this point in the history
  • Loading branch information
TruongQuangSB authored Dec 13, 2024
1 parent 7158e9b commit f920164
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -975,7 +975,8 @@ class .simpleName»: «e.message» - failed to transform table contents''', e)
signalBefestigungAllg.befestigungArt.wert ==
ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_HOCH ||
signalBefestigungAllg.befestigungArt.wert ==
ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG
ENUM_BEFESTIGUNG_ART_REGELANORDNUNG_MAST_NIEDRIG ||
signalBefestigungAllg.befestigungArt.wert == ENUM_BEFESTIGUNG_ART_ARBEITSBUEHNE
]
].filterNull.map[singlePoints].flatten.toSet.forEach [ p |
if (p?.seitlicherAbstand?.wert === null) {
Expand All @@ -984,22 +985,23 @@ class .simpleName»: «e.message» - failed to transform table contents''', e)
}
val seitlicherAbstand = Math.round(
p.seitlicherAbstand.wert.doubleValue * 1000)
val wirkrichtung = p.wirkrichtung.wert
val wirkrichtung = signal.singlePoint.wirkrichtung.wert
val distanceFromPoint = MAX_OPOSIDE_DISTANCE -
Math.abs(seitlicherAbstand)
if (wirkrichtung !== ENUM_WIRKRICHTUNG_IN &&
wirkrichtung !== ENUM_WIRKRICHTUNG_GEGEN) {
throw new IllegalArgumentException('''The Signal_Befestigung have Illegal Wirkrichtung: «wirkrichtung»''')
throw new IllegalArgumentException('''The Signal have Illegal Wirkrichtung: «wirkrichtung»''')
}
val isLeftsideOfTrack = (wirkrichtung === ENUM_WIRKRICHTUNG_IN) ===
(seitlicherAbstand >= 0)
val perpendicularRotation = isLeftsideOfTrack ? 90 : -90
var opposideSideDistance = 0.0
val geoPosition = Services.pointObjectService.getCoordinate(p).
val mastGeoPosition = Services.pointObjectService.getCoordinate(p).
geoPosition
val signalGeoPoistion = Services.pointObjectService.getCoordinate(signal)
try {
opposideSideDistance = p.opposideSideDistance(geoPosition,
perpendicularRotation, distanceFromPoint / 1000)
opposideSideDistance = p.opposideSideDistance(mastGeoPosition,
perpendicularRotation + signalGeoPoistion.effectiveRotation, distanceFromPoint / 1000)
} catch (Exception e) {
LOGGER.error(e.message)
throw new RuntimeException(e)
Expand All @@ -1024,7 +1026,7 @@ class .simpleName»: «e.message» - failed to transform table contents''', e)
private def Double opposideSideDistance(
Punkt_Objekt_TOP_Kante_AttributeGroup potk, GeoPosition position,
double angle, double distance) {
val rad = (angle + position.effectiveRotation) * Math.PI / 180
val rad = angle * Math.PI / 180
val transformX = Math.sin(rad) * distance + position.coordinate.x
val transformY = Math.cos(rad) * distance + position.coordinate.y
val geometryFactory = new GeometryFactory()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,17 @@
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.Basisobjekte.Ur_Objekt;
import org.eclipse.set.model.planpro.Ortung.FMA_Komponente;
import org.eclipse.set.model.planpro.Ortung.FMA_Komponente_Achszaehlpunkt_AttributeGroup;
import org.eclipse.set.model.planpro.PZB.ENUMPZBArt;
import org.eclipse.set.model.planpro.PZB.PZB_Element;
import org.eclipse.set.model.planpro.Schluesselabhaengigkeiten.Schluesselsperre;
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.tablemodel.ColumnDescriptor;
import org.eclipse.set.model.tablemodel.Table;
import org.eclipse.set.model.tablemodel.TableRow;
import org.eclipse.set.ppmodel.extensions.PZBElementExtensions;
import org.eclipse.set.ppmodel.extensions.UrObjectExtensions;
import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup;
import org.eclipse.set.utils.table.TMFactory;
Expand Down Expand Up @@ -97,7 +103,7 @@ private Table transform(final Iterable<Aussenelementansteuerung> controls,

// B: Sskz.Betriebl_Bez_Feldelem
fillIterable(row, getColumn(cols, Betriebl_Bez_Feldelem), control,
SskzTransformator::getBezFeldelem, null);
this::getBezFeldelem, null);

// C: Sskz.Techn_Bez_OC
fill(row, getColumn(cols, Techn_Bez_OC), control, e -> ""); //$NON-NLS-1$
Expand Down Expand Up @@ -134,10 +140,13 @@ private Table transform(final Iterable<Aussenelementansteuerung> controls,

}

private static List<String> getBezFeldelem(
@SuppressWarnings("nls")
// IMPROVE: make this function generic for each case
private List<String> getBezFeldelem(
final Aussenelementansteuerung control) {
final MultiContainer_AttributeGroup container = getContainer(control);
final List<W_Kr_Gsp_Element> gspElements = Streams
.stream(getContainer(control).getWKrGspElement())
.stream(container.getWKrGspElement())
.filter(gspElement -> control.equals(getStellementInformation(
gspElement,
element -> element.getIDStellelement().getValue())))
Expand All @@ -148,8 +157,7 @@ private static List<String> getBezFeldelem(
.filter(Optional::isPresent).map(Optional::get).toList();
}

final List<Signal> signals = Streams
.stream(getContainer(control).getSignal())
final List<Signal> signals = Streams.stream(container.getSignal())
.filter(signal -> control.equals(getStellementInformation(
signal,
element -> element.getSignalReal().getSignalRealAktiv()
Expand All @@ -160,6 +168,66 @@ private static List<String> getBezFeldelem(
.map(SskzTransformator::getSignalWGspElementLabel)
.filter(Optional::isPresent).map(Optional::get).toList();
}

final List<FMA_Komponente> fmas = Streams
.stream(container.getFMAKomponente()).filter(fma -> {
final FMA_Komponente_Achszaehlpunkt_AttributeGroup fmaKomponenteAchszaehlpunkt = fma
.getFMAKomponenteAchszaehlpunkt();
if (fmaKomponenteAchszaehlpunkt == null) {
return false;
}
return fmaKomponenteAchszaehlpunkt.getIDInformation()
.stream().map(ele -> ele.getValue())
.filter(Objects::nonNull)
.anyMatch(ele -> ele.equals(control));
}).toList();
if (!fmas.isEmpty()) {
return fmas.stream()
.map(fma -> getNullableObject(fma,
ele -> ele.getBezeichnung().getBezeichnungTabelle()
.getWert()))
.filter(Optional::isPresent).map(Optional::get).toList();
}

final List<PZB_Element> pzbs = Streams.stream(container.getPZBElement())
.filter(pzb -> control.equals(getStellementInformation(pzb,
ele -> ele.getIDStellelement().getValue())))
.toList();
if (!pzbs.isEmpty()) {
return pzbs.stream().map(pzb -> {
final ENUMPZBArt pzbArt = getNullableObject(pzb,
ele -> ele.getPZBArt().getWert()).orElse(null);
if (pzbArt == null) {
return "";
}
final List<String> pzbElementBezugspunkt = PZBElementExtensions
.getPZBElementBezugspunkt(pzb).stream()
.map(ele -> switch (ele) {
case final Signal signal -> signal.getBezeichnung()
.getBezeichnungTabelle().getWert();
case final W_Kr_Gsp_Element gsp -> gsp.getBezeichnung()
.getBezeichnungTabelle().getWert();
default -> "";

}).toList();
return String.format("%s (%s)", translate(pzbArt),
String.join(",", pzbElementBezugspunkt));
}).toList();

}

final List<Schluesselsperre> schluessels = Streams
.stream(container.getSchluesselsperre())
.filter(schluessel -> control.equals(getStellementInformation(
schluessel, ele -> ele.getIDStellelement().getValue())))
.toList();
if (!schluessels.isEmpty()) {
return schluessels.stream()
.map(schluessel -> getNullableObject(schluessel,
ele -> ele.getBezeichnung().getBezeichnungTabelle()
.getWert()))
.filter(Optional::isPresent).map(Optional::get).toList();
}
return Collections.emptyList();
}

Expand Down

0 comments on commit f920164

Please sign in to comment.