From e883975e22f93e805ffc55e709d3be9f90685fa4 Mon Sep 17 00:00:00 2001 From: Patrick Tasse Date: Thu, 22 Jan 2015 11:24:56 -0500 Subject: [PATCH 1/1] tmf: Bug 457502: Prevent duplication of Stream List view filters Change-Id: Ia4cc06c828b09818b38cbc8178fa46073cdfcc08 Signed-off-by: Patrick Tasse Reviewed-on: https://git.eclipse.org/r/40186 Reviewed-by: Hudson CI --- .../tmf/core/filter/TmfCollapseFilter.java | 5 +++++ .../core/filter/model/ITmfFilterTreeNode.java | 13 +++++++++++- .../core/filter/model/TmfFilterAndNode.java | 4 ++-- .../filter/model/TmfFilterAspectNode.java | 12 ++++++++++- .../filter/model/TmfFilterCompareNode.java | 4 ++-- .../filter/model/TmfFilterContainsNode.java | 4 ++-- .../filter/model/TmfFilterEqualsNode.java | 4 ++-- .../filter/model/TmfFilterMatchesNode.java | 4 ++-- .../tmf/core/filter/model/TmfFilterNode.java | 6 ++++-- .../core/filter/model/TmfFilterOrNode.java | 4 ++-- .../core/filter/model/TmfFilterRootNode.java | 9 ++++++-- .../filter/model/TmfFilterTraceTypeNode.java | 9 ++++++-- .../core/filter/model/TmfFilterTreeNode.java | 5 +++++ .../tmf/pcap/ui/stream/StreamListView.java | 21 ++++++++++++------- .../tests/viewers/events/ColorsViewTest.java | 10 +++++++++ .../views/filter/FilterTreeLabelProvider.java | 8 +++---- .../tmf/ui/views/filter/FilterView.java | 14 +++++++++---- 17 files changed, 100 insertions(+), 36 deletions(-) diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/filter/TmfCollapseFilter.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/filter/TmfCollapseFilter.java index f6870ee349..471bc71b1f 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/filter/TmfCollapseFilter.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/filter/TmfCollapseFilter.java @@ -112,6 +112,11 @@ public class TmfCollapseFilter implements ITmfFilterTreeNode { throw new UnsupportedOperationException(); } + @Override + public String toString(boolean explicit) { + return COLLAPSE_NODE_NAME + " [" + fPrevEvent + ']'; //$NON-NLS-1$ + } + @Override public ITmfFilterTreeNode clone() { return new TmfCollapseFilter(); diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/ITmfFilterTreeNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/ITmfFilterTreeNode.java index 87c64c57a3..73d0c35b9e 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/ITmfFilterTreeNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/ITmfFilterTreeNode.java @@ -119,9 +119,20 @@ public interface ITmfFilterTreeNode extends ITmfFilter { */ public List getValidChildren(); + /** + *

Returns a string representation of the filter tree node object.

