[273068] XSD Editor navigation history errors
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/RedefineCategoryAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/RedefineCategoryAdapter.java
index cfb39e1..83e8c92 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/RedefineCategoryAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/RedefineCategoryAdapter.java
@@ -28,12 +28,14 @@
public class RedefineCategoryAdapter extends CategoryAdapter
{
protected XSDRedefine xsdRedefine;
+ private XSDRedefineAdapter xsdRedefineAdapter;
- public RedefineCategoryAdapter(String label, Image image, Collection children, XSDRedefine xsdRedefine, int groupType)
+ public RedefineCategoryAdapter(String label, Image image, Collection children, XSDRedefine xsdRedefine, XSDRedefineAdapter xsdRedefineAdapter, int groupType)
{
super(label, image, children, xsdRedefine.getSchema(), groupType);
this.xsdRedefine = xsdRedefine;
this.target = xsdRedefine;
+ this.xsdRedefineAdapter = xsdRedefineAdapter;
}
public XSDRedefine getXSDRedefine()
@@ -74,4 +76,10 @@
{
return (IModel)XSDAdapterFactory.getInstance().adapt(xsdRedefine.getSchema());
}
+
+
+ public XSDRedefineAdapter getXsdRedefineAdapter() {
+ return xsdRedefineAdapter;
+ }
+
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDRedefineAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDRedefineAdapter.java
index 59aa9dc..fc5285c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDRedefineAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDRedefineAdapter.java
@@ -110,19 +110,19 @@
XSDEditorPlugin xsdEditorPlugin = XSDEditorPlugin.getDefault();
attributesCategory = new RedefineCategoryAdapter(
Messages._UI_GRAPH_REDEFINE_ATTRIBUTE_GROUPS,
- xsdEditorPlugin.getIconImage("obj16/attributesheader"), attributes, xsdRedefine, CategoryAdapter.ATTRIBUTES); //$NON-NLS-1$
+ xsdEditorPlugin.getIconImage("obj16/attributesheader"), attributes, xsdRedefine, this, CategoryAdapter.ATTRIBUTES); //$NON-NLS-1$
attributesCategory.setAllChildren(attributes);
registerListener(attributesCategory);
typesCategory = new RedefineCategoryAdapter(
Messages._UI_GRAPH_REDEFINE_TYPES,
- xsdEditorPlugin.getIconImage("obj16/typesheader"), types, xsdRedefine, CategoryAdapter.TYPES); //$NON-NLS-1$
+ xsdEditorPlugin.getIconImage("obj16/typesheader"), types, xsdRedefine, this, CategoryAdapter.TYPES); //$NON-NLS-1$
typesCategory.setAllChildren(types);
registerListener(typesCategory);
groupsCategory = new RedefineCategoryAdapter(
Messages._UI_GRAPH_REDEFINE_GROUPS,
- xsdEditorPlugin.getIconImage("obj16/groupsheader"), groups, xsdRedefine, CategoryAdapter.GROUPS); //$NON-NLS-1$
+ xsdEditorPlugin.getIconImage("obj16/groupsheader"), groups, xsdRedefine, this, CategoryAdapter.GROUPS); //$NON-NLS-1$
groupsCategory.setAllChildren(groups);
registerListener(groupsCategory);
}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/navigation/DesignViewNavigationLocation.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/navigation/DesignViewNavigationLocation.java
index 3e91502..6f256a1 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/navigation/DesignViewNavigationLocation.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/navigation/DesignViewNavigationLocation.java
@@ -245,7 +245,7 @@
else if (component instanceof XSDRedefine)
{
XSDRedefine redefine = (XSDRedefine) component;
- pathSegment = new PathSegment(PathSegment.REDEFINE, redefine.toString());
+ pathSegment = new PathSegment(PathSegment.REDEFINE, redefine.getSchemaLocation());
}
return pathSegment;
}
@@ -361,7 +361,16 @@
}
else if (segment.kind == PathSegment.REDEFINE)
{
- // TODO
+ Iterator iterator = schema.getContents().iterator();
+ while (iterator.hasNext())
+ {
+ Object object = iterator.next();
+ if (object instanceof XSDRedefine)
+ {
+ XSDRedefine redefine = (XSDRedefine)object;
+ visitRedefine(redefine);
+ }
+ }
}
}
}
@@ -438,14 +447,14 @@
{
if (segment != null)
{
- String name = redefine.toString();
- if (segment.kind == PathSegment.ATTRIBUTE_GROUP && isMatch(segment.name, name))
+ String name = redefine.getSchemaLocation();
+ if (segment.kind == PathSegment.REDEFINE && isMatch(segment.name, name))
{
result = redefine;
incrementSegment();
if (!isDone())
{
- super.visitRedefine(redefine);
+ visitSchema(redefine.getSchema());
}
}
}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
index ff105ef..381415c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt/org/eclipse/wst/xsd/ui/internal/adt/design/DesignViewGraphicalViewer.java
@@ -13,6 +13,7 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+
import org.eclipse.gef.EditPart;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.jface.viewers.ISelection;
@@ -22,7 +23,13 @@
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.INavigationHistory;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.xsd.ui.internal.adapters.RedefineCategoryAdapter;
+import org.eclipse.wst.xsd.ui.internal.adapters.XSDRedefineAdapter;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.IHolderEditPart;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.RootContentEditPart;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.StructureEditPart;
@@ -61,8 +68,12 @@
// (e.g. a selection occured from another view)
public void selectionChanged(SelectionChangedEvent event)
{
- Object selectedObject = ((StructuredSelection) event.getSelection()).getFirstElement();
-
+ Object selectedObject = null;
+ ISelection eventSelection = event.getSelection();
+ if (eventSelection instanceof StructuredSelection)
+ {
+ selectedObject = ((StructuredSelection) eventSelection).getFirstElement();
+ }
// TODO (cs) It seems like there's way more selection going on than there
// should
// be!! There's at least 2 selections getting fired when something is
@@ -70,6 +81,8 @@
// outline view. Are we listening to too many things?
//
// if (event.getSource() instanceof ADTContentOutlinePage)
+ if (selectedObject != null)
+ {
if (event.getSource() != internalSelectionProvider)
{
if (selectedObject instanceof IStructure)
@@ -79,11 +92,7 @@
{
if ((selectedObject instanceof IGraphElement) && ((IGraphElement)selectedObject).isFocusAllowed())
{
- if (event.getSource() instanceof org.eclipse.jface.viewers.IPostSelectionProvider)
- {
- setInput((IStructure)selectedObject);
- }
- else
+ if (!(event.getSource() instanceof org.eclipse.jface.viewers.IPostSelectionProvider))
{
setInputAndMarkLocation((IStructure)selectedObject);
}
@@ -96,11 +105,6 @@
{
setInputAndMarkLocation((IADTObject)selectedObject);
}
- else if (((IGraphElement)selectedObject).isFocusAllowed()
- && (event.getSource() instanceof org.eclipse.jface.viewers.IPostSelectionProvider && !(getInput() instanceof IModel)))
- {
- setInput((IADTObject)selectedObject);
- }
else if (!((IGraphElement)selectedObject).isFocusAllowed())
{
// We encountered an object that is not a valid input to the graph viewer
@@ -168,8 +172,14 @@
}
else if (selectedObject instanceof IModelProxy)
{
- IModelProxy adapter = (IModelProxy)selectedObject;
- if (getInput() != adapter.getModel())
+ IModelProxy adapter = (IModelProxy)selectedObject;
+ if (selectedObject instanceof RedefineCategoryAdapter)
+ {
+ RedefineCategoryAdapter selectionAdapter = (RedefineCategoryAdapter)selectedObject;
+ XSDRedefineAdapter selectionParentAdapter = selectionAdapter.getXsdRedefineAdapter();
+ setInputAndMarkLocation(selectionParentAdapter);
+ }
+ else if (getInput() != adapter.getModel())
setInput(adapter.getModel());
}
else if (selectedObject instanceof IModel)
@@ -185,6 +195,7 @@
setFocus(editPart);
}
}
+ }
}
/*
@@ -335,16 +346,27 @@
public void setInputAndMarkLocation(IADTObject object)
{
- IADTObject oldInput = getInput();
- if (editorPart != null && oldInput != object)
- {
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getNavigationHistory().markLocation(editorPart);
- }
+ IADTObject oldInput = getInput();
+ INavigationHistory navigationHistory = null;
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if(workbench != null)
+ {
+ IWorkbenchWindow activeWorkbenchWindow = workbench.getActiveWorkbenchWindow();
+ if(activeWorkbenchWindow != null)
+ {
+ IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
+ if(activePage != null)
+ {
+ navigationHistory = activePage.getNavigationHistory();
+ }
+ }
+ }
+
setInput(object);
if (editorPart != null && oldInput != object)
{
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getNavigationHistory().markLocation(editorPart);
+ navigationHistory.markLocation(editorPart);
}
}