From 2b13b61a2c67423dbc6e08a715ea215f325098e4 Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Wed, 4 Mar 2026 15:06:46 +0100 Subject: [PATCH 1/9] use other symbol for unreferenced footnotes --- .../set/model/tablemodel/extensions/FootnoteExtensions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d9cf3fd1e..9785ceb95 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 @@ -178,7 +178,7 @@ public static void fillSxxxTableColumnC(final Table sxxxTable, if (tables != null && tables.size() > 0) { tables.forEach(table -> fillValue(tableRow, table)); } else { - fillValue(tableRow, allTablesGenerated ? "--" : "??"); + fillValue(tableRow, allTablesGenerated ? "xx" : "??"); //$NON-NLS-1$ //$NON-NLS-2$ } }); } From 13ca96e021c4a3cd6c701458c74b9ade9ef8c7e2 Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Thu, 5 Mar 2026 00:11:11 +0100 Subject: [PATCH 2/9] add missing tables calculation to sxxx table --- .../OSGI-INF/l10n/bundle.properties | 2 + .../set/feature/table/ToolboxTableView.java | 113 ++++++++++++++++++ .../table/internal/TableServiceImpl.java | 3 +- .../set/feature/table/messages/Messages.java | 11 ++ 4 files changed, 128 insertions(+), 1 deletion(-) diff --git a/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties b/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties index 10f719881..1b256233d 100644 --- a/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties +++ b/java/bundles/org.eclipse.set.feature.table/OSGI-INF/l10n/bundle.properties @@ -2,6 +2,8 @@ Abstracttableview_transformation_progress=Tabelle wird erzeugt ToolboxTableView_Export=Exportieren ToolboxTableView_ExportTable=Export der Einzeltabelle +ToolboxTableView_TableIncompleteHint=Diese Tabelle ist unvollständig, da noch nicht alle anderen Tabellen generiert wurden. +ToolboxTableView_CalculateTables=Tabellen berechnen ESTW_TableOverviewDescriptionService_ViewName=ESTW – Tabellenübersicht ETCS_TableOverviewDescriptionService_ViewName=ETCS – Tabellenübersicht diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index 79d203327..b21441b73 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -16,6 +16,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -32,6 +33,7 @@ import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.common.util.ECollections; import org.eclipse.jface.layout.GridDataFactory; +import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; import org.eclipse.nebula.widgets.nattable.data.IDataProvider; @@ -102,6 +104,7 @@ import org.eclipse.set.utils.BasePart; import org.eclipse.set.utils.RefreshAction; import org.eclipse.set.utils.SelectableAction; +import org.eclipse.set.utils.ToolboxConfiguration; import org.eclipse.set.utils.events.ContainerDataChanged; import org.eclipse.set.utils.events.DefaultToolboxEventHandler; import org.eclipse.set.utils.events.JumpToSiteplanEvent; @@ -114,6 +117,7 @@ import org.eclipse.set.utils.exception.ExceptionHandler; import org.eclipse.set.utils.table.BodyLayerStack; import org.eclipse.set.utils.table.Pt1TableChangeProperties; +import org.eclipse.set.utils.table.TableError; import org.eclipse.set.utils.table.TableInfo; import org.eclipse.set.utils.table.TableInfo.Pt1TableCategory; import org.eclipse.set.utils.table.TableModelInstanceBodyDataProvider; @@ -124,9 +128,12 @@ import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; import org.osgi.service.event.EventHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -153,6 +160,8 @@ public final class ToolboxTableView extends BasePart { static final Logger logger = LoggerFactory .getLogger(ToolboxTableView.class); + private Composite calculateMissingTablesPanel; + private BodyLayerStack bodyLayerStack; @Inject @@ -333,6 +342,7 @@ public void accept(final SelectedControlAreaChangedEvent t) { return; } updateModel(getToolboxPart()); + updateCalculateMissingTablesPanel(); natTable.refresh(); }; getBroker().subscribe(Events.RELOAD_WORKNOTES_TABLE, @@ -444,6 +454,11 @@ protected void createView(final Composite parent) { return; } + if (tableInfo.shortcut() + .equalsIgnoreCase(ToolboxConstants.WORKNOTES_TABLE_SHORTCUT)) { + this.addCalculateMissingTablesPanel(parent); + } + final ColumnDescriptor rootColumnDescriptor = table .getColumndescriptors() .get(0); @@ -780,6 +795,104 @@ protected ColumnGroup4HeaderLayer createGroupHeaderLayer( return columnGroup4HeaderLayer; } + private Collection getMissingTables() { + final Map> computedErrors = tableService + .getTableErrors(getModelSession(), controlAreaIds, null); + final Collection allTableInfos = tableService + .getAvailableTables(); + + final ArrayList missingTables = new ArrayList<>(); + missingTables.addAll(allTableInfos); + if (!ToolboxConfiguration.isDebugMode()) { + // in debug mode we want to be able to recompute the errors + // that's why we mark all as missing + missingTables + .removeIf(info -> computedErrors.keySet().contains(info)); + } + return missingTables; + } + + private void calculateAllMissingTables(final IProgressMonitor monitor) { + final Collection missingTables = getMissingTables(); + monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask, + missingTables.size()); + if (!getModelSession().isSingleState()) { + // We don't need create DIFF instance for Errors detecting + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.INITIAL, controlAreaIds); + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.FINAL, controlAreaIds); + } else { + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.SINGLE, controlAreaIds); + } + } + + private void calculateAllMissingTablesEvent() { + try { + getDialogService().showProgress(getToolboxShell(), + this::calculateAllMissingTables); + } catch (InvocationTargetException | InterruptedException e) { + getDialogService().error(getToolboxShell(), e); + } + updateCalculateMissingTablesPanel(); + } + + private void addCalculateMissingTablesPanel(final Composite parent) { + if (getMissingTables().size() == 0) { + return; + } + // custom panel + final Composite panel = new Composite(parent, SWT.CENTER); + GridLayoutFactory.fillDefaults().numColumns(2).applyTo(panel); + final Label label = new Label(panel, SWT.LEFT); + GridDataFactory.fillDefaults() + .align(SWT.BEGINNING, SWT.CENTER) + .grab(true, false) + .applyTo(label); + label.setText(messages.ToolboxTableView_TableIncompleteHint); + final Button button = new Button(panel, SWT.None); + GridDataFactory.swtDefaults() + .align(SWT.END, SWT.FILL) + .grab(true, false) + .applyTo(button); + button.setText(messages.ToolboxTableView_CalculateTables); + button.addSelectionListener(new SelectionListener() { + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + calculateAllMissingTablesEvent(); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + widgetDefaultSelected(e); + } + }); + + panel.setBackground( + Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW)); + + calculateMissingTablesPanel = panel; + updateCalculateMissingTablesPanel(); + } + + private void updateCalculateMissingTablesPanel() { + if (calculateMissingTablesPanel == null) { + return; + } + if (getMissingTables().size() == 0) { + // calculateAllTablesPanel.setVisible(getMissingTables().size() > + // 0); + final Composite parent = calculateMissingTablesPanel.getParent(); + calculateMissingTablesPanel.dispose(); + // calculateAllTablesPanel.getParent().layout(true, true); + // calculateAllTablesPanel.getParent().update(); + parent.layout(true, true); + parent.update(); + calculateMissingTablesPanel = null; + } + } + @Override protected SelectableAction getOutdatedAction() { return new RefreshAction(this, e -> outdatedUpdate()); diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java index d446788bb..0e97a05d6 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceImpl.java @@ -271,7 +271,8 @@ public Map> getTableErrors( final Pt1TableCategory tableCategory) { final HashMap> result = new HashMap<>(); getAvailableTables().forEach(tableInfo -> { - if (tableInfo.category().equals(tableCategory)) { + if (tableCategory == null + || tableInfo.category().equals(tableCategory)) { final List tableErrors = TableServiceUtils .getCachedTableError(getCacheService(), tableInfo, modelSession, controlAreaIds); diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java index c29552b47..cf50ce5f1 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/messages/Messages.java @@ -122,6 +122,17 @@ public class Messages { */ public String ToolboxTableView_ExportTable; + /** + * Diese Tabelle ist unvollständig, da noch nicht alle anderen Tabellen + * generiert wurden. + */ + public String ToolboxTableView_TableIncompleteHint; + + /** + * Tabellen berechnen + */ + public String ToolboxTableView_CalculateTables; + /** * Tabellenexport */ From 41d0af3664b91629dbc5ca809bd86bfeed3903fc Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Thu, 5 Mar 2026 00:32:57 +0100 Subject: [PATCH 3/9] remove old code comments --- .../src/org/eclipse/set/feature/table/ToolboxTableView.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index b21441b73..014883861 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -881,12 +881,8 @@ private void updateCalculateMissingTablesPanel() { return; } if (getMissingTables().size() == 0) { - // calculateAllTablesPanel.setVisible(getMissingTables().size() > - // 0); final Composite parent = calculateMissingTablesPanel.getParent(); calculateMissingTablesPanel.dispose(); - // calculateAllTablesPanel.getParent().layout(true, true); - // calculateAllTablesPanel.getParent().update(); parent.layout(true, true); parent.update(); calculateMissingTablesPanel = null; From 2313ba4e170517081e9a5e2cc2a6d478a77f525f Mon Sep 17 00:00:00 2001 From: TruongQuangSB Date: Thu, 5 Mar 2026 09:52:56 +0100 Subject: [PATCH 4/9] Fix dopple Footnote --- .../set/model/tablemodel/extensions/TableExtensions.xtend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/TableExtensions.xtend b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/TableExtensions.xtend index cef3bf42c..e2666044c 100644 --- a/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/TableExtensions.xtend +++ b/java/bundles/org.eclipse.set.model.tablemodel.extensions/src/org/eclipse/set/model/tablemodel/extensions/TableExtensions.xtend @@ -472,7 +472,7 @@ class TableExtensions { // sort new and common together by text, then append old entries val footnotes = (common + newF).sortBy[toText] + old.sortBy[toText] - return footnotes.distinctBy[toText -> bearbeitungsvermerk].indexed.map [ + return footnotes.distinctBy[toText -> bearbeitungsvermerk?.identitaet?.wert].indexed.map [ value.index = key + 1 return value ] From 6b31538ac6af2070a5d174c76d06cda0c41e8329 Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Mon, 9 Mar 2026 12:46:50 +0100 Subject: [PATCH 5/9] centralize missing tables determination and calculation --- .../set/feature/table/ToolboxTableView.java | 35 +---- .../table/internal/TableServiceUtils.java | 124 ++++++++++++++++++ .../table/overview/TableOverviewPart.java | 44 ++----- 3 files changed, 138 insertions(+), 65 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index 014883861..0eba53ce9 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -16,7 +16,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -77,6 +76,7 @@ import org.eclipse.set.feature.table.abstracttableview.ColumnGroupGroupGroupHeaderLayer; import org.eclipse.set.feature.table.abstracttableview.NatTableColumnGroupHelper; import org.eclipse.set.feature.table.abstracttableview.ToolboxTableModelThemeConfiguration; +import org.eclipse.set.feature.table.internal.TableServiceUtils; import org.eclipse.set.feature.table.messages.Messages; import org.eclipse.set.feature.table.messages.MessagesWrapper; import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; @@ -104,7 +104,6 @@ import org.eclipse.set.utils.BasePart; import org.eclipse.set.utils.RefreshAction; import org.eclipse.set.utils.SelectableAction; -import org.eclipse.set.utils.ToolboxConfiguration; import org.eclipse.set.utils.events.ContainerDataChanged; import org.eclipse.set.utils.events.DefaultToolboxEventHandler; import org.eclipse.set.utils.events.JumpToSiteplanEvent; @@ -117,7 +116,6 @@ import org.eclipse.set.utils.exception.ExceptionHandler; import org.eclipse.set.utils.table.BodyLayerStack; import org.eclipse.set.utils.table.Pt1TableChangeProperties; -import org.eclipse.set.utils.table.TableError; import org.eclipse.set.utils.table.TableInfo; import org.eclipse.set.utils.table.TableInfo.Pt1TableCategory; import org.eclipse.set.utils.table.TableModelInstanceBodyDataProvider; @@ -796,36 +794,13 @@ protected ColumnGroup4HeaderLayer createGroupHeaderLayer( } private Collection getMissingTables() { - final Map> computedErrors = tableService - .getTableErrors(getModelSession(), controlAreaIds, null); - final Collection allTableInfos = tableService - .getAvailableTables(); - - final ArrayList missingTables = new ArrayList<>(); - missingTables.addAll(allTableInfos); - if (!ToolboxConfiguration.isDebugMode()) { - // in debug mode we want to be able to recompute the errors - // that's why we mark all as missing - missingTables - .removeIf(info -> computedErrors.keySet().contains(info)); - } - return missingTables; + return TableServiceUtils.getMissingTables(tableService, + getModelSession(), controlAreaIds); } private void calculateAllMissingTables(final IProgressMonitor monitor) { - final Collection missingTables = getMissingTables(); - monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask, - missingTables.size()); - if (!getModelSession().isSingleState()) { - // We don't need create DIFF instance for Errors detecting - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.INITIAL, controlAreaIds); - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.FINAL, controlAreaIds); - } else { - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.SINGLE, controlAreaIds); - } + TableServiceUtils.calculateAllMissingTables(tableService, + getModelSession(), controlAreaIds, monitor, messages); } private void calculateAllMissingTablesEvent() { diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java index f7abf541b..681ca3c6b 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java @@ -13,20 +13,26 @@ import static org.eclipse.set.ppmodel.extensions.StellBereichExtensions.getStellBereich; import static org.eclipse.set.ppmodel.extensions.StellBereichExtensions.isInControlArea; +import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Function; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.set.basis.IModelSession; import org.eclipse.set.basis.cache.Cache; import org.eclipse.set.basis.constants.ContainerType; import org.eclipse.set.basis.constants.TableType; import org.eclipse.set.basis.constants.ToolboxConstants; import org.eclipse.set.core.services.cache.CacheService; +import org.eclipse.set.feature.table.messages.Messages; import org.eclipse.set.model.planpro.Ansteuerung_Element.Stell_Bereich; import org.eclipse.set.model.planpro.Basisobjekte.Ur_Objekt; import org.eclipse.set.model.planpro.Block.Block_Anlage; @@ -48,6 +54,8 @@ import org.eclipse.set.ppmodel.extensions.StellBereichExtensions; import org.eclipse.set.ppmodel.extensions.UrObjectExtensions; import org.eclipse.set.ppmodel.extensions.container.MultiContainer_AttributeGroup; +import org.eclipse.set.services.table.TableService; +import org.eclipse.set.utils.ToolboxConfiguration; import org.eclipse.set.utils.table.TableError; import org.eclipse.set.utils.table.TableInfo; import org.eclipse.set.utils.table.TableInfo.Pt1TableCategory; @@ -128,6 +136,122 @@ protected static List getCachedTableError( getObj, controlAreaIds, modelSession, null); } + /** + * Provides a list of all not yet generated tables. + * + * @param tableService + * the table service to fetch available tables + * @param modelSession + * the current model session + * @param controlAreaIds + * the set of control area id's + * @return list of tables that are not yet generated + */ + public static Collection getMissingTables( + final TableService tableService, final IModelSession modelSession, + final Set controlAreaIds) { + return getMissingTables(tableService, modelSession, controlAreaIds, + null); + } + + /** + * Provides a list of all not yet generated tables. + * + * @param tableService + * the table service to fetch available tables + * @param modelSession + * the current model session + * @param controlAreaIds + * the set of control area id's + * @param tableCategory + * an optional table category to only calculate tables of this + * category. Provide null if this filter shall not be applied + * @return list of tables that are not yet generated + */ + public static Collection getMissingTables( + final TableService tableService, final IModelSession modelSession, + final Set controlAreaIds, + final Pt1TableCategory tableCategory) { + final Map> computedErrors = tableService + .getTableErrors(modelSession, controlAreaIds, tableCategory); + final Collection allTableInfos = tableService + .getAvailableTables() + .stream() + .filter(table -> tableCategory == null + || table.category().equals(tableCategory)) + .toList(); + + final ArrayList missingTables = new ArrayList<>(); + missingTables.addAll(allTableInfos); + if (!ToolboxConfiguration.isDebugMode()) { + // in debug mode we want to be able to recompute the errors + // that's why we mark all as missing + missingTables + .removeIf(info -> computedErrors.keySet().contains(info)); + } + return missingTables; + } + + /** + * Generates all not yet generated tables. + * + * @param tableService + * the table service to fetch not yet generated tables tables + * @param modelSession + * the current model session + * @param controlAreaIds + * the set of control area id's + * @param monitor + * the monitor to display progress + * @param messages + * the translated messages for displaying in the progress monitor + */ + public static void calculateAllMissingTables( + final TableService tableService, final IModelSession modelSession, + final Set controlAreaIds, final IProgressMonitor monitor, + final Messages messages) { + calculateAllMissingTables(tableService, modelSession, controlAreaIds, + null, monitor, messages); + } + + /** + * Generates all not yet generated tables. + * + * @param tableService + * the table service to fetch not yet generated tables tables + * @param modelSession + * the current model session + * @param controlAreaIds + * the set of control area id's + * @param tableCategory + * an optional table category to only calculate tables of this + * category. Provide null if this filter shall not be applied + * @param monitor + * the monitor to display progress + * @param messages + * the translated messages for displaying in the progress monitor + */ + public static void calculateAllMissingTables( + final TableService tableService, final IModelSession modelSession, + final Set controlAreaIds, + final Pt1TableCategory tableCategory, + final IProgressMonitor monitor, final Messages messages) { + final Collection missingTables = getMissingTables( + tableService, modelSession, controlAreaIds, tableCategory); + monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask, + missingTables.size()); + if (!modelSession.isSingleState()) { + // We don't need create DIFF instance for Errors detecting + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.INITIAL, controlAreaIds); + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.FINAL, controlAreaIds); + } else { + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.SINGLE, controlAreaIds); + } + } + protected static Table filterRequestValue(final Table table, final TableInfo tableInfo, final TableType tableType, final IModelSession modelsession, diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java index 8ee62d704..95ab92be0 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/overview/TableOverviewPart.java @@ -8,7 +8,9 @@ */ package org.eclipse.set.feature.table.overview; -import static org.eclipse.set.basis.constants.ToolboxConstants.*; +import static org.eclipse.set.basis.constants.ToolboxConstants.ESTW_SUPPLEMENT_PART_ID_PREFIX; +import static org.eclipse.set.basis.constants.ToolboxConstants.ESTW_TABLE_PART_ID_PREFIX; +import static org.eclipse.set.basis.constants.ToolboxConstants.ETCS_TABLE_PART_ID_PREFIX; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -27,9 +29,9 @@ import org.eclipse.emf.common.notify.Notification; import org.eclipse.set.basis.Pair; import org.eclipse.set.basis.constants.Events; -import org.eclipse.set.basis.constants.TableType; import org.eclipse.set.core.services.enumtranslation.EnumTranslationService; import org.eclipse.set.core.services.part.ToolboxPartService; +import org.eclipse.set.feature.table.internal.TableServiceUtils; import org.eclipse.set.feature.table.messages.Messages; import org.eclipse.set.model.planpro.PlanPro.Container_AttributeGroup; import org.eclipse.set.services.table.TableService; @@ -219,23 +221,9 @@ private void calculateAllMissingTablesEvent() { } private void calculateAllMissingTables(final IProgressMonitor monitor) { - final Collection missingTables = getMissingTables(); - monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask, - missingTables.size()); - final TableType tableType = getModelSession().isSingleState() - ? TableType.SINGLE - : TableType.DIFF; - if (tableType == TableType.DIFF) { - // We don't need create DIFF instance for Errors detecting - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.INITIAL, controlAreaIds); - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.FINAL, controlAreaIds); - } else { - tableService.transformTables(monitor, new HashSet<>(missingTables), - tableType, controlAreaIds); - } - + TableServiceUtils.calculateAllMissingTables(tableService, + getModelSession(), controlAreaIds, getTableCategory(), monitor, + messages); } private void openAllTablesWithErrors() { @@ -300,22 +288,8 @@ private void update() { } private Collection getMissingTables() { - final Map> computedErrors = getTableErrors(); - final Collection allTableInfos = tableService - .getAvailableTables() - .stream() - .filter(table -> table.category().equals(getTableCategory())) - .toList(); - - final ArrayList missingTables = new ArrayList<>(); - missingTables.addAll(allTableInfos); - if (!ToolboxConfiguration.isDebugMode()) { - // in debug mode we want to be able to recompute the errors - // that's why we mark all as missing - missingTables - .removeIf(info -> computedErrors.keySet().contains(info)); - } - return missingTables; + return TableServiceUtils.getMissingTables(tableService, + getModelSession(), controlAreaIds, getTableCategory()); } private Collection getTablesContainingErrors() { From e03f51bb168a7a0ea526c4e5600aa3ffa2e7e045 Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Mon, 9 Mar 2026 12:49:13 +0100 Subject: [PATCH 6/9] change value for empty cells in column C --- .../set/model/tablemodel/extensions/FootnoteExtensions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 9785ceb95..4f9f542d3 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 @@ -178,7 +178,7 @@ public static void fillSxxxTableColumnC(final Table sxxxTable, if (tables != null && tables.size() > 0) { tables.forEach(table -> fillValue(tableRow, table)); } else { - fillValue(tableRow, allTablesGenerated ? "xx" : "??"); //$NON-NLS-1$ //$NON-NLS-2$ + fillValue(tableRow, allTablesGenerated ? "keine" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ } }); } From 2548f3a164d82f1a37782819cc21d1b29fb12e85 Mon Sep 17 00:00:00 2001 From: eclipse-set-bot Date: Mon, 9 Mar 2026 12:13:12 +0000 Subject: [PATCH 7/9] Update table reference --- .../pphn_1_10_0_3/sxxx_after_reference.csv | 10 +++++----- .../pphn_1_10_0_3/sxxx_before_reference.csv | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_after_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_after_reference.csv index 4cc491a84..d72030cfc 100644 --- a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_after_reference.csv +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_after_reference.csv @@ -1,11 +1,11 @@ Row;A;B;C -;"Inhalt +;"Inhalt Bearbeitungsvermerk";Referenziert von Objekt​;Ausgabe in Plan​​ ;;; ;;; -1;"

Automatische ​Konvertierung ​von ​PlanPro ​1.9.0.2 ​nach ​1.10

";"

";"

-​-​

" +1;"

Automatische ​Konvertierung ​von ​PlanPro ​1.9.0.2 ​nach ​1.10

";"

";"

keine

" 2;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

Sslf

" 3;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

Sslf

" -4;"

Stellbereich ​Bf ​Lorenztal

";"

";"

-​-​

" -5;"

Stellbereich ​Bf ​Rechtsheim

";"

";"

-​-​

" -6;"

Stellbereich ​Bf ​Treumgart

";"

";"

-​-​

" +4;"

Stellbereich ​Bf ​Lorenztal

";"

";"

keine

" +5;"

Stellbereich ​Bf ​Rechtsheim

";"

";"

keine

" +6;"

Stellbereich ​Bf ​Treumgart

";"

";"

keine

" diff --git a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_before_reference.csv b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_before_reference.csv index bff4aaf0f..8f24ea088 100644 --- a/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_before_reference.csv +++ b/java/bundles/org.eclipse.set.swtbot/test_res/table_reference/pphn_1_10_0_3/sxxx_before_reference.csv @@ -1,11 +1,11 @@ Row;A;B;C -;"Inhalt +;"Inhalt Bearbeitungsvermerk";Referenziert von Objekt​;Ausgabe in Plan​​ ;;; ;;; -1;"

Automatische ​Konvertierung ​von ​PlanPro ​1.9.0.2 ​nach ​1.10

";"

";"

??

" -2;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

??

" -3;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

??

" -4;"

Stellbereich ​Bf ​Lorenztal

";"

";"

??

" -5;"

Stellbereich ​Bf ​Rechtsheim

";"

";"

??

" -6;"

Stellbereich ​Bf ​Treumgart

";"

";"

??

" +1;"

Automatische ​Konvertierung ​von ​PlanPro ​1.9.0.2 ​nach ​1.10

";"

";"

?

" +2;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

?

" +3;"

Für ​den ​angegebenen ​Strang ​existiert ​kein ​Element, ​welches ​sonst ​Flankenschutz ​bieten ​könnte.

";"

Fla_​Schutz

";"

?

" +4;"

Stellbereich ​Bf ​Lorenztal

";"

";"

?

" +5;"

Stellbereich ​Bf ​Rechtsheim

";"

";"

?

" +6;"

Stellbereich ​Bf ​Treumgart

";"

";"

?

" From e666bb0bee3919c6bff7da53181639b4742f402c Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Mon, 9 Mar 2026 13:30:55 +0100 Subject: [PATCH 8/9] fix table transformation for missing tables Co-authored-by: TruongQuangSB <131350493+TruongQuangSB@users.noreply.github.com> --- .../set/feature/table/internal/TableServiceUtils.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java index 681ca3c6b..3e3d4d24d 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java @@ -241,11 +241,8 @@ public static void calculateAllMissingTables( monitor.beginTask(messages.TableOverviewPart_CalculateMissingTask, missingTables.size()); if (!modelSession.isSingleState()) { - // We don't need create DIFF instance for Errors detecting tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.INITIAL, controlAreaIds); - tableService.transformTables(monitor, new HashSet<>(missingTables), - TableType.FINAL, controlAreaIds); + TableType.DIFF, controlAreaIds); } else { tableService.transformTables(monitor, new HashSet<>(missingTables), TableType.SINGLE, controlAreaIds); From 2ce72c8bb12547df2fefe4289dfbf13bea9d76ef Mon Sep 17 00:00:00 2001 From: Marius Heine Date: Tue, 10 Mar 2026 08:46:54 +0100 Subject: [PATCH 9/9] make panel consume whole width --- .../org/eclipse/set/feature/table/ToolboxTableView.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java index 0eba53ce9..abcef7ad9 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/ToolboxTableView.java @@ -818,8 +818,9 @@ private void addCalculateMissingTablesPanel(final Composite parent) { return; } // custom panel - final Composite panel = new Composite(parent, SWT.CENTER); + final Composite panel = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(panel); + GridDataFactory.fillDefaults().grab(true, false).applyTo(panel); final Label label = new Label(panel, SWT.LEFT); GridDataFactory.fillDefaults() .align(SWT.BEGINNING, SWT.CENTER) @@ -827,10 +828,7 @@ private void addCalculateMissingTablesPanel(final Composite parent) { .applyTo(label); label.setText(messages.ToolboxTableView_TableIncompleteHint); final Button button = new Button(panel, SWT.None); - GridDataFactory.swtDefaults() - .align(SWT.END, SWT.FILL) - .grab(true, false) - .applyTo(button); + GridDataFactory.swtDefaults().align(SWT.END, SWT.FILL).applyTo(button); button.setText(messages.ToolboxTableView_CalculateTables); button.addSelectionListener(new SelectionListener() { @Override