Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-06-26 03:24:28 +0000
committerWilliam Chen2012-06-26 03:24:28 +0000
commit5662fc47b569992d885581704c60c81ff4673e6d (patch)
treeef7eaa547195eeecaa1359bc4dff970bb077a123 /target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core
parentd6b6ae7d0af067e3598ac2ba341210a6e6687bfa (diff)
downloadorg.eclipse.tcf-5662fc47b569992d885581704c60c81ff4673e6d.tar.gz
org.eclipse.tcf-5662fc47b569992d885581704c60c81ff4673e6d.tar.xz
org.eclipse.tcf-5662fc47b569992d885581704c60c81ff4673e6d.zip
T
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/META-INF/MANIFEST.MF6
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java75
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/ProcessTreeNode.java2
4 files changed, 60 insertions, 25 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/META-INF/MANIFEST.MF b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/META-INF/MANIFEST.MF
index dae2e9b7a..2f5aebcaf 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/META-INF/MANIFEST.MF
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/META-INF/MANIFEST.MF
@@ -19,11 +19,11 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
Export-Package: org.eclipse.tcf.te.tcf.processes.core.activator;x-internal:=true,
- org.eclipse.tcf.te.tcf.processes.core.callbacks;x-friends:="org.eclipse.tcf.te.tcf.processes.ui",
+ org.eclipse.tcf.te.tcf.processes.core.callbacks;x-friends:="org.eclipse.tcf.te.tcf.processes.ui,org.eclipse.tcf.te.tests",
org.eclipse.tcf.te.tcf.processes.core.interfaces,
org.eclipse.tcf.te.tcf.processes.core.interfaces.launcher,
org.eclipse.tcf.te.tcf.processes.core.interfaces.tracing;x-internal:=true,
org.eclipse.tcf.te.tcf.processes.core.launcher,
- org.eclipse.tcf.te.tcf.processes.core.model;x-friends:="org.eclipse.tcf.te.tcf.processes.ui",
- org.eclipse.tcf.te.tcf.processes.core.model.steps;x-friends:="org.eclipse.tcf.te.tcf.processes.ui",
+ org.eclipse.tcf.te.tcf.processes.core.model;x-friends:="org.eclipse.tcf.te.tcf.processes.ui,org.eclipse.tcf.te.tests",
+ org.eclipse.tcf.te.tcf.processes.core.model.steps;x-friends:="org.eclipse.tcf.te.tcf.processes.ui,org.eclipse.tcf.te.tests",
org.eclipse.tcf.te.tcf.processes.core.nls
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
index 96325fa54..77f795ab3 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshChildrenDoneOpenChannel.java
@@ -16,6 +16,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
import org.eclipse.tcf.protocol.IChannel;
import org.eclipse.tcf.protocol.Protocol;
import org.eclipse.tcf.services.ISysMonitor;
@@ -24,6 +26,7 @@ import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
import org.eclipse.tcf.te.tcf.core.Tcf;
import org.eclipse.tcf.te.tcf.core.concurrent.CallbackMonitor;
import org.eclipse.tcf.te.tcf.core.interfaces.IChannelManager;
+import org.eclipse.tcf.te.tcf.processes.core.activator.CoreBundleActivator;
import org.eclipse.tcf.te.tcf.processes.core.model.ProcessTreeNode;
/**
@@ -32,14 +35,27 @@ import org.eclipse.tcf.te.tcf.processes.core.model.ProcessTreeNode;
public class RefreshChildrenDoneOpenChannel implements IChannelManager.DoneOpenChannel {
// The parent node to be refreshed.
ProcessTreeNode parentNode;
+ // The callback object.
+ ICallback callback;
/**
* Create an instance with the specified field parameters.
*/
public RefreshChildrenDoneOpenChannel(ProcessTreeNode parentNode) {
+ this(parentNode, null);
+ }
+
+ /**
+ * Create an instance with a process model and a parent node.
+ *
+ * @param parentNode The parent node to be queried.
+ * @param callback The callback object.
+ */
+ public RefreshChildrenDoneOpenChannel(ProcessTreeNode parentNode, ICallback callback) {
this.parentNode = parentNode;
+ this.callback = callback;
}
-
+
/*
* (non-Javadoc)
* @see org.eclipse.tcf.te.tcf.core.interfaces.IChannelManager.DoneOpenChannel#doneOpenChannel(java.lang.Throwable, org.eclipse.tcf.protocol.IChannel)
@@ -48,28 +64,45 @@ public class RefreshChildrenDoneOpenChannel implements IChannelManager.DoneOpenC
public void doneOpenChannel(Throwable error, final IChannel channel) {
Assert.isTrue(Protocol.isDispatchThread());
if (error == null) {
- ISysMonitor service = channel.getRemoteService(ISysMonitor.class);
+ ICallback wrapperCallback = new Callback(){
+ @Override
+ protected void internalDone(Object caller, IStatus status) {
+ Tcf.getChannelManager().closeChannel(channel);
+ if(callback != null) {
+ callback.done(caller, status);
+ }
+ }};
+ ISysMonitor service = channel.getRemoteService(ISysMonitor.class);
if (service != null) {
- final CallbackMonitor monitor = new CallbackMonitor(new Callback(){
- @Override
- protected void internalDone(Object caller, IStatus status) {
- Tcf.getChannelManager().closeChannel(channel);
- }}, getChildrenIds());
- for (ProcessTreeNode child : parentNode.getChildren()) {
- if (!child.childrenQueried && !child.childrenQueryRunning) {
- final String contextId = child.id;
- ICallback callback = new Callback() {
- @Override
- protected void internalDone(Object caller, IStatus status) {
- monitor.unlock(contextId, status);
- }
- };
- Queue<ProcessTreeNode> queue = new ConcurrentLinkedQueue<ProcessTreeNode>();
- ISysMonitor.DoneGetChildren done = new RefreshDoneGetChildren(callback, queue, channel, service, child);
- service.getChildren(child.id, done);
+ Object[] childrenIds = getChildrenIds();
+ if(childrenIds.length == 0) {
+ wrapperCallback.done(this, Status.OK_STATUS);
+ }
+ else {
+ final CallbackMonitor monitor = new CallbackMonitor(wrapperCallback, childrenIds);
+ for (ProcessTreeNode child : parentNode.getChildren()) {
+ if (!child.childrenQueried && !child.childrenQueryRunning) {
+ final String contextId = child.id;
+ ICallback callback = new Callback() {
+ @Override
+ protected void internalDone(Object caller, IStatus status) {
+ monitor.unlock(contextId, status);
+ }
+ };
+ Queue<ProcessTreeNode> queue = new ConcurrentLinkedQueue<ProcessTreeNode>();
+ ISysMonitor.DoneGetChildren done = new RefreshDoneGetChildren(callback, queue, channel, service, child);
+ service.getChildren(child.id, done);
+ }
}
}
}
+ else {
+ wrapperCallback.done(this, Status.OK_STATUS);
+ }
+ }
+ else if (!(error instanceof OperationCanceledException) && callback != null) {
+ IStatus status = new Status(IStatus.ERROR, CoreBundleActivator.getUniqueIdentifier(), error.getMessage(), error);
+ callback.done(this, status);
}
}
@@ -80,7 +113,9 @@ public class RefreshChildrenDoneOpenChannel implements IChannelManager.DoneOpenC
private Object[] getChildrenIds() {
List<Object> ids = new ArrayList<Object>();
for (ProcessTreeNode child : parentNode.getChildren()) {
- ids.add(child.id);
+ if (!child.childrenQueried && !child.childrenQueryRunning) {
+ ids.add(child.id);
+ }
}
return ids.toArray(new Object[ids.size()]);
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
index e034a9904..d775df7b4 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/callbacks/RefreshDoneOpenChannel.java
@@ -35,7 +35,7 @@ public class RefreshDoneOpenChannel implements IChannelManager.DoneOpenChannel {
/**
* Create an instance with the specified field parameters.
*/
- public RefreshDoneOpenChannel(ICallback callback, ProcessTreeNode parentNode) {
+ public RefreshDoneOpenChannel(ProcessTreeNode parentNode, ICallback callback) {
this.callback = callback;
this.parentNode = parentNode;
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/ProcessTreeNode.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/ProcessTreeNode.java
index dcfee408f..8cf0e01ab 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/ProcessTreeNode.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/ProcessTreeNode.java
@@ -250,7 +250,7 @@ public final class ProcessTreeNode extends AbstractTreeNode implements IFilterab
*/
@Override
protected DoneOpenChannel doCreateRefreshDoneOpenChannel(ICallback callback) {
- return new RefreshDoneOpenChannel(callback, this);
+ return new RefreshDoneOpenChannel(this, callback);
}
/*

Back to the top