Miscellaneous Fixes to Selection bugs, Attribute Group content, direct editing
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDContentOutlinePage.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDContentOutlinePage.java
index 9821602..fb41748 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDContentOutlinePage.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDContentOutlinePage.java
@@ -53,6 +53,7 @@
   protected SelectionManagerSelectionChangeListener selectionManagerSelectionChangeListener = new SelectionManagerSelectionChangeListener();
   protected TreeSelectionChangeListener treeSelectionChangeListener = new TreeSelectionChangeListener();
   XSDTextEditor xsdTextEditor;
+  XSDMenuListener menuListener;
 
   /**
    *  
@@ -95,7 +96,8 @@
     menuManager.setRemoveAllWhenShown(true);
     Menu menu = menuManager.createContextMenu(getTreeViewer().getControl());
     getTreeViewer().getControl().setMenu(menu);
-    XSDMenuListener menuListener = new XSDMenuListener(xsdTextEditor.getXSDEditor().getSelectionManager());
+    menuListener = new XSDMenuListener(xsdTextEditor.getXSDEditor().getSelectionManager());
+//  menuListener.setSelectionProvider(getTreeViewer());
     menuManager.addMenuListener(menuListener);
     setSelectionManager(xsdTextEditor.getXSDEditor().getSelectionManager());
     // cs... why are we doing this from the outline view?
@@ -255,6 +257,7 @@
           if (o != null)
           {
             selectionManager.setSelection(new StructuredSelection(o), getTreeViewer());
+//          selectionManager.selectionChanged(new SelectionChangedEvent(getTreeViewer(),new StructuredSelection(o)));
           }
           else
           {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDEditor.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDEditor.java
index 6d2eeb1..2235ff5 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDEditor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDEditor.java
@@ -27,6 +27,8 @@
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+//import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
@@ -1113,7 +1115,14 @@
         ISelection selection = getSelectionManager().getSelection();
         if (selection != null)
         {
-          getSelectionManager().setSelection(selection);
+          if (getCurrentPageType().equals(XSDEditorPlugin.GRAPH_PAGE))
+          {
+            getSelectionManager().selectionChanged(new SelectionChangedEvent(editor.getGraphViewer().getComponentViewer(), selection));
+          }
+          else if (getCurrentPageType().equals(XSDEditorPlugin.SOURCE_PAGE))
+          {
+            getSelectionManager().setSelection(selection);
+          }
         }
 			}
 		}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDMenuListener.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDMenuListener.java
index 72ce37c..0e11ebf 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDMenuListener.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDMenuListener.java
@@ -12,6 +12,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.ui.parts.AbstractEditPartViewer;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
@@ -32,17 +34,25 @@
 import org.eclipse.wst.xsd.ui.internal.actions.CreateSimpleTypeAction;
 import org.eclipse.wst.xsd.ui.internal.actions.DOMAttribute;
 import org.eclipse.wst.xsd.ui.internal.actions.DeleteAction;
+import org.eclipse.wst.xsd.ui.internal.actions.GraphRenameAction;
 import org.eclipse.wst.xsd.ui.internal.actions.MakeAnonymousGlobal;
 import org.eclipse.wst.xsd.ui.internal.actions.OpenSchemaAction;
 import org.eclipse.wst.xsd.ui.internal.actions.SetBaseTypeAction;
 import org.eclipse.wst.xsd.ui.internal.actions.XSDEditNamespacesAction;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ComplexTypeDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ElementDeclarationEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ModelGroupDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart;
 import org.eclipse.wst.xsd.ui.internal.graph.model.Category;
 import org.eclipse.wst.xsd.ui.internal.provider.CategoryAdapter;
 import org.eclipse.wst.xsd.ui.internal.util.TypesHelper;
 import org.eclipse.wst.xsd.ui.internal.util.XSDDOMHelper;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
 import org.eclipse.xsd.XSDCompositor;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDModelGroupDefinition;
+import org.eclipse.xsd.XSDNamedComponent;
 import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.XSDSchemaDirective;
 import org.eclipse.xsd.util.XSDConstants;
@@ -60,7 +70,8 @@
   protected CreateElementAction addComplexTypeAction;
   protected XSDSchema xsdSchema;
   protected boolean isReadOnly;
-  
+  protected Object sourceContext;
+
   /**
    * Constructor for XSDMenuListener.
    */
@@ -74,6 +85,11 @@
     selectionProvider.addSelectionChangedListener(deleteAction);
   }
 
+  public void setSourceContext(Object sourceContext)
+  {
+    this.sourceContext = sourceContext;
+  }
+
   public void setSelectionProvider(ISelectionProvider selectionProvider)
   {
     this.selectionProvider = selectionProvider;
@@ -203,6 +219,12 @@
       }
       ArrayList attributes = null;
       Element parent = getXSDSchema().getElement();