+ * + * @param explicit + * true if ambiguous fields should explicitly include additional + * information that can differentiate them from other fields with + * the same name + * + * @return a string representation of the filter tree node object + */ + public String toString(boolean explicit); + /** * @return a clone of the node */ public ITmfFilterTreeNode clone(); - } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAndNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAndNode.java index b9cd69e529..1ceb50cf40 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAndNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAndNode.java @@ -66,7 +66,7 @@ public class TmfFilterAndNode extends TmfFilterTreeNode { } @Override - public String toString() { + public String toString(boolean explicit) { StringBuffer buf = new StringBuffer(); if (fNot) { buf.append("not "); //$NON-NLS-1$ @@ -76,7 +76,7 @@ public class TmfFilterAndNode extends TmfFilterTreeNode { } for (int i = 0; i < getChildrenCount(); i++) { ITmfFilterTreeNode node = getChildren()[i]; - buf.append(node.toString()); + buf.append(node.toString(explicit)); if (i < getChildrenCount() - 1) { buf.append(" and "); //$NON-NLS-1$ } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAspectNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAspectNode.java index a5632cdc56..58ba56d8ca 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAspectNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterAspectNode.java @@ -78,13 +78,23 @@ public abstract class TmfFilterAspectNode extends TmfFilterTreeNode { } /** + * @param explicit + * true if the string representation should explicitly include + * the trace type id that can differentiate it from other aspects + * with the same name + * * @return The string representation of the event aspect */ - public String getAspectLabel() { + public String getAspectLabel(boolean explicit) { if (fEventAspect == null) { return ""; //$NON-NLS-1$ } StringBuilder sb = new StringBuilder(fEventAspect.getName()); + if (explicit) { + sb.append('['); + sb.append(fTraceTypeId); + sb.append(']'); + } if (fEventAspect instanceof TmfEventFieldAspect) { String field = ((TmfEventFieldAspect) fEventAspect).getFieldPath(); if (field != null && !field.isEmpty()) { diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterCompareNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterCompareNode.java index a52392772e..8b6ae8b51d 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterCompareNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterCompareNode.java @@ -224,11 +224,11 @@ public class TmfFilterCompareNode extends TmfFilterAspectNode { } @Override - public String toString() { + public String toString(boolean explicit) { String result = (fResult == 0 ? "= " : fResult < 0 ? "< " : "> "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String open = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "["); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String close = (fType == Type.NUM ? "" : fType == Type.ALPHA ? "\"" : "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - return getAspectLabel() + (fNot ? " not " : " ") + result + open + fValue + close; //$NON-NLS-1$ //$NON-NLS-2$ + return getAspectLabel(explicit) + (fNot ? " not " : " ") + result + open + fValue + close; //$NON-NLS-1$ //$NON-NLS-2$ } @Override diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterContainsNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterContainsNode.java index ca7830a2ca..6362cce348 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterContainsNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterContainsNode.java @@ -119,8 +119,8 @@ public class TmfFilterContainsNode extends TmfFilterAspectNode { } @Override - public String toString() { - return getAspectLabel() + (fNot ? " not" : "") + " contains \"" + fValue + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + public String toString(boolean explicit) { + return getAspectLabel(explicit) + (fNot ? " not contains " : " contains ") + (fIgnoreCase ? "ignorecase \"" : "\"") + fValue + '\"'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } @Override diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterEqualsNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterEqualsNode.java index ef104c5f76..de2d6c50c1 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterEqualsNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterEqualsNode.java @@ -114,8 +114,8 @@ public class TmfFilterEqualsNode extends TmfFilterAspectNode { } @Override - public String toString() { - return getAspectLabel() + (fNot ? " not" : "") + " equals \"" + fValue + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + public String toString(boolean explicit) { + return getAspectLabel(explicit) + (fNot ? " not equals " : " equals ") + (fIgnoreCase ? "ignorecase \"" : "\"") + fValue + '\"'; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } @Override diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterMatchesNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterMatchesNode.java index 025557eec1..40d17357e8 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterMatchesNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterMatchesNode.java @@ -140,7 +140,7 @@ public class TmfFilterMatchesNode extends TmfFilterAspectNode { } @Override - public String toString() { - return getAspectLabel() + (isNot() ? " not" : "") + " matches \"" + getRegex() + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ + public String toString(boolean explicit) { + return getAspectLabel(explicit) + (fNot ? " not matches \"" : " matches \"") + getRegex() + '\"'; //$NON-NLS-1$ //$NON-NLS-2$ } } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterNode.java index 8a5d7b8127..f9fd947ca4 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterNode.java @@ -88,14 +88,16 @@ public class TmfFilterNode extends TmfFilterTreeNode { } @Override - public String toString() { + public String toString(boolean explicit) { StringBuffer buf = new StringBuffer(); + buf.append(fFilterName); + buf.append(": "); //$NON-NLS-1$ if (getChildrenCount() > 1) { buf.append("( "); //$NON-NLS-1$ } for (int i = 0; i < getChildrenCount(); i++) { ITmfFilterTreeNode node = getChildren()[i]; - buf.append(node.toString()); + buf.append(node.toString(explicit)); if (i < (getChildrenCount() - 1)) { buf.append(" and "); //$NON-NLS-1$ } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterOrNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterOrNode.java index 3d31711a97..67738cea1d 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterOrNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterOrNode.java @@ -66,7 +66,7 @@ public class TmfFilterOrNode extends TmfFilterTreeNode { } @Override - public String toString() { + public String toString(boolean explicit) { StringBuffer buf = new StringBuffer(); if (fNot) { buf.append("not "); //$NON-NLS-1$ @@ -76,7 +76,7 @@ public class TmfFilterOrNode extends TmfFilterTreeNode { } for (int i = 0; i < getChildrenCount(); i++) { ITmfFilterTreeNode node = getChildren()[i]; - buf.append(node.toString()); + buf.append(node.toString(explicit)); if (i < getChildrenCount() - 1) { buf.append(" or "); //$NON-NLS-1$ } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterRootNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterRootNode.java index 97000210ac..68d5583e36 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterRootNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterRootNode.java @@ -12,6 +12,7 @@ package org.eclipse.tracecompass.tmf.core.filter.model; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -60,11 +61,15 @@ public class TmfFilterRootNode extends TmfFilterTreeNode { } @Override - public String toString() { + public String toString(boolean explicit) { StringBuffer buf = new StringBuffer("root"); //$NON-NLS-1$ if (getChildrenCount() > 0) { buf.append(' '); - buf.append(Arrays.toString(getChildren())); + List strings = new ArrayList<>(); + for (ITmfFilterTreeNode child : getChildren()) { + strings.add(child.toString(explicit)); + } + buf.append(strings.toString()); } return buf.toString(); } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTraceTypeNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTraceTypeNode.java index e7f7183b59..551412275c 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTraceTypeNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTraceTypeNode.java @@ -125,9 +125,14 @@ public class TmfFilterTraceTypeNode extends TmfFilterTreeNode { } @Override - public String toString() { + public String toString(boolean explicit) { StringBuffer buf = new StringBuffer(); buf.append("TraceType is " + fName); //$NON-NLS-1$ + if (explicit) { + buf.append('['); + buf.append(fTraceTypeId); + buf.append(']'); + } if (getChildrenCount() > 0) { buf.append(" and "); //$NON-NLS-1$ } @@ -136,7 +141,7 @@ public class TmfFilterTraceTypeNode extends TmfFilterTreeNode { } for (int i = 0; i < getChildrenCount(); i++) { ITmfFilterTreeNode node = getChildren()[i]; - buf.append(node.toString()); + buf.append(node.toString(explicit)); if (i < getChildrenCount() - 1) { buf.append(" and "); //$NON-NLS-1$ } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTreeNode.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTreeNode.java index 5d5f129964..c16223a96e 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTreeNode.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/filter/model/TmfFilterTreeNode.java @@ -137,4 +137,9 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable return null; } } + + @Override + public String toString() { + return toString(false); + } } diff --git a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/stream/StreamListView.java b/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/stream/StreamListView.java index 092e5985cb..c7c3923640 100644 --- a/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/stream/StreamListView.java +++ b/org.eclipse.tracecompass.tmf.pcap.ui/src/org/eclipse/tracecompass/internal/tmf/pcap/ui/stream/StreamListView.java @@ -13,7 +13,6 @@ package org.eclipse.tracecompass.internal.tmf.pcap.ui.stream; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -67,6 +66,8 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; +import com.google.common.collect.Lists; + /** * Class that represents the Stream List View. Such a view lists all the * available streams from the current experiment.
@@ -418,14 +419,18 @@ public class StreamListView extends TmfView { } // Update XML - List newFilters = new ArrayList<>(); - ITmfFilterTreeNode[] oldFilters = FilterManager.getSavedFilters(); - for (int i = 0; i < oldFilters.length; i++) { - newFilters.add(oldFilters[i]); + List filters = Lists.newArrayList(FilterManager.getSavedFilters()); + boolean newFilter = true; + for (ITmfFilterTreeNode savedFilter : filters) { + // Use toString(explicit) equality because equals() is not implemented + if (savedFilter.toString(true).equals(filter.toString(true))) { + newFilter = false; + break; + } } - if (!(newFilters.contains(filter))) { - newFilters.add(filter); - FilterManager.setSavedFilters(newFilters.toArray(new ITmfFilterTreeNode[newFilters.size()])); + if (newFilter) { + filters.add(filter); + FilterManager.setSavedFilters(filters.toArray(new ITmfFilterTreeNode[filters.size()])); } // Update Filter View diff --git a/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/ColorsViewTest.java b/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/ColorsViewTest.java index bb534e1579..6f48918063 100644 --- a/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/ColorsViewTest.java +++ b/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/ColorsViewTest.java @@ -120,6 +120,16 @@ public class ColorsViewTest { public ITmfFilterTreeNode clone() { return null; } + + @Override + public String toString(boolean explicit) { + return toString(); + } + + @Override + public String toString() { + return getNodeName(); + } } private static final String XMLSTUB_ID = "org.eclipse.linuxtools.tmf.core.tests.xmlstub"; diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterTreeLabelProvider.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterTreeLabelProvider.java index 826bf3c56d..b1a557636b 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterTreeLabelProvider.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterTreeLabelProvider.java @@ -91,7 +91,7 @@ public class FilterTreeLabelProvider implements ILabelProvider { TmfFilterContainsNode node = (TmfFilterContainsNode) element; label = (node.isNot() ? "NOT " : "") + //$NON-NLS-1$ //$NON-NLS-2$ - (node.getEventAspect() != null ? node.getAspectLabel() : Messages.FilterTreeLabelProvider_AspectHint) + + (node.getEventAspect() != null ? node.getAspectLabel(false) : Messages.FilterTreeLabelProvider_AspectHint) + ' ' + node.getNodeName() + (node.getValue() != null ? " \"" + node.getValue() + "\"" : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ @@ -99,7 +99,7 @@ public class FilterTreeLabelProvider implements ILabelProvider { TmfFilterEqualsNode node = (TmfFilterEqualsNode) element; label = (node.isNot() ? "NOT " : "") + //$NON-NLS-1$ //$NON-NLS-2$ - (node.getEventAspect() != null ? node.getAspectLabel() : Messages.FilterTreeLabelProvider_AspectHint) + + (node.getEventAspect() != null ? node.getAspectLabel(false) : Messages.FilterTreeLabelProvider_AspectHint) + ' ' + node.getNodeName() + (node.getValue() != null ? " \"" + node.getValue() + "\"" : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ @@ -107,7 +107,7 @@ public class FilterTreeLabelProvider implements ILabelProvider { TmfFilterMatchesNode node = (TmfFilterMatchesNode) element; label = (node.isNot() ? "NOT " : "") + //$NON-NLS-1$ //$NON-NLS-2$ - (node.getEventAspect() != null ? node.getAspectLabel() : Messages.FilterTreeLabelProvider_AspectHint) + + (node.getEventAspect() != null ? node.getAspectLabel(false) : Messages.FilterTreeLabelProvider_AspectHint) + ' ' + node.getNodeName() + (node.getRegex() != null ? " \"" + node.getRegex() + "\"" : ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ @@ -115,7 +115,7 @@ public class FilterTreeLabelProvider implements ILabelProvider { TmfFilterCompareNode node = (TmfFilterCompareNode) element; label = (node.isNot() ? "NOT " : "") + //$NON-NLS-1$ //$NON-NLS-2$ - (node.getEventAspect() != null ? node.getAspectLabel() : Messages.FilterTreeLabelProvider_AspectHint) + + (node.getEventAspect() != null ? node.getAspectLabel(false) : Messages.FilterTreeLabelProvider_AspectHint) + (node.getResult() < 0 ? " <" : (node.getResult() > 0 ? " >" : " =")) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ (node.getType() == Type.ALPHA ? " \"" : node.getType() == Type.TIMESTAMP ? " [" : ' ') + //$NON-NLS-1$ //$NON-NLS-2$ (node.hasValidValue() ? node.getValue() : Messages.FilterTreeLabelProvider_ValueHint) + diff --git a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterView.java b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterView.java index 6051ee1f1c..62d1a7f894 100644 --- a/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterView.java +++ b/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterView.java @@ -110,23 +110,29 @@ public class FilterView extends TmfView { } /** - * Add a filter to the FilterView. This does not modify the XML, which must - * be done manually. If the filter is already in the FilterView, this is a - * no-op. + * Add a filter to the FilterView and select it. This does not modify the + * XML, which must be done manually. If an equivalent filter is already in + * the FilterView, it is not added. * * @param filter * The filter to add. * @since 3.1 */ public void addFilter(ITmfFilterTreeNode filter) { + if (filter == null) { + return; + } ITmfFilterTreeNode root = fViewer.getInput(); for (ITmfFilterTreeNode node : root.getChildren()) { - if (node.equals(filter)) { + // Use toString(explicit) equality because equals() is not implemented + if (node.toString(true).equals(filter.toString(true))) { + fViewer.setSelection(node); return; } } root.addChild(filter); fViewer.setInput(root); + fViewer.setSelection(filter); } /** -- 2.34.1