From 3cf03414ec6b4413285698111e36b9b6d1281d60 Mon Sep 17 00:00:00 2001 From: Quang Truong Date: Wed, 2 Sep 2026 18:18:05 +0200 Subject: [PATCH 1/2] Add error dialog by sort table --- .../OSGI-INF/l10n/bundle.properties | 3 +- .../set/feature/table/ToolboxTableView.java | 107 +++++++++++------- .../table/internal/TableServiceImpl.java | 29 +++-- .../set/feature/table/messages/Messages.java | 5 + .../set/services/table/TableStatus.java | 38 +++++-- 5 files changed, 125 insertions(+), 57 deletions(-) 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 f5faaaaee2..4220504e6f 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 @@ -45,4 +45,5 @@ TableExportPart_ExportButton=Export des Dokumentensatz durchführen TableTransform_Error=Fehler bei Tabellengenerierung TableTransform_ComparePlanError_Msg=Es gibt Fehler bei der Tabellengenerierung der Vergleichsplanung. Es wird nur die Tabelle der Originalplanung angezeigt. -TableTransform_Error_Msg=Es gibt Fehler bei der Tabellengenerierung. Die Table kann nicht vollständig darstellen \ No newline at end of file +TableTransform_Error_Msg=Es gibt Fehler bei der Tabellengenerierung. Die Table kann nicht vollständig darstellen +TableTransform_Sort_Error=Es gibt Fehler bei der Sortierung der Tabelle \ No newline at end of file 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 fae4820a63..34460ac705 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 @@ -402,13 +402,29 @@ protected void createView(final Composite parent) { if (table == null) { return; } - subcribeTriggerResortEvent(); final TableStatus status = tableService .getTablesStatus(tableInfo.category()) .getOrDefault(tableInfo, null); + subcribeTriggerResortEvent(); + if (status == null || status.isNonTransformable()) { - getDialogService().error(getToolboxShell(), - messages.TableTransform_Error_Msg); + if (status != null) { + if (status.getTransformException().isPresent()) { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error, + messages.TableTransform_Error_Msg, + status.getTransformException().get()); + } else if (status.getSortException().isPresent()) { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error, + messages.TableTransform_Sort_Error, + status.getTransformException().get()); + } + + } else { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error_Msg); + } } final ColumnDescriptor rootColumnDescriptor = table @@ -897,46 +913,55 @@ private String getRowReferenceObjectGuid(final int rowPosition) { * the needed event and trigger resort, when all event was triggered */ private void subcribeTriggerResortEvent() { - final Comparator comparator = tableService - .getRowGroupComparator(tableInfo, tableType); - 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(), - rowGroupComparator); - final List triggerComparisonEvent = rowGroupComparator - .getCriteria() - .stream() - .filter(AbstractCompareWithDependencyOnServiceCriterion.class::isInstance) - .map(criterion -> (AbstractCompareWithDependencyOnServiceCriterion) criterion) - .filter(criterion -> !criterion - .getTriggerComparisonEventTopic() - .isEmpty()) - .map(AbstractCompareWithDependencyOnServiceCriterion::getTriggerComparisonEventTopic) - .toList(); - if (triggerComparisonEvent.isEmpty()) { - return; - } - final List triggeredEvents = new ArrayList<>(); - triggerComparisonEvent.forEach(triggerEvent -> getBroker() - .subscribe(triggerEvent, event -> { - triggeredEvents.add(triggerEvent); - if (triggeredEvents.size() == triggerComparisonEvent - .size() - && triggeredEvents - .containsAll(triggerComparisonEvent)) { - tableService.sortTable(table, tableInfo, tableType); - tableInstances.clear(); - tableInstances.addAll( - TableExtensions.getTableRows(table)); - if (bodyDataProvider != null) { - bodyDataProvider.refresh(); + try { + final Comparator comparator = tableService + .getRowGroupComparator(tableInfo, tableType); + 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(), + rowGroupComparator); + final List triggerComparisonEvent = rowGroupComparator + .getCriteria() + .stream() + .filter(AbstractCompareWithDependencyOnServiceCriterion.class::isInstance) + .map(criterion -> (AbstractCompareWithDependencyOnServiceCriterion) criterion) + .filter(criterion -> !criterion + .getTriggerComparisonEventTopic() + .isEmpty()) + .map(AbstractCompareWithDependencyOnServiceCriterion::getTriggerComparisonEventTopic) + .toList(); + if (triggerComparisonEvent.isEmpty()) { + return; + } + final List triggeredEvents = new ArrayList<>(); + triggerComparisonEvent.forEach(triggerEvent -> getBroker() + .subscribe(triggerEvent, event -> { + triggeredEvents.add(triggerEvent); + if (triggeredEvents.size() == triggerComparisonEvent + .size() + && triggeredEvents.containsAll( + triggerComparisonEvent)) { + tableService.sortTable(table, tableInfo, + tableType); + tableInstances.clear(); + tableInstances.addAll( + TableExtensions.getTableRows(table)); + if (bodyDataProvider != null) { + bodyDataProvider.refresh(); + } + natTable.refresh(); } - natTable.refresh(); - } - })); + })); + } + } catch (final Exception e) { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error, + messages.TableTransform_Sort_Error, e); } + } } 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 114c3d45fd..8d02d665c6 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 @@ -341,7 +341,6 @@ private Object loadTransform(final TableInfo tableInfo, } // sorting - sortTable(transformedTable, tableInfo, tableType); saveTableToCache(transformedTable, modelSession, tableInfo, tableStatus); return transformedTable; @@ -471,7 +470,6 @@ modelSession, getModelService(tableInfo), .orElse(Collections.emptyList()) .isEmpty()); } - sortTable(resultTable, tableInfo, tableType); return resultTable; } @@ -621,6 +619,15 @@ public void updateTable(final BasePart tablePart, throw new RuntimeException(e); } catch (final InterruptedException e) { Thread.currentThread().interrupt(); + } finally { + transformTableThreads.stream() + .map(t -> getTableInfo(t.getKey())) + .filter(tableInfo -> { + final TableStatus status = tablesStatus.get(tableInfo); + return status.getSortException().isPresent() + || status.getTransformException() + .isPresent(); + }); } } } @@ -667,7 +674,6 @@ private IRunnableWithProgress createProgressMonitor() { // stop progress monitor.done(); logger.info("ProgressMonitorDialog done."); //$NON-NLS-1$ - }; } @@ -714,6 +720,7 @@ public Table createDiffTable(final TableInfo tableInfo, controlAreaIds, tableStatus); storageFootnotes(ToolboxFileRole.SESSION, tableInfo, mainSessionTable); + sortTable(mainSessionTable, tableInfo, tableType); if (sessionService.getLoadedSession( ToolboxFileRole.COMPARE_PLANNING) == null) { tableStatus.setEmpty( @@ -728,7 +735,7 @@ public Table createDiffTable(final TableInfo tableInfo, } catch (final Exception e) { logger.error("Transformation Error: {} : {}", //$NON-NLS-1$ tableInfo.shortcut(), e.getMessage()); - tableStatus.setErrorMessages(e.getMessage()); + tableStatus.setTransformException(e); broker.post(Events.TABLEERROR_CHANGED, null); // Give empty table back return createEmptyTable(tableInfo); @@ -771,10 +778,16 @@ public Table createDiffTable(final TableInfo tableInfo, @Override public void sortTable(final Table table, final TableInfo tableInfo, - final TableType tableType) { - final Comparator comparator = getModelService(tableInfo) - .getRowGroupComparator(tableType); - ECollections.sort(table.getTablecontent().getRowgroups(), comparator); + final TableType tableTypes) { + try { + final Comparator comparator = getModelService(tableInfo) + .getRowGroupComparator(tableTypes); + ECollections.sort(table.getTablecontent().getRowgroups(), + comparator); + } catch (final Exception e) { + tablesStatus.get(tableInfo).setSortException(e); + } + } @Override 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 49b0ed837e..6f20cc91cc 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 @@ -211,6 +211,11 @@ public class Messages { */ public String TableTransform_Error; + /** + * Es gibt Fehler bei der Sortierung der Tabelle + */ + public String TableTransform_Sort_Error; + /** * Es gibt Fehler bei der Tabellengenerierung der Vergleichsplanung. Es wird * nur die Tabelle der Originalplanung angezeigt. diff --git a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java index 9e94137bed..58aa9f7686 100644 --- a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java +++ b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java @@ -21,9 +21,11 @@ public class TableStatus { private boolean containsErrors; private boolean containsStateChanged; private boolean containsPlanChanged; - private Optional errorMessages; + private Optional transformException; private boolean isEmpty; + private Optional sortException; + /** * */ @@ -38,7 +40,7 @@ public void reset() { containsErrors = false; containsPlanChanged = false; containsStateChanged = false; - errorMessages = Optional.empty(); + transformException = Optional.empty(); isEmpty = false; } @@ -91,15 +93,22 @@ public void setContainsPlanChanged(final boolean containsPlanChanged) { * @return true, if table non transformable */ public boolean isNonTransformable() { - return errorMessages.isPresent(); + return transformException.isPresent(); } /** - * @param errorMessages - * the error messages by table transformation + * @param e + * the exception by table transformation */ - public void setErrorMessages(final String errorMessages) { - this.errorMessages = Optional.ofNullable(errorMessages); + public void setTransformException(final Exception e) { + this.transformException = Optional.ofNullable(e); + } + + /** + * @return the exception by table transformation + */ + public Optional getTransformException() { + return transformException; } /** @@ -116,4 +125,19 @@ public boolean isEmpty() { public void setEmpty(final boolean value) { isEmpty = value; } + + /** + * @return the sort exception + */ + public Optional getSortException() { + return sortException; + } + + /** + * @param sortException + * the sort exception + */ + public void setSortException(final Exception sortException) { + this.sortException = Optional.ofNullable(sortException); + } } From 487e283f4a7b7de5cc53194d8409e2168dc2a9b5 Mon Sep 17 00:00:00 2001 From: TruongQuangSB <131350493+TruongQuangSB@users.noreply.github.com> Date: Thu, 3 Sep 2026 13:25:09 +0200 Subject: [PATCH 2/2] Table sort: skip error criterion --- .../OSGI-INF/l10n/bundle.properties | 2 +- .../set/feature/table/ToolboxTableView.java | 118 ++++++++---------- .../table/internal/TableServiceImpl.java | 21 ++-- .../set/feature/table/messages/Messages.java | 2 +- .../set/services/table/TableStatus.java | 15 ++- .../sorting/CompareRouteAndKmCriterion.java | 10 +- .../sorting/TableRowGroupComparator.java | 24 +++- 7 files changed, 101 insertions(+), 91 deletions(-) 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 4220504e6f..ed2799634b 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 @@ -46,4 +46,4 @@ TableExportPart_ExportButton=Export des Dokumentensatz durchführen TableTransform_Error=Fehler bei Tabellengenerierung TableTransform_ComparePlanError_Msg=Es gibt Fehler bei der Tabellengenerierung der Vergleichsplanung. Es wird nur die Tabelle der Originalplanung angezeigt. TableTransform_Error_Msg=Es gibt Fehler bei der Tabellengenerierung. Die Table kann nicht vollständig darstellen -TableTransform_Sort_Error=Es gibt Fehler bei der Sortierung der Tabelle \ No newline at end of file +TableTransform_Sort_Error=Die Sortierung der Tabelle ist nicht erfolgreich \ No newline at end of file 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 34460ac705..80ed0b44c5 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 @@ -406,25 +406,17 @@ protected void createView(final Composite parent) { .getTablesStatus(tableInfo.category()) .getOrDefault(tableInfo, null); subcribeTriggerResortEvent(); - - if (status == null || status.isNonTransformable()) { - if (status != null) { - if (status.getTransformException().isPresent()) { - getDialogService().error(getToolboxShell(), - messages.TableTransform_Error, - messages.TableTransform_Error_Msg, - status.getTransformException().get()); - } else if (status.getSortException().isPresent()) { - getDialogService().error(getToolboxShell(), - messages.TableTransform_Error, - messages.TableTransform_Sort_Error, - status.getTransformException().get()); - } - - } else { - getDialogService().error(getToolboxShell(), - messages.TableTransform_Error_Msg); - } + if (status == null) { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error_Msg); + } else if (status.isNonTransformable()) { + getDialogService().error(getToolboxShell(), + messages.TableTransform_Error, + messages.TableTransform_Error_Msg, + status.getTransformException().get()); + } else if (!status.isSortSuccess()) { + getDialogService().openInformation(getToolboxShell(), + getViewTitle(), messages.TableTransform_Sort_Error); } final ColumnDescriptor rootColumnDescriptor = table @@ -913,55 +905,51 @@ private String getRowReferenceObjectGuid(final int rowPosition) { * the needed event and trigger resort, when all event was triggered */ private void subcribeTriggerResortEvent() { - try { - final Comparator comparator = tableService - .getRowGroupComparator(tableInfo, tableType); - 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(), - rowGroupComparator); - final List triggerComparisonEvent = rowGroupComparator - .getCriteria() - .stream() - .filter(AbstractCompareWithDependencyOnServiceCriterion.class::isInstance) - .map(criterion -> (AbstractCompareWithDependencyOnServiceCriterion) criterion) - .filter(criterion -> !criterion - .getTriggerComparisonEventTopic() - .isEmpty()) - .map(AbstractCompareWithDependencyOnServiceCriterion::getTriggerComparisonEventTopic) - .toList(); - if (triggerComparisonEvent.isEmpty()) { - return; - } - final List triggeredEvents = new ArrayList<>(); - triggerComparisonEvent.forEach(triggerEvent -> getBroker() - .subscribe(triggerEvent, event -> { - triggeredEvents.add(triggerEvent); - if (triggeredEvents.size() == triggerComparisonEvent - .size() - && triggeredEvents.containsAll( - triggerComparisonEvent)) { - tableService.sortTable(table, tableInfo, - tableType); - tableInstances.clear(); - tableInstances.addAll( - TableExtensions.getTableRows(table)); - if (bodyDataProvider != null) { - bodyDataProvider.refresh(); - } - natTable.refresh(); + final Comparator comparator = tableService + .getRowGroupComparator(tableInfo, tableType); + 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(), + rowGroupComparator); + final List triggerComparisonEvent = rowGroupComparator + .getCriteria() + .stream() + .filter(AbstractCompareWithDependencyOnServiceCriterion.class::isInstance) + .map(criterion -> (AbstractCompareWithDependencyOnServiceCriterion) criterion) + .filter(criterion -> !criterion + .getTriggerComparisonEventTopic() + .isEmpty()) + .map(AbstractCompareWithDependencyOnServiceCriterion::getTriggerComparisonEventTopic) + .toList(); + if (triggerComparisonEvent.isEmpty()) { + return; + } + final List triggeredEvents = new ArrayList<>(); + triggerComparisonEvent.forEach(triggerEvent -> getBroker() + .subscribe(triggerEvent, event -> { + triggeredEvents.add(triggerEvent); + if (triggeredEvents.size() == triggerComparisonEvent + .size() + && triggeredEvents + .containsAll(triggerComparisonEvent)) { + tableService.sortTable(table, tableInfo, tableType); + tableInstances.clear(); + tableInstances.addAll( + TableExtensions.getTableRows(table)); + if (bodyDataProvider != null) { + bodyDataProvider.refresh(); } - })); + natTable.refresh(); + } + })); + if (!rowGroupComparator.getCriterionsException().isEmpty()) { + getDialogService().openInformation(getToolboxShell(), + getViewTitle(), messages.TableTransform_Sort_Error); } - } catch (final Exception e) { - getDialogService().error(getToolboxShell(), - messages.TableTransform_Error, - messages.TableTransform_Sort_Error, e); } - } } 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 8d02d665c6..8069f6c28a 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 @@ -623,8 +623,9 @@ public void updateTable(final BasePart tablePart, transformTableThreads.stream() .map(t -> getTableInfo(t.getKey())) .filter(tableInfo -> { - final TableStatus status = tablesStatus.get(tableInfo); - return status.getSortException().isPresent() + final TableStatus status = tablesStatus + .get(tableInfo); + return !status.isSortSuccess() || status.getTransformException() .isPresent(); }); @@ -779,15 +780,13 @@ public Table createDiffTable(final TableInfo tableInfo, @Override public void sortTable(final Table table, final TableInfo tableInfo, final TableType tableTypes) { - try { - final Comparator comparator = getModelService(tableInfo) - .getRowGroupComparator(tableTypes); - ECollections.sort(table.getTablecontent().getRowgroups(), - comparator); - } catch (final Exception e) { - tablesStatus.get(tableInfo).setSortException(e); - } - + final TableRowGroupComparator rowGroupComparator = getRowGroupComparator( + tableInfo, tableTypes); + ECollections.sort(table.getTablecontent().getRowgroups(), + rowGroupComparator); + tablesStatus.get(tableInfo) + .setSortSuccess( + rowGroupComparator.getCriterionsException().isEmpty()); } @Override 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 6f20cc91cc..f2f32486ac 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 @@ -212,7 +212,7 @@ public class Messages { public String TableTransform_Error; /** - * Es gibt Fehler bei der Sortierung der Tabelle + * Die Sortierung der Tabelle ist nicht erfolgreich */ public String TableTransform_Sort_Error; diff --git a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java index 58aa9f7686..f71d97418f 100644 --- a/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java +++ b/java/bundles/org.eclipse.set.services/src/org/eclipse/set/services/table/TableStatus.java @@ -23,8 +23,7 @@ public class TableStatus { private boolean containsPlanChanged; private Optional transformException; private boolean isEmpty; - - private Optional sortException; + private boolean sortSuccess; /** * @@ -129,15 +128,15 @@ public void setEmpty(final boolean value) { /** * @return the sort exception */ - public Optional getSortException() { - return sortException; + public boolean isSortSuccess() { + return sortSuccess; } /** - * @param sortException - * the sort exception + * @param sortSuccess + * the sort */ - public void setSortException(final Exception sortException) { - this.sortException = Optional.ofNullable(sortException); + public void setSortSuccess(final boolean sortSuccess) { + this.sortSuccess = sortSuccess; } } diff --git a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/CompareRouteAndKmCriterion.java b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/CompareRouteAndKmCriterion.java index bcf846c503..b03dd3788c 100644 --- a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/CompareRouteAndKmCriterion.java +++ b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/CompareRouteAndKmCriterion.java @@ -154,13 +154,19 @@ private int compareRouteAndKm(final Punkt_Objekt first, .getStreckeAndKm(second); final Set firstRouten = firstStreckeAndKm.stream() .map(Pair::getKey) + .filter(value -> !value.isEmpty()) // Compare only to fourth character - .map(value -> value.substring(0, 4)) + .map(value -> value.length() > 4 // + ? value.substring(0, 4) // + : value) .collect(Collectors.toSet()); final Set secondRouten = secondStreckeAndKm.stream() .map(Pair::getKey) + .filter(value -> !value.isEmpty()) // Compare only to fourth character - .map(value -> value.substring(0, 4)) + .map(value -> value.length() > 4 // + ? value.substring(0, 4) // + : value) .collect(Collectors.toSet()); final int compareRouten = numericComparator.compareCell(firstRouten, secondRouten); diff --git a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/TableRowGroupComparator.java b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/TableRowGroupComparator.java index 6799f91ec1..b7a9973658 100644 --- a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/TableRowGroupComparator.java +++ b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/sorting/TableRowGroupComparator.java @@ -9,7 +9,9 @@ package org.eclipse.set.utils.table.sorting; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.function.Function; import org.eclipse.nebula.widgets.nattable.sort.SortDirectionEnum; @@ -42,8 +44,18 @@ public static ComparatorBuilder builder(final TableType tableType) { private final List> criteria = Lists.newLinkedList(); private final TableType tableType; + private final Map, Exception> criterionsException; + + /** + * @return the exception during comparator + */ + public Map, Exception> getCriterionsException() { + return criterionsException; + } + private TableRowGroupComparator(final TableType tableType) { this.tableType = tableType; + this.criterionsException = new HashMap<>(); } /** @@ -108,10 +120,16 @@ public int compare(final RowGroup group1, final RowGroup group2) { */ public int compare(final TableRow row1, final TableRow row2) { for (final Comparator criterion : criteria) { - final int result = criterion.compare(row1, row2); - if (result != 0) { - return result; + try { + final int result = criterion.compare(row1, row2); + if (result != 0) { + return result; + } + } catch (final Exception e) { + criterionsException.put(criterion, e); + continue; } + } return 0; }