+      
+      if (parent == null)
+      {
+        return;
+      }
+      
       Node relativeNode = null;
       switch (groupType)
       {
@@ -1414,6 +1436,62 @@
      * (XSDDOMHelper.inputEquals(parent, XSDConstants.APPINFO_ELEMENT_TAG,
      * false)) { }
      */
+    
+    XSDConcreteComponent concreteComponent = getXSDSchema().getCorrespondingComponent(parent);
+    if (concreteComponent instanceof XSDNamedComponent)
+    {
+      if (selectionProvider instanceof XSDSelectionManager)
+      {
+        if (sourceContext instanceof AbstractEditPartViewer)
+        {
+          AbstractEditPartViewer viewer = (AbstractEditPartViewer)sourceContext;
+        
+          Object obj = viewer.getSelectedEditParts().get(0);
+          
+          if (obj instanceof GraphicalEditPart)
+          {
+            boolean canEdit = true;
+            if (obj instanceof ElementDeclarationEditPart)
+            {
+              XSDElementDeclaration elem = ((ElementDeclarationEditPart)obj).getXSDElementDeclaration();
+              if (elem.isElementDeclarationReference())
+              {
+                canEdit = false;
+              }
+            }
+            else if (obj instanceof ModelGroupDefinitionEditPart)
+            {
+              XSDModelGroupDefinition group = ((ModelGroupDefinitionEditPart)obj).getXSDModelGroupDefinition();
+              if (group.isModelGroupDefinitionReference())
+              {
+                canEdit = false;
+              }
+            }
+            else if (obj instanceof ComplexTypeDefinitionEditPart)
+            {
+              XSDComplexTypeDefinition ct = ((ComplexTypeDefinitionEditPart)obj).getXSDComplexTypeDefinition();
+              if (ct.getName() == null) // anonymous
+              {
+                canEdit = false;
+              }
+            }
+            else if (obj instanceof TopLevelComponentEditPart)
+            {
+              canEdit = true;
+            }
+            else
+            {
+              canEdit = false;
+            }
+            if (canEdit)
+            {
+              GraphRenameAction graphRenameAction = new GraphRenameAction((XSDNamedComponent)concreteComponent, (GraphicalEditPart)obj);
+              manager.add(graphRenameAction);
+            }
+          }
+        }
+      }
+    }
   }
 
   protected void addContextInsertItems(IMenuManager manager, Element parent, Element currentElement, Node relativeNode)
@@ -1733,6 +1811,7 @@
     action.setXSDSchema(getXSDSchema());
     action.setSelectionProvider(selectionProvider);
     action.setEnabled(!isReadOnly);
+    action.setSourceContext(sourceContext);
     manager.add(action);
     return action;
   }
@@ -1783,6 +1862,7 @@
     action.setXSDSchema(getXSDSchema());
     action.setSelectionProvider(selectionProvider);
     action.setEnabled(!isReadOnly);
+    action.setSourceContext(sourceContext);
     manager.add(action);
     return action;
   }
@@ -1822,6 +1902,7 @@
     action.setXSDSchema(getXSDSchema());
     action.setSelectionProvider(selectionProvider);
     action.setEnabled(!isReadOnly);
+    action.setSourceContext(sourceContext);
     manager.add(action);
     return action;
   }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDSelectionManager.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDSelectionManager.java
