diff options
author | Uwe Stieber | 2013-04-25 07:32:01 +0000 |
---|---|---|
committer | Uwe Stieber | 2013-04-25 07:32:01 +0000 |
commit | 8977b61401b132dadf4ecd4a7e1ff38a4382b8ff (patch) | |
tree | e7a09d71a6594c33ebb69019b4197d8c61337a05 | |
parent | c800f84412f0d875cda9ff1b8af034eea9393012 (diff) | |
download | org.eclipse.tcf-8977b61401b132dadf4ecd4a7e1ff38a4382b8ff.tar.gz org.eclipse.tcf-8977b61401b132dadf4ecd4a7e1ff38a4382b8ff.tar.xz org.eclipse.tcf-8977b61401b132dadf4ecd4a7e1ff38a4382b8ff.zip |
Target Explorer: Fix loopback peer not used if available in some cases
3 files changed, 48 insertions, 47 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/listener/LocatorListener.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/listener/LocatorListener.java index be91fb585..930b56863 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/listener/LocatorListener.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/listener/LocatorListener.java @@ -105,14 +105,18 @@ public class LocatorListener implements ILocator.LocatorListener { public void run() { IPeerModel[] matches = model.getService(ILocatorModelLookupService.class).lkupMatchingStaticPeerModels(finPeerNode); if (matches.length == 0) { - model.getService(ILocatorModelUpdateService.class).add(finPeerNode); - // And schedule for immediate status update - Runnable runnable2 = new ScannerRunnable(model.getScanner(), finPeerNode); - Protocol.invokeLater(runnable2); + // If the peer node is still in the model, schedule for immediate status update + if (model.getService(ILocatorModelLookupService.class).lkupPeerModelById(finPeerNode.getPeerId()) != null) { + Runnable runnable2 = new ScannerRunnable(model.getScanner(), finPeerNode); + Protocol.invokeLater(runnable2); + } } else { for (IPeerModel match : matches) { IPeer myPeer = model.validatePeer(finPeer); if (myPeer != null) { + // Remove the preliminary added node from the model again + model.getService(ILocatorModelUpdateService.class).remove(finPeerNode); + // Update the matching static node boolean changed = match.setChangeEventsEnabled(false); // Merge user configured properties between the peers model.getService(ILocatorModelUpdateService.class).mergeUserDefinedAttributes(match, myPeer, true); @@ -127,6 +131,10 @@ public class LocatorListener implements ILocator.LocatorListener { } }; + // Preliminary add the node to the model now. If we have to refresh the agent ID, + // this is an asynchronous operation and other peerAdded events might be processed before. + model.getService(ILocatorModelUpdateService.class).add(peerNode); + if (nodes.size() > 0) { // Refresh the agent ID's first model.getService(ILocatorModelRefreshService.class).refreshAgentIDs(nodes.toArray(new IPeerModel[nodes.size()]), new Callback() { diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/LocatorModel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/LocatorModel.java index 285eefcc7..8a849a746 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/LocatorModel.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/LocatorModel.java @@ -498,6 +498,20 @@ public class LocatorModel extends PlatformObject implements ILocatorModel { // Get the peer for the previous node IPeer previousPeer = previousNode.getPeer(); if (previousPeer != null) { + // Get the IP address of the previous node + String previousPeerIP = previousPeer.getAttributes().get(IPeer.ATTR_IP_HOST); + if (IPAddressUtil.getInstance().isLocalHost(previousPeerIP) && !loopback.equals(previousPeerIP) && loopback.equals(peerIP)) { + // Remove the previous node from the model + getService(ILocatorModelUpdateService.class).remove(previousNode); + + if (CoreBundleActivator.getTraceHandler().isSlotEnabled(0, ITracing.ID_TRACE_LOCATOR_MODEL)) { + CoreBundleActivator.getTraceHandler().trace("LocatorModel.validatePeerNodeForAdd: Previous peer removed and replaced by new peer representing the loopback address" //$NON-NLS-1$ + , ITracing.ID_TRACE_LOCATOR_MODEL, this); + } + + continue; + } + // Get the ports String peerPort = peer.getAttributes().get(IPeer.ATTR_IP_PORT); if (peerPort == null || "".equals(peerPort)) peerPort = "1534"; //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/ViewsUtil.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/ViewsUtil.java index 2ff0f79bf..982f6779c 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/ViewsUtil.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/ViewsUtil.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2012 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2011, 2013 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 @@ -60,11 +60,9 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Get the view reference - IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findViewReference(id); + IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findViewReference(id); // Return the view part from the reference, but do not restore it part.set(reference != null ? reference.getPart(false) : null); } @@ -90,12 +88,10 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Show the view try { - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() - .showView(id); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(id); } catch (PartInitException e) { /* ignored on purpose */ } @@ -122,19 +118,15 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Get the view reference - IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findViewReference(id); + IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findViewReference(id); // Get the view part from the reference, but do not restore it IWorkbenchPart part = reference != null ? reference.getPart(false) : null; // If the part is a common navigator, get the common viewer - Viewer viewer = part instanceof CommonNavigator ? ((CommonNavigator) part) - .getCommonViewer() : null; + Viewer viewer = part instanceof CommonNavigator ? ((CommonNavigator) part).getCommonViewer() : null; // If not a common navigator, try to adapt to the viewer - if (viewer == null) viewer = part != null ? (Viewer) part - .getAdapter(Viewer.class) : null; + if (viewer == null) viewer = part != null ? (Viewer) part.getAdapter(Viewer.class) : null; // Refresh the viewer if (viewer != null) viewer.refresh(); } @@ -162,22 +154,17 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Get the view reference - IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findViewReference(id); + IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findViewReference(id); // Get the view part from the reference, but do not restore it IWorkbenchPart part = reference != null ? reference.getPart(false) : null; // If the part is a common navigator, get the common viewer - Viewer viewer = part instanceof CommonNavigator ? ((CommonNavigator) part) - .getCommonViewer() : null; + Viewer viewer = part instanceof CommonNavigator ? ((CommonNavigator) part).getCommonViewer() : null; // If not a common navigator, try to adapt to the viewer - if (viewer == null) viewer = part != null ? (Viewer) part - .getAdapter(Viewer.class) : null; + if (viewer == null) viewer = part != null ? (Viewer) part.getAdapter(Viewer.class) : null; // Refresh the viewer - if (viewer instanceof StructuredViewer) ((StructuredViewer) viewer) - .refresh(element, true); + if (viewer instanceof StructuredViewer) ((StructuredViewer) viewer).refresh(element, true); else if (viewer != null) viewer.refresh(); } } @@ -203,16 +190,13 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Get the view reference - IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findViewReference(id); + IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findViewReference(id); // Get the view part from the reference, but do not restore it IWorkbenchPart part = reference != null ? reference.getPart(false) : null; // Get the selection provider - ISelectionProvider selectionProvider = part != null && part.getSite() != null ? part - .getSite().getSelectionProvider() : null; + ISelectionProvider selectionProvider = part != null && part.getSite() != null ? part.getSite().getSelectionProvider() : null; // And apply the selection if (selectionProvider != null) selectionProvider.setSelection(selection); } @@ -310,8 +294,7 @@ public class ViewsUtil { Assert.isNotNull(id); Assert.isNotNull(categoryId); - ICategory category = CategoriesExtensionPointManager.getInstance() - .getCategory(categoryId, false); + ICategory category = CategoriesExtensionPointManager.getInstance().getCategory(categoryId, false); if (category != null) goInto(id, category); } @@ -350,19 +333,15 @@ public class ViewsUtil { @Override public void run() { // Check the active workbench window and active page instances - if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI - .getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { + if (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { // Get the view reference - IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findViewReference(id); + IViewReference reference = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findViewReference(id); // Get the view part from the reference, but do not restore it IWorkbenchPart part = reference != null ? reference.getPart(false) : null; // Get the action bars - IActionBars actionBars = part != null && part.getSite() instanceof IViewSite ? ((IViewSite) part - .getSite()).getActionBars() : null; + IActionBars actionBars = part != null && part.getSite() instanceof IViewSite ? ((IViewSite) part.getSite()).getActionBars() : null; // Get the "Go Into" action - IAction action = actionBars != null ? actionBars - .getGlobalActionHandler(IWorkbenchActionConstants.GO_INTO) : null; + IAction action = actionBars != null ? actionBars.getGlobalActionHandler(IWorkbenchActionConstants.GO_INTO) : null; // Run the action if (action != null) action.run(); } |