From eb3ab4c4b9461b4af2b67cf9d6223ab8561051dc Mon Sep 17 00:00:00 2001 From: Arthur Daussy Date: Wed, 2 Apr 2014 14:44:34 +0200 Subject: [PATCH] [431785] Correct synchronization mechanism Does not synchronize unaplicable filters anymore. Bug: 431785 Change-Id: I0b13eb193f8d30ca376c4497a45b7bcc1f32ee03 Signed-off-by: Arthur Daussy --- .../structuremergeviewer/actions/FilterAction.java | 17 +++++++++++++++-- .../filters/StructureMergeViewerFilter.java | 10 ++++++++++ .../filters/impl/DifferenceFilterManager.java | 6 ++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/FilterAction.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/FilterAction.java index 53d3a3f7f..4a90b0c41 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/FilterAction.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/actions/FilterAction.java @@ -12,6 +12,8 @@ package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.actions; import com.google.common.collect.Sets; +import java.util.Set; + import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin; import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages; @@ -108,8 +110,19 @@ public class FilterAction extends Action { * Synchronizes UI filter selection with the preferences. */ private void synchonizeFilters() { - filterManager.setCurrentByDefaultFilters(Sets.newLinkedHashSet(structureMergeViewerFilter - .getSelectedDifferenceFilters())); + Set byDefaultFilters = Sets.newLinkedHashSet(filterManager + .getCurrentByDefaultFilters()); + //Add newly activated filters + for (IDifferenceFilter activeFilter : structureMergeViewerFilter.getSelectedDifferenceFilters()) { + byDefaultFilters.add(activeFilter); + } + //Remove deactivated filters + for (IDifferenceFilter toDeactivateFilter : structureMergeViewerFilter + .getUnSelectedDifferenceFilters()) { + byDefaultFilters.remove(toDeactivateFilter); + } + filterManager.setCurrentByDefaultFilters(byDefaultFilters); + } /** diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/StructureMergeViewerFilter.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/StructureMergeViewerFilter.java index de64c6576..5ceaca67b 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/StructureMergeViewerFilter.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/StructureMergeViewerFilter.java @@ -17,6 +17,7 @@ import static com.google.common.collect.Iterables.any; import static com.google.common.collect.Sets.newLinkedHashSet; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.eventbus.EventBus; @@ -237,6 +238,15 @@ public class StructureMergeViewerFilter extends ViewerFilter { } /** + * Returns the set of unselected filters known by this viewer. + * + * @return the unselectedDifferenceFilters the set of unselected filters known by this viewer. + */ + public Set getUnSelectedDifferenceFilters() { + return ImmutableSet.copyOf(unselectedDifferenceFilters); + } + + /** * Returns the predicate that aggregates the selected state predicates of selected filters and the * unselected state predicates of unselected filters. * diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/DifferenceFilterManager.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/DifferenceFilterManager.java index 6cb50fe8b..50ba2c068 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/DifferenceFilterManager.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/DifferenceFilterManager.java @@ -32,7 +32,6 @@ import org.eclipse.emf.compare.rcp.internal.extension.impl.ItemUtil; import org.eclipse.emf.compare.rcp.internal.tracer.TracingConstant; import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin; import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.filters.IDifferenceFilter; -import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.osgi.service.prefs.Preferences; /** @@ -114,10 +113,9 @@ public class DifferenceFilterManager { /** * Get all {@link IDifferenceFilter} that shall be used by default for next comparison. * - * @return A {@link Collection} of {@link IDifferenceFilter} that shall be used by default for next - * comparison. + * @return A {@link Set} of {@link IDifferenceFilter} that shall be used by default for next comparison. */ - public Collection getCurrentByDefaultFilters() { + public Set getCurrentByDefaultFilters() { Set storedFilter = getDisabledFilters(); if (storedFilter == null) { return getInitialByDefaultFilters(); -- 2.11.4.GIT