diff options
author | Tobias Schwarz | 2013-03-27 06:55:04 +0000 |
---|---|---|
committer | Tobias Schwarz | 2013-03-27 07:07:28 +0000 |
commit | 231344a29237031e00014dcb390c3bf7f5af4ddd (patch) | |
tree | c9c6f9d81d97af81c2395ffaed7ed9ee1d36a420 | |
parent | 008cf1c36905598793946af1104c389932367306 (diff) | |
download | org.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.tar.gz org.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.tar.xz org.eclipse.tcf-231344a29237031e00014dcb390c3bf7f5af4ddd.zip |
Target Explorer: fix refresh handler
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 { |