@@ -12,9 +12,11 @@ import java.math.BigInteger
1212import java.util.LinkedList
1313import java.util.List
1414import java.util.Set
15+ import org.eclipse.set.basis.IModelSession
1516import org.eclipse.set.basis.constants.ContainerType
1617import org.eclipse.set.basis.constants.ToolboxConstants
1718import org.eclipse.set.core.services.enumtranslation.EnumTranslationService
19+ import org.eclipse.set.core.services.session.SessionService
1820import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator
1921import org.eclipse.set.model.planpro.Ansteuerung_Element.Stell_Bereich
2022import org.eclipse.set.model.planpro.BasisTypen.ENUMLinksRechts
@@ -57,6 +59,8 @@ import static extension org.eclipse.set.ppmodel.extensions.UrObjectExtensions.*
5759import static extension org.eclipse.set.ppmodel.extensions.WKrGspElementExtensions.*
5860import static extension org.eclipse.set.ppmodel.extensions.WKrGspKomponenteExtensions.*
5961import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensions.*
62+ import org.eclipse.set.utils.xml.EObjectXMLFinder
63+ import org.eclipse.set.utils.xml.EObjectXMLFinder.XmlParseException
6064
6165/**
6266 * Table transformation for a Weichentabelle (SSKW).
@@ -65,12 +69,17 @@ import static extension org.eclipse.set.ppmodel.extensions.utils.IterableExtensi
6569 */
6670class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
6771
72+ SessionService sessionService
6873 static val Logger logger = LoggerFactory . getLogger(
6974 typeof(SskwTransformator ))
7075
76+ EObjectXMLFinder xmlFinder
77+
7178 new (Set<ColumnDescriptor > cols,
72- EnumTranslationService enumTranslationService, EventAdmin eventAdmin) {
79+ EnumTranslationService enumTranslationService, EventAdmin eventAdmin,
80+ SessionService sessionService) {
7381 super (cols, enumTranslationService, eventAdmin)
82+ this . sessionService = sessionService
7483 }
7584
7685 private static def String angrenzendesElementL (W_Kr_Gsp_Element element ,
@@ -95,6 +104,7 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
95104
96105 override transformTableContent (MultiContainer_AttributeGroup container ,
97106 TMFactory factory , Stell_Bereich controlArea ) {
107+ xmlFinder = createEObjetXMLFinder(container)
98108 val weichen = container. WKrGspElement . filter[isPlanningObject].
99109 filterObjectsInControlArea(controlArea)
100110
@@ -264,26 +274,19 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
264274 )
265275
266276 // K: Sskw.Weiche.Antriebe
277+ instance. fillAntrieb(
278+ cols. getColumn(Weiche_Antriebe ),
279+ element,
280+ [zungenpaar? . elektrischerAntriebAnzahl? . wert],
281+ [zungenpaar? . elektrischerAntriebLage],
282+ [true ]
283+ )
284+
267285 val elementKomponenten = element.container. WKrGspKomponente . filter [
268286 IDWKrGspElement ? . value? . identitaet? . wert ==
269287 element. identitaet. wert && zungenpaar !== null
270288 ]. toList
271289
272- fillMultiColorIterable(
273- instance,
274- cols. getColumn(Weiche_Antriebe ),
275- element,
276- [
277- transformMultiColorContent(
278- elementKomponenten,
279- [zungenpaar? . elektrischerAntriebAnzahl? . wert],
280- [zungenpaar? . elektrischerAntriebLage],
281- [true ]
282- )
283- ],
284- " +"
285- )
286-
287290 // L: Sskw.Weiche.Weichensignal
288291 val weichensignal = elementKomponenten. map [
289292 zungenpaar? . weichensignal
@@ -686,6 +689,28 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
686689 return factory. table
687690 }
688691
692+ def EObjectXMLFinder createEObjetXMLFinder (
693+ MultiContainer_AttributeGroup container ) {
694+ try {
695+ val loadedSession = sessionService. loadedSessions
696+ var IModelSession modelSession = null
697+ if (loadedSession. size == = 1 ) {
698+ modelSession = loadedSession. values. firstOrNull
699+ } else {
700+ val planproSchnittstelle = container. planProSchnittstelle
701+ modelSession = loadedSession. values. filter [
702+ it . planProSchnittstelle == planproSchnittstelle
703+ ]. firstOrNull
704+ }
705+ return new EObjectXMLFinder (modelSession. toolboxFile,
706+ modelSession. toolboxFile. modelPath)
707+ } catch (Exception e) {
708+ logger. error(" Can't create EObjectXMLFinder: {}" , e. message)
709+ return null
710+ }
711+
712+ }
713+
689714 /**
690715 * Create filling Iterable case with compartor as ToolboxConstants.NUMERIC_COMPARATOR
691716 * and separator as ","
@@ -704,35 +729,69 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
704729 val elektrischerAntriebAnzahl = element. WKrGspKomponenten . map [
705730 kreuzung? . elektrischerAntriebAnzahl? . wert
706731 ]. filterNull. map[intValue]
707- val fillFunc = [ (W_Kr_Gsp_Komponente )= > BigInteger actuatorCount, (W_Kr_Gsp_Komponente )= > Elektrischer_Antrieb_Lage_TypeClass actuatorPosition |
708- fillMultiColorIterable(
732+ if (herzstueckAntriebe. exists[it > 0 ]) {
733+ row. fillAntrieb(cols. getColumn(Herzstueck_Antriebe ), element, [
734+ zungenpaar? . herzstueckAntriebe? . wert
735+ ], [null ], [kreuzung !== null ])
736+ } else if (elektrischerAntriebAnzahl. exists[it > 0 ]) {
737+ row. fillAntrieb(cols. getColumn(Herzstueck_Antriebe ), element, [
738+ kreuzung? . elektrischerAntriebAnzahl? . wert
739+ ], [kreuzung? . elektrischerAntriebLage], [kreuzung !== null ])
740+ } else {
741+ fill(
709742 row,
710743 cols. getColumn(Herzstueck_Antriebe ),
711744 element,
745+ []
746+ )
747+ }
748+ }
749+
750+ def void fillAntrieb (TableRow row , ColumnDescriptor column ,
751+ W_Kr_Gsp_Element element ,
752+ (W_Kr_Gsp_Komponente )=>BigInteger actuatorNumberSelector,
753+ (W_Kr_Gsp_Komponente)=>Elektrischer_Antrieb_Lage_TypeClass actuatorPositionSelector,
754+ (W_Kr_Gsp_Komponente)=>Boolean fillPositionSupplementCondition) {
755+ val components = element. WKrGspKomponenten
756+ if (components. map[actuatorNumberSelector. apply(it )]. filterNull.
757+ nullOrEmpty) {
758+ return
759+ }
760+ if (element. container? . containerType == = ContainerType . FINAL &&
761+ components. exists [
762+ austauschAntriebe? . wert !== null && austauschAntriebe? . wert
763+ ]) {
764+ fillMultiColorIterable(
765+ row,
766+ column,
767+ element,
712768 [
713769 transformMultiColorContent(
714770 WKrGspKomponenten ,
715- actuatorCount ,
716- actuatorPosition ,
771+ actuatorNumberSelector ,
772+ actuatorPositionSelector ,
717773 [kreuzung !== null ]
718774 )
719775 ],
720776 " +"
721777 )
722- ]
723- if (herzstueckAntriebe. exists[it > 0 ]) {
724- fillFunc. apply([zungenpaar? . herzstueckAntriebe? . wert], [null ])
725- } else if (elektrischerAntriebAnzahl. exists[it > 0 ]) {
726- fillFunc. apply([kreuzung? . elektrischerAntriebAnzahl? . wert], [
727- kreuzung? . elektrischerAntriebLage
728- ])
729778 } else {
730- fill(
731- row,
732- cols. getColumn(Herzstueck_Antriebe ),
733- element,
734- []
735- )
779+ val actuatorCount = components.
780+ map[actuatorNumberSelector. apply(it )]. filterNull. map[intValue].
781+ reduce[p1, p2|p1. intValue + p2. intValue]
782+ val position = components. filter [
783+ fillPositionSupplementCondition. apply(it )
784+ ]. map [
785+ it - > actuatorNumberSelector. apply(it )
786+ ]. map[key. getPosition(value, actuatorPositionSelector)]. filter [
787+ ! nullOrEmpty && ! blank
788+ ]. toSet. join(" , " )
789+ if (actuatorCount == = null || actuatorCount == = 0 ) {
790+ return
791+ }
792+ fill(row, column, element, [
793+ ' ' ' «actuatorCount» «IF !position.nullOrEmpty && !position.blank »(«position»)«ENDIF»' ' '
794+ ])
736795 }
737796 }
738797
@@ -846,8 +905,7 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
846905 val position = it . getPosition(actuator, actuatorPositionSelector)
847906 val fillPositionCondition = noOfActuators > 0 &&
848907 position !== null && fillPositionSupplementCondition. apply(it )
849- if (austauschAntriebe? . wert == = true &&
850- container. containerType == ContainerType . FINAL ) {
908+ if (austauschAntriebe? . wert !== null && austauschAntriebe? . wert) {
851909 multiColorContent. multiColorValue = noOfActuators. toString
852910 multiColorContent. stringFormat = ' ' ' %s«IF fillPositionCondition» («position»)«ENDIF»' ' '
853911 } else {
@@ -864,12 +922,19 @@ class SskwTransformator extends AbstractPlanPro2TableModelTransformator {
864922 BigInteger actuator ,
865923 (W_Kr_Gsp_Komponente )=>Elektrischer_Antrieb_Lage_TypeClass actuatorPositionSelector
866924 ) {
867- if (actuator != BigInteger . ZERO ) {
868- return actuatorPositionSelector. apply(component)? . translate ?:
869- " keine Lage"
870- } else {
871- return null
925+
926+ if (actuator !== null && actuator != BigInteger . ZERO ) {
927+ val lage = actuatorPositionSelector. apply(component)
928+ val enumTranslateValue = lage? . translate
929+ if (enumTranslateValue == = null ) {
930+ if (xmlFinder !== null && xmlFinder. isNilValue(lage)) {
931+ return " keine Lage"
932+ }
933+ return " "
934+ }
935+ return enumTranslateValue
872936 }
937+ return null
873938 }
874939
875940 private def String getGleissperreAntrieb (W_Kr_Gsp_Element element ) {
0 commit comments