Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java63
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/Messages.java1
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/messages.properties1
-rw-r--r--lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/filter/FilterViewer.java6
4 files changed, 70 insertions, 1 deletions
diff --git a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java b/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java
index d6e90d9524..6f6c5ef382 100644
--- a/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java
+++ b/lttng/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/filter/model/TmfFilterTreeNode.java
@@ -9,6 +9,7 @@
* Contributors:
* Yuriy Vashchuk (yvashchuk@gmail.com) - Initial API and implementation
* Patrick Tasse - Refactoring
+ * Vincent Perot - Add subfield filtering
*******************************************************************************/
package org.eclipse.linuxtools.tmf.core.filter.model;
@@ -29,6 +30,9 @@ import org.eclipse.linuxtools.tmf.core.event.ITmfEventField;
*/
public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable {
+ private static final char SLASH = '/';
+ private static final char BACKSLASH = '\\';
+
private static final String[] VALID_CHILDREN = {
TmfFilterEventTypeNode.NODE_NAME,
TmfFilterAndNode.NODE_NAME,
@@ -42,6 +46,9 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable
private ITmfFilterTreeNode parent = null;
private ArrayList<ITmfFilterTreeNode> children = new ArrayList<>();
+ private String fPathAsString = null;
+ private String[] fPathAsArray = null;
+
/**
* @param parent
* the parent node
@@ -141,7 +148,17 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable
value = event.getReference();
}
else {
- ITmfEventField eventField = event.getContent().getField(field);
+ if (field == null) {
+ return null;
+ }
+ ITmfEventField eventField;
+ if (field.isEmpty() || field.charAt(0) != SLASH) {
+ eventField = event.getContent().getField(field);
+ } else {
+ String[] array = getPathArray(field);
+ eventField = event.getContent().getSubField(array);
+ }
+
if (eventField != null) {
value = eventField.getValue();
}
@@ -149,6 +166,50 @@ public abstract class TmfFilterTreeNode implements ITmfFilterTreeNode, Cloneable
return value;
}
+ private String[] getPathArray(String field) {
+
+ // Check if last request was not the same string.
+ if (field.equals(fPathAsString)) {
+ return fPathAsArray;
+ }
+
+ // Generate the new path array
+ StringBuilder sb = new StringBuilder();
+ List<String> list = new ArrayList<>();
+
+ // We start at 1 since the first character is a slash that we want to
+ // ignore.
+ for (int i = 1; i < field.length(); i++) {
+ char charAt = field.charAt(i);
+ if (charAt == SLASH) {
+ // char is slash. Cut here.
+ list.add(sb.toString());
+ sb = new StringBuilder();
+ } else if (charAt == BACKSLASH && i < field.length() - 1 && field.charAt(i + 1) == SLASH) {
+ // Uninterpreted slash. Add it.
+ sb.append(SLASH);
+ i++;
+ } else {
+ // Any other character. Add.
+ sb.append(charAt);
+ }
+ }
+
+ // Last block. Add it to list.
+ list.add(sb.toString());
+
+ // Transform to array
+ String[] array = new String[list.size()];
+ list.toArray(array);
+
+ // Save new values.
+ // Array first for solving concurrency issues
+ fPathAsArray = array;
+ fPathAsString = field;
+
+ return array;
+ }
+
@Override
public List<String> getValidChildren() {
return Arrays.asList(VALID_CHILDREN);
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/Messages.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/Messages.java
index 0540eb3f89..ffc3bcac1d 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/Messages.java
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/Messages.java
@@ -254,6 +254,7 @@ public class Messages extends NLS {
public static String FilterViewer_RegexHint;
public static String FilterViewer_RegexLabel;
public static String FilterViewer_ResultLabel;
+ public static String FilterViewer_Subfilter_ToolTip;
public static String FilterViewer_TimestampButtonText;
public static String FilterViewer_TypeLabel;
public static String FilterViewer_ValueHint;
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/messages.properties b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/messages.properties
index d480ef7a98..1afd7b1aa6 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/messages.properties
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/messages.properties
@@ -253,6 +253,7 @@ FilterViewer_NumButtonText=Num
FilterViewer_RegexHint=type regular expression
FilterViewer_RegexLabel=regex:
FilterViewer_ResultLabel=result:
+FilterViewer_Subfilter_ToolTip=Prefix with '/' to enter a path where subfields are separated by '/'. For an uninterpreted slash use '\/'.
FilterViewer_TimestampButtonText=Timestamp
FilterViewer_TypeLabel=type:
FilterViewer_ValueHint=type value
diff --git a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/filter/FilterViewer.java b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/filter/FilterViewer.java
index 5bd954e7ef..836505ead8 100644
--- a/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/filter/FilterViewer.java
+++ b/lttng/org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/filter/FilterViewer.java
@@ -9,6 +9,7 @@
* Contributors:
* Patrick Tasse - Initial API and implementation
* Xavier Raynaud - add cut/copy/paste/dnd support
+ * Vincent Perot - Add subfield filtering
*******************************************************************************/
package org.eclipse.linuxtools.tmf.ui.views.filter;
@@ -348,6 +349,7 @@ class FilterViewer extends Composite {
/**
* Gets the TreeViewer displaying filters
+ *
* @return a {@link TreeViewer}
*/
TreeViewer getTreeViewer() {
@@ -689,6 +691,7 @@ class FilterViewer extends Composite {
fFieldCombo = new Combo(this, SWT.DROP_DOWN);
fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fFieldCombo.setItems(getFieldsList(fNode));
+ fFieldCombo.setToolTipText(Messages.FilterViewer_Subfilter_ToolTip);
if (fNode.getField() != null) {
fFieldCombo.setText(fNode.getField());
}
@@ -789,6 +792,7 @@ class FilterViewer extends Composite {
fFieldCombo = new Combo(this, SWT.DROP_DOWN);
fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fFieldCombo.setItems(getFieldsList(fNode));
+ fFieldCombo.setToolTipText(Messages.FilterViewer_Subfilter_ToolTip);
if (fNode.getField() != null) {
fFieldCombo.setText(fNode.getField());
}
@@ -888,6 +892,7 @@ class FilterViewer extends Composite {
fFieldCombo = new Combo(this, SWT.DROP_DOWN);
fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fFieldCombo.setItems(getFieldsList(fNode));
+ fFieldCombo.setToolTipText(Messages.FilterViewer_Subfilter_ToolTip);
if (fNode.getField() != null) {
fFieldCombo.setText(fNode.getField());
}
@@ -978,6 +983,7 @@ class FilterViewer extends Composite {
fFieldCombo = new Combo(this, SWT.DROP_DOWN);
fFieldCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fFieldCombo.setItems(getFieldsList(fNode));
+ fFieldCombo.setToolTipText(Messages.FilterViewer_Subfilter_ToolTip);
if (fNode.getField() != null) {
fFieldCombo.setText(fNode.getField());
}

Back to the top