diff --git a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/FootnoteTransformation.xtend b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/FootnoteTransformation.xtend index 60b34c4c6..b6d7bd4e2 100644 --- a/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/FootnoteTransformation.xtend +++ b/java/bundles/org.eclipse.set.feature.table.pt1/src/org/eclipse/set/feature/table/pt1/FootnoteTransformation.xtend @@ -52,6 +52,7 @@ import org.eclipse.set.model.planpro.Ortung.FMA_Anlage import org.eclipse.set.model.planpro.Fahrstrasse.Fstr_Zug_Rangier import org.eclipse.set.model.planpro.Ansteuerung_Element.Unterbringung import org.eclipse.set.model.planpro.Ortung.Schaltmittel_Zuordnung +import org.eclipse.set.model.planpro.Signale.Signal_Signalbegriff /** * Transform basis objects to footnotes. @@ -110,16 +111,15 @@ class FootnoteTransformation { if (signalBefestigung === null) { return #[] } - return signalBefestigung?.signalBefestigungen?.filter [ - IDBearbeitungsvermerk !== null - ]?.flatMap [ - val notes = IDBearbeitungsvermerk + val footnotes = signalBefestigung?.signalBefestigungen?.flatMap [ + val notes = IDBearbeitungsvermerk ?: #[] val objectStateNote = #[ - signalBefestigung?.transformObjectStateEnum( - basisObjektAllg?.objektzustandBesonders?.wert) + signalBefestigung?.transformObjectStateEnum ].filterNull return #[notes, objectStateNote].flatten ] ?: #[] + + return footnotes.toList.withPrefix(signalBefestigung.prefix) } // Determine Footnotes for Ssks Table @@ -128,14 +128,23 @@ class FootnoteTransformation { val rahmenFootnotes = signalRahmen?.IDBearbeitungsvermerk?.filterNull val objectStateNote = #[signalRahmen?.transformObjectStateEnum]. filterNull - val signalBegriffFootntoes = signalRahmen?.signalbegriffe?.flatMap [ - val stateNote = #[transformObjectStateEnum].filterNull - return #[stateNote, IDBearbeitungsvermerk].filterNull.flatten - ]?.filterNull - return #[rahmenFootnotes, objectStateNote, signalBegriffFootntoes]. - filterNull.flatten + val signalRahmenFootnotes = #[rahmenFootnotes, objectStateNote]. + filterNull.flatten.toList.withPrefix(signalRahmen.prefix) + + val signalBegriffFootnotes = signalRahmen?.signalbegriffe?.flatMap [ + referenceFootnotes + ] + return #[signalRahmenFootnotes, signalBegriffFootnotes].filterNull. + flatten } + // Determine Footnotes for Ssks Table + private def dispatch Iterable getReferenceFootnotes(Signal_Signalbegriff signalBegriff) { + val signalBegriffFootnotes = signalBegriff?.IDBearbeitungsvermerk?.filterNull + val objectStateNote = #[signalBegriff?.transformObjectStateEnum].filterNull + return #[signalBegriffFootnotes, objectStateNote].filterNull.flatten.toList.withPrefix(signalBegriff.prefix) + } + // Determine Footnotes for Sskw Table private def dispatch Iterable getReferenceFootnotes( W_Kr_Gsp_Element gspElement) { diff --git a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java index 17da968cc..e745f8947 100644 --- a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java +++ b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/FootnoteExtensions.java @@ -26,11 +26,17 @@ import org.eclipse.set.model.planpro.Basisobjekte.Bearbeitungsvermerk_Allg_AttributeGroup; import org.eclipse.set.model.planpro.Basisobjekte.ENUMObjektzustandBesonders; import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; +import org.eclipse.set.model.planpro.Signalbegriffe_Struktur.Signalbegriff_ID_TypeClass; +import org.eclipse.set.model.planpro.Signale.ENUMRahmenArt; +import org.eclipse.set.model.planpro.Signale.Signal_Befestigung; +import org.eclipse.set.model.planpro.Signale.Signal_Rahmen; +import org.eclipse.set.model.planpro.Signale.Signal_Signalbegriff; import org.eclipse.set.model.tablemodel.CellContent; import org.eclipse.set.model.tablemodel.StringCellContent; import org.eclipse.set.model.tablemodel.Table; import org.eclipse.set.model.tablemodel.TableRow; import org.eclipse.set.model.tablemodel.TablemodelFactory; +import org.eclipse.set.ppmodel.extensions.SignalRahmenExtensions; /** * Extension for table footnote @@ -201,4 +207,140 @@ private static void fillValue(final TableRow row, final String value) { stringCellContent.getValue().removeIf(String::isEmpty); } } + + /** + * Generates a prefix for every footnote that is related to the provided + * basis objekt. + * + * @param obj + * the basis objekt for which the prefix shall be generated + * @return null as basis objekte don't have a prefix by default + */ + public static String getPrefix(final Basis_Objekt obj) { + return null; + } + + /** + * Generates a prefix for every footnote that is related to the provided + * signal befestigung. + * + * @param signalBefestigung + * the signal befestigung for which the prefix shall be generated + * @return the prefix or null if not possible to create prefix + */ + public static String getPrefix(final Signal_Befestigung signalBefestigung) { + if (signalBefestigung == null) { + return null; + } + final EnumTranslationService enumTranslationService = Services + .getEnumTranslationService(); + return enumTranslationService + .translate(signalBefestigung.getSignalBefestigungAllg() + .getBefestigungArt() + .getWert()) + .getPresentation(); + } + + /** + * Generates a prefix for every footnote that is related to the provided + * signal rahmen. + * + * @param signalRahmen + * the signal rahmen for which the prefix shall be generated + * @return the prefix or null if not possible to create prefix + */ + public static String getPrefix(final Signal_Rahmen signalRahmen) { + if (signalRahmen == null || signalRahmen.getRahmenArt() == null + || signalRahmen.getRahmenArt().getWert() == null) { + return null; + } + final ENUMRahmenArt rahmenArt = signalRahmen.getRahmenArt().getWert(); + final EnumTranslationService enumTranslationService = Services + .getEnumTranslationService(); + final String prefix = enumTranslationService.translate(rahmenArt) + .getPresentation(); + if (rahmenArt.equals(ENUMRahmenArt.ENUM_RAHMEN_ART_BLECHTAFEL) + || rahmenArt + .equals(ENUMRahmenArt.ENUM_RAHMEN_ART_ZUSATZANZEIGER)) { + final List signalBegriffe = SignalRahmenExtensions + .getSignalbegriffe(signalRahmen) + .stream() + .map((signalBegriff) -> getPrefix(signalBegriff, false)) + .filter(begriff -> begriff != null) + .collect(Collectors.toSet()) + .stream() + .sorted() + .toList(); + if (signalBegriffe.size() > 0) { + return prefix + " " + String.join(", ", signalBegriffe); //$NON-NLS-1$ //$NON-NLS-2$ + } + } + return prefix; + } + + /** + * Generates a prefix for every footnote that is related to the provided + * signal begriff. + * + * @param signalBegriff + * the signal begriff for which the prefix shall be generated + * @return the prefix or null if not possible to create prefix + */ + public static String getPrefix(final Signal_Signalbegriff signalBegriff) { + return getPrefix(signalBegriff, true); + } + + private static String getPrefix(final Signal_Signalbegriff signalBegriff, + final boolean withSymbol) { + if (signalBegriff == null + || signalBegriff.getSignalbegriffID() == null) { + return null; + } + final Signalbegriff_ID_TypeClass signalBegriffId = signalBegriff + .getSignalbegriffID(); + // TODO: Properly determine name of Signalbegriff_ID + final String prefix = signalBegriffId.getClass() + .getSimpleName() + .replace("Impl", ""); //$NON-NLS-1$ //$NON-NLS-2$ + if (withSymbol && signalBegriffId.getSymbol() != null) { + return prefix + " " + signalBegriffId.getSymbol(); //$NON-NLS-1$ + } + return prefix; + } + + /** + * Adds the given prefix to all the bearbeitungsvermerke. + * Bearbeitungsvermerke are cloned so that the original bearbeitungsvermerke + * stay untouched. + * + * @param bearbeitungsVermerke + * the bearbeitungsvermerke to prefix + * @param prefix + * the prefix to for the kommentar of bearbeitungsvermerk or null + * if no prefix should be added + * @return the extend bearbeitungsvermerke + */ + public static List withPrefix( + final List bearbeitungsVermerke, + final String prefix) { + if (prefix == null) { + return bearbeitungsVermerke; + } + return bearbeitungsVermerke.stream().map(bv -> { + final Bearbeitungsvermerk bearbeitungsvermerk = createBearbeitungsvermerkWithoutGuid( + prefix + ": " //$NON-NLS-1$ + + bv.getValue() + .getBearbeitungsvermerkAllg() + .getKommentar() + .getWert()); + bearbeitungsvermerk.setIdentitaet( + BasisobjekteFactory.eINSTANCE.createIdentitaet_TypeClass()); + bearbeitungsvermerk.getIdentitaet() + .setWert(bv.getValue().getIdentitaet().getWert()); + final ID_Bearbeitungsvermerk_TypeClass idBv = BasisTypenFactory.eINSTANCE + .createID_Bearbeitungsvermerk_TypeClass(); + idBv.setValue(bearbeitungsvermerk); + return idBv; + }).toList(); + } }