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 05aa3d755..b746f642a 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 @@ -15,6 +15,7 @@ TableOverviewPart_EmptyListText= TableOverviewPart_OpenAllWithErrors=Alle öffnen TableOverviewPart_CalculateMissingTask=Überprüfe Tabellen... TableOverviewPart_DebugModeHint=Debug-Mode: Tabellen können immer wieder neu überprüft werden +TableOverviewPart_NonTransformableTable=Nicht generierbar: TableErrorTableColumns_Index=Lfd. Nr. TableErrorTableColumns_LeadingObject=Führendes Objekt 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 1e87cf5d7..e19d15c83 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 @@ -893,7 +893,8 @@ private String getRowReferenceObjectGuid(final int rowPosition) { private void subcribeTriggerResortEvent() { final Comparator comparator = tableService .getRowGroupComparator(getTableShortcut()); - if (comparator instanceof final TableRowGroupComparator rowGroupComparator) { + if (table != null + && comparator instanceof final TableRowGroupComparator rowGroupComparator) { // This is new instance of Comparator, therefore need call sort here // to determine the waiting on another service criterion ECollections.sort(table.getTablecontent().getRowgroups(), diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java index 15d7b7d0e..fddbb25f2 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/export/PlanProExportPart.java @@ -145,8 +145,8 @@ protected void updateTreeElements(final Set areaIds) { getDialogService().showProgress(getToolboxShell(), monitor -> { logger.debug("Start update tree elements"); //$NON-NLS-1$ final Map pt1Tables = tableService - .transformTables(monitor, getModelSession(), - avaibleTables, tableType, areaIds); + .transformTables(monitor, avaibleTables, tableType, + areaIds); Display.getDefault().asyncExec(() -> { pt1Tables.forEach((tableInfo, table) -> { CheckBoxTreeElement element = treeDataModel diff --git a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java index 5072892f7..82b3f75f9 100644 --- a/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java +++ b/java/bundles/org.eclipse.set.feature.table/src/org/eclipse/set/feature/table/internal/TableServiceContextFunction.java @@ -50,8 +50,8 @@ EventHandler.class }, property = { "service.context.key:String=org.eclipse.set.services.table.TableService", EventConstants.EVENT_TOPIC + "=" + Events.MODEL_CHANGED, - EventConstants.EVENT_TOPIC + "=" - + Events.COMPARE_MODEL_LOADED }) + EventConstants.EVENT_TOPIC + "=" + Events.COMPARE_MODEL_LOADED, + EventConstants.EVENT_TOPIC + "=" + Events.CLOSE_SESSION }) public class TableServiceContextFunction extends ContextFunction implements EventHandler { @@ -208,6 +208,7 @@ public void handleEvent(final Event event) { .getLoadedSession(closeSession); EdgeToPointsCacheProxy.clearCacheInstance( loadedSession.getPlanProSchnittstelle()); + tableService.clearInstance(); } } } 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 f0f855213..ea1057912 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 @@ -17,6 +17,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -25,6 +26,7 @@ import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; import java.util.stream.StreamSupport; import org.eclipse.core.runtime.IProgressMonitor; @@ -129,6 +131,7 @@ public final class TableServiceImpl implements TableService { private final Map diffServiceMap = new ConcurrentHashMap<>(); private static final Queue> transformTableThreads = new LinkedList<>(); + private static final Set nonTransformableTables = new HashSet<>(); private static final String EMPTY = "empty"; //$NON-NLS-1$ private static final String IGNORED_PLANNING_AREA_CACHE_KEY = "ignoredPlanningArea";//$NON-NLS-1$ @@ -243,7 +246,11 @@ public TableNameInfo getTableNameInfo(final String shortcut) { @Override public Collection getAvailableTables() { - return new ArrayList<>(modelServiceMap.keySet()); + return modelServiceMap.keySet() + .stream() + .filter(tableInfo -> !nonTransformableTables + .contains(tableInfo)) + .toList(); } @Override @@ -656,7 +663,6 @@ private IRunnableWithProgress createProgressMonitor() { @Override public Map transformTables(final IProgressMonitor monitor, - final IModelSession modelSession, final Set tablesToTransfrom, final TableType tableType, final Set controlAreaIds) { final Map result = new HashMap<>(); @@ -664,22 +670,22 @@ public Map transformTables(final IProgressMonitor monitor, tablesToTransfrom.size()); for (final TableInfo tableInfo : tablesToTransfrom) { - final String shortcut = tableInfo.shortcut(); - final TableNameInfo nameInfo = getTableNameInfo(shortcut); - monitor.subTask(nameInfo.getFullDisplayName()); - final Table table = transformToTable(shortcut, tableType, - modelSession, controlAreaIds); - while (!TableService.isTransformComplete( - nameInfo.getShortName().toLowerCase(), null)) { - try { + try { + final String shortcut = tableInfo.shortcut(); + final TableNameInfo nameInfo = getTableNameInfo(shortcut); + monitor.subTask(nameInfo.getFullDisplayName()); + final Table table = createDiffTable(shortcut, tableType, + controlAreaIds); + while (!TableService.isTransformComplete( + nameInfo.getShortName().toLowerCase(), null)) { Thread.sleep(2000); - } catch (final InterruptedException e) { - Thread.interrupted(); } + result.put(tableInfo, table); + monitor.worked(1); + } catch (final Exception e) { + Thread.interrupted(); } - result.put(tableInfo, table); - monitor.worked(1); } monitor.done(); return result; @@ -688,32 +694,53 @@ public Map transformTables(final IProgressMonitor monitor, @Override public Table createDiffTable(final String elementId, final TableType tableType, final Set controlAreaIds) { - final Table mainSessionTable = transformToTable(elementId, tableType, - sessionService.getLoadedSession(ToolboxFileRole.SESSION), - controlAreaIds); - final IModelSession compareSession = sessionService - .getLoadedSession(ToolboxFileRole.COMPARE_PLANNING); - if (compareSession == null) { - return mainSessionTable; - } + try { + final Table mainSessionTable = transformToTable(elementId, + tableType, + sessionService.getLoadedSession(ToolboxFileRole.SESSION), + controlAreaIds); + final IModelSession compareSession = sessionService + .getLoadedSession(ToolboxFileRole.COMPARE_PLANNING); + if (compareSession == null) { + return mainSessionTable; + } - final Table compareSessionTable = transformToTable(elementId, tableType, - compareSession, controlAreaIds); + final Table compareSessionTable = transformToTable(elementId, + tableType, compareSession, controlAreaIds); - // Waiting table compare transform, then create compare table between to - // plan - while (!TableService.isTransformComplete(extractShortcut(elementId), - null)) { - try { - Thread.sleep(2000); - } catch (final InterruptedException e) { - Thread.interrupted(); + // Waiting table compare transform, then create compare table + // between to + // plan + while (!TableService.isTransformComplete(extractShortcut(elementId), + null)) { + try { + Thread.sleep(2000); + } catch (final InterruptedException e) { + Thread.currentThread().interrupt(); + } } + final Table compareTable = diffServiceMap + .get(TableCompareType.PROJECT) + .createDiffTable(mainSessionTable, compareSessionTable); + sortTable(compareTable, TableType.DIFF, elementId); + return compareTable; + + } catch (final Exception e) { + logger.error("Transformation Error: {} : {}", //$NON-NLS-1$ + elementId, e.getMessage()); + final TableInfo tableInfo = modelServiceMap.keySet() + .stream() + .filter(info -> info.shortcut() + .equals(extractShortcut(elementId))) + .findFirst() + .orElse(null); + if (tableInfo != null) { + nonTransformableTables.add(tableInfo); + broker.post(Events.TABLEERROR_CHANGED, null); + } + throw new RuntimeException(e); } - final Table compareTable = diffServiceMap.get(TableCompareType.PROJECT) - .createDiffTable(mainSessionTable, compareSessionTable); - sortTable(compareTable, TableType.DIFF, elementId); - return compareTable; + } @Override @@ -734,4 +761,18 @@ public TableRowGroupComparator getRowGroupComparator( } return null; } + + @Override + public Set getNonTransformableTables( + final Pt1TableCategory tableCategory) { + return nonTransformableTables.stream() + .filter(info -> info.category().equals(tableCategory)) + .collect(Collectors.toSet()); + } + + @SuppressWarnings("static-method") + void clearInstance() { + transformTableThreads.clear(); + nonTransformableTables.clear(); + } } 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 efe54dc77..5dea8b83c 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 @@ -165,4 +165,9 @@ public class Messages { */ public String TableExportPart_ExportPlanningRecordsDescriptionService_ViewName; + /** + * Nicht generierbar: + */ + public String TableOverviewPart_NonTransformableTable; + } 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 a77584bec..711a32020 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,9 +8,7 @@ */ package org.eclipse.set.feature.table.overview; -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 static org.eclipse.set.basis.constants.ToolboxConstants.*; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -72,6 +70,10 @@ */ public class TableOverviewPart extends BasePart { + private record TableSectionControl(Label label, Text text, Button button) { + + } + @Inject @Translation protected Messages messages; @@ -91,11 +93,10 @@ public class TableOverviewPart extends BasePart { @Inject private TableMenuService tableMenuService; + private TableSectionControl missingTablesControl; + private TableSectionControl containErrorTablesControl; + private TableSectionControl nonTransformableTablesControl; private Label completenessHint; - private Text missingTablesText; - private Button calculateMissing; - private Text withErrorsText; - private Button openAllWithErrors; private TableErrorTableView tableErrorTableView; @@ -122,51 +123,38 @@ protected void createView(final Composite parent) { section.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); section.setLayout(new GridLayout(3, false)); - final Label missingTablesDesc = new Label(section, SWT.NONE); - missingTablesDesc.setText(messages.TableOverviewPart_MissingTablesDesc); - - missingTablesText = new Text(section, SWT.BORDER); - missingTablesText - .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - missingTablesText.setEnabled(false); - - calculateMissing = new Button(section, SWT.NONE); - calculateMissing.setText(messages.TableOverviewPart_CalculateMissing); - calculateMissing.addSelectionListener(new SelectionListener() { - @Override - public void widgetDefaultSelected(final SelectionEvent e) { - calculateAllMissingTablesEvent(); - } - - @Override - public void widgetSelected(final SelectionEvent e) { - widgetDefaultSelected(e); - } - }); - - final Label withErrorsDesc = new Label(section, SWT.NONE); - withErrorsDesc.setText(messages.TableOverviewPart_WithErrorsDesc); - - withErrorsText = new Text(section, SWT.BORDER); - withErrorsText - .setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - withErrorsText.setEnabled(false); - - openAllWithErrors = new Button(section, SWT.NONE); - openAllWithErrors.setText(messages.TableOverviewPart_OpenAllWithErrors); - openAllWithErrors.setEnabled(false); - openAllWithErrors.addSelectionListener(new SelectionListener() { - @Override - public void widgetDefaultSelected(final SelectionEvent e) { - openAllTablesWithErrors(); - } - - @Override - public void widgetSelected(final SelectionEvent e) { - openAllTablesWithErrors(); - } - }); - + missingTablesControl = createSectionControl(section, + messages.TableOverviewPart_MissingTablesDesc, + messages.TableOverviewPart_CalculateMissing, + new SelectionListener() { + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + calculateAllMissingTablesEvent(); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + widgetDefaultSelected(e); + } + }); + + containErrorTablesControl = createSectionControl(section, + messages.TableOverviewPart_WithErrorsDesc, + messages.TableOverviewPart_OpenAllWithErrors, + new SelectionListener() { + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + openAllTablesWithErrors(); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + widgetDefaultSelected(e); + } + }); + + nonTransformableTablesControl = createSectionControl(section, + messages.TableOverviewPart_NonTransformableTable, null, null); // Create table problem table view tableErrorTableView = new TableErrorTableView(messages, this, enumTranslationService, tableMenuService); @@ -193,6 +181,25 @@ public void accept(final SelectedControlAreaChangedEvent t) { update(); } + private static TableSectionControl createSectionControl(final Group section, + final String labelText, final String buttonText, + final SelectionListener buttonAction) { + final Label label = new Label(section, SWT.NONE); + label.setText(labelText); + + final Text text = new Text(section, SWT.BORDER); + text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + text.setEnabled(false); + if (buttonText == null && buttonAction == null) { + return new TableSectionControl(label, text, null); + + } + final Button button = new Button(section, SWT.NONE); + button.setText(buttonText); + button.addSelectionListener(buttonAction); + return new TableSectionControl(label, text, button); + } + private void onTableErrorsChange() { if (!ignoreChangeEvent) { update(); @@ -220,15 +227,13 @@ private void calculateAllMissingTables(final IProgressMonitor monitor) { : TableType.DIFF; if (tableType == TableType.DIFF) { // We don't need create DIFF instance for Errors detecting - tableService.transformTables(monitor, getModelSession(), - new HashSet<>(missingTables), TableType.INITIAL, - controlAreaIds); - tableService.transformTables(monitor, getModelSession(), - new HashSet<>(missingTables), TableType.FINAL, - controlAreaIds); + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.INITIAL, controlAreaIds); + tableService.transformTables(monitor, new HashSet<>(missingTables), + TableType.FINAL, controlAreaIds); } else { - tableService.transformTables(monitor, getModelSession(), - new HashSet<>(missingTables), tableType, controlAreaIds); + tableService.transformTables(monitor, new HashSet<>(missingTables), + tableType, controlAreaIds); } } @@ -271,19 +276,29 @@ private void update() { .toList(); if (!ToolboxConfiguration.isDebugMode()) { - missingTablesText.setText(tableList2DisplayString(missingTables)); completenessHint.setVisible(!missingTables.isEmpty()); - calculateMissing.setEnabled(!missingTables.isEmpty()); + missingTablesControl.text() + .setText(tableList2DisplayString(missingTables)); + missingTablesControl.button.setEnabled(!missingTables.isEmpty()); } else { - missingTablesText.setText(messages.TableOverviewPart_DebugModeHint); + missingTablesControl.text() + .setText(messages.TableOverviewPart_DebugModeHint); completenessHint.setVisible(false); } final Collection tablesWithErrors = getTablesContainingErrors(); + containErrorTablesControl.text() + .setText(tableList2DisplayString(tablesWithErrors)); + containErrorTablesControl.button() + .setEnabled(!tablesWithErrors.isEmpty()); - withErrorsText.setText(tableList2DisplayString(tablesWithErrors)); - openAllWithErrors.setEnabled(!tablesWithErrors.isEmpty()); - + final List nonTransformableTables = tableService + .getNonTransformableTables(getTableCategory()) + .stream() + .map(TableInfo::shortcut) + .toList(); + nonTransformableTablesControl.text() + .setText(tableList2DisplayString(nonTransformableTables)); final ArrayList allErrors = new ArrayList<>(); getTableErrors().values().forEach(allErrors::addAll); tableErrorTableView.updateView(allErrors); diff --git a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableService.java b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableService.java index bd660064e..8f2749c5d 100644 --- a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableService.java +++ b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableService.java @@ -85,6 +85,12 @@ Map> getTableErrors( IModelSession modelSession, Set controlAreaIds, Pt1TableCategory tableCategory); + /** + * @param tableCategory + * @return the tables, which throw Exception during transformation + */ + Set getNonTransformableTables(Pt1TableCategory tableCategory); + /** * Transform the selected container to a string with CSV format. * @@ -124,8 +130,6 @@ Table transformToTable(final String elementId, TableType tableType, * * @param monitor * the {@link IProgressMonitor} - * @param modelSession - * the {@link IModelSession} * @param tablesToTransfrom * the list of tables need transform * @param tableType @@ -135,8 +139,8 @@ Table transformToTable(final String elementId, TableType tableType, * @return the tables */ Map transformTables(IProgressMonitor monitor, - IModelSession modelSession, Set tablesToTransfrom, - TableType tableType, Set controlAreaIds); + Set tablesToTransfrom, TableType tableType, + Set controlAreaIds); /** * @param part