[270478] [Editor] Cannot shift focus between items in the WSDL editor design view
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingContentEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingContentEditPart.java
index 0eb56c2..092e83e 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingContentEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingContentEditPart.java
@@ -19,8 +19,10 @@
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
import org.eclipse.wst.wsdl.ui.internal.asd.design.DesignViewGraphicsConstants;
@@ -114,4 +116,14 @@
}
return accessibleName;
}
+
+
+ public EditPart getRelativeEditPart(int direction) {
+ EditPart editPart = super.getRelativeEditPart(direction);
+ if (direction == PositionConstants.SOUTH && (editPart == null || editPart == this))
+ {
+ editPart = EditPartNavigationHandlerUtil.getNextSibling(getParent());
+ }
+ return editPart;
+ }
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
index 03ff5f9..d87c92a 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/BindingEditPart.java
@@ -201,14 +201,30 @@
}
else
{
- return null;
+ // or to the first unconnected interface
+ return EditPartNavigationHandlerUtil.getFirstInterface(this);
}
}
else if (direction == PositionConstants.WEST)
{
- // navigate backward along the connection (to the left)
- return EditPartNavigationHandlerUtil.getSourceConnectionEditPart(this);
- }
+ // navigate backward along the connection (to the left) or to the first unconnected service
+ EditPart connectedService = EditPartNavigationHandlerUtil.getSourceConnectionEditPart(this);
+ if (connectedService != null) {
+ return connectedService;
+ } else {
+ return EditPartNavigationHandlerUtil.getFirstService(this);
+ }
+ }
+ else if (direction == PositionConstants.NORTH) {
+ return EditPartNavigationHandlerUtil.getPrevSibling(this);
+ } else if (direction == PositionConstants.SOUTH && !isExpanded()) {
+ EditPart nextSibling = EditPartNavigationHandlerUtil.getNextSibling(this);
+ if (nextSibling != null) {
+ return nextSibling;
+ } else {
+ return this;
+ }
+ }
return super.getRelativeEditPart(direction);
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EditPartNavigationHandlerUtil.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EditPartNavigationHandlerUtil.java
index 20ebddf..a6357c0 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EditPartNavigationHandlerUtil.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EditPartNavigationHandlerUtil.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2001, 2007 IBM Corporation and others.
+ * Copyright (c) 2001, 2010 IBM Corporation 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
@@ -21,8 +21,11 @@
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.LayerConstants;
+import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editparts.LayerManager;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.model.InterfaceColumn;
+import org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.model.ServiceColumn;
import org.eclipse.wst.wsdl.ui.internal.asd.design.figures.ComponentReferenceConnection;
@@ -164,6 +167,99 @@
return result;
}
+ static EditPart getFirstBinding(EditPart editPart)
+ {
+ if (editPart == null) return null;
+
+ RootEditPart rootEditPart = editPart.getRoot();
+ if (rootEditPart == null) return null;
+
+ List rootEditPartChildren = rootEditPart.getChildren();
+ if (rootEditPartChildren == null || rootEditPartChildren.size() != 1) return null;
+
+ Object definitionObject = rootEditPartChildren.get(0);
+ if (! (definitionObject instanceof DefinitionsEditPart)) return null;
+
+ DefinitionsEditPart definitionsEditPart = (DefinitionsEditPart) definitionObject;
+
+ List children = definitionsEditPart.getChildren();
+ for (int i = 0; i < children.size(); i++) {
+ if (children.get(i) instanceof BindingColumnEditPart) {
+ List bindings = ((BindingColumnEditPart) children.get(i)).getChildren();
+ if (bindings != null && bindings.size() > 0 && bindings.get(0) instanceof BindingEditPart)
+ return (BindingEditPart) bindings.get(0);
+ }
+ }
+ return null;
+ }
+
+ static EditPart getFirstService(EditPart editPart)
+ {
+ if (editPart == null) return null;
+
+ RootEditPart rootEditPart = editPart.getRoot();
+ if (rootEditPart == null) return null;
+
+ List rootEditPartChildren = rootEditPart.getChildren();
+ if (rootEditPartChildren == null || rootEditPartChildren.size() != 1) return null;
+
+ Object definitionObject = rootEditPartChildren.get(0);
+ if (! (definitionObject instanceof DefinitionsEditPart)) return null;
+
+ DefinitionsEditPart definitionsEditPart = (DefinitionsEditPart) definitionObject;
+
+ List children = definitionsEditPart.getChildren();
+ for (int i = 0; i < children.size(); i++) {
+ Object child = children.get(i);
+ if (child instanceof ColumnEditPart) {
+ ColumnEditPart column = (ColumnEditPart) child;
+ Object model = column.getModel();
+
+ if (model instanceof ServiceColumn) {
+ List services = column.getChildren();
+ if (services != null && services.size() > 0 && services.get(0) instanceof ServiceEditPart) {
+ return (ServiceEditPart) services.get(0);
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ static EditPart getFirstInterface(EditPart editPart)
+ {
+ if (editPart == null) return null;
+
+ RootEditPart rootEditPart = editPart.getRoot();
+ if (rootEditPart == null) return null;
+
+ List rootEditPartChildren = rootEditPart.getChildren();
+ if (rootEditPartChildren == null || rootEditPartChildren.size() != 1) return null;
+
+ Object definitionObject = rootEditPartChildren.get(0);
+ if (! (definitionObject instanceof DefinitionsEditPart)) return null;
+
+ DefinitionsEditPart definitionsEditPart = (DefinitionsEditPart) definitionObject;
+
+ List children = definitionsEditPart.getChildren();
+ for (int i = 0; i < children.size(); i++) {
+ Object child = children.get(i);
+ if (child instanceof ColumnEditPart) {
+ ColumnEditPart column = (ColumnEditPart) child;
+ Object model = column.getModel();
+
+ if (model instanceof InterfaceColumn) {
+ List interfaces = column.getChildren();
+ if (interfaces != null && interfaces.size() > 0 && interfaces.get(0) instanceof InterfaceEditPart) {
+ return (InterfaceEditPart) interfaces.get(0);
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+
static EditPart getSourceConnectionEditPart(AbstractGraphicalEditPart editPart)
{
// find the first connection that targets this editPart
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EndPointEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EndPointEditPart.java
index a01c9e0..cd4949a 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EndPointEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/EndPointEditPart.java
@@ -290,7 +290,8 @@
}
else
{
- return null;
+ // or to the first unconnected binding
+ return EditPartNavigationHandlerUtil.getFirstBinding(this);
}
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
index b8a64c2..d71ea34 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/InterfaceEditPart.java
@@ -157,11 +157,22 @@
public EditPart getRelativeEditPart(int direction)
{
- if (direction == PositionConstants.WEST)
- {
- return EditPartNavigationHandlerUtil.getSourceConnectionEditPart(this);
- }
- return super.getRelativeEditPart(direction);
+ if (direction == PositionConstants.WEST)
+ {
+ EditPart connectedBinding = EditPartNavigationHandlerUtil.getSourceConnectionEditPart(this);
+ if (connectedBinding != null) {
+ return connectedBinding;
+ } else {
+ return EditPartNavigationHandlerUtil.getFirstBinding(this);
+ }
+ }
+
+ EditPart editPart = super.getRelativeEditPart(direction);
+ if (direction == PositionConstants.NORTH && (editPart == null || editPart == this))
+ {
+ editPart = EditPartNavigationHandlerUtil.getPrevSibling(this);
+ }
+ return editPart;
}
public IFigure getLinkIconColumn() {
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
index 4cd9946..c3a6505 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/MessageReferenceEditPart.java
@@ -268,7 +268,7 @@
public EditPart getRelativeEditPart(int direction)
{
EditPart editPart = super.getRelativeEditPart(direction);
- if (direction == PositionConstants.SOUTH && editPart == null)
+ if (direction == PositionConstants.SOUTH && (editPart == null || editPart == this))
{
editPart = EditPartNavigationHandlerUtil.getNextInterface(this);
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
index 3015659..f8278c1 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterEditPart.java
@@ -226,7 +226,7 @@
public EditPart getRelativeEditPart(int direction)
{
EditPart editPart = super.getRelativeEditPart(direction);
- if (direction == PositionConstants.SOUTH && editPart == null)
+ if (direction == PositionConstants.SOUTH && (editPart == null || editPart == this))
{
editPart = EditPartNavigationHandlerUtil.getNextInterface(this);
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
index a5f1639..f1847bb 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ParameterTypeEditPart.java
@@ -317,7 +317,7 @@
public EditPart getRelativeEditPart(int direction)
{
EditPart editPart = super.getRelativeEditPart(direction);
- if (direction == PositionConstants.SOUTH && editPart == null)
+ if (direction == PositionConstants.SOUTH && (editPart == null || editPart == this))
{
editPart = EditPartNavigationHandlerUtil.getNextInterface(this);
}
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ServiceEditPart.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ServiceEditPart.java
index 2a152af..f03862f 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ServiceEditPart.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/ServiceEditPart.java
@@ -19,9 +19,11 @@
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.LineBorder;
+import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
@@ -171,4 +173,18 @@
}
return ""; //$NON-NLS-1$
}
+
+ public EditPart getRelativeEditPart(int direction) {
+ if (direction == PositionConstants.NORTH )
+ {
+ return EditPartNavigationHandlerUtil.getPrevSibling(this);
+ }
+
+ if (direction == PositionConstants.EAST )
+ {
+ return EditPartNavigationHandlerUtil.getFirstBinding(this);
+ }
+
+ return super.getRelativeEditPart(direction);
+ }
}