index ad2673a..22f0354 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDSelectionManager.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/XSDSelectionManager.java
@@ -72,7 +72,7 @@
 
   public void setSelection(ISelection selection, ISelectionProvider source)
   {  
-	//System.out.println("SelectionManager.setSelection() " + selection + ", " + source);
+//	  System.out.println("SelectionManager.setSelection() " + selection + ", " + source);
     if (enableNotify)
     {
       currentSelection = selection;
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
index b3b34e7..3190d53 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
@@ -11,6 +11,8 @@
 package org.eclipse.wst.xsd.ui.internal.actions;
 import java.util.List;
 
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.ui.parts.AbstractEditPartViewer;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ISelectionProvider;
@@ -21,7 +23,19 @@
 import org.eclipse.wst.xml.core.document.XMLNode;
 import org.eclipse.wst.xml.core.format.FormatProcessorXML;
 import org.eclipse.wst.xml.core.internal.document.DocumentImpl;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ComplexTypeDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ElementDeclarationEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ModelGroupDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart;
+import org.eclipse.wst.xsd.ui.internal.util.XSDDOMHelper;
+import org.eclipse.xsd.XSDAttributeDeclaration;
+import org.eclipse.xsd.XSDAttributeGroupDefinition;
+import org.eclipse.xsd.XSDAttributeUse;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
 import org.eclipse.xsd.XSDConcreteComponent;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDModelGroupDefinition;
+import org.eclipse.xsd.XSDNamedComponent;
 import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.util.XSDConstants;
 import org.w3c.dom.Element;
@@ -35,7 +49,9 @@
 
   protected ISelectionProvider selectionProvider;
   protected XSDSchema xsdSchema;
-  
+
+  protected Object sourceContext;
+
   /**
    * Constructor for CreateElementAction.
    */
@@ -70,6 +86,11 @@
   {
     this.selectionProvider = selectionProvider;
   }
+
+  public void setSourceContext(Object sourceContext)
+  {
+    this.sourceContext = sourceContext;
+  }
   
   /**
    * Gets the parentNode.
@@ -190,7 +211,7 @@
   public void run()
   {
     beginRecording(getDescription());
-    Element child = createAndAddNewChildElement();
+    final Element child = createAndAddNewChildElement();
     endRecording();
 
     if (selectionProvider != null)
@@ -202,11 +223,84 @@
     {
       public void run()
       {
-        selectionProvider.setSelection(new StructuredSelection(comp));
+        if (comp instanceof XSDAttributeDeclaration)
+        {
+          if (((XSDAttributeDeclaration)comp).getContainer() instanceof XSDAttributeUse)
+          {
+            if (comp.getContainer().getContainer() instanceof XSDAttributeGroupDefinition)
+            {
+              selectionProvider.setSelection(new StructuredSelection(comp.getContainer()));
+            }
+            else if (comp.getContainer().getContainer() instanceof XSDComplexTypeDefinition)
+            {
+              if (XSDDOMHelper.inputEquals((Element)child, XSDConstants.ATTRIBUTE_ELEMENT_TAG, true))
+              {
+                selectionProvider.setSelection(new StructuredSelection(comp.getContainer()));
+              }
+              else
+              {
+                selectionProvider.setSelection(new StructuredSelection(comp));
+              }
+            }
+            else
+            {
+              selectionProvider.setSelection(new StructuredSelection(comp));
+            }
+          }
+          else
+          {
+            selectionProvider.setSelection(new StructuredSelection(comp));
+          }
+        }
+        else
+        {
+          selectionProvider.setSelection(new StructuredSelection(comp));
+        }
+        if (comp instanceof XSDNamedComponent)
+        {
+          if (sourceContext instanceof AbstractEditPartViewer)
+          {
+            AbstractEditPartViewer viewer = (AbstractEditPartViewer)sourceContext;
+          
+            Object obj = viewer.getSelectedEditParts().get(0);
+            
+            if (obj instanceof GraphicalEditPart)
+            {
+              if (obj instanceof ElementDeclarationEditPart)
+              {
+                XSDElementDeclaration elem = ((ElementDeclarationEditPart)obj).getXSDElementDeclaration();
+                if (!elem.isElementDeclarationReference())
+                {
+                  ((ElementDeclarationEditPart)obj).doEditName();
+                }
+              }
+              else if (obj instanceof ModelGroupDefinitionEditPart)
+              {
+                XSDModelGroupDefinition group = ((ModelGroupDefinitionEditPart)obj).getXSDModelGroupDefinition();
+                if (!group.isModelGroupDefinitionReference())
+                {
+                  ((ModelGroupDefinitionEditPart)obj).doEditName();
+                }
+              }
+              else if (obj instanceof ComplexTypeDefinitionEditPart)
+              {
+                XSDComplexTypeDefinition ct = ((ComplexTypeDefinitionEditPart)obj).getXSDComplexTypeDefinition();
+                if (ct.getName() != null)
+                {
+                  ((ComplexTypeDefinitionEditPart)obj).doEditName();
+                }
+              }
+              else if (obj instanceof TopLevelComponentEditPart)
+              {
+                ((TopLevelComponentEditPart)obj).doEditName();
+              }
+            }
+
+          }
+        }
       }
     };
     Display.getDefault().timerExec(50,runnable);
-
     }
   }
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/GraphRenameAction.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/GraphRenameAction.java
new file mode 100644
index 0000000..4576bfa
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/actions/GraphRenameAction.java
@@ -0,0 +1,23 @@
+package org.eclipse.wst.xsd.ui.internal.actions;
+
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.jface.action.Action;
+import org.eclipse.wst.xsd.ui.internal.commands.RenameCommand;
+import org.eclipse.xsd.XSDNamedComponent;
+
+
+public class GraphRenameAction extends Action
+{
+  protected RenameCommand command;
+  
+  public GraphRenameAction(XSDNamedComponent namedComponent, GraphicalEditPart editPart)
+  {
+    command = new RenameCommand(namedComponent, editPart);
+    setText("Rename");
+  }
+
+  public void run()
+  {
+    command.run();
+  }
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/RenameCommand.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/RenameCommand.java
new file mode 100644
index 0000000..ade4b77
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/RenameCommand.java
@@ -0,0 +1,66 @@
+package org.eclipse.wst.xsd.ui.internal.commands;
+
+import org.eclipse.draw2d.Label;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ComplexTypeDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ElementDeclarationEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.ModelGroupDefinitionEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart;
+import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.SimpleDirectEditPolicy;
+import org.eclipse.xsd.XSDConcreteComponent;
+import org.eclipse.xsd.XSDNamedComponent;
+
+
+/**
+ * @author kchong
+ *
+ * <a href="mailto:kchong@ca.ibm.com">kchong@ca.ibm.com</a>
+ *
+ */
+public class RenameCommand
+{
+  protected SimpleDirectEditPolicy simpleDirectEditPolicy = new SimpleDirectEditPolicy();
+  Label label = new Label();
+  XSDNamedComponent namedComponent;
+  GraphicalEditPart editPart;
+  
+  public RenameCommand(XSDNamedComponent namedComponent, GraphicalEditPart editPart)
+  {
+    this.namedComponent = namedComponent;
+    this.editPart = editPart;
+  }
+
+  /* (non-Javadoc)
+   * @see com.ibm.xsd.edit.actions.AbstractCommand#run()
+   */
+  public void run()
+  {
+    if (editPart instanceof ElementDeclarationEditPart)
+    {
+      ElementDeclarationEditPart elementDeclarationEditPart = (ElementDeclarationEditPart)editPart;
+      elementDeclarationEditPart.doEditName();
+    }
+    else if (editPart instanceof TopLevelComponentEditPart)
+    {
+      TopLevelComponentEditPart topLevelEditPart = (TopLevelComponentEditPart)editPart;
+      topLevelEditPart.doEditName();
+    }
+    else if (editPart instanceof ComplexTypeDefinitionEditPart)
+    {
+      ((ComplexTypeDefinitionEditPart)editPart).doEditName();
+    }
+    else if (editPart instanceof ModelGroupDefinitionEditPart)
+    {
+      ((ModelGroupDefinitionEditPart)editPart).doEditName();
+    }
+  }
+
+  /* (non-Javadoc)
+   * @see com.ibm.xsd.edit.actions.AbstractCommand#adopt(org.eclipse.xsd.XSDConcreteComponent)
+   */
+  protected boolean adopt(XSDConcreteComponent model)
+  {
+    return false;
+  }
+
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/GraphContextMenuProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/GraphContextMenuProvider.java
index cc092cf..3215418 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/GraphContextMenuProvider.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/GraphContextMenuProvider.java
@@ -36,6 +36,7 @@
     super(viewer);
     this.viewer = viewer;
     xsdMenuListener = new XSDMenuListener(selectionProvider);
+    xsdMenuListener.setSourceContext(viewer);
   }
 
   public XSDMenuListener getMenuListener()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/XSDGraphViewer.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/XSDGraphViewer.java
index 015f6c2..a15cfc7 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/XSDGraphViewer.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/XSDGraphViewer.java
@@ -39,12 +39,17 @@
 import org.eclipse.wst.xsd.ui.internal.XSDEditor;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
 import org.eclipse.wst.xsd.ui.internal.XSDSelectionManager;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart;
+import org.eclipse.wst.xsd.ui.internal.provider.CategoryAdapter;
 import org.eclipse.wst.xsd.ui.internal.util.ViewUtility;
+import org.eclipse.xsd.XSDAttributeGroupContent;
+import org.eclipse.xsd.XSDAttributeGroupDefinition;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDNotationDeclaration;
 import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.XSDSchemaDirective;
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.XSDWildcard;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -372,7 +377,7 @@
     // from a different view (not from the graph view)
     if (event.getSource() != getComponentViewer())
     { 
-      handleSelection(event.getSelection(), true);
+      handleSelection(event, true);
     }
   }
 
@@ -390,9 +395,9 @@
   
   // TODO.. we need to clean this method up and add comments to clarify what's going on
   //
-  protected void handleSelection(ISelection selection, boolean isSelectionRequired)
+  protected void handleSelection(SelectionChangedEvent event, boolean isSelectionRequired)
   {
-    StructuredSelection s = (StructuredSelection)selection;
+    StructuredSelection s = (StructuredSelection)event.getSelection();
     Object obj = s.getFirstElement();
     if (obj instanceof XSDConcreteComponent)
     {
@@ -408,12 +413,21 @@
             selectedComponent.getContainer() instanceof XSDSchema)
         {
           topLevelSchema = (XSDSchema)currentInput;
-        }                 
+        }
       }
