[142638] Fix the EditPart ordering to avoid cross over of reference lines
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Service.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Service.java
index b1a4ca1..a5bade6 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Service.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd-wsdl11/org/eclipse/wst/wsdl/ui/internal/adapters/basic/W11Service.java
@@ -11,9 +11,15 @@
 package org.eclipse.wst.wsdl.ui.internal.adapters.basic;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
 import java.util.List;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.wsdl.Binding;
+import org.eclipse.wst.wsdl.Port;
+import org.eclipse.wst.wsdl.PortType;
 import org.eclipse.wst.wsdl.Service;
 import org.eclipse.wst.wsdl.ui.internal.WSDLEditorPlugin;
 import org.eclipse.wst.wsdl.ui.internal.actions.OpenInNewEditor;
@@ -30,7 +36,14 @@
 
 	public List getEndPoints() {
 		List adapterList = new ArrayList();
-		populateAdapterList(((Service) target).getEPorts(), adapterList);
+		List endPoints = new ArrayList();
+		Iterator it = ((Service) target).getEPorts().iterator();
+		while (it.hasNext()) {
+			endPoints.add(it.next());
+		}
+		
+		Collections.sort(endPoints, new EndPointComparator());
+		populateAdapterList(endPoints, adapterList);
 
 		return adapterList;
 	}
@@ -96,4 +109,37 @@
 	public ITreeElement getParent() {
 		return null;
 	}
+    
+	private class EndPointComparator implements Comparator {
+	  public int compare(Object o1, Object o2) {
+	    if (o1 instanceof Port && o2 instanceof Port) {
+	      Binding binding1 = ((Port) o1).getEBinding();
+	      Binding binding2 = ((Port) o2).getEBinding();
+
+	      if (binding1 != null && binding2 == null) {
+	        return -1;
+	      }
+	      else if (binding1 == null && binding2 != null) {
+	        return 1;
+	      }
+
+	      PortType portType1 = binding1.getEPortType();
+	      PortType portType2 = binding2.getEPortType();
+
+	      if (portType1 != null && portType2 != null) {
+	        String name1 = portType1.getQName().getLocalPart();
+	        String name2 = portType2.getQName().getLocalPart();
+	        return name1.compareTo(name2);
+	      }
+	      else if (portType1 != null && portType2 == null) {
+	        return -1;
+	      }
+	      else if (portType1 == null && portType2 != null) {
+	        return 1;
+	      }
+	    }
+
+	    return 0;
+	  }
+	}    
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/BindingColumn.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/BindingColumn.java
index 2e02054..4ba9ffc 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/BindingColumn.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/BindingColumn.java
@@ -10,7 +10,14 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.model;
 
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.wst.wsdl.ui.internal.asd.facade.IBinding;
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IDescription;
+import org.eclipse.wst.wsdl.ui.internal.asd.facade.IInterface;
+import org.eclipse.wst.wsdl.ui.internal.asd.facade.INamedObject;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
 
 public class BindingColumn extends AbstractModelCollection {
@@ -19,7 +26,10 @@
 	  }
 	  
 	  public ITreeElement[] getChildren() {
-			Object array[] = ((IDescription)model).getBindings().toArray();
+			List bindings = ((IDescription)model).getBindings();
+			Collections.sort(bindings, new BindingComparator());
+			Object array[] = bindings.toArray();
+			
 			ITreeElement treeElement[] = new ITreeElement[array.length];
 			for (int index = 0; index < array.length; index++) {
 				treeElement[index] = (ITreeElement) array[index];
@@ -27,8 +37,7 @@
 			
 			return treeElement;
 	  }
-	  
-	  
+
 	  public boolean hasChildren() {
 		  ITreeElement treeElement[] = getChildren();
 		  if (treeElement.length > 0) {
@@ -41,4 +50,27 @@
 	  public String getText() {
 		  return "definition"; //$NON-NLS-1$
 	  }
+	  
+	  private class BindingComparator implements Comparator {
+			public int compare(Object o1, Object o2) {
+				if (o1 instanceof IBinding && o2 instanceof IBinding) {
+					IInterface interface1 = ((IBinding) o1).getInterface();
+					IInterface interface2 = ((IBinding) o2).getInterface();
+					
+					if (interface1 != null && interface2 != null) {
+						String name1 = ((INamedObject) interface1).getName();
+						String name2 = ((INamedObject) interface2).getName();
+						return name1.compareTo(name2);
+					}
+					else if (interface1 != null && interface2 == null) {
+						return -1;
+					}
+					else if (interface1 == null && interface2 != null) {
+						return 1;
+					}
+				}
+				
+				return 0;
+			}
+	  }
 }
diff --git a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/InterfaceColumn.java b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/InterfaceColumn.java
index 0888c1a..ecd0f17 100644
--- a/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/InterfaceColumn.java
+++ b/bundles/org.eclipse.wst.wsdl.ui/src-asd/org/eclipse/wst/wsdl/ui/internal/asd/design/editparts/model/InterfaceColumn.java
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.model;
 
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
 import org.eclipse.wst.wsdl.ui.internal.asd.facade.IDescription;
+import org.eclipse.wst.wsdl.ui.internal.asd.facade.INamedObject;
 import org.eclipse.wst.wsdl.ui.internal.asd.outline.ITreeElement;
 
 public class InterfaceColumn extends AbstractModelCollection {
@@ -19,7 +24,11 @@
 	}
 	
 	public ITreeElement[] getChildren() {
-		Object array[] = ((IDescription)model).getInterfaces().toArray();
+		List interfaces = ((IDescription)model).getInterfaces();		
+		Comparator compare = new NamedObjectComparator();
+		Collections.sort(interfaces, compare);
+		Object array[] = interfaces.toArray();
+		
 		ITreeElement treeElement[] = new ITreeElement[array.length];
 		for (int index = 0; index < array.length; index++) {
 			treeElement[index] = (ITreeElement) array[index];
@@ -27,8 +36,7 @@
 		
 		return treeElement;
 	}
-	
-	
+
 	public boolean hasChildren() {
 		ITreeElement treeElement[] = getChildren();
 		if (treeElement.length > 0) {
@@ -41,4 +49,16 @@
 	public String getText() {
 		return "definition"; //$NON-NLS-1$
 	}
+	
+	private class NamedObjectComparator implements Comparator{
+		public int compare(Object o1, Object o2) {
+			if (o1 instanceof INamedObject && o2 instanceof INamedObject) {
+				String name1 = ((INamedObject) o1).getName();
+				String name2 = ((INamedObject) o2).getName();
+				return name1.compareTo(name2);
+			}
+			
+			return -1;
+		}
+	}
 }