Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2011-12-31 03:38:46 +0000
committerWilliam Chen2011-12-31 03:38:46 +0000
commit537c30311c12f4cf689f49e8ae87bec9553ac006 (patch)
tree12d351d0c27f0f314565171bd5a34f2fc7dcd0c1
parent31eea2fa8274c3d9b9db7151580ca71882abc5ec (diff)
downloadorg.eclipse.tcf-537c30311c12f4cf689f49e8ae87bec9553ac006.tar.gz
org.eclipse.tcf-537c30311c12f4cf689f49e8ae87bec9553ac006.tar.xz
org.eclipse.tcf-537c30311c12f4cf689f49e8ae87bec9553ac006.zip
Target Explorer: Add the single thread filter.
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/controls/FSTreeContentProvider.java9
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml17
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/controls/ProcessTreeContentProvider.java17
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/filters/SingleThreadFilter.java49
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/tabbed/ProcessFilter.java16
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/CommonViewerListener.java8
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeContentProvider.java37
8 files changed, 137 insertions, 20 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml
index 787eb5aff..9a51b9daf 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/plugin.xml
@@ -2122,7 +2122,7 @@
class="org.eclipse.tcf.te.tcf.filesystem.filters.HiddenFilesViewerFilter"
description="%filter.description.hidden"
enabled="true"
- id="org.eclipse.tcf.te.tcf.filesystem.filters.hiddenFiles"
+ id="org.eclipse.tcf.te.tcf.filesystem.navigator.filter.hiddenFiles"
image="icons/obj16/hidden_file_filter.png"
name="%filter.name.hidden">
</filter>
@@ -2130,7 +2130,7 @@
class="org.eclipse.tcf.te.tcf.filesystem.filters.SystemFilesViewerFilter"
description="%filter.description.system"
enabled="true"
- id="org.eclipse.tcf.te.tcf.filesystem.filters.systemFiles"
+ id="org.eclipse.tcf.te.tcf.filesystem.navigator.filter.systemFiles"
image="icons/obj16/system_file_filter.png"
name="%filter.name.system">
<activation>
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/controls/FSTreeContentProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/controls/FSTreeContentProvider.java
index 5f9fd3e20..00341ae50 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/controls/FSTreeContentProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/controls/FSTreeContentProvider.java
@@ -510,14 +510,7 @@ public class FSTreeContentProvider extends TreeContentProvider {
if (!node.childrenQueried || node.childrenQueryRunning) {
hasChildren = true;
} else if (node.childrenQueried) {
- final boolean[] result = new boolean[1];
- Protocol.invokeAndWait(new Runnable() {
- @Override
- public void run() {
- result[0] = node.getChildren().size() > 0;
- }
- });
- hasChildren = result[0];
+ hasChildren = super.hasChildren(element);
}
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
index 5ca6b3d24..bc03c0f6d 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/plugin.xml
@@ -253,6 +253,16 @@
width="100">
</column>
</columnContribution>
+ <filterContribution
+ viewerId="org.eclipse.tcf.te.ui.controls.viewer.processes">
+ <filter
+ class="org.eclipse.tcf.te.tcf.processes.ui.internal.filters.SingleThreadFilter"
+ description="For single thread processes the thread child is hidden. "
+ enabled="true"
+ id="org.eclipse.tcf.te.tcf.processes.ui.navigator.filter.singleThread"
+ name="Single Thread Filter">
+ </filter>
+ </filterContribution>
</extension>
<extension
point="org.eclipse.ui.navigator.navigatorContent">
@@ -282,6 +292,13 @@
class="org.eclipse.tcf.te.tcf.processes.ui.controls.ProcessViewerSorter">
</commonSorter>
</navigatorContent>
+ <commonFilter
+ activeByDefault="true"
+ class="org.eclipse.tcf.te.tcf.processes.ui.internal.filters.SingleThreadFilter"
+ id="org.eclipse.tcf.te.tcf.processes.ui.navigator.filter.singleThread"
+ name="Single Thread Filter"
+ visibleInUI="true">
+ </commonFilter>
</extension>
<extension
point="org.eclipse.ui.navigator.viewer">
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/controls/ProcessTreeContentProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/controls/ProcessTreeContentProvider.java
index 975ce2163..7b1ccd44d 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/controls/ProcessTreeContentProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/controls/ProcessTreeContentProvider.java
@@ -54,14 +54,17 @@ public class ProcessTreeContentProvider extends TreeContentProvider {
}
else if (parentElement instanceof ProcessTreeNode) {
ProcessTreeNode node = (ProcessTreeNode) parentElement;
- if (!node.childrenQueried && !node.childrenQueryRunning) {
- ProcessModel model = ProcessModel.getProcessModel(node.peerNode);
- model.queryChildren(node);
+ if(node.type.equals("ProcPendingNode")) {//$NON-NLS-1$
+ return NO_ELEMENTS;
}
- if(!node.childrenQueried && node.children.isEmpty()) {
+ if (!node.childrenQueried) {
+ if (!node.childrenQueryRunning) {
+ ProcessModel model = ProcessModel.getProcessModel(node.peerNode);
+ model.queryChildren(node);
+ }
ProcessTreeNode pendingNode = new ProcessTreeNode();
pendingNode.name = Messages.PendingOperation_label;
- pendingNode.type = "ProcPendingNode"; //$NON-NLS-1$
+ pendingNode.type = "ProcPendingNode"; //$NON-NLS-1$
return new Object[] { pendingNode };
}
return node.children.toArray();
@@ -85,8 +88,8 @@ public class ProcessTreeContentProvider extends TreeContentProvider {
if (!node.childrenQueried || node.childrenQueryRunning) {
hasChildren = true;
}
- else if (node.childrenQueried) {
- hasChildren = node.children.size() > 0;
+ else {
+ hasChildren = super.hasChildren(element);
}
}
else if (element instanceof IPeerModel) {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/filters/SingleThreadFilter.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/filters/SingleThreadFilter.java
new file mode 100644
index 000000000..b84f8fe09
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/filters/SingleThreadFilter.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.processes.ui.internal.filters;
+
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.tcf.te.tcf.processes.ui.model.ProcessTreeNode;
+
+/**
+ * The filter to filter out the single thread of a process which has the same name
+ * and id with its parent process.
+ */
+public class SingleThreadFilter extends ViewerFilter {
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(parentElement instanceof TreePath) {
+ parentElement = ((TreePath)parentElement).getLastSegment();
+ }
+ if(parentElement instanceof ProcessTreeNode && element instanceof ProcessTreeNode) {
+ ProcessTreeNode parent = (ProcessTreeNode) parentElement;
+ ProcessTreeNode child = (ProcessTreeNode) element;
+ if(parent.children.size() == 1) {
+ if(parent.pid == child.pid) {
+ if (parent.name != null) {
+ return !parent.name.equals(child.name);
+ }
+ else if (child.name != null) {
+ return !child.name.equals(parent.name);
+ }
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/tabbed/ProcessFilter.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/tabbed/ProcessFilter.java
index 7950cec28..5ec893f2e 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/tabbed/ProcessFilter.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/internal/tabbed/ProcessFilter.java
@@ -1,10 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Wind River Systems, Inc. and others. All rights reserved.
+ * This program and the accompanying materials are made available under the terms
+ * of the Eclipse Public License v1.0 which accompanies this distribution, and is
+ * available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
package org.eclipse.tcf.te.tcf.processes.ui.internal.tabbed;
import org.eclipse.jface.viewers.IFilter;
import org.eclipse.tcf.te.tcf.processes.ui.model.ProcessTreeNode;
+/**
+ * The filter to filter out root and pending process node.
+ */
public class ProcessFilter implements IFilter {
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IFilter#select(java.lang.Object)
+ */
@Override
public boolean select(Object toTest) {
if(toTest instanceof ProcessTreeNode) {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/CommonViewerListener.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/CommonViewerListener.java
index 2bf4e62c7..969b676f1 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/CommonViewerListener.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/CommonViewerListener.java
@@ -42,7 +42,13 @@ public class CommonViewerListener implements IPropertyChangeListener {
if (!tree.isDisposed()) {
Display display = tree.getDisplay();
if (display.getThread() == Thread.currentThread()) {
- viewer.refresh();
+ Object object = event.getSource();
+ if (object != null) {
+ viewer.refresh(object);
+ }
+ else {
+ viewer.refresh();
+ }
}
else {
display.asyncExec(new Runnable() {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeContentProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeContentProvider.java
index 292fd3320..85421e712 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeContentProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui/src/org/eclipse/tcf/te/ui/trees/TreeContentProvider.java
@@ -18,6 +18,7 @@ import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.tcf.te.ui.interfaces.IViewerInput;
/**
@@ -34,6 +35,8 @@ public abstract class TreeContentProvider implements ITreeContentProvider {
private IPropertyChangeListener commonViewerListener;
// The viewer inputs that have been added a property change listener.
private Set<IViewerInput> viewerInputs;
+ // The viewer
+ private TreeViewer viewer;
/*
* (non-Javadoc)
@@ -45,7 +48,26 @@ public abstract class TreeContentProvider implements ITreeContentProvider {
viewerInput.removePropertyChangeListener(commonViewerListener);
}
}
-
+
+ /**
+ * Get the filtered children of the parent using the
+ * filters registered in the viewer.
+ *
+ * @param parent The parent element.
+ * @return The children after filtering.
+ */
+ private Object[] getFilteredChildren(Object parent) {
+ Object[] result = getChildren(parent);
+ ViewerFilter[] filters = viewer.getFilters();
+ if (filters != null) {
+ for (ViewerFilter filter : filters) {
+ Object[] filteredResult = filter.filter(viewer, parent, result);
+ result = filteredResult;
+ }
+ }
+ return result;
+ }
+
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
@@ -53,7 +75,8 @@ public abstract class TreeContentProvider implements ITreeContentProvider {
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
Assert.isTrue(viewer instanceof TreeViewer);
- commonViewerListener = new CommonViewerListener((TreeViewer) viewer);
+ this.viewer = (TreeViewer) viewer;
+ commonViewerListener = new CommonViewerListener(this.viewer);
viewerInputs = Collections.synchronizedSet(new HashSet<IViewerInput>());
}
@@ -70,6 +93,16 @@ public abstract class TreeContentProvider implements ITreeContentProvider {
}
}
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ @Override
+ public boolean hasChildren(Object element) {
+ Object[] children = getFilteredChildren(element);
+ return children != null && children.length > 0;
+ }
+
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)

Back to the top