-      else if (selectedComponent instanceof XSDSchemaDirective || selectedComponent instanceof XSDNotationDeclaration)          
+      if (selectedComponent instanceof XSDSchemaDirective || 
+          selectedComponent instanceof XSDNotationDeclaration)      
       {
         topLevelSchema = selectedComponent.getSchema();
       }
+      else if (selectedComponent instanceof XSDAttributeGroupContent ||
+               selectedComponent instanceof XSDWildcard)
+      {
+        if (selectedComponent.getContainer() instanceof XSDAttributeGroupDefinition)
+        {
+          topLevelSchema = selectedComponent.getSchema();
+        }
+      }
       else if (selectedComponent instanceof XSDSimpleTypeDefinition)
       {
         XSDSimpleTypeDefinition st = (XSDSimpleTypeDefinition)selectedComponent;
@@ -445,7 +459,6 @@
           }
         }  
       }  
-      
       // now we handle the selection
       //
       if (isSelectionRequired)
@@ -454,10 +467,18 @@
         EditPart newSelectedEditPart = getComponentViewer().getEditPart(editPart, obj);
         if (newSelectedEditPart != null)
         {
+          if (newSelectedEditPart instanceof TopLevelComponentEditPart)
+          {
+            ((TopLevelComponentEditPart)newSelectedEditPart).setScroll(true);
+          }
           getComponentViewer().setSelection(new StructuredSelection(newSelectedEditPart));
         }
       }      
