[Bug 273868] Incorrect context menus for redefine categories
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
index 165f376..3343e55 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
@@ -72,6 +72,7 @@
 import org.eclipse.wst.xsd.ui.internal.adapters.RedefineCategoryAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDAdapterFactory;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDBaseAdapter;
+import org.eclipse.wst.xsd.ui.internal.adapters.XSDRedefineAdapter;
 import org.eclipse.wst.xsd.ui.internal.adt.actions.AddFieldAction;
 import org.eclipse.wst.xsd.ui.internal.adt.actions.BaseDirectEditAction;
 import org.eclipse.wst.xsd.ui.internal.adt.actions.BaseSelectionAction;
@@ -1037,6 +1038,8 @@
             {
               xsdSelections.add(xsdNode);
             }
+            if (xsdNode instanceof XSDRedefineAdapter)
+            	return;
           }
           if (!xsdSelections.isEmpty())
           {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/outline/ADTContentOutlinePage.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/outline/ADTContentOutlinePage.java
index ef18356..f1102d7 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/outline/ADTContentOutlinePage.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/outline/ADTContentOutlinePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2008 IBM Corporation and others.
+ * Copyright (c) 2001, 2009 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
@@ -33,11 +33,13 @@
 import org.eclipse.ui.part.MultiPageSelectionProvider;
 import org.eclipse.wst.xml.ui.internal.contentoutline.JFaceNodeLabelProvider;
 import org.eclipse.wst.xsd.ui.internal.adapters.CategoryAdapter;
+import org.eclipse.wst.xsd.ui.internal.adapters.RedefineCategoryAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDAttributeDeclarationAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDAttributeGroupDefinitionAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDComplexTypeDefinitionAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDElementDeclarationAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDModelGroupDefinitionAdapter;
+import org.eclipse.wst.xsd.ui.internal.adapters.XSDRedefineAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDSchemaAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDSchemaDirectiveAdapter;
 import org.eclipse.wst.xsd.ui.internal.adapters.XSDSimpleTypeDefinitionAdapter;
@@ -156,16 +158,27 @@
         StructuredSelection selection = (StructuredSelection)event.getSelection();
         StructuredSelection currentSelection = (StructuredSelection) getTreeViewer().getSelection();
         
+        Object selectionFirstElement = selection.getFirstElement();
+        Object currentFirstElement = currentSelection.getFirstElement();
+       
         // TODO: Hack to prevent losing a selection when the schema is selected in the
         // source.  Fix is to prevent the source from firing off selection changes when
         // the selection source is not the source view.
-        if (selection.getFirstElement() instanceof IModel)
-        {
-          if (!(currentSelection.getFirstElement() instanceof IModelProxy))
+        
+        if (selectionFirstElement instanceof IModel)
+        {          
+          if (!(currentFirstElement instanceof IModelProxy) || currentFirstElement instanceof RedefineCategoryAdapter)
           {
             getTreeViewer().setSelection(event.getSelection(), true);
           }
         }
+        else if (selectionFirstElement instanceof XSDSchemaDirectiveAdapter)
+        {
+        	if (!(currentFirstElement instanceof RedefineCategoryAdapter))
+        	{
+        		getTreeViewer().setSelection(event.getSelection(), true);
+        	}
+        }
         else
         {
           IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
@@ -281,6 +294,8 @@
     if (statusLineLabelProvider != null && selection instanceof IStructuredSelection && !selection.isEmpty())
     {
       Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+      if (firstElement instanceof XSDRedefineAdapter)
+    	  return;
       text = statusLineLabelProvider.getText(firstElement);
       image = statusLineLabelProvider.getImage(firstElement);
     }