tmf.ui: handle enabled/disabled trace types in the Filters View
authorJean-Christian Kouame <jean-christian.kouame@ericsson.com>
Tue, 28 Mar 2017 13:43:41 +0000 (09:43 -0400)
committerJean-Christian Kouame <jean-christian.kouame@ericsson.com>
Thu, 30 Mar 2017 03:10:29 +0000 (23:10 -0400)
Change-Id: Ia3b1849ba5e45b1ef6fcf2b7225b604dea2c1b44
Signed-off-by: Jean-Christian Kouame <jean-christian.kouame@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/93989
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-by: Hudson CI
doc/org.eclipse.tracecompass.doc.user/doc/User-Guide.mediawiki
tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/tracetype/preferences/TraceTypePreferencePageTest.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/filter/FilterViewer.java

index b2fda8db166edd9cdfd4976b61f81f8040aa8f78..48b8d4f9f6912f27d15c78c7551a588c168870dc 100644 (file)
@@ -832,7 +832,7 @@ The Filters view allows the user to define preset filters that can be applied to
 
 The filters can be more complex than what can be achieved with the filter header row in the events table. The filter is defined in a tree node structure, where the node types can be any of '''TRACETYPE''', '''AND''', '''OR''', '''CONTAINS''', '''EQUALS''', '''MATCHES''' or '''COMPARE'''. Some nodes types have restrictions on their possible children in the tree.
 