-    }   
+    }
+    else if (obj instanceof CategoryAdapter)
+    {
+      setInput(((CategoryAdapter)obj).getXSDSchema());  
+    }
   }
 
   protected Element getElementNode(Node node)
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/CategoryEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/CategoryEditPart.java
index 36950bc..afffaad 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/CategoryEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/CategoryEditPart.java
@@ -151,6 +151,11 @@
     label.setText("  " + category.getName() + "                                                    ");
   } 
   
+  public ScrollPane getScrollPane()
+  {
+    return scrollpane;
+  }
+  
   public IFigure getContentPane()
   {
     return scrollpane.getContents();
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeDefinitionEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeDefinitionEditPart.java
index b0c1825..daac88d 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeDefinitionEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeDefinitionEditPart.java
@@ -206,5 +206,10 @@
         }
       }
     }
-  } 
+  }
+  
+  public void doEditName()
+  {
+    performDirectEdit();
+  }
 } 
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeInheritedContentEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeInheritedContentEditPart.java
index afeebc1..cfa8811 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeInheritedContentEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ComplexTypeInheritedContentEditPart.java
@@ -118,10 +118,15 @@
   }
 
   protected void performDirectEdit()
-  {  
-    ComponentNameDirectEditManager manager = new ComponentNameDirectEditManager(this, label, (XSDComplexTypeDefinition)getModel());   
-    simpleDirectEditPolicy.setDelegate(manager);
-    manager.show();
+  {
+    // Why are we allowing direct editing when the label is null?
+    // Should remove the policy
+    if (label != null)
+    {
+      ComponentNameDirectEditManager manager = new ComponentNameDirectEditManager(this, label, (XSDComplexTypeDefinition)getModel());   
+      simpleDirectEditPolicy.setDelegate(manager);
+      manager.show();
+    }
   }    
             
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ElementDeclarationEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ElementDeclarationEditPart.java
index 974d97b..1ccb786 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ElementDeclarationEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ElementDeclarationEditPart.java
@@ -415,5 +415,11 @@
     }
   }
 
+  public void doEditName()
+  {
+    ComponentNameDirectEditManager manager = new ComponentNameDirectEditManager(this, label, getXSDElementDeclaration());
+    simpleDirectEditPolicy.setDelegate(manager);
+    manager.show();
+  }
 
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ModelGroupDefinitionEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ModelGroupDefinitionEditPart.java
index 8ccdfec..af5804a 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ModelGroupDefinitionEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/ModelGroupDefinitionEditPart.java
@@ -193,4 +193,12 @@
   //  super.modelChildrenChanged();                                              
   //  refreshVisuals(); 
   //} 
+
+  public void doEditName()
+  {
+    ComponentNameDirectEditManager manager = new ComponentNameDirectEditManager(this, label, getXSDModelGroupDefinition());           
+    simpleDirectEditPolicy.setDelegate(manager);
+    manager.show();
+  }
+
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/SimpleTypeDefinitionEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/SimpleTypeDefinitionEditPart.java
index ef78b30..27c52e3 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/SimpleTypeDefinitionEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/SimpleTypeDefinitionEditPart.java
@@ -14,6 +14,8 @@
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.ImageFigure;
 import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MouseEvent;
+import org.eclipse.draw2d.MouseMotionListener;
 import org.eclipse.gef.EditPolicy;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Image;
@@ -21,7 +23,7 @@
 import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.SelectionHandlesEditPolicyImpl;
 import org.eclipse.wst.xsd.ui.internal.graph.figures.RoundedLineBorder;
 
