Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Schwarz2013-03-27 06:55:04 +0000
committerTobias Schwarz2013-03-27 07:07:28 +0000
commit231344a29237031e00014dcb390c3bf7f5af4ddd (patch)
treec9c6f9d81d97af81c2395ffaed7ed9ee1d36a420
parent008cf1c36905598793946af1104c389932367306 (diff)
downloadorg.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.tar.gz
org.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.tar.xz
org.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.zip
Target Explorer: fix refresh handler
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/plugin.xml1
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/internal/adapters/AdapterFactory.java235
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/RefreshHandler.java28
3 files changed, 145 insertions, 119 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/plugin.xml
index fbc9fafa5..cde267888 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/plugin.xml
@@ -17,6 +17,7 @@
class="org.eclipse.tcf.te.tcf.locator.internal.adapters.AdapterFactory">
<adapter type="org.eclipse.tcf.te.runtime.persistence.interfaces.IPersistableURIProvider"/>
<adapter type="org.eclipse.tcf.te.runtime.stepper.interfaces.IStepContext"/>
+ <adapter type="org.eclipse.tcf.te.tcf.locator.interfaces.nodes.ILocatorModel"/>
</factory>
<factory
adaptableType="org.eclipse.tcf.protocol.IPeer"
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/internal/adapters/AdapterFactory.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/internal/adapters/AdapterFactory.java
index 09238092d..a8edfd595 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/internal/adapters/AdapterFactory.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/internal/adapters/AdapterFactory.java
@@ -1,115 +1,120 @@
-/*******************************************************************************
- * Copyright (c) 2011, 2012 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.locator.internal.adapters;
-
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.tcf.protocol.IPeer;
-import org.eclipse.tcf.protocol.Protocol;
-import org.eclipse.tcf.te.runtime.model.factory.Factory;
-import org.eclipse.tcf.te.runtime.persistence.interfaces.IPersistableURIProvider;
-import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepContext;
-import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.ILocatorModel;
-import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel;
-import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModelProvider;
-import org.eclipse.tcf.te.tcf.locator.interfaces.services.ILocatorModelLookupService;
-import org.eclipse.tcf.te.tcf.locator.model.Model;
-
-/**
- * Static peers adapter factory implementation.
- */
-public class AdapterFactory implements IAdapterFactory {
- // The single instance adapter references
- private final IPersistableURIProvider peerModelPersistableURIProvider = new PeerPersistableURIProvider();
-
- private static final Class<?>[] CLASSES = new Class[] {
- IPersistableURIProvider.class, IPeerModel.class
- };
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
- */
- @Override
- public Object getAdapter(Object adaptableObject, Class adapterType) {
- if (adaptableObject instanceof Map) {
- if (IPersistableURIProvider.class.equals(adapterType)) {
- Assert.isTrue(false);
- }
- }
- if (adaptableObject instanceof IPeerModel || adaptableObject instanceof IPeer || adaptableObject instanceof IPeerModelProvider) {
- if (IPersistableURIProvider.class.equals(adapterType)) {
- return peerModelPersistableURIProvider;
- }
- if (IPeerModel.class.equals(adapterType)) {
- if (adaptableObject instanceof IPeer) {
- final AtomicReference<IPeerModel> node = new AtomicReference<IPeerModel>();
- final IPeer peer = (IPeer)adaptableObject;
-
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- String id = peer.getID();
- ILocatorModel model = Model.getModel();
- Assert.isNotNull(model);
- IPeerModel candidate = model.getService(ILocatorModelLookupService.class).lkupPeerModelById(id);
- if (candidate != null) node.set(candidate);
- else {
- candidate = Factory.getInstance().newInstance(IPeerModel.class, new Object[] { model, peer });
- if (candidate != null) node.set(candidate);
- }
- }
- };
-
- if (Protocol.isDispatchThread()) runnable.run();
- else Protocol.invokeAndWait(runnable);
-
- return node.get();
- }
- else if (adaptableObject instanceof IPeerModel) {
- return adaptableObject;
- }
- else if (adaptableObject instanceof IPeerModelProvider) {
- final AtomicReference<IPeerModel> node = new AtomicReference<IPeerModel>();
- final IPeerModelProvider provider = (IPeerModelProvider)adaptableObject;
-
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- node.set(provider.getPeerModel());
- }
- };
-
- if (Protocol.isDispatchThread()) runnable.run();
- else Protocol.invokeAndWait(runnable);
-
- return node.get();
- }
- }
- if (IStepContext.class.equals(adapterType)) {
- if (adaptableObject instanceof IPeerModel) {
- return new PeerModelStepContextAdapter((IPeerModel)adaptableObject);
- }
- }
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
- */
- @Override
- public Class[] getAdapterList() {
- return CLASSES;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2011, 2012 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.locator.internal.adapters;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.tcf.protocol.IPeer;
+import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.runtime.model.factory.Factory;
+import org.eclipse.tcf.te.runtime.persistence.interfaces.IPersistableURIProvider;
+import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepContext;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.ILocatorModel;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModelProvider;
+import org.eclipse.tcf.te.tcf.locator.interfaces.services.ILocatorModelLookupService;
+import org.eclipse.tcf.te.tcf.locator.model.Model;
+
+/**
+ * Static peers adapter factory implementation.
+ */
+public class AdapterFactory implements IAdapterFactory {
+ // The single instance adapter references
+ private final IPersistableURIProvider peerModelPersistableURIProvider = new PeerPersistableURIProvider();
+
+ private static final Class<?>[] CLASSES = new Class[] {
+ IPersistableURIProvider.class, IPeerModel.class
+ };
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
+ */
+ @Override
+ public Object getAdapter(Object adaptableObject, Class adapterType) {
+ if (adaptableObject instanceof Map) {
+ if (IPersistableURIProvider.class.equals(adapterType)) {
+ Assert.isTrue(false);
+ }
+ }
+ if (ILocatorModel.class.isAssignableFrom(adapterType)) {
+ if (adaptableObject instanceof IPeerModel) {
+ return ((IPeerModel)adaptableObject).getModel();
+ }
+ }
+ if (adaptableObject instanceof IPeerModel || adaptableObject instanceof IPeer || adaptableObject instanceof IPeerModelProvider) {
+ if (IPersistableURIProvider.class.equals(adapterType)) {
+ return peerModelPersistableURIProvider;
+ }
+ if (IPeerModel.class.equals(adapterType)) {
+ if (adaptableObject instanceof IPeer) {
+ final AtomicReference<IPeerModel> node = new AtomicReference<IPeerModel>();
+ final IPeer peer = (IPeer)adaptableObject;
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ String id = peer.getID();
+ ILocatorModel model = Model.getModel();
+ Assert.isNotNull(model);
+ IPeerModel candidate = model.getService(ILocatorModelLookupService.class).lkupPeerModelById(id);
+ if (candidate != null) node.set(candidate);
+ else {
+ candidate = Factory.getInstance().newInstance(IPeerModel.class, new Object[] { model, peer });
+ if (candidate != null) node.set(candidate);
+ }
+ }
+ };
+
+ if (Protocol.isDispatchThread()) runnable.run();
+ else Protocol.invokeAndWait(runnable);
+
+ return node.get();
+ }
+ else if (adaptableObject instanceof IPeerModel) {
+ return adaptableObject;
+ }
+ else if (adaptableObject instanceof IPeerModelProvider) {
+ final AtomicReference<IPeerModel> node = new AtomicReference<IPeerModel>();
+ final IPeerModelProvider provider = (IPeerModelProvider)adaptableObject;
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ node.set(provider.getPeerModel());
+ }
+ };
+
+ if (Protocol.isDispatchThread()) runnable.run();
+ else Protocol.invokeAndWait(runnable);
+
+ return node.get();
+ }
+ }
+ if (IStepContext.class.equals(adapterType)) {
+ if (adaptableObject instanceof IPeerModel) {
+ return new PeerModelStepContextAdapter((IPeerModel)adaptableObject);
+ }
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
+ */
+ @Override
+ public Class[] getAdapterList() {
+ return CLASSES;
+ }
+
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/RefreshHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/RefreshHandler.java
index 1064862bb..e626c2d34 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/RefreshHandler.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/RefreshHandler.java
@@ -26,6 +26,7 @@ import org.eclipse.tcf.te.core.async.AsyncCallbackCollector;
import org.eclipse.tcf.te.runtime.callback.Callback;
import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
import org.eclipse.tcf.te.tcf.core.async.CallbackInvocationDelegate;
+import org.eclipse.tcf.te.tcf.locator.ScannerRunnable;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.ILocatorModel;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel;
import org.eclipse.tcf.te.tcf.locator.interfaces.services.ILocatorModelRefreshService;
@@ -71,7 +72,8 @@ public class RefreshHandler extends AbstractHandler {
// The selection must be a structured selection and must not be empty
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
// The list of locator model instances to refresh
- List<ILocatorModel> toRefresh = new ArrayList<ILocatorModel>();
+ List<ILocatorModel> locatorToRefresh = new ArrayList<ILocatorModel>();
+ List<IPeerModel> peerToRefresh = new ArrayList<IPeerModel>();
// Iterate the selection and determine the model instances
Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
@@ -84,15 +86,18 @@ public class RefreshHandler extends AbstractHandler {
ILocatorModel model = (ILocatorModel)node.getAdapter(ILocatorModel.class);
Assert.isNotNull(model);
// If not yet in the list, add it
- if (!toRefresh.contains(model)) {
- toRefresh.add(model);
+ if (!locatorToRefresh.contains(model)) {
+ locatorToRefresh.add(model);
+ }
+ if (!peerToRefresh.contains(node)) {
+ peerToRefresh.add(node);
}
}
// Trigger an refresh on all determined models and wait for the
// refresh to complete. Once completed, fire the parent callback.
AsyncCallbackCollector collector = new AsyncCallbackCollector(callback, new CallbackInvocationDelegate());
- for (ILocatorModel model : toRefresh) {
+ for (ILocatorModel model : locatorToRefresh) {
final ILocatorModel finModel = model;
final ICallback innerCallback = new AsyncCallbackCollector.SimpleCollectorCallback(collector);
@@ -109,6 +114,21 @@ public class RefreshHandler extends AbstractHandler {
};
Protocol.invokeLater(runnable);
}
+
+ for (IPeerModel model : peerToRefresh) {
+ final IPeerModel finModel = model;
+ final ICallback innerCallback = new AsyncCallbackCollector.SimpleCollectorCallback(collector);
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ new ScannerRunnable(null, finModel).run();
+ innerCallback.done(this, Status.OK_STATUS);
+ }
+ };
+ Protocol.invokeLater(runnable);
+ }
+
// Mark the collector as fully initialized
collector.initDone();
} else {

Back to the top