Skip to content

Commit 1b37049

Browse files
Sskw column K: update actuator count & position (#1944)
* Sskw column K: update actuator count & position * Add find nil node * Update table reference --------- Co-authored-by: eclipse-set-bot <[email protected]>
1 parent 0c150d9 commit 1b37049

File tree

6 files changed

+181
-68
lines changed

6 files changed

+181
-68
lines changed

java/bundles/org.eclipse.set.feature.table.pt1/META-INF/MANIFEST.MF

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Import-Package: com.google.common.base,
5151
org.eclipse.set.basis.constants,
5252
org.eclipse.set.basis.exceptions,
5353
org.eclipse.set.basis.extensions,
54+
org.eclipse.set.basis.files,
5455
org.eclipse.set.basis.geometry,
5556
org.eclipse.set.basis.graph,
5657
org.eclipse.set.basis.part,
@@ -90,6 +91,7 @@ Import-Package: com.google.common.base,
9091
org.eclipse.set.utils.table.transform,
9192
org.eclipse.set.utils.viewgroups,
9293
org.eclipse.set.utils.widgets,
94+
org.eclipse.set.utils.xml,
9395
org.eclipse.swt,
9496
org.eclipse.swt.layout,
9597
org.eclipse.swt.widgets,

java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskw/SskwTransformationService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.List;
1818

1919
import org.eclipse.set.core.services.enumtranslation.EnumTranslationService;
20+
import org.eclipse.set.core.services.session.SessionService;
2021
import org.eclipse.set.feature.table.PlanPro2TableTransformationService;
2122
import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator;
2223
import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableTransformationService;
@@ -48,6 +49,9 @@ public final class SskwTransformationService
4849
@Reference
4950
private EventAdmin eventAdmin;
5051

52+
@Reference
53+
SessionService sessionService;
54+
5155
/**
5256
* constructor.
5357
*/
@@ -57,7 +61,8 @@ public SskwTransformationService() {
5761

5862
@Override
5963
public AbstractPlanPro2TableModelTransformator createTransformator() {
60-
return new SskwTransformator(cols, enumTranslationService, eventAdmin);
64+
return new SskwTransformator(cols, enumTranslationService, eventAdmin,
65+
sessionService);
6166
}
6267

6368
@Override

java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/sskw/SskwTransformator.xtend

Lines changed: 105 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import java.math.BigInteger
1212
import java.util.LinkedList
1313
import java.util.List
1414
import java.util.Set
15+
import org.eclipse.set.basis.IModelSession
1516
import org.eclipse.set.basis.constants.ContainerType
1617
import org.eclipse.set.basis.constants.ToolboxConstants
1718
import org.eclipse.set.core.services.enumtranslation.EnumTranslationService
19+
import org.eclipse.set.core.services.session.SessionService
1820
import org.eclipse.set.feature.table.pt1.AbstractPlanPro2TableModelTransformator
1921
import org.eclipse.set.model.planpro.Ansteuerung_Element.Stell_Bereich
2022
import org.eclipse.set.model.planpro.BasisTypen.ENUMLinksRechts
@@ -57,6 +59,8 @@ import static extension org.eclipse.set.ppmodel.extensions.UrObjectExtensions.*
5759
import static extension org.eclipse.set.ppmodel.extensions.WKrGspElementExtensions.*
5860
import static extension org.eclipse.set.ppmodel.extensions.WKrGspKomponenteExtensions.*
5961
import 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
*/
6670
class 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

Comments
 (0)