-public class SimpleTypeDefinitionEditPart extends BaseEditPart //GraphNodeEditPart
+public class SimpleTypeDefinitionEditPart extends BaseEditPart implements MouseMotionListener
 {
   protected Label label;
   protected SelectionHandlesEditPolicyImpl selectionHandlesEditPolicy;
@@ -40,13 +42,14 @@
     figure.setBorder(lb);
     figure.setBackgroundColor(ColorConstants.white);
     figure.setForegroundColor(elementBorderColor);
-    
+    figure.addMouseMotionListener(this);
     return figure;
   }
 
   protected void refreshVisuals()
   {
-    figure.setBorder(new RoundedLineBorder(isSelected ? ColorConstants.black : elementBorderColor, 1, 6));
+    // figure.setBorder(new RoundedLineBorder(isSelected ? ColorConstants.black : elementBackgroundColor, 1, 6));
+    ((RoundedLineBorder)figure.getBorder()).setColor(isSelected ? ColorConstants.black : elementBackgroundColor);
     figure.repaint();
   }
   
@@ -63,10 +66,38 @@
 
   public void deactivate() 
   {
+    figure.removeMouseMotionListener(this);
     super.deactivate();
     if (color != null)
     {
       color.dispose();
     }
-  }   
+  }
+  
+  public void mouseDragged(MouseEvent me)
+  {
+  }
+
+  public void mouseEntered(MouseEvent me)
+  {
+//    ((RoundedLineBorder)figure.getBorder()).setColor(ColorConstants.blue);
+//    figure.setBackgroundColor(elementBorderColor);
+//    figure.repaint();
+  }
+
+  public void mouseExited(MouseEvent me)
+  {
+//    ((RoundedLineBorder)figure.getBorder()).setColor(elementBackgroundColor);
+//    figure.setBackgroundColor(elementBackgroundColor);
+//    figure.repaint();
+  }
+
+  public void mouseHover(MouseEvent me)
+  {
+  }
+
+  public void mouseMoved(MouseEvent me)
+  {
+  }
+
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/TopLevelComponentEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/TopLevelComponentEditPart.java
index d8ccbf4..2d96719 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/TopLevelComponentEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editparts/TopLevelComponentEditPart.java
@@ -36,7 +36,9 @@
 import org.eclipse.wst.xsd.ui.internal.graph.GraphicsConstants;
 import org.eclipse.wst.xsd.ui.internal.graph.XSDComponentViewer;
 import org.eclipse.wst.xsd.ui.internal.graph.XSDGraphUtil;
+import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.ComponentNameDirectEditManager;
 import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.SelectionHandlesEditPolicyImpl;
+import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.SimpleDirectEditPolicy;
 import org.eclipse.wst.xsd.ui.internal.graph.figures.ContainerFigure;
 import org.eclipse.wst.xsd.ui.internal.graph.model.ModelAdapter;
 import org.eclipse.wst.xsd.ui.internal.graph.model.XSDModelAdapterFactory;
@@ -53,6 +55,7 @@
   //protected Label arrowLabel;
   protected ContainerFigure labelHolder = new ContainerFigure();
   protected SelectionHandlesEditPolicyImpl selectionHandlesEditPolicy;
+  protected SimpleDirectEditPolicy simpleDirectEditPolicy = new SimpleDirectEditPolicy();
   protected boolean isReadOnly;
   protected boolean isSelected;
   
@@ -96,7 +99,7 @@
             // fontData.data.lfUnderline = 1
             // so instead we use reflection
             Object data = fontData.getClass().getField("data").get(fontData);
-            System.out.println("data" + data.getClass());
+//            System.out.println("data" + data.getClass());
             data.getClass().getField("lfUnderline").setByte(data, (byte)1);
             Font font = new Font(Display.getCurrent(), fontData);
             label.setFont(font);        
@@ -138,6 +141,12 @@
       label.setText("unknown object" + getModel().getClass().getName());
       //arrowLabel.setVisible(false);
     }
+
+    if (reselect)
+    {
+      getViewer().select(this);
+      setReselect(false);
+    }
   }
 
 
@@ -180,7 +189,9 @@
         }
       }
     };
-    installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, feedBackSelectionEditPolicy);  	
+    installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, feedBackSelectionEditPolicy);
+
+    installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, simpleDirectEditPolicy);
   }  
   
   public Color computeLabelColor()
@@ -201,10 +212,23 @@
   public void addFeedback()
   {
     isSelected = true;
-    
+
     labelHolder.setBackgroundColor(ColorConstants.black);
     label.setForegroundColor(computeLabelColor());
     labelHolder.setFill(true);
+    
+    if (doScroll)
+    {
+      CategoryEditPart categoryEP = (CategoryEditPart)getParent();
+      categoryEP.scrollTo(this);
+      setScroll(false);
+    }
+  }
+  
+  private boolean doScroll = false;
+  public void setScroll(boolean doScroll)
+  {
+    this.doScroll = doScroll;
   }
 
   public void removeFeedback()
