diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/META-INF/MANIFEST.MF b/java/bundles/org.eclipse.set.feature.plazmodel/META-INF/MANIFEST.MF index fec3b3ffcb..dead512b9c 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/META-INF/MANIFEST.MF +++ b/java/bundles/org.eclipse.set.feature.plazmodel/META-INF/MANIFEST.MF @@ -74,6 +74,7 @@ Import-Package: jakarta.annotation, org.eclipse.set.utils.widgets, org.eclipse.swt, org.eclipse.swt.events, + org.eclipse.swt.layout, org.eclipse.swt.widgets, org.locationtech.jts.geom;version="1.19.0", org.osgi.service.component.annotations, diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/OSGI-INF/l10n/bundle.properties b/java/bundles/org.eclipse.set.feature.plazmodel/OSGI-INF/l10n/bundle.properties index 2609e576d2..8f6ce04652 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/OSGI-INF/l10n/bundle.properties +++ b/java/bundles/org.eclipse.set.feature.plazmodel/OSGI-INF/l10n/bundle.properties @@ -36,7 +36,7 @@ PlazModellPart_ExportTitleMsg=Export als CSV PlazModellPart_ExportCsvFileName=PlaZ-Modell PlazModellPart_ExpandAllGroup= Alle ausklappen PlazModellPart_CollapseAllGroup= Alle einklappen - +PlazModellPart_ActiveDefaultFilterCheckbox=Ausblenden technische Meldungen PlazReportColumns_Severity = Schweregrad PlazReportColumns_ProblemType = Problemart PlazReportColumns_LineNumber = Zeilennummer diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/Messages.java b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/Messages.java index 798b612073..b3e9f1c2b9 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/Messages.java +++ b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/Messages.java @@ -109,4 +109,9 @@ public class Messages { */ public String PlazExport_ExportProcess_ErrorDialog_Message; + /** + * Ausblenden technische Meldungen + */ + public String PlazModellPart_ActiveDefaultFilterCheckbox; + } diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java index 707cd7091c..050a5f8362 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java +++ b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/PlazModelPart.java @@ -157,6 +157,8 @@ public String getText() { } }); + tableView.createActiveDefaultFilterCheckBox( + (Composite) getBanderole().getControl()); tableView.createExpandCollapseAllButton( (Composite) getBanderole().getControl(), messages.PlazModellPart_ExpandAllGroup, diff --git a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/table/PlazModelTableView.java b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/table/PlazModelTableView.java index e41cecb1d8..9e8dd94fc6 100644 --- a/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/table/PlazModelTableView.java +++ b/java/bundles/org.eclipse.set.feature.plazmodel/src/org/eclipse/set/feature/plazmodel/table/PlazModelTableView.java @@ -9,6 +9,7 @@ package org.eclipse.set.feature.plazmodel.table; import java.nio.file.Path; +import java.util.Map; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.set.basis.ToolboxPaths.ExportPathExtension; @@ -22,8 +23,14 @@ import org.eclipse.set.utils.table.menu.TableMenuService; import org.eclipse.set.utils.table.tree.AbstractTreeLayerTable; import org.eclipse.set.utils.xml.XMLNodeFinder; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; /** * View for the validation table @@ -142,4 +149,42 @@ public void exportCsv() { exportCsv(part.getToolboxShell(), part.getDialogService(), messages.PlazModellPart_ExportTitleMsg, exportFileName); } + + @Override + protected Map getDefaultFilterValue() { + return Map.of(Integer.valueOf(2), "-GUID-Sortierung"); //$NON-NLS-1$ + } + + /** + * IMPROVE: when reimplementation the filter to like excel then the check + * box here can be removed + * + * @param parent + * the parent composite + */ + public void createActiveDefaultFilterCheckBox(final Composite parent) { + final Composite composite = new Composite(parent, SWT.NONE); + // Empty + final Composite space = new Composite(parent, SWT.NONE); + space.setLayout(new GridLayout()); + composite.setLayout(new GridLayout(2, false)); + final Button checkDefaultFilterButton = new Button(composite, + SWT.CHECK); + checkDefaultFilterButton.setSelection(true); + final Label checkDefaultFilterLabel = new Label(composite, SWT.NONE); + checkDefaultFilterLabel + .setText(messages.PlazModellPart_ActiveDefaultFilterCheckbox); + checkDefaultFilterButton.addSelectionListener(new SelectionListener() { + + @Override + public void widgetSelected(final SelectionEvent e) { + widgetDefaultSelected(e); + } + + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + setDefaultFilterState(checkDefaultFilterButton.getSelection()); + } + }); + } } diff --git a/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/table/ValidationTableView.java b/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/table/ValidationTableView.java index 17bb969d21..2dde638d1a 100644 --- a/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/table/ValidationTableView.java +++ b/java/bundles/org.eclipse.set.feature.validation/src/org/eclipse/set/feature/validation/table/ValidationTableView.java @@ -9,6 +9,8 @@ package org.eclipse.set.feature.validation.table; import java.nio.file.Path; +import java.util.Collections; +import java.util.Map; import org.eclipse.nebula.widgets.nattable.NatTable; import org.eclipse.set.basis.ToolboxPaths.ExportPathExtension; @@ -136,4 +138,9 @@ public void exportCsv() { exportCsv(shell, part.getDialogService(), messages.ExportValidationTitleMsg, exportFileName); } + + @Override + protected Map getDefaultFilterValue() { + return Collections.emptyMap(); + } } diff --git a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableDataProvider.xtend b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableDataProvider.xtend index e3cac3bc9e..a5bc355b05 100644 --- a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableDataProvider.xtend +++ b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/TableDataProvider.xtend @@ -66,6 +66,10 @@ class TableDataProvider implements IDataProvider { ].filter[filterMatch].toList } + def Map getCurrentFilters() { + return filters + } + /** * Checks whether a row fulfils the applied filters * @@ -75,15 +79,19 @@ class TableDataProvider implements IDataProvider { for (var i = 0; i < columnCount; i++) { if (filters.containsKey(i)) { val content = row.contents.get(i).plainStringValue.toLowerCase - var filterValue = filters.get(i).toString.toLowerCase - val isExcludeFilter = filterValue.substring(0, 1).equals( - EXCULDE_FILTER_SIGN) - filterValue = isExcludeFilter ? filterValue. - substring(1) : filterValue - - // Equivalence logic - if (isExcludeFilter === content.contains(filterValue)) { - return false + var filterValues = filters.get(i).toString.split(",") + for (v : filterValues) { + if (!v.nullOrEmpty) { + val isExcludeFilter = v.substring(0, 1).equals( + EXCULDE_FILTER_SIGN) + var value = isExcludeFilter ? v.substring(1) : v + + // Equivalence logic + if (isExcludeFilter === + content.contains(value.toLowerCase)) { + return false + } + } } } } diff --git a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/tree/AbstractTreeLayerTable.java b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/tree/AbstractTreeLayerTable.java index c5071e8736..81a2bb22b5 100644 --- a/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/tree/AbstractTreeLayerTable.java +++ b/java/bundles/org.eclipse.set.utils.table/src/org/eclipse/set/utils/table/tree/AbstractTreeLayerTable.java @@ -9,6 +9,7 @@ package org.eclipse.set.utils.table.tree; +import java.util.HashMap; import java.util.Map; import java.util.function.UnaryOperator; @@ -50,6 +51,9 @@ public abstract class AbstractTreeLayerTable */ protected TreeLayer treeLayer; + private boolean activeDefaultFilter = true; + protected IFilterStrategy treeFilterStrategy; + @Override protected void createTableBodyData(final Table table, final UnaryOperator getSourceLine) { @@ -84,6 +88,7 @@ public boolean doCommand(final ILayerCommand command) { } }; // Collapse all group by default + bodyDataProvider.applyFilter(getDefaultFilterValue()); treeLayer.doCommand(new TreeCollapseAllCommand()); } @@ -117,10 +122,36 @@ public void applyFilter( // The hidden rows list in {@link TreeDataProvider} will not be // change by direct call expland-collapse function layer.expandAll(); - treeDataProvider.applyFilter(filterIndexToObjectMap); + + treeDataProvider + .applyFilter(getFilterObjectMap(filterIndexToObjectMap)); treeLayer.doCommand(new TreeCollapseAllCommand()); } + private Map getFilterObjectMap( + final Map filterIndexToObjectMap) { + final HashMap result = new HashMap<>( + filterIndexToObjectMap); + if (activeDefaultFilter) { + getDefaultFilterValue() + .forEach((key, value) -> result.compute(key, (k, v) -> { + if (v == null) { + return value; + } + return v.toString() + "," + value.toString(); //$NON-NLS-1$ + })); + } else { + getDefaultFilterValue().forEach((key, value) -> { + final Object restFilter = result.computeIfPresent(key, (k, + v) -> v.toString().replace(value.toString(), "")); //$NON-NLS-1$ + if (restFilter.toString().isEmpty()) { + result.remove(key); + } + }); + } + return result; + } + } @Override @@ -129,8 +160,9 @@ protected FilterRowHeaderComposite createFilterRowHeader( final DataLayer columnHeaderDataLayer, final ConfigRegistry configRegistry) { if (bodyDataProvider instanceof final TreeDataProvider treeDataProvider) { - return new FilterRowHeaderComposite<>( - new TreeFilterStrategy<>(treeLayer, treeDataProvider), + treeFilterStrategy = new TreeFilterStrategy<>(treeLayer, + treeDataProvider); + return new FilterRowHeaderComposite<>(treeFilterStrategy, sortHeaderLayer, columnHeaderDataLayer.getDataProvider(), configRegistry); } @@ -140,7 +172,7 @@ protected FilterRowHeaderComposite createFilterRowHeader( } /** - * Creat button to toogle expand and collapse all group + * Create button to toggle expand and collapse all group * * @param parent * the parent @@ -197,4 +229,19 @@ private void toggleExpandCollapseAll(final Button button, button.setText(expandAllLabel); } } + + protected abstract Map getDefaultFilterValue(); + + /** + * @param state + * should active filter for default value + */ + public void setDefaultFilterState(final boolean state) { + activeDefaultFilter = state; + if (treeFilterStrategy != null) { + treeFilterStrategy + .applyFilter(bodyDataProvider.getCurrentFilters()); + } + } + }