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 d39d6cb1e..f1cdbe96f 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 @@ -32,6 +32,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; @@ -75,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; @@ -124,9 +126,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 +158,8 @@ public final class ToolboxTableView extends BasePart { static final Logger logger = LoggerFactory .getLogger(ToolboxTableView.class); + private Composite calculateMissingTablesPanel; + private BodyLayerStack bodyLayerStack; @Inject @@ -333,6 +340,7 @@ public void accept(final SelectedControlAreaChangedEvent t) { return; } updateModel(getToolboxPart()); + updateCalculateMissingTablesPanel(); natTable.refresh(); }; getBroker().subscribe(Events.RELOAD_WORKNOTES_TABLE, @@ -448,6 +456,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); @@ -785,6 +798,75 @@ protected ColumnGroup4HeaderLayer createGroupHeaderLayer( return columnGroup4HeaderLayer; } + private Collection getMissingTables() { + return TableServiceUtils.getMissingTables(tableService, + getModelSession(), controlAreaIds); + } + + private void calculateAllMissingTables(final IProgressMonitor monitor) { + TableServiceUtils.calculateAllMissingTables(tableService, + getModelSession(), controlAreaIds, monitor, messages); + } + + 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.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) + .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).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) { + final Composite parent = calculateMissingTablesPanel.getParent(); + calculateMissingTablesPanel.dispose(); + 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/internal/TableServiceUtils.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceUtils.java index f7abf541b..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 @@ -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,119 @@ 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()) { + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.DIFF, 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/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 */ 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() { 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 7809b37d2..4ae6afe23 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 @@ -181,7 +181,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 ? "keine" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ } }); } 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 ] 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

";"

";"

?

"