Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordschaefer2011-02-16 17:53:49 +0000
committerdschaefer2011-02-16 17:53:49 +0000
commitb18271b6309d5055a4447fb2a59c83ad51554f24 (patch)
treeb8e69d8f97b1d367889b94f875e9a98154cb1bd5 /plugins
parent919e11bddf93b9d37d4e1d767cc7ce86f40b14d1 (diff)
downloadorg.eclipse.tcf-b18271b6309d5055a4447fb2a59c83ad51554f24.tar.gz
org.eclipse.tcf-b18271b6309d5055a4447fb2a59c83ad51554f24.tar.xz
org.eclipse.tcf-b18271b6309d5055a4447fb2a59c83ad51554f24.zip
Progress on the Processes pane. Additional clean up to support common navigator.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/AbstractTarget.java8
-rw-r--r--plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/ITarget.java9
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/Activator.java3
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemContentProvider.java4
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemLabelProvider.java8
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesContentProvider.java164
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesLabelProvider.java17
-rw-r--r--plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesNode.java52
8 files changed, 236 insertions, 29 deletions
diff --git a/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/AbstractTarget.java b/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/AbstractTarget.java
index 9c056ae09..31a0470c8 100644
--- a/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/AbstractTarget.java
+++ b/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/AbstractTarget.java
@@ -10,8 +10,10 @@
*******************************************************************************/
package org.eclipse.tcf.target.core;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
+import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.PlatformObject;
@@ -26,6 +28,7 @@ public abstract class AbstractTarget extends PlatformObject implements ITarget {
protected LinkedList<IPeer> peers = new LinkedList<IPeer>();
protected LinkedList<ITargetListener> listeners = new LinkedList<ITargetListener>();
protected LinkedList<ITargetRequest> outstandingRequests = new LinkedList<ITargetRequest>();
+ private Map<String, Object> localProperties = new HashMap<String, Object>();
private IChannel channel;
@@ -35,6 +38,11 @@ public abstract class AbstractTarget extends PlatformObject implements ITarget {
}
@Override
+ public Map<String, Object> getLocalProperties() {
+ return localProperties;
+ }
+
+ @Override
public void addTargetListener(ITargetListener listener) {
listeners.add(listener);
}
diff --git a/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/ITarget.java b/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/ITarget.java
index 0904788b7..689b2861a 100644
--- a/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/ITarget.java
+++ b/plugins/org.eclipse.tcf.target.core/src/org/eclipse/tcf/target/core/ITarget.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.tcf.target.core;
+import java.util.Map;
+
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.tm.tcf.protocol.IChannel;
@@ -100,5 +102,12 @@ public interface ITarget extends IAdaptable {
* @return no more peers
*/
boolean handleRemovePeer(String id);
+
+ /**
+ * Get properties associated with this target by local tooling.
+ *
+ * @return local properties
+ */
+ Map<String, Object> getLocalProperties();
}
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/Activator.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/Activator.java
index b6c7e5ca8..37ad10ad1 100644
--- a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/Activator.java
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/Activator.java
@@ -26,9 +26,6 @@ public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "org.eclipse.tcf.target.ui"; //$NON-NLS-1$
- // Reusable pending string nodes
- public static final String[] PENDING_NODES = new String[] { "pending..." };
-
// The shared instance
private static Activator plugin;
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemContentProvider.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemContentProvider.java
index bc4fca233..3eed4088d 100644
--- a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemContentProvider.java
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemContentProvider.java
@@ -150,10 +150,10 @@ public class FileSystemContentProvider implements ITreeContentProvider {
public boolean hasChildren(Object element) {
if (element instanceof ITarget)
return true;
- else if (element instanceof FileSystemNode)
- return ((FileSystemNode)element).hasChildren();
else if (element instanceof RootNode)
return true;
+ else if (element instanceof FileSystemNode)
+ return ((FileSystemNode)element).hasChildren();
else
return false;
}
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemLabelProvider.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemLabelProvider.java
index 831da7e6a..b17d3e2a2 100644
--- a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemLabelProvider.java
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/filesystem/FileSystemLabelProvider.java
@@ -22,8 +22,6 @@ public class FileSystemLabelProvider implements ILabelProvider {
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
@Override
@@ -42,10 +40,10 @@ public class FileSystemLabelProvider implements ILabelProvider {
@Override
public String getText(Object element) {
- if (element instanceof FileSystemNode)
- return ((FileSystemNode)element).getDirEntry().filename;
- else if (element instanceof FileSystemContentProvider.RootNode)
+ if (element instanceof FileSystemContentProvider.RootNode)
return "File System";
+ else if (element instanceof FileSystemNode)
+ return ((FileSystemNode)element).getDirEntry().filename;
else if (element == FileSystemContentProvider.pending)
return element.toString();
else
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesContentProvider.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesContentProvider.java
index 15e435168..d4f66ad1a 100644
--- a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesContentProvider.java
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesContentProvider.java
@@ -10,8 +10,19 @@
*******************************************************************************/
package org.eclipse.tcf.internal.target.ui.processes;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.tcf.internal.target.core.Activator;
+import org.eclipse.tcf.target.core.ITarget;
+import org.eclipse.tcf.target.core.TargetRequestSequence;
+import org.eclipse.tm.tcf.protocol.IChannel;
+import org.eclipse.tm.tcf.protocol.IToken;
+import org.eclipse.tm.tcf.protocol.Protocol;
+import org.eclipse.tm.tcf.services.IProcesses;
+import org.eclipse.tm.tcf.services.IRunControl;
/**
* @author dschaefer
@@ -19,38 +30,171 @@ import org.eclipse.jface.viewers.Viewer;
*/
public class ProcessesContentProvider implements ITreeContentProvider {
+ private TreeViewer viewer;
+ private boolean showRootNode;
+ private boolean fetching;
+
+ static final String pending = "pending...";
+
+ static class RootNode {
+ private static final String propertyName = "processesRoot";
+ private final ITarget target;
+ private ProcessesNode[] processes;
+
+ public RootNode(ITarget target) {
+ this.target = target;
+ }
+ }
+
+ public ProcessesContentProvider() {
+ this(true);
+ }
+
+ public ProcessesContentProvider(boolean showRootNode) {
+ this.showRootNode = showRootNode;
+ }
+
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- // TODO Auto-generated method stub
-
+ if (viewer instanceof TreeViewer)
+ this.viewer = (TreeViewer)viewer;
}
@Override
public Object[] getElements(Object inputElement) {
- return new Object[0];
+ return getChildren(inputElement);
}
@Override
public Object[] getChildren(Object parentElement) {
- return new Object[0];
+ if (parentElement instanceof ITarget) {
+ ITarget target = (ITarget)parentElement;
+ if (showRootNode) {
+ RootNode root = (RootNode)target.getLocalProperties().get(RootNode.propertyName);
+ if (root == null) {
+ root = new RootNode(target);
+ target.getLocalProperties().put(RootNode.propertyName, root);
+ }
+ return new Object[] { root };
+ } else
+ return getProcesses((ITarget)parentElement);
+ } else if (parentElement instanceof RootNode) {
+ return getProcesses(((RootNode)parentElement).target);
+ } else if (parentElement instanceof ProcessesNode) {
+ return ((ProcessesNode)parentElement).getChildren(viewer);
+ } else
+ return new Object[0];
}
+ private void refresh(final TreeViewer viewer, final Object parentElement) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ viewer.refresh(parentElement);
+ }
+ });
+ }
+
+ private Object[] getProcesses(final ITarget target) {
+ final RootNode root = (RootNode)target.getLocalProperties().get(RootNode.propertyName);
+ if (root == null)
+ return new Object[0];
+
+ if (root.processes != null)
+ return root.processes;
+
+ if (!fetching) {
+ fetching = true;
+ Protocol.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ target.handleTargetRequest(new TargetRequestSequence() {
+ IProcesses processes;
+ IRunControl runControl;
+ int i = 0;
+
+ @Override
+ public Step[] getSteps() {
+ return new Step[] {
+ new Step() {
+ @Override
+ public void run(IChannel channel) {
+ processes = channel.getRemoteService(IProcesses.class);
+ runControl = channel.getRemoteService(IRunControl.class);
+
+ runControl.getChildren(null, new IRunControl.DoneGetChildren() {
+ @Override
+ public void doneGetChildren(IToken token, Exception error, String[] context_ids) {
+ root.processes = new ProcessesNode[context_ids.length];
+ for (int i = 0; i < context_ids.length; ++i)
+ root.processes[i] = new ProcessesNode(target, context_ids[i]);
+ if (context_ids.length > 0)
+ nextStep();
+ else
+ refresh(viewer, target);
+ }
+ });
+ }
+ },
+ new Step() {
+ @Override
+ public void run(IChannel channel) {
+ runControl.getContext(root.processes[i].getContextId(), new IRunControl.DoneGetContext() {
+ @Override
+ public void doneGetContext(IToken token, Exception error, IRunControl.RunControlContext context) {
+ if (error != null) {
+ Activator.log(IStatus.ERROR, error);
+ } else {
+ root.processes[i].setContext(context);
+ if (++i < root.processes.length)
+ runControl.getContext(root.processes[i].getContextId(), this);
+ else {
+ refresh(viewer, target);
+ fetching = false;
+ nextStep();
+ }
+ }
+ }
+ });
+ }
+ }
+ };
+ }
+
+ @Override
+ public void channelUnavailable(IStatus error) {
+ Activator.log(error);
+ }
+ });
+ }
+ });
+ }
+
+ return new Object[] { pending };
+ }
+
@Override
public Object getParent(Object element) {
- // TODO Auto-generated method stub
- return null;
+ if (element instanceof RootNode)
+ return ((RootNode)element).target;
+ else if (element instanceof ProcessesNode)
+ return ((ProcessesNode)element).getParent();
+ else
+ return null;
}
@Override
public boolean hasChildren(Object element) {
- // TODO Auto-generated method stub
- return false;
+ if (element instanceof ITarget)
+ return true;
+ else if (element instanceof RootNode)
+ return true;
+ else
+ return false;
}
}
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesLabelProvider.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesLabelProvider.java
index a2c779333..8869e776f 100644
--- a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesLabelProvider.java
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesLabelProvider.java
@@ -22,26 +22,19 @@ public class ProcessesLabelProvider implements ILabelProvider {
@Override
public void addListener(ILabelProviderListener listener) {
- // TODO Auto-generated method stub
-
}
@Override
public void dispose() {
- // TODO Auto-generated method stub
-
}
@Override
public boolean isLabelProperty(Object element, String property) {
- // TODO Auto-generated method stub
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
- // TODO Auto-generated method stub
-
}
@Override
@@ -52,8 +45,14 @@ public class ProcessesLabelProvider implements ILabelProvider {
@Override
public String getText(Object element) {
- // TODO Auto-generated method stub
- return "Processes";
+ if (element instanceof ProcessesContentProvider.RootNode)
+ return "Processes";
+ else if (element instanceof ProcessesNode)
+ return ((ProcessesNode)element).getName();
+ else if (element == ProcessesContentProvider.pending)
+ return element.toString();
+ else
+ return null;
}
}
diff --git a/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesNode.java b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesNode.java
new file mode 100644
index 000000000..02ee1d710
--- /dev/null
+++ b/plugins/org.eclipse.tcf.target.ui/src/org/eclipse/tcf/internal/target/ui/processes/ProcessesNode.java
@@ -0,0 +1,52 @@
+package org.eclipse.tcf.internal.target.ui.processes;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.target.core.ITarget;
+import org.eclipse.tm.tcf.services.IProcesses;
+import org.eclipse.tm.tcf.services.IRunControl;
+
+public class ProcessesNode {
+
+ private final ITarget target;
+ private final ProcessesNode parent;
+ private final String contextId;
+ private IRunControl.RunControlContext context;
+
+ public ProcessesNode(ITarget target, String contextId) {
+ this(target, null, contextId);
+ }
+
+ public ProcessesNode(ITarget target, ProcessesNode parent, String contextId) {
+ this.target = target;
+ this.parent = parent;
+ this.contextId = contextId;
+ }
+
+ public String getName() {
+ if (context != null)
+ return context.getName();
+ else
+ return contextId;
+ }
+
+ public String getContextId() {
+ return contextId;
+ }
+
+ public void setContext(IRunControl.RunControlContext context) {
+ this.context = context;
+ }
+
+ public IRunControl.RunControlContext getContext() {
+ return context;
+ }
+
+ public Object[] getChildren(final TreeViewer viewer) {
+ return new Object[0];
+ }
+
+ public Object getParent() {
+ return parent != null ? parent : target;
+ }
+
+}

Back to the top