-The '''TRACETYPE''' node filters against the trace type of the trace as defined in a plug-in extension or in a custom parser. When used, any child node will have its ''type'' combo box fixed and its ''aspect'' combo box restricted to the possible aspects of that trace type.
+The '''TRACETYPE''' node filters against the trace type of the trace as defined in a plug-in extension or in a custom parser. When used, any child node will have its ''type'' combo box fixed and its ''aspect'' combo box restricted to the possible aspects of that trace type. Depending of the Trace Types enabled in the [[#Trace_Types_Preference_Page | Trace Types preference page]], the list of available trace types for the filtering can vary.
 
 The '''AND''' node applies the logical ''and'' condition on all of its children. All children conditions must be true for the filter to match. A ''not'' operator can be applied to invert the condition.
 
index 264f45cdf48e18c480240a5fae58a60d5f976771..5e6ce616730c68ddd70328a01d20df9524d33a01 100644 (file)
@@ -14,7 +14,9 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
+import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -28,6 +30,7 @@ import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.SWTBot;
 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
@@ -39,9 +42,11 @@ import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
 import org.eclipse.tracecompass.tmf.core.project.model.TmfTraceType;
 import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
+import org.eclipse.tracecompass.tmf.ui.dialog.TmfFileDialogFactory;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
+import org.eclipse.tracecompass.tmf.ui.views.filter.FilterView;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -57,6 +62,15 @@ import org.junit.runner.RunWith;
 @RunWith(SWTBotJunit4ClassRunner.class)
 public class TraceTypePreferencePageTest {
 
+    private static final @NonNull String FILTER =
+            "<ROOT>"
+                + "<FILTER name=\"test\">"
+                    + "<TRACETYPE name=\"Custom XML : testxmlextension\" type=\"custom.xml.trace:Custom XML:testxmlextension\">"
+                        + "<MATCHES eventaspect=\"Message\" not=\"false\" regex=\"msg\" tracetypeid=\"custom.xml.trace:Custom XML:testxmlextension\"/>"
+                    + "</TRACETYPE>"
+                + "</FILTER>"
+            + "</ROOT>";
+
     private static final @NonNull String CHECK_SELECTED = "Check selected";
     private static final @NonNull String CHECK_ALL = "Check all";
     private static final @NonNull String UNCHECK_SELECTED = "Uncheck selected";
@@ -127,6 +141,7 @@ public class TraceTypePreferencePageTest {
      */
     @AfterClass
     public static void afterClass() {
+        setTraceTypePreferences(CHECK_ALL);
         SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
         fBot.closeAllEditors();
         fLogger.removeAllAppenders();
@@ -230,6 +245,63 @@ public class TraceTypePreferencePageTest {
         assertEquals("Test all trace type enabled", defaultCount + 1, traceTypeComboItems.length);
     }
 
+    /**
+     * Test enabled/disabled trace types behavior in the filters view
+     */
+    @Test
+    public void testFiltersView() {
+        int defaultCount = TmfTraceType.getAvailableTraceTypes().length;
+        SWTBotUtils.openView(FilterView.ID);
+        SWTBotView viewBot = fBot.viewById(FilterView.ID);
+        importFilter(viewBot);
+        SWTBot bot = viewBot.bot();
+
+        SWTBotTree tree = bot.tree(0);
+        SWTBotTreeItem item = tree.expandNode("FILTER test", "WITH TRACETYPE Custom XML : testxmlextension");
+        item.select();
+
+        SWTBotCombo comboBox = bot.comboBox(0);
+        assertEquals("Combo: number of trace types", defaultCount, comboBox.itemCount());
+
+        // Change the preference value for testxmlextension
+        setTraceTypePreferences(UNCHECK_ALL, "Custom XML", "testxmlextension");
+
+        // Change node to refresh the tree
+        item = tree.expandNode("FILTER test");
+        item.select();
+        item = tree.expandNode("FILTER test", "WITH TRACETYPE Custom XML : testxmlextension");
+        item.select();
+
+        comboBox = bot.comboBox(0);
+        assertEquals("Combo: number of trace types", 1, comboBox.itemCount());
+
+        setTraceTypePreferences(UNCHECK_ALL, "Custom Text", "testtxtextension");
+
+        // Change node to refresh the tree
+        item = tree.expandNode("FILTER test");
+        item.select();
+        item = tree.expandNode("FILTER test", "WITH TRACETYPE Custom XML : testxmlextension");
+        item.select();
+
+        comboBox = bot.comboBox(0);
+        assertEquals("Combo: number of trace types", 2, comboBox.itemCount());
+    }
+
+    private static void importFilter(SWTBotView viewBot) {
+        try {
+            File tempFile = File.createTempFile("test", ".xml");
+            FileWriter fw = new FileWriter(tempFile);
+            try (BufferedWriter bw = new BufferedWriter(fw)) {
+                bw.write(FILTER);
+            }
+            TmfFileDialogFactory.setOverrideFiles(tempFile.getAbsolutePath());
+        } catch (IOException e) {
+            fail("Failed to add a filter");
+        }
+        viewBot.toolbarButton("Import filters").click();
+        WaitUtils.waitUntil(tree -> tree.rowCount() > 0, viewBot.bot().tree(0), "Failed to import test filter");
+    }
+
     private static void setTraceTypePreferences(@NonNull String button, @NonNull String... pathToCheck) {
         openTraceTypePreferences();
         SWTBot bot = fBot.activeShell().bot();
index 7a19e6627db84a5ac526249468fff0d883f1b73b..2c3454521df5b8c57cf75cddddcc4774458ccfb3 100644 (file)
@@ -61,8 +61,8 @@ import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.tracecompass.internal.tmf.ui.Messages;
-import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
 import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
+import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
 import org.eclipse.tracecompass.tmf.core.event.aspect.TmfEventFieldAspect;
 import org.eclipse.tracecompass.tmf.core.filter.model.ITmfFilterTreeNode;
 import org.eclipse.tracecompass.tmf.core.filter.model.TmfFilterAndNode;
@@ -423,10 +423,10 @@ class FilterViewer extends Composite {
             setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
         }
 
-        protected Map<String, TraceTypeHelper> getTraceTypeMap() {
+        protected Map<String, TraceTypeHelper> getTraceTypeMap(String selected) {
             Map<String, TraceTypeHelper> traceTypeMap = new TreeMap<>();
             for (TraceTypeHelper helper : TmfTraceType.getTraceTypeHelpers()) {
-                if (!helper.isExperimentType()) {
+                if (!helper.isExperimentType() && (helper.isEnabled() || (helper.getTraceTypeId().equals(selected)))) {
                     traceTypeMap.put(helper.getLabel(), helper);
                 }
             }
@@ -452,7 +452,7 @@ class FilterViewer extends Composite {
             label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
             label.setText(Messages.FilterViewer_TypeLabel);
 
-            final List<TraceTypeItem> traceTypeList = getTraceTypeList(fAspectNode);
+            final List<TraceTypeItem> traceTypeList = getTraceTypeList(fAspectNode, fAspectNode.getTraceTypeId());
 
             fTraceTypeCombo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
             fTraceTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
@@ -600,7 +600,7 @@ class FilterViewer extends Composite {
             });
         }
 
-        private List<TraceTypeItem> getTraceTypeList(ITmfFilterTreeNode node) {
+        private List<TraceTypeItem> getTraceTypeList(ITmfFilterTreeNode node, String selected) {
             ArrayList<TraceTypeItem> traceTypeList = new ArrayList<>();
             traceTypeList.add(new TraceTypeItem(Messages.FilterViewer_CommonCategory, TmfFilterAspectNode.BASE_ASPECT_ID));
 
@@ -617,7 +617,7 @@ class FilterViewer extends Composite {
                 curNode = curNode.getParent();
             }
 
-            for (TraceTypeHelper helper : getTraceTypeMap().values()) {
+            for (TraceTypeHelper helper : getTraceTypeMap(selected).values()) {
                 traceTypeList.add(new TraceTypeItem(helper.getLabel(), helper.getTraceTypeId()));
             }
             return traceTypeList;
@@ -706,7 +706,7 @@ class FilterViewer extends Composite {
         FilterTraceTypeNodeComposite(Composite parent, TmfFilterTraceTypeNode node) {
             super(parent);
             fNode = node;
-            fTraceTypeMap = getTraceTypeMap();
+            fTraceTypeMap = getTraceTypeMap(fNode.getTraceTypeId());
 
             Label label = new Label(this, SWT.NONE);
             label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
This page took 0.031966 seconds and 5 git commands to generate.