@@ -269,4 +293,24 @@
     };
     Display.getCurrent().asyncExec(runnable);
   }
+  
+  public void doEditName()
+  {
+    removeFeedback();
+    Object object = getModel();
+    if (object instanceof XSDNamedComponent)
+    {
+      ComponentNameDirectEditManager manager = new ComponentNameDirectEditManager(this, label, (XSDNamedComponent)object);
+      simpleDirectEditPolicy.setDelegate(manager);
+      manager.show();
+    }
+  }
+
+  
+  static boolean reselect = false;
+  
+  public void setReselect(boolean state)
+  {
+    reselect = state;
+  }
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editpolicies/ComponentNameDirectEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editpolicies/ComponentNameDirectEditManager.java
index afea789..87a9326 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editpolicies/ComponentNameDirectEditManager.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/graph/editpolicies/ComponentNameDirectEditManager.java
@@ -13,6 +13,7 @@
 import org.eclipse.draw2d.Label;
 import org.eclipse.gef.GraphicalEditPart;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.wst.xsd.ui.internal.graph.editparts.TopLevelComponentEditPart;
 import org.eclipse.wst.xsd.ui.internal.refactor.rename.GlobalElementRenamer;
 import org.eclipse.wst.xsd.ui.internal.refactor.rename.GlobalGroupRenamer;
 import org.eclipse.wst.xsd.ui.internal.refactor.rename.GlobalSimpleOrComplexTypeRenamer;
@@ -27,17 +28,22 @@
 public class ComponentNameDirectEditManager extends TextCellEditorManager
 {
   protected XSDNamedComponent component;
+  protected static GraphicalEditPart mySource;
 
   public ComponentNameDirectEditManager(GraphicalEditPart source,	Label label, XSDNamedComponent component)
   {
     super(source, label);  
     this.component = component;
+    mySource = source;
   }
 
   public void performModify(final String value)
-  {                     
-    DelayedRenameRunnable runnable = new DelayedRenameRunnable(component, value);
-    Display.getCurrent().asyncExec(runnable);  
+  {
+    if (value.length() > 0)
+    {
+      DelayedRenameRunnable runnable = new DelayedRenameRunnable(component, value);
+      Display.getCurrent().asyncExec(runnable);
+    }
   }      
 
   protected static class DelayedRenameRunnable implements Runnable
@@ -78,6 +84,21 @@
       };
       xsdSwitch.doSwitch(component); 
       component.setName(name);
+      if (mySource instanceof TopLevelComponentEditPart)
+      {
+        ((TopLevelComponentEditPart)mySource).setReselect(true);        
+      }
+    }
+  }
+  
+  protected void bringDown()
+  {
+    if (mySource != null)
+    {
+      if (mySource instanceof TopLevelComponentEditPart)
+      {
+        ((TopLevelComponentEditPart)mySource).setReselect(true);        
+      }
     }
   }
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/AttributesViewContentProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/AttributesViewContentProvider.java
index 3b64735..36526ee 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/AttributesViewContentProvider.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/AttributesViewContentProvider.java
@@ -117,7 +117,7 @@
       ctAdapter = (XSDAbstractAdapter)xsdModelAdapterFactory.adapt(ct, xsdModelAdapterFactory);
       ctAdapter.addListener((INotifyChangedListener)this);
       
-      XSDWildcard wildcard = ct.getAttributeWildcard();
+      XSDWildcard wildcard = ct.getAttributeWildcardContent();
       if (wildcard != null)
       {
         list.add(wildcard);
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/NamespaceSection.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/NamespaceSection.java
index e3a667a..d53d02b 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/NamespaceSection.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/NamespaceSection.java
@@ -148,32 +148,34 @@
         setListenerEnabled(false);
 	    	 
 			  Element element = xsdSchema.getElement();
-	    	 
-		    // Handle prefixText
-			  TypesHelper helper = new TypesHelper(xsdSchema);
-  		  String aPrefix = helper.getPrefix(element.getAttribute(XSDConstants.TARGETNAMESPACE_ATTRIBUTE), false);
-      
-        if (aPrefix != null && aPrefix.length() > 0)
-	      {
-	  	  	prefixText.setText(aPrefix);
-	  	  }
-	  	  else
+	    	
+        if (element != null)
         {
-			  	prefixText.setText(""); //$NON-NLS-1$
-			  }
-	    	 
-				// Handle TargetNamespaceText
-				String tns = element.getAttribute(XSDConstants.TARGETNAMESPACE_ATTRIBUTE);
-			  if (tns != null && tns.length() > 0)
-        {
- 	        targetNamespaceText.setText(tns);
- 	      }
-			  else
-        {
-				  targetNamespaceText.setText(""); //$NON-NLS-1$
-			  }
-        errorText.setText("");
-
+  		    // Handle prefixText
+  			  TypesHelper helper = new TypesHelper(xsdSchema);
+    		  String aPrefix = helper.getPrefix(element.getAttribute(XSDConstants.TARGETNAMESPACE_ATTRIBUTE), false);
+        
+          if (aPrefix != null && aPrefix.length() > 0)
+  	      {
+  	  	  	prefixText.setText(aPrefix);
+  	  	  }
+  	  	  else
+          {
+  			  	prefixText.setText(""); //$NON-NLS-1$
+  			  }
+  	    	 
+  				// Handle TargetNamespaceText
+  				String tns = element.getAttribute(XSDConstants.TARGETNAMESPACE_ATTRIBUTE);
+  			  if (tns != null && tns.length() > 0)
+          {
+   	        targetNamespaceText.setText(tns);
+   	      }
+  			  else
+          {
+  				  targetNamespaceText.setText(""); //$NON-NLS-1$
+  			  }
+          errorText.setText("");
+        }
 				setListenerEnabled(true);
 			}
 		}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesDialog.java
index e911823..6671ebc 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesDialog.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesDialog.java
@@ -311,14 +311,14 @@
 	    {
 	      if (typeSection.getUserSimpleType().getSelection())
 	      {
-	        if (!previousStringType.equals("**anonymous**"))
+//	        if (!previousStringType.equals("**anonymous**"))
 	        {
 	          updateElementToAnonymous(element, XSDConstants.SIMPLETYPE_ELEMENT_TAG);
 	        }
 	      }
 	      else
 	      {
-	        if (!previousStringType.equals("**anonymous**"))
+//	        if (!previousStringType.equals("**anonymous**"))
 	        {
 	          updateElementToAnonymous(element, XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
 	        }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDAttributeGroupDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDAttributeGroupDefinitionAdapter.java
index 19861ae..e8b6c89 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDAttributeGroupDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDAttributeGroupDefinitionAdapter.java
@@ -11,15 +11,15 @@
 package org.eclipse.wst.xsd.ui.internal.provider;
 
 import java.util.ArrayList;
-import java.util.Iterator;
+//import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
-import org.eclipse.xsd.XSDAttributeGroupContent;
+//import org.eclipse.xsd.XSDAttributeGroupContent;
 import org.eclipse.xsd.XSDAttributeGroupDefinition;
-import org.eclipse.xsd.XSDAttributeUse;
+//import org.eclipse.xsd.XSDAttributeUse;
 import org.eclipse.xsd.XSDWildcard;
 
 
@@ -63,22 +63,22 @@
   {
     XSDAttributeGroupDefinition xsdAttributeGroup = (XSDAttributeGroupDefinition)parentElement;
     List list = new ArrayList();
-//  list.addAll(xsdAttributeGroup.getContents());   
-    Iterator i = xsdAttributeGroup.getContents().iterator();
-    while (i.hasNext())
-    {
-      XSDAttributeGroupContent attrGroupContent = (XSDAttributeGroupContent)i.next();
-      if (attrGroupContent instanceof XSDAttributeUse)
-      {
-        list.add(((XSDAttributeUse)attrGroupContent).getAttributeDeclaration());
-      }
-      else
-      {
-        list.add(attrGroupContent);
-      }
-    }
+    list.addAll(xsdAttributeGroup.getContents());   
+//    Iterator i = xsdAttributeGroup.getContents().iterator();
+//    while (i.hasNext())
+//    {
+//      XSDAttributeGroupContent attrGroupContent = (XSDAttributeGroupContent)i.next();
+//      if (attrGroupContent instanceof XSDAttributeUse)
+//      {
+//        list.add(((XSDAttributeUse)attrGroupContent).getAttributeDeclaration());
+//      }
+//      else
+//      {
+//        list.add(attrGroupContent);
+//      }
+//    }
     
-    XSDWildcard wildcard = xsdAttributeGroup.getAttributeWildcard();
+    XSDWildcard wildcard = xsdAttributeGroup.getAttributeWildcardContent();
     if (wildcard != null)
     {
       list.add(wildcard);
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDContentProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDContentProvider.java
index 8ed43c2..f573249 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDContentProvider.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/provider/XSDContentProvider.java
@@ -23,7 +23,6 @@
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.StructuredViewer;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.xsd.XSDComponent;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDElementDeclaration;
 import org.eclipse.xsd.XSDModelGroup;
@@ -133,9 +132,9 @@
     {
       return ((Node)element).getParentNode();
     }
-    else if (element instanceof XSDComponent)
+    else if (element instanceof XSDConcreteComponent)
     {
-      return ((XSDComponent)element).getContainer();
+      return ((XSDConcreteComponent)element).getContainer();
     }
     return null;
   }