Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2013-04-25 07:32:01 +0000
committerUwe Stieber2013-04-25 07:32:01 +0000
commit8977b61401b132dadf4ecd4a7e1ff38a4382b8ff (patch)
treee7a09d71a6594c33ebb69019b4197d8c61337a05
parentc800f84412f0d875cda9ff1b8af034eea9393012 (diff)
downloadorg.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
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/listener/LocatorListener.java16
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/nodes/LocatorModel.java14
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.views/src/org/eclipse/tcf/te/ui/views/ViewsUtil.java65
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();
}

Back to the top