From df454c2a36084c805510b5f7ae3ed1694ab62b10 Mon Sep 17 00:00:00 2001 From: Mikaël Barbero Date: Wed, 2 Oct 2013 14:43:19 +0200 Subject: Factorized out filtering code. It is now the exact same code that is used in SMV and CMV. The only difference in CMV is that it also display prime refining differences. Change-Id: If66fbb319aadf5037fd18ef35ac90d6c14b3d2d2 --- .../table/TableContentMergeViewer.java | 21 ++++------------- .../tree/TreeContentMergeViewer.java | 19 +++------------ .../EMFCompareDiffTreeRuler.java | 27 +++++++++------------- .../EMFCompareDiffTreeViewer.java | 24 +++++++++++++------ .../EMFCompareStructureMergeViewer.java | 1 + .../actions/util/EMFCompareUIActionUtil.java | 2 +- 6 files changed, 37 insertions(+), 57 deletions(-) (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src') diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/table/TableContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/table/TableContentMergeViewer.java index 72789cedd..b405aa2c0 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/table/TableContentMergeViewer.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/table/TableContentMergeViewer.java @@ -20,14 +20,12 @@ import java.util.ResourceBundle; import org.eclipse.compare.CompareConfiguration; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.EMFCompareContentMergeViewer; -import org.eclipse.emf.compare.internal.utils.DiffUtil; import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin; import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.ICompareAccessor; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.IMergeViewer.MergeViewerSide; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.impl.AbstractMergeViewer; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.impl.TableMergeViewer; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.IMergeViewerItem; -import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter; import org.eclipse.emf.compare.rcp.ui.internal.util.MergeViewerUtil; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.InternalEObject; @@ -35,7 +33,6 @@ import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.IItemFontProvider; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; -import org.eclipse.emf.edit.tree.TreeNode; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; @@ -280,23 +277,13 @@ public class TableContentMergeViewer extends EMFCompareContentMergeViewer { final Diff leftDiff = ((IMergeViewerItem)leftItem.getData()).getDiff(); boolean doPaint = true; if (leftDiff != null) { - for (IDifferenceFilter filter : getEMFCompareConfiguration().getSelectedFilters()) { - TreeNode treeNode = MergeViewerUtil.getTreeNode(getEMFCompareConfiguration() - .getComparison(), getEMFCompareConfiguration().getSelectedGroup(), leftDiff); - if (filter.getPredicateWhenSelected().apply(treeNode) - && !DiffUtil.isPrimeRefining(treeNode.getData())) { - doPaint = false; - break; - } - } - } - if (doPaint) { - if (leftDiff != null) { + if (MergeViewerUtil.isVisibleInMergeViewer(leftDiff, getEMFCompareConfiguration() + .getSelectedGroup(), getEMFCompareConfiguration().getAggregatedPredicate())) { TableItem rightItem = findRightTableItemFromLeftDiff(rightItems, leftDiff, leftData); if (rightItem != null) { - Color strokeColor = getCompareColor().getStrokeColor(leftDiff, isThreeWay(), false, - selected); + final Color strokeColor = getCompareColor().getStrokeColor(leftDiff, isThreeWay(), + false, selected); g.setForeground(strokeColor); drawCenterLine(g, leftClientArea, rightClientArea, leftItem, rightItem); } diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/TreeContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/TreeContentMergeViewer.java index 7781e36f8..8af40406b 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/TreeContentMergeViewer.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/tree/TreeContentMergeViewer.java @@ -27,7 +27,6 @@ import org.eclipse.emf.compare.DifferenceKind; import org.eclipse.emf.compare.Match; import org.eclipse.emf.compare.ReferenceChange; import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.EMFCompareContentMergeViewer; -import org.eclipse.emf.compare.internal.utils.DiffUtil; import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin; import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.ICompareAccessor; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.IMergeViewer.MergeViewerSide; @@ -35,7 +34,6 @@ import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.impl.AbstractMergeVie import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.impl.TreeMergeViewer; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.IMergeViewerItem; import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.impl.MergeViewerItem; -import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter; import org.eclipse.emf.compare.rcp.ui.internal.util.MergeViewerUtil; import org.eclipse.emf.compare.utils.EMFComparePredicates; import org.eclipse.emf.ecore.EObject; @@ -44,7 +42,6 @@ import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory; import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; -import org.eclipse.emf.edit.tree.TreeNode; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.jface.action.ActionContributionItem; @@ -112,6 +109,7 @@ public class TreeContentMergeViewer extends EMFCompareContentMergeViewer { */ public TreeContentMergeViewer(Composite parent, CompareConfiguration config) { super(SWT.NONE, ResourceBundle.getBundle(BUNDLE_NAME), config); + fAdapterFactory = new ComposedAdapterFactory(EMFCompareRCPPlugin.getDefault() .getAdapterFactoryRegistry()); fAdapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory()); @@ -352,20 +350,9 @@ public class TreeContentMergeViewer extends EMFCompareContentMergeViewer { final boolean selected = Iterables.any(selection, equalTo(leftItem)); IMergeViewerItem leftData = (IMergeViewerItem)leftItem.getData(); final Diff leftDiff = leftData.getDiff(); - boolean doPaint = true; if (leftDiff != null) { - for (IDifferenceFilter filter : getEMFCompareConfiguration().getSelectedFilters()) { - TreeNode treeNode = MergeViewerUtil.getTreeNode(getEMFCompareConfiguration().getComparison(), getEMFCompareConfiguration().getSelectedGroup(), - leftDiff); - if (filter.getPredicateWhenSelected().apply(treeNode) - && !DiffUtil.isPrimeRefining(treeNode.getData())) { - doPaint = false; - break; - } - } - } - if (doPaint) { - if (leftDiff != null) { + if (MergeViewerUtil.isVisibleInMergeViewer(leftDiff, getEMFCompareConfiguration() + .getSelectedGroup(), getEMFCompareConfiguration().getAggregatedPredicate())) { TreeItem rightItem = findRightTreeItemFromLeftDiff(rightItems, leftDiff, leftData); if (rightItem != null) { diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java index 25e2982ae..40f1d284b 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java @@ -10,7 +10,11 @@ *******************************************************************************/ package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer; +import static com.google.common.collect.Iterables.filter; + +import com.google.common.base.Predicate; import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -334,10 +338,10 @@ public class EMFCompareDiffTreeRuler extends Canvas { */ private void handlePaintEvent(PaintEvent e) { annotationsData.clear(); - Collection filters = (Collection)fConfiguration - .getProperty(EMFCompareConstants.SELECTED_FILTERS); - Collection filteredRequires = filteredDiffs(requires, filters); - Collection filteredUnmergeables = filteredDiffs(unmergeables, filters); + Predicate predicate = (Predicate)fConfiguration + .getProperty(EMFCompareConstants.AGGREGATED_VIEWER_PREDICATE); + Collection filteredRequires = filteredDiffs(requires, predicate); + Collection filteredUnmergeables = filteredDiffs(unmergeables, predicate); for (Diff diff : filteredRequires) { for (TreeItem item : diffItems.get(diff)) { createAnnotation(e, diff, item, requiredDiffFillColor, requiredDiffBorderColor); @@ -638,19 +642,10 @@ public class EMFCompareDiffTreeRuler extends Canvas { * @return A filtered list of diffs. */ protected Collection filteredDiffs(Collection unfilteredDiffs, - Collection filters) { + Predicate filters) { if (filters != null) { - List filteredDiffs = Lists.newArrayList(unfilteredDiffs); - for (IDifferenceFilter filter : filters) { - for (Diff unfilteredDiff : unfilteredDiffs) { - if (filter.getPredicateWhenSelected().apply(unfilteredDiff)) { - filteredDiffs.remove(unfilteredDiff); - } - } - } - return filteredDiffs; + return ImmutableList.copyOf(filter(unfilteredDiffs, filters)); } - return unfilteredDiffs; - + return ImmutableList.of(); } } diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java index 8a32c897e..0e1c17077 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java @@ -11,6 +11,7 @@ package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer; import static com.google.common.collect.Sets.newHashSet; +import static com.google.common.collect.Sets.newLinkedHashSet; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; @@ -25,7 +26,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; import java.util.List; import java.util.ListIterator; import java.util.Set; @@ -468,21 +468,26 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer { final Object property = getCompareConfiguration().getProperty(EMFCompareConstants.SELECTED_FILTERS); final Collection selectedFilters; if (property == null) { - selectedFilters = new HashSet(); + selectedFilters = newLinkedHashSet(); } else { - selectedFilters = new HashSet((Collection)property); + selectedFilters = newLinkedHashSet((Collection)property); } switch (event.getAction()) { - case ACTIVATE: + case SELECTED: selectedFilters.add(event.getFilter()); break; - case DEACTIVATE: + case DESELECTED: selectedFilters.remove(event.getFilter()); break; default: throw new IllegalStateException(); } + getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_FILTERS, selectedFilters); + getCompareConfiguration().setProperty(EMFCompareConstants.AGGREGATED_VIEWER_PREDICATE, + event.getAggregatedPredicate()); + + refreshTitle(); } @Subscribe @@ -495,6 +500,8 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer { } eAdapters.add(differenceGroupProvider); getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_GROUP, differenceGroupProvider); + + refreshTitle(); } public void configurationPropertyChanged() { @@ -607,6 +614,11 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer { return; } + refreshTitle(); + refresh(root); + } + + protected void refreshTitle() { if (fParent != null) { ITreeContentProvider contentProvider = (ITreeContentProvider)getContentProvider(); int displayedDiff = getMatchCount(contentProvider, contentProvider.getElements(getRoot())); @@ -617,8 +629,6 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer { fParent.setTitleArgument(computedDiff + " differences – " + filteredDiff + " differences filtered from view"); } - - refresh(root); } private int getMatchCount(ITreeContentProvider cp, Object[] elements) { diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java index e5e2bca83..c53e9ec5c 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java @@ -537,6 +537,7 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem if (getCompareConfiguration() != null) { getCompareConfiguration().setProperty(EMFCompareConstants.COMPARE_RESULT, null); getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_FILTERS, null); + getCompareConfiguration().setProperty(EMFCompareConstants.AGGREGATED_VIEWER_PREDICATE, null); getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_GROUP, null); getCompareConfiguration().setProperty(EMFCompareConstants.MERGE_WAY, null); getCompareConfiguration().setProperty(EMFCompareConstants.SMV_SELECTION, null); diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/util/EMFCompareUIActionUtil.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/util/EMFCompareUIActionUtil.java index 475bc6d6d..bb1e80602 100644 --- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/util/EMFCompareUIActionUtil.java +++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/actions/util/EMFCompareUIActionUtil.java @@ -67,7 +67,7 @@ public final class EMFCompareUIActionUtil { public static boolean isCascadingDifferencesFilterActive(CompareConfiguration configuration) { Object property = configuration.getProperty(EMFCompareConstants.SELECTED_FILTERS); final Collection selectedFilters; - if (property != null) { + if (property instanceof Collection) { selectedFilters = (Collection)property; for (IDifferenceFilter iDifferenceFilter : selectedFilters) { if (iDifferenceFilter instanceof CascadingDifferencesFilter) { -- cgit v1.2.3