diff options
author | William Chen | 2012-06-26 03:24:28 +0000 |
---|---|---|
committer | William Chen | 2012-06-26 03:24:28 +0000 |
commit | 5662fc47b569992d885581704c60c81ff4673e6d (patch) | |
tree | ef7eaa547195eeecaa1359bc4dff970bb077a123 /target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core | |
parent | d6b6ae7d0af067e3598ac2ba341210a6e6687bfa (diff) | |
download | org.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')
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); } /* |