Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikaël Barbero2013-08-14 15:34:10 +0000
committerMikaël Barbero2013-08-14 15:47:13 +0000
commit02372d46015f45334cd5375c9cd5877b7b0bd4d5 (patch)
treec2ce18b7c2e5ec80a381d5d3253686ba63565406
parente9344172ffe833e74d4e26fe644f36e966c44b06 (diff)
downloadorg.eclipse.emf.compare-02372d46015f45334cd5375c9cd5877b7b0bd4d5.tar.gz
org.eclipse.emf.compare-02372d46015f45334cd5375c9cd5877b7b0bd4d5.tar.xz
org.eclipse.emf.compare-02372d46015f45334cd5375c9cd5877b7b0bd4d5.zip
Display number of computed and filtered differences in structure viewer
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java48
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java10
2 files changed, 47 insertions, 11 deletions
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 02a82c939..7f2b1c093 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
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
+import static com.google.common.collect.Sets.newHashSet;
+
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
@@ -38,6 +40,7 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Conflict;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.DifferenceSource;
@@ -68,6 +71,7 @@ import org.eclipse.jface.viewers.IElementComparer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
@@ -471,6 +475,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
default:
throw new IllegalStateException();
}
+ refreshAfterDiff(getRoot());
getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_FILTERS, selectedFilters);
}
@@ -483,6 +488,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
eAdapters.remove(oldDifferenceGroupProvider);
}
eAdapters.add(differenceGroupProvider);
+ refreshAfterDiff(getRoot());
getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_GROUP, differenceGroupProvider);
}
@@ -591,18 +597,56 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
return false;
}
- public void refreshAfterDiff(String message, Object root) {
+ public void refreshAfterDiff(Object root) {
if (getControl().isDisposed()) {
return;
}
if (fParent != null) {
- fParent.setTitleArgument(message);
+ ITreeContentProvider contentProvider = (ITreeContentProvider)getContentProvider();
+ int displayedDiff = getMatchCount(contentProvider, contentProvider.getElements(getRoot()));
+ Comparison comparison = (Comparison)getCompareConfiguration().getProperty(
+ EMFCompareConstants.COMPARE_RESULT);
+ int computedDiff = comparison.getDifferences().size();
+ int filteredDiff = computedDiff - displayedDiff;
+ fParent.setTitleArgument(computedDiff + " differences – " + filteredDiff
+ + " differences filtered from view");
}
refresh(root);
}
+ private int getMatchCount(ITreeContentProvider cp, Object[] elements) {
+ Set<Diff> diffs = newHashSet();
+ getMatchCount(cp, elements, diffs);
+ return diffs.size();
+ }
+
+ /**
+ * @param cp
+ * @param children
+ * @param diffs
+ * @return
+ */
+ private void getMatchCount(ITreeContentProvider cp, Object[] elements, Set<Diff> diffs) {
+ ViewerFilter[] filters = getFilters();
+ for (int j = 0; j < elements.length; j++) {
+ Object element = elements[j];
+ if (!isFiltered(element, null, filters) && element instanceof Adapter) {
+ Notifier target = ((Adapter)element).getTarget();
+ if (target instanceof TreeNode) {
+ TreeNode treeNode = (TreeNode)target;
+ EObject data = treeNode.getData();
+ if (data instanceof Diff) {
+ diffs.add((Diff)data);
+ }
+ }
+ }
+ Object[] children = cp.getChildren(element);
+ getMatchCount(cp, children, diffs);
+ }
+ }
+
/**
* {@inheritDoc}
*
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 83839e306..cc7e5d573 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
@@ -400,14 +400,6 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
diffTreeViewer.setRoot(fAdapterFactory.adapt(treeNode, ICompareInput.class));
getCompareConfiguration().setProperty(EMFCompareConstants.COMPARE_RESULT, comparison);
- String message = null;
- if (comparison.getDifferences().isEmpty()) {
- message = "No difference";
- } else {
- message = comparison.getDifferences().size() + " differences";
- }
-
- final String theMessage = message;
SWTUtil.safeAsyncExec(new Runnable() {
public void run() {
if (diffTreeViewer.getGroupActionMenu() != null) {
@@ -416,9 +408,9 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
if (diffTreeViewer.getFilterActionMenu() != null) {
diffTreeViewer.getFilterActionMenu().createActions(scope, comparison);
}
- diffTreeViewer.refreshAfterDiff(theMessage, diffTreeViewer.getRoot());
// Mandatory for the EMFCompareDiffTreeRuler, all TreeItems must have been created
diffTreeViewer.createChildrenSilently(diffTreeViewer.getTree());
+ diffTreeViewer.refreshAfterDiff(diffTreeViewer.getRoot());
diffTreeViewer.initialSelection();
}
});

Back to the top