Check in new Common Component Selection Dialog; New set type dialog; Modify editor to launch new dialog; remove old set type dialog.
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/SetTypeCommand.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/SetTypeCommand.java
index 227e5d8..1603ffa 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/SetTypeCommand.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/commands/SetTypeCommand.java
@@ -1,7 +1,17 @@
 package org.eclipse.wst.xsd.ui.internal.commands;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.window.Window;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.wst.xsd.ui.internal.dialogs.types.XSDSetTypeDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper;
 import org.eclipse.xsd.XSDCompositor;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDElementDeclaration;
@@ -47,15 +57,38 @@
       }
       else
       {
-        XSDSetTypeDialog setTypeDialog = new XSDSetTypeDialog(Display.getDefault().getActiveShell(), element.getElement(), "Set Type", schema);
-        setTypeDialog.create();
-        setTypeDialog.open();
-        int rc = setTypeDialog.getReturnCode();
+          Shell shell = Display.getCurrent().getActiveShell();
+          IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+          IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+          IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+          IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile();
+          
+          XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, schema);
+          XSDComponentSelectionDialog dialog = new XSDComponentSelectionDialog(shell, "Set Type", provider);  // TODO: Externalize This
+          provider.setDialog(dialog);
+          
+          dialog.setBlockOnOpen(true);
+          dialog.create();
+          
+          if (dialog.open() == Window.OK) {
+              XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, schema);
+              helper.setType(element.getElement(), "type", dialog.getSelection());
+          }
       }
       formatChild(element.getElement());
     }
 
   }
+  
+  private IEditorPart getActiveEditor()
+  {
+    IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+    IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+    IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+//    IEditorPart editorPart = part.getSite().getWorkbenchWindow().getActivePage().getActiveEditor();
+
+    return editorPart;
+  }
 
   protected boolean adopt(XSDConcreteComponent model)
   {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/ImportTypesDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/ImportTypesDialog.java
deleted file mode 100644
index 60fa5c0..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/ImportTypesDialog.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Vector;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.ui.dialogs.SelectSingleFileDialog;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.util.XSDResourceImpl;
-
-public class ImportTypesDialog extends SelectSingleFileDialog {
-	private List importList;
-	private Button importStyleCheckBox;
-	private boolean isWSIStyleImport;
-	private String kind = "type";
-	private Object input;
-	private ResourceSet resourceSet;
-	private java.util.List importComponents;
-	private Object listSelection;
-	private boolean allowWSI;
-	private Vector loaders;
-
-	/*
-	 * String kind should be either "type" or "element"
-	 */
-	public ImportTypesDialog(Shell parentShell, IStructuredSelection selection, boolean allowWSI, String kind) {
-		super(parentShell, selection, true);
-		this.allowWSI = allowWSI;
-		this.kind = kind;
-		
-		loaders = new Vector();
-		loaders.add(new XSDLoadAvaliableItems());
-	}
-	
-	protected Control createDialogArea(Composite parent) {
-		Control area = super.createDialogArea(parent);		
-		Composite base = new Composite((Composite) area, SWT.NONE);
-		base.setLayout(new GridLayout());
-
-		GridData compositeData = new GridData();
-	    compositeData.horizontalAlignment = GridData.FILL;
-	    compositeData.verticalAlignment = GridData.FILL;
-	    compositeData.grabExcessHorizontalSpace = true;
-	    compositeData.grabExcessVerticalSpace = true;
-	    base.setLayoutData(compositeData);
-		
-		Label listLabel = new Label(base, SWT.NONE);
-		if (kind.equalsIgnoreCase("type")) {
-			listLabel.setText("Types");
-		}
-		else {
-			listLabel.setText("Elements");
-		}
-		importList = new List(base, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
-
-	    GridData importListData = new GridData();
-	    importListData.horizontalAlignment = GridData.FILL;
-	    importListData.verticalAlignment = GridData.FILL;
-	    importListData.grabExcessHorizontalSpace = true;
-	    importListData.grabExcessVerticalSpace = true;
-	    importList.setLayoutData(importListData);
-	    
-	    if (allowWSI) {
-		    importStyleCheckBox = new Button(base, SWT.CHECK);
-//			importStyleCheckBox.setText(WSDLEditorPlugin.getWSDLString("_UI_USE_WS-I_STYLE_SCHEMA_IMPORT"));
-			importStyleCheckBox.setText("WS-I style import");
-			importStyleCheckBox.setSelection(true);	
-			isWSIStyleImport = true;
-			importStyleCheckBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
-		    
-		    SelectionAdapter selectionAdapter = new SelectionAdapter()
-			{
-				public void widgetSelected(SelectionEvent event)
-				{
-					if (event.widget == importList && importList.getSelectionCount() > 0) {
-						listSelection = importComponents.get(importList.getSelectionIndex());
-					}
-					else if (event.widget == importStyleCheckBox) {
-						isWSIStyleImport = importStyleCheckBox.getSelection();
-					}
-				}		
-			};	    
-		    importStyleCheckBox.addSelectionListener(new SelectionAdapter()
-			{
-				public void widgetSelected(SelectionEvent event) {
-					isWSIStyleImport = importStyleCheckBox.getSelection();
-				}	    		
-			});		    
-		    
-	        Label titleBarSeparator = new Label(base, SWT.HORIZONTAL | SWT.SEPARATOR);
-		    titleBarSeparator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-	    }
-	    
-	    selectSingleFileView.addSelectionChangedTreeListener(new TreeListener());	    
-	    importList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				if (importList.getSelectionCount() > 0) {
-					listSelection = importComponents.get(importList.getSelectionIndex());
-				}
-			}	    		
-		});
-	    
-		return area;
-	}
-	
-	public Object getListSelection() {
-		return listSelection;
-	}
-	
-	public boolean isWSIStyleImport() {
-		if (allowWSI) {
-			return isWSIStyleImport;
-		}
-		else {
-			return false;
-		}
-	}
-	
-	public void addLoadAvaliableItemsClass(LoadAvaliableItems newLoader) {
-		loaders.add(newLoader);
-	}
-	
-	private class TreeListener implements ISelectionChangedListener {
-		public TreeListener() {
-		}
-		
-		public void selectionChanged(SelectionChangedEvent event) {
-			if (delayedEvent != null) {
-				delayedEvent.CANCEL = true;
-			}
-			
-			delayedEvent = new DelayedEvent(event);
-			Display.getCurrent().timerExec(500, delayedEvent);			
-			
-			// Do not allow WS-I style imports on WSDL files
-			ISelection selection = event.getSelection();
-			if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).getFirstElement() instanceof IFile) {
-		        IFile iFile = (IFile) ((IStructuredSelection) selection).getFirstElement();
-
-				String ext = iFile.getFileExtension();
-				if (ext.equalsIgnoreCase("wsdl")) {
-					importStyleCheckBox.setEnabled(false);
-					isWSIStyleImport = false;
-				}
-				else if (ext.equalsIgnoreCase("xsd")) {
-					importStyleCheckBox.setEnabled(true);
-					isWSIStyleImport = importStyleCheckBox.getSelection();
-				}		        
-			}
-		}
-		
-		private DelayedEvent delayedEvent;
-		
-		private class DelayedEvent implements Runnable {
-			public boolean CANCEL = false;
-			private SelectionChangedEvent event;
-			
-			public DelayedEvent(SelectionChangedEvent event) {
-				this.event = event;
-			}
-			public void run() {
-				if (!CANCEL) {
-			     	// We clear the selection made in the List... it may no longer apply to the newly selected file
-			     	listSelection = null;
-					importComponents = Collections.EMPTY_LIST;
-			        importList.removeAll();
-			        
-					// We populate the avaliable types/element list
-					 ISelection selection = event.getSelection();
-				     if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).getFirstElement() instanceof IFile) {
-				        IFile iFile = (IFile) ((IStructuredSelection) selection).getFirstElement();
-				        
-				        // Attempt to load the avaliable Types/Elements from the selected File
-				        int loaderIndex = 0;
-				        while (importComponents.size() < 1 && loaderIndex < loaders.size()) {
-				        	importComponents = ((LoadAvaliableItems) loaders.elementAt(loaderIndex)).getAvaliableItems(iFile);
-				        	loaderIndex++;
-				        }
-				        	
-				        // Make the first item in the list the selection
-				        if (importComponents.size() > 0) {
-		                	listSelection = importComponents.get(0);
-		                }
-				        
-						for (Iterator it = ((java.util.List) importComponents).iterator(); it.hasNext();) {
-							XSDNamedComponent comp = (XSDNamedComponent) it.next();
-							importList.add(comp.getName());
-						}
-				     }
-				}
-			}
-		}
-	}
-	
-	/*
-	 * Loads Avaliable Types/Elements from the given IFile.  Handles XSD files
-	 */
-	private class XSDLoadAvaliableItems extends LoadAvaliableItems {
-		public XSDLoadAvaliableItems() {}
-		
-		protected java.util.List loadFile(IFile iFile) {
-		    java.util.List modelObjectList = Collections.EMPTY_LIST;
-		    try {
-		      if (iFile != null) {
-		        URI uri = URI.createPlatformResourceURI(iFile.getFullPath().toString());
-
-		        Object rootModelObject = null;
-		        if (uri.toString().endsWith("xsd")) {
-		          ResourceSet resourceSet = new ResourceSetImpl();
-		          Resource resource = resourceSet.getResource(uri, true);
-		          if (resource instanceof XSDResourceImpl) {
-		            rootModelObject = ((XSDResourceImpl) resource).getSchema();
-		          }
-		        }
-
-		        if (rootModelObject != null) {
-		          modelObjectList = new ArrayList(getModelObjects(rootModelObject));
-		        }
-		      }
-		    }
-		    catch (Exception e) {}
-
-		    return modelObjectList;
-		  }
-		
-		  private Collection getModelObjects(Object rootModelObject) {
-		    ArrayList objects = new ArrayList();
-		    
-		    if (rootModelObject instanceof XSDSchema) {
-		      XSDSchema xsdSchema = (XSDSchema)rootModelObject;
-		      if (kind.equalsIgnoreCase("type")) {
-		        objects.addAll(((XSDSchema) xsdSchema).getTypeDefinitions());
-		      }
-		      else if (kind.equalsIgnoreCase("element")) {
-		        objects.addAll(((XSDSchema) xsdSchema).getElementDeclarations());
-		      }
-		    }
-
-		    return objects;
-		  }
-	}
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/LoadAvaliableItems.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/LoadAvaliableItems.java
deleted file mode 100644
index 8decdda..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/LoadAvaliableItems.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import org.eclipse.core.resources.IFile;
-
-/*
- * Loads Avaliable Types/Elements from the given IFile.  Implementors
- * needed to handle certain File types (xsd, wsdl, etc...)
- */
-public abstract class LoadAvaliableItems {		
-	public java.util.List getAvaliableItems(IFile file) {		                
-		return loadFile(file);
-	}
-	
-	protected abstract java.util.List loadFile(IFile iFile);
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewComponentDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewComponentDialog.java
deleted file mode 100644
index fb37a20..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewComponentDialog.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
-
-/*
- * This class is a copy of NewComponentDialog.java in org.eclipse.wst.wsdl.ui.
- * We have a copy because we want a similar look and feel to both editors.
- * We should remove NewComponentDialog.java in org.eclipse.wst.wsdl.ui and point
- * all references to this class.
- */
-public class NewComponentDialog extends Dialog implements ModifyListener
-{
-  protected Text nameField; 
-  protected Button okButton;
-  protected String defaultName;                             
-  protected String title;
-  protected Label errorMessageLabel;
-  protected List usedNames;
-
-  public NewComponentDialog(Shell parentShell, String title, String defaultName) 
-  {
-    super(parentShell);
-    setShellStyle(getShellStyle() | SWT.RESIZE);
-    this.defaultName = defaultName;
-    this.title = title;
-  }
-  
-  public NewComponentDialog(Shell parentShell, String title, String defaultName, List usedNames) 
-  {
-    super(parentShell);
-    setShellStyle(getShellStyle() | SWT.RESIZE);
-    this.defaultName = defaultName;
-    this.title = title;
-    this.usedNames = usedNames;
-  }
-
-  public int createAndOpen()
-  {
-    create();
-    getShell().setText(title);
-    setBlockOnOpen(true);
-    return open();
-  }
-
-  protected Control createContents(Composite parent)  
-  {
-    Control control = super.createContents(parent);
-    nameField.forceFocus();
-    nameField.selectAll();  
-    updateErrorMessage();
-    return control;
-  }
-
-
-  protected void createButtonsForButtonBar(Composite parent) 
-  {
-    okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
-    createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
-  }
-
-  protected void createExtendedContent(Composite parent)
-  {
-  }  
-
-
-  protected Control createDialogArea(Composite parent) 
-  {
-    Composite dialogArea = (Composite)super.createDialogArea(parent);
-
-    Composite composite = new Composite(dialogArea, SWT.NONE);
-    GridLayout layout = new GridLayout();
-    layout.numColumns = 2;
-    layout.marginWidth = 0;
-    composite.setLayout(layout);
-
-    GridData gdFill= new GridData();
-    gdFill.horizontalAlignment= GridData.FILL;
-    gdFill.grabExcessHorizontalSpace= true;
-    gdFill.verticalAlignment= GridData.FILL;
-    gdFill.grabExcessVerticalSpace= true;
-    composite.setLayoutData(gdFill);
-
-    Label nameLabel = new Label(composite, SWT.NONE);
-    nameLabel.setText(XSDEditorPlugin.getXSDString("_UI_NAME"));
-
-    nameField = new Text(composite, SWT.SINGLE | SWT.BORDER);
-    GridData gd= new GridData();
-    gd.horizontalAlignment= GridData.FILL;
-    gd.grabExcessHorizontalSpace= true;
-    gd.widthHint = 200;
-    nameField.setLayoutData(gd);
-    nameField.setText(defaultName);
-    nameField.addModifyListener(this);
-
-    createExtendedContent(dialogArea);
-
-    // error message
-    errorMessageLabel = new Label(dialogArea, SWT.NONE);
-    errorMessageLabel.setText("error message goes here");
-    GridData gd2 = new GridData();
-    gd2.horizontalAlignment= GridData.FILL;
-    gd2.grabExcessHorizontalSpace= true;
-    gd2.widthHint = 200;
-    errorMessageLabel.setLayoutData(gd2);          
-//    Color color = new Color(errorMessageLabel.getDisplay(), 200, 0, 0);
-//    errorMessageLabel.setForeground(color);
-
-    return dialogArea;
-  }
-  
-  public void modifyText(ModifyEvent e) 
-  {                        
-    updateErrorMessage();
-  }        
-
-  protected String computeErrorMessage(String name)
-  {
-  	if (usedNames == null)
-  		return null;
-  	
-  	Iterator iterator = usedNames.iterator();
-  	while (iterator.hasNext()) {
-  		if (name.equalsIgnoreCase((String) iterator.next())) {
-  			return "Warning: duplicate name already exists";    // Must be translated
-  		}
-  	}
-  	
-  	return null;
-  }
-
-  protected void updateErrorMessage()
-  {                 
-    String errorMessage = null;
-    String name = nameField.getText().trim();
-    if (name.length() > 0)
-    {                                
-      errorMessage = computeErrorMessage(name);
-    }   
-    else
-    {
-      errorMessage = "";
-    }  
-    errorMessageLabel.setText(errorMessage != null ? errorMessage : "");
-//    okButton.setEnabled(errorMessage == null);
-  }
- 
-  protected void buttonPressed(int buttonId) 
-  {
-    if (buttonId == IDialogConstants.OK_ID)
-    {
-      defaultName = nameField.getText();
-    }
-    super.buttonPressed(buttonId);
-  }
-
-  public String getName()
-  {
-    return defaultName;
-  }
-}
-
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewTypeDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewTypeDialog.java
deleted file mode 100644
index be6f116..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/NewTypeDialog.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.List;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
-
-/*
- * This class extends NewComponentDialog to allow additional widgets.  More
- * specifically, the 'create complex type or simple type' checkbox
- */
-public class NewTypeDialog extends NewComponentDialog implements SelectionListener {
-	protected Button complexRadio;
-	protected Button simpleRadio;
-	private boolean createComplexTypeBoolean;
-	
-	private List complexNames;
-	private List simpleNames;
-	
-	public NewTypeDialog(Shell parentShell, String defaultName) {
-		super(parentShell, "New Type", defaultName);
-	}
-	
-	/*
-	 * The argument usedNames is the used names for the Complex Types.
-	 * See method setUsedComplexTypeNames(List) for more information.
-	 */
-	public NewTypeDialog(Shell parentShell, String defaultName, List usedNames) {
-		super(parentShell, "New Type", defaultName, usedNames);
-		setUsedComplexTypeNames(usedNames);
-	}
-	
-	protected void createExtendedContent(Composite parent) {
-		Composite child = new Composite (parent, SWT.NONE);
-	    GridLayout layout = new GridLayout();
-	    layout.numColumns = 1;
-	    layout.marginWidth = 0;
-	    layout.marginHeight = 0;
-	    child.setLayout(layout);
-		
-	    complexRadio = new Button(child, SWT.RADIO);
-	    complexRadio.addSelectionListener(this);
-	    complexRadio.setSelection(true);
-	    complexRadio.setText(XSDEditorPlugin.getXSDString("_UI_PAGE_HEADING_COMPLEXTYPE"));
-	    
-	    simpleRadio = new Button(child, SWT.RADIO);
-	    simpleRadio.addSelectionListener(this);
-	    simpleRadio.setText(XSDEditorPlugin.getXSDString("_UI_PAGE_HEADING_SIMPLETYPE"));	    
-	}
-
-	public boolean isComplexType() {
-		return createComplexTypeBoolean;
-	}
-	
-	protected void buttonPressed(int buttonId) {
-		if (buttonId == IDialogConstants.OK_ID) {
-			createComplexTypeBoolean = complexRadio.getSelection();
-		}
-		super.buttonPressed(buttonId);
-	}
-
-	/*
-	 * Used to set the used names for complex types.  If the user enters a name (for a complex
-	 * type) which is in this list, a warning message will appear.
-	 * 
-	 * Note:
-	 * The used names list supplied in the constructor is meant for the complex names list.
-	 * So, this method does not need to be called.  If this method is called, the list
-	 * supplied by this method will be used instead of the list supplied from the constructor.
-	 */
-	public void setUsedComplexTypeNames(List complexNames) {
-		this.complexNames = complexNames;
-	}
-	
-	/*
-	 * Used to set the used names for simple types.  If the user enters a name (for a simple
-	 * type) which is in this list, a warning message will appear.
-	 */
-	public void setUsedSimpleTypeNames(List simpleNames) {
-		this.simpleNames = simpleNames;
-	}
-
-	/*
-	 * SelectionListener methods
-	 */
-	public void widgetSelected(SelectionEvent event) {
-		// We need to update the usedNames list
-		if (complexRadio.getSelection()) {
-			if (simpleRadio.getSelection()) {
-				simpleRadio.setSelection(false);
-			}
-
-			usedNames = complexNames;
-			updateErrorMessage();
-		}
-		else if (simpleRadio.getSelection()){
-			if (complexRadio.getSelection()) {
-				complexRadio.setSelection(false);
-			}
-
-			usedNames = simpleNames;
-			updateErrorMessage();
-		}
-	}
-	
-	public void widgetDefaultSelected(SelectionEvent event) {		
-	}
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeDialog.java
deleted file mode 100644
index 820c3ad..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeDialog.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-
-/*
- * Abstract class used to set the Type or Element.
- */
-public abstract class SetTypeDialog extends Dialog {
-	protected Object input;
-	protected String kind;
-	private String dialogTitle;
-
-	// widgets
-	protected Text textFilter;
-	private Button createButton;
-	private Button removeButton;
-	private Button importButton;
-	protected Button viewTypeCheckBox;
-	
-	protected SetTypeTreeView treeView;					  // A Tree Viewer helper class
-	protected TypesDialogTreeObject treeRootViewerInput;  // Root Input object for our Tree
-
-	public SetTypeDialog(Shell shell, Object input, String dialogTitle, String kind) {
-		super(shell);
-		this.input = input;
-		this.kind = kind;
-		this.dialogTitle = dialogTitle;
-	}
-
-	public Control createDialogArea(Composite parent) {
-		getShell().setText(dialogTitle);
-
-		Composite base = (Composite) super.createDialogArea(parent);
-		GridData gData = (GridData) base.getLayoutData();
-		gData.heightHint = 500;
-		gData.widthHint = 400;
-
-		// Create Text textFilter
-		Label filterLabel = new Label(base, SWT.NONE);
-		filterLabel.setText("(? = any character, * = any string)");
-		textFilter = new Text(base, SWT.SINGLE | SWT.BORDER);
-		textFilter.addModifyListener(new SetTypeModifyAdapter());
-		GridData textFilterData = new GridData();
-		textFilterData.horizontalAlignment = GridData.FILL;
-		textFilterData.grabExcessHorizontalSpace = true;
-		textFilter.setLayoutData(textFilterData);
-
-		// Create and expand entire Tree when we first open the dialog
-		createTree(base);
-		treeView.expandAll();
-		
-		SetTypeSelectionAdapter selectionAdapter = new SetTypeSelectionAdapter();
-
-		// Create viewTypeCheckBox
-		viewTypeCheckBox = createCheckBox(base, "Flat View");
-		viewTypeCheckBox.setSelection(false);
-		viewTypeCheckBox.addSelectionListener(selectionAdapter);
-
-		// Create Composite 2
-		Composite comp2 = new Composite(base, SWT.NONE);
-		GridLayout layout2 = new GridLayout();
-		layout2.numColumns = 2;
-		comp2.setLayout(layout2);
-
-		GridData gdk = new GridData();
-		gdk.grabExcessHorizontalSpace = true;
-		gdk.horizontalAlignment = SWT.CENTER;
-		comp2.setLayoutData(gdk);
-
-		// Create Add and Remove Buttons
-		createButton = createPushButton(comp2, "Create New");
-		//	     removeButton = createPushButton(comp2, "Remove");
-		createButton.addSelectionListener(selectionAdapter);
-
-		// Create Composite 3
-		Composite comp3 = new Composite(base, SWT.NONE);
-		GridLayout layout3 = new GridLayout();
-		layout3.numColumns = 2;
-		comp3.setLayout(layout3);
-
-		// Create Browse Button
-		importButton = createPushButton(comp2, "import...");
-		importButton.addSelectionListener(selectionAdapter);
-
-		// Build the separator line
-		Label titleBarSeparator = new Label(base, SWT.HORIZONTAL
-				| SWT.SEPARATOR);
-		titleBarSeparator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
-		return base;
-	}
-
-	/**
-	 * Helper method for creating buttons.
-	 */
-	public static Button createPushButton(Composite parent, String label) {
-		Button button = new Button(parent, SWT.PUSH);
-		button.setText(label);
-
-		GridData data = new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		button.setLayoutData(data);
-
-		return button;
-	}
-
-	/**
-	 * Helper method for creating check box
-	 */
-	public static Button createCheckBox(Composite parent, String label) {
-		Button button = new Button(parent, SWT.CHECK);
-		button.setText(label);
-
-		GridData data = new GridData();
-		data.horizontalAlignment = GridData.FILL;
-		button.setLayoutData(data);
-		return button;
-	}
-
-	private void createTree(Composite base) {
-		String title;
-		if (kind.equalsIgnoreCase("type")) {
-			title = "Avaliable Types";
-		} else {
-			title = "Avaliable Elements";
-		}
-
-		treeView = new SetTypeTreeView(base, title);
-		treeView.addTreeSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				updateCanFinish(event.getSelection());
-			}
-		});
-
-		populateTreeViewer(false, "", false, false);
-	}
-
-	protected void populateTreeViewer(boolean isFlatView, String filterString,
-			boolean saveExpansionState, boolean restoreExpansionState) {
-		if (saveExpansionState) {
-			treeView.storeExpansionState();
-		}
-
-		treeRootViewerInput = new TypesDialogTreeObject("root");
-		if (isFlatView) {
-			// Flat View
-			createFlatView(treeRootViewerInput, filterString);
-		}
-		else {
-			// Tree View
-			createTreeView(treeRootViewerInput, filterString);
-		}
-		treeView.setInput(treeRootViewerInput);
-		
-		if (restoreExpansionState) {
-			treeView.restoreExpansionState();
-		}
-	}
-
-	private String insertString(String target, String newString, String string) {
-		ArrayList list = new ArrayList();
-		StringBuffer stringBuffer = new StringBuffer(string);
-
-		int index = stringBuffer.indexOf(target);
-		while (index != -1) {
-			stringBuffer = stringBuffer.insert(index, newString);
-			index = stringBuffer.indexOf(target, index + newString.length()
-					+ target.length());
-		}
-
-		return stringBuffer.toString();
-	}
-
-	/*
-	 * If supported metacharacters are used in the filter string, we need to insert
-	 * a "." before each metacharacter.
-	 */
-	private String processFilterString(String inputString) {
-		if (!(inputString.equals(""))) {
-			inputString = insertString("*", ".", inputString);
-			inputString = insertString("?", ".", inputString);
-			inputString = inputString + ".*";
-		} else {
-			inputString = ".*";
-		}
-
-		return inputString.toLowerCase();
-	}
-
-	private class SetTypeModifyAdapter implements ModifyListener {
-		public void modifyText(ModifyEvent e) {
-			if (e.widget == textFilter) {
-				if (delayedEvent != null) {
-					delayedEvent.CANCEL = true;
-				}
-				
-				delayedEvent = new DelayedEvent();
-				Display.getCurrent().timerExec(400, delayedEvent);				
-			}
-		}
-	}
-	
-	private DelayedEvent delayedEvent;
-	
-	private class DelayedEvent implements Runnable {
-		public boolean CANCEL = false;
-		
-		public void run() {
-			if (!CANCEL) {
-				populateTreeViewer(viewTypeCheckBox.getSelection(),
-						processFilterString(textFilter.getText()),
-						false, false);
-	
-				// Expand all and select first item which matches
-				treeView.expandAll();
-				treeView.selectFirstItem();
-			}
-		}
-	}	
-
-	private class SetTypeSelectionAdapter extends SelectionAdapter {
-		public void widgetSelected(SelectionEvent e) {
-			if (e.widget == viewTypeCheckBox) {
-				// Toggle between Flat view and Tree view
-				if (viewTypeCheckBox.getSelection()) {
-					populateTreeViewer(viewTypeCheckBox.getSelection(),
-							processFilterString(textFilter.getText()), true,
-							false);
-				}
-				else {
-					populateTreeViewer(viewTypeCheckBox.getSelection(),
-							processFilterString(textFilter.getText()), false,
-							true);
-				}
-			}
-			else if (e.widget == createButton) {
-				createButtonPressed();
-			}
-			else if (e.widget == importButton) {
-				importButtonPressed();
-			}
-		}
-	}
-	
-    protected void createButtonsForButtonBar(Composite parent) {
-    	super.createButtonsForButtonBar(parent);
-    	getButton(IDialogConstants.OK_ID).setEnabled(false);
-    }
-    
-    
-    protected List getUsedComplexTypeNames(XSDSchema schema) {
-      	List usedNames = new ArrayList();
-      	Iterator names = schema.getTypeDefinitions().iterator();
-      	while (names.hasNext()) {
-      		XSDNamedComponent comp = (XSDNamedComponent) names.next();
-      		if (comp instanceof XSDComplexTypeDefinition) {
-      			usedNames.add(comp.getName());
-      		}
-      	}
-      	
-      	return usedNames;
-      }
-
-      protected List getUsedSimpleTypeNames(XSDSchema schema) {
-      	List usedNames = new ArrayList();
-      	Iterator names = schema.getTypeDefinitions().iterator();
-      	while (names.hasNext()) {
-      		XSDNamedComponent comp = (XSDNamedComponent) names.next();
-      		if (comp instanceof XSDSimpleTypeDefinition) {
-      			usedNames.add(comp.getName());
-      		}
-      	}
-      	
-      	return usedNames;
-      }
-
-      protected List getUsedElementNames(XSDSchema schema) {
-      	List usedNames = new ArrayList();
-      	Iterator names = schema.getElementDeclarations().iterator();
-      	while (names.hasNext()) {
-      		XSDNamedComponent comp = (XSDNamedComponent) names.next();
-      		usedNames.add(comp.getName());
-      	}
-      	
-      	return usedNames;
-      }
-
-	/*
-	 * This method should be subclassed.
-	 */
-	protected abstract void createButtonPressed();
-
-	/*
-	 * This method should be subclassed
-	 */
-	protected abstract void importButtonPressed();
-
-	/*
-	 * This method should be subclassed
-	 */
-	protected abstract void createTreeView(TypesDialogTreeObject root, String filterString);
-
-	/*
-	 * This methods should be subclassed
-	 */
-	protected abstract void createFlatView(TypesDialogTreeObject root, String filterString);
-
-	/*
-	 * This method should be subclassed
-	 */
-	protected abstract void updateCanFinish(Object object);
-
-	/*
-	 * This method should be subclassed
-	 */
-	protected void okPressed() {
-		super.okPressed();
-	}
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeTreeView.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeTreeView.java
deleted file mode 100644
index 64f0598..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/SetTypeTreeView.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-
-public class SetTypeTreeView {
-	  private TreeViewer treeViewer;
-	  private TypesDialogTreeObject rootTreeObject;
-	  private HashMap expansionStateMap;
-	  	  
-	  public SetTypeTreeView(Composite base, String stringLabel) {
-		Label label = new Label(base, SWT.NONE);
-		label.setText(stringLabel);
-
-	  	treeViewer = new TreeViewer(new Tree(base, SWT.SINGLE | SWT.BORDER));
-	    treeViewer.setContentProvider(new TreeObjectContentProvider());
-	    treeViewer.setLabelProvider(new TreeObjectLabelProvider());
-
-	    Control treeWidget = treeViewer.getTree();
-	    GridData gd = new GridData(GridData.FILL_BOTH);
-	    treeWidget.setLayoutData(gd);
-	    
-	    expansionStateMap = new HashMap();
-	  }
-	  
-	  public void setInput(TypesDialogTreeObject input) {	  	
-	  	rootTreeObject = input;
-	  	treeViewer.setInput(input);
-	  	treeViewer.refresh();
-	  }
-	  
-	  /*
-	   * Take a snapshot of the current expansion state.  We will use this
-	   * snapshot to restore the expanded state of TreeViewer based on the new input.
-	   * Usage: setTypeTreeView.storeExpansionState()
-	   * 		setTypeTreeView.setInput(input);
-	   * 		setTypeTreeView.restoreExpansionState()
-	   */
-	  public void storeExpansionState() {
-	  	// Easy to record expansion state since expansion should only
-	  	// occur at the 'top' level
-	  	if (rootTreeObject != null) {
-	  		expansionStateMap = new HashMap(rootTreeObject.getChildren().size());
-	  		Iterator childrenIt = rootTreeObject.getChildren().iterator();
-	  		while (childrenIt.hasNext()) {
-	  			TypesDialogTreeObject item = (TypesDialogTreeObject) childrenIt.next();
-	  			expansionStateMap.put(item.getDataObject(), isExpanded(item));
-	  		}
-	  	}
-	  }
-	  
-	  public void restoreExpansionState() {
-	  	Iterator childrenIt = rootTreeObject.getChildren().iterator();
-	  	while (childrenIt.hasNext()) {
-	  		TypesDialogTreeObject item = (TypesDialogTreeObject) childrenIt.next();
-	  		Boolean expand = (Boolean) expansionStateMap.get(item.getDataObject());
-	  		if (expand == Boolean.TRUE) {
-	  			TreeItem treeItem = getTreeItem(item);
-	  			if (treeItem != null && treeItem.getItemCount() > 0) {
-	  				// Expand the TreeItem by calling showItem() on the first child of TreeItem
-	  				treeViewer.getTree().showItem(treeItem.getItems()[0]);
-	  			}
-	  		}
-	  	}
-	  }
-	  
-	  private Boolean isExpanded(TypesDialogTreeObject item) {
-	  	TreeItem treeItem = getTreeItem(item);
-	  	return Boolean.valueOf(treeItem.getExpanded());
-	  }
-	  
-	  private TreeItem getTreeItem(TreeItem root, TypesDialogTreeObject item) {
-	  	TreeItem treeItem = null;
-	  	
-	  	if (root.getData().equals(item)) {
-	  		treeItem = root;
-  		}
-  		else {
-  			// Check it's children
-  			TreeItem items[] = root.getItems();
-  			for (int index = 0; index < items.length; index++) {
-  				if (items[index].getData() != null) {
-  					treeItem = getTreeItem(items[index], item);
-  					if (treeItem != null) {
-  						break;
-  					}
-  				}
-  			}
-  		}
-	  	
-	  	return treeItem;
-	  }
-	  
-	  public TreeItem getTreeItem(TypesDialogTreeObject item) {
-	  	boolean found = false;
-	  	TreeItem treeItem = null;
-	  	TreeItem treeItems[] = treeViewer.getTree().getItems();
-	  	for (int index = 0; index < treeItems.length; index++) {
-	  		if (treeItems[index].getData() != null) { 
-	  			treeItem = getTreeItem(treeItems[index], item);
-	  			if (treeItem != null) {
-	  				break;
-	  			}
-	  		}
-	  	}
-
-	  	return treeItem;
-	  }
-	  
-	  public TypesDialogTreeObject getSelection() {
-	  	return (TypesDialogTreeObject) ((StructuredSelection) treeViewer.getSelection()).getFirstElement();
-	  }
-
-	  public void selectTreeObject(TypesDialogTreeObject selectionObject) {
-	  	if (selectionObject != null) {
-			  StructuredSelection structuredSelection = new StructuredSelection(selectionObject);
-			  treeViewer.setSelection(structuredSelection, true);
-	  	}
-	  }	  
-
-	  public void expandAll() {
-	  	treeViewer.expandAll();
-	  }
-	  
-	  public void setRedraw(boolean redraw) {
-	  	treeViewer.getTree().setRedraw(redraw);
-	  }
-	  
-	  /*
-	   * Select the first TypesDialogTreeObject avaliable (where the TypesDialogTreeObject is not a direct
-	   * child of the input (rootTreeObject).  For example, select the first avaliable
-	   * Complex or Simple type.  Not the Headings)
-	   */
-	  public void selectFirstItem() {
-	  	Iterator rootChildren = rootTreeObject.getChildren().iterator();
-	  	while (rootChildren.hasNext()) {
-	  		TypesDialogTreeObject rootChild = (TypesDialogTreeObject) rootChildren.next();
-	  		if (rootChild.getChildren().size() > 0) {
-	  			selectTreeObject((TypesDialogTreeObject) rootChild.getChildren().get(0));	  			
-	  			break;
-	  		}	  		
-	  	}
-	  }
-	  
-	  public void addTreeSelectionChangedListener(ISelectionChangedListener listener) {
-	  	treeViewer.addSelectionChangedListener(listener);
-	  }
-	  
-/////////////////////////////////////////////////////////////////////////
-	  /*
-	   * TreeContentProvider for TypesDialogTreeObject.java
-	   */
-		private class TreeObjectContentProvider implements ITreeContentProvider {
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-				
-			}
-			
-			public Object[] getElements(Object inputElement) {
-			 	if (inputElement instanceof TypesDialogTreeObject) {
-			 		return ((TypesDialogTreeObject) inputElement).getChildren().toArray();
-			 	}		 	
-			 	return (new ArrayList()).toArray();			
-			}
-			
-			public void dispose() {
-			}
-			
-			 public Object[] getChildren(Object parentElement) {
-			 	if (parentElement instanceof TypesDialogTreeObject) {
-			 		return ((TypesDialogTreeObject) parentElement).getChildren().toArray();
-			 	}		 	
-			 	return (new ArrayList()).toArray();
-			 }
-
-			 public Object getParent(Object element) {
-			 	if (element instanceof TypesDialogTreeObject) {
-			 		return ((TypesDialogTreeObject) element).getParent();
-			 	}		 	
-			 	return null;
-			 }
-			 
-			 public boolean hasChildren(Object element) {
-			 	if (element instanceof TypesDialogTreeObject) {
-			 		if (((TypesDialogTreeObject) element).getChildren().size() > 0) {
-			 			return true;
-			 		}
-			 	}		 	
-			 	return false;
-			 }
-		}  
-		  
-		/*
-		 * TreeLabelProvider for TypesDialogTreeObject.java
-		 */
-		private class TreeObjectLabelProvider extends LabelProvider {
-			public Image getImage(Object element) {
-				if (element instanceof TypesDialogTreeObject) {
-					return ((TypesDialogTreeObject) element).getImage();
-				}			
-				
-				return null;
-			}
-			
-			public String getText(Object element) {
-				if (element instanceof TypesDialogTreeObject) {
-					return ((TypesDialogTreeObject) element).getEntireLabel();
-				}			
-				return null;
-			}
-		}
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/TypesDialogTreeObject.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/TypesDialogTreeObject.java
deleted file mode 100644
index 2e70e64..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/TypesDialogTreeObject.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
-import org.eclipse.xsd.XSDComplexTypeDefinition;
-import org.eclipse.xsd.XSDElementDeclaration;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-
-public class TypesDialogTreeObject {
-	private Object dataObject;
-	private TypesDialogTreeObject parent;
-	private ArrayList children;
-	private String label;
-	private String appendLabel = "";
-	private int type;
-	
-	// Used to determine the type of object we're dealing with.
-	// If dataObject is String, we need more info.... so we look at the type (below).
-	public final static int UNKNOWN_TYPE = 0;
-	public final static int BUILT_IN_TYPE = 1;
-	public final static int INLINE_SCHEMA = 2;
-	public final static int ANONYMOUS_COMPLEX_TYPE = 3;
-	public final static int ANONYMOUS_SIMPLE_TYPE = 4;
-	
-	public TypesDialogTreeObject(Object dataObject) {
-		this.dataObject = dataObject;
-		children = new ArrayList();
-		type = TypesDialogTreeObject.UNKNOWN_TYPE;
-	}
-
-	public TypesDialogTreeObject(Object dataObject, int type) {
-		this(dataObject);
-		this.type = type;
-	}
-	
-	public void addChild(TypesDialogTreeObject child) {
-		children.add(child);
-		child.setParent(this);
-	}
-	
-	public void addAll(List kids) {
-		Iterator it = kids.iterator();
-		while (it.hasNext()) {
-			Object item = it.next();
-			if (item instanceof TypesDialogTreeObject) {
-				addChild((TypesDialogTreeObject) item);
-			}
-		}
-	}
-
-	public List getChildren() {
-		return children;
-	}
-	
-	public TypesDialogTreeObject getParent() {
-		return parent;
-	}
-	
-	public void setParent(TypesDialogTreeObject newParent) {
-		parent = newParent;
-	}
-	
-	/*
-	 * We should move getImage() and computeDefaultLabel() code out of TypesDialogTreeObject to make
-	 * it more generic...... but since this class was created specifically for the TypesDialog we'll
-	 * leave it here.
-	 */
-	private void computeDefaultLabel() {
-		if (dataObject instanceof XSDSchema) {
-			XSDSchema schema = (XSDSchema) dataObject;
-			URI schemaURI = URI.createURI(schema.getSchemaLocation());
-			label = schemaURI.lastSegment();
-		}
-		else if (dataObject instanceof XSDComplexTypeDefinition) {
-			label = ((XSDComplexTypeDefinition) dataObject).getName();
-		}
-		else if (dataObject instanceof XSDSimpleTypeDefinition) {
-			label = ((XSDSimpleTypeDefinition) dataObject).getName();
-		}
-		else if (dataObject instanceof String) {
-			label = (String) dataObject;
-		}
-		else {
-			label = "";
-		}
-	}
-	
-	public void setLabel(String newLabel) {
-		label = newLabel;
-	}
-	
-	public String getLabel() {
-		if (label == null) {
-			computeDefaultLabel();
-		}
-		return label;
-	}
-	
-	public void setAppendLabel(String newLabel) {
-		appendLabel = newLabel;
-	}
-	
-	public String getAppendLabel() {
-		return appendLabel;
-	}
-	
-	public String getEntireLabel() {
-		return getLabel() + getAppendLabel();
-	}
-	
-	/*
-	 * We should move getImage() and computeDefaultLabel() code out of TypesDialogTreeObject to make
-	 * it more generic...... but since this class was created specifically for the TypesDialog we'll
-	 * leave it here.
-	 */
-	public Image getImage() {
-		if (dataObject instanceof XSDSchema) {
-			return XSDEditorPlugin.getXSDImage("icons/XSDFile.gif");
-		}
-		else if (dataObject instanceof XSDComplexTypeDefinition) {
-			return XSDEditorPlugin.getXSDImage("icons/XSDComplexType.gif");
-		}
-		else if (dataObject instanceof XSDSimpleTypeDefinition) {
-			return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_restrict_obj");
-		}
-		else if (dataObject instanceof XSDElementDeclaration) {
-			return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif");
-		}
-		else if (dataObject instanceof String && getType() == TypesDialogTreeObject.BUILT_IN_TYPE) {
-			return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_restrict_obj");
-		}
-		else if (dataObject instanceof String && getType() == TypesDialogTreeObject.ANONYMOUS_COMPLEX_TYPE) {
-			return XSDEditorPlugin.getXSDImage("icons/XSDComplexType.gif");
-		}
-		else if (dataObject instanceof String && getType() == TypesDialogTreeObject.ANONYMOUS_SIMPLE_TYPE) {
-			return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_restrict_obj");
-		}
-
-		else {
-			return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
-		}
-	}
-	
-	public Object getDataObject() {
-		return dataObject;
-	}
-	
-	public void setType(int type) {
-		this.type = type;
-	}
-	
-	public int getType() {
-		return type;
-	}
-	
-	/*
-	 * Search for the first match of the given fileName with the return value of
-	 * TypesDialogTreeObject.getLabel().  This method will search the children of
-	 * the given TypesDialogTreeObject.  It will not search recursively.
-	 */
-	public static TypesDialogTreeObject getTreeObject(TypesDialogTreeObject rootObject, String fileName) {
-		Iterator rootChildrenIt = rootObject.getChildren().iterator();
-		TypesDialogTreeObject rootChild = null;
-		boolean found = false;
-		
-		while (rootChildrenIt.hasNext()) {
-			rootChild = (TypesDialogTreeObject) rootChildrenIt.next();
-			if (rootChild.getLabel().equals(fileName)) {
-				found = true;
-				break;
-			}
-		}
-
-		if (found) {
-			return rootChild;
-		}
-		else {
-			return null;
-		}
-	}		
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/XSDSetTypeDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/XSDSetTypeDialog.java
deleted file mode 100644
index bbbb64e..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/XSDSetTypeDialog.java
+++ /dev/null
@@ -1,679 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.xsd.ui.internal.dialogs.types;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.wst.xml.uriresolver.util.URIHelper;
-import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
-import org.eclipse.wst.xsd.ui.internal.actions.CreateElementAction;
-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.refactor.delete.XSDExternalFileCleanup;
-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.XSDImport;
-import org.eclipse.xsd.XSDInclude;
-import org.eclipse.xsd.XSDNamedComponent;
-import org.eclipse.xsd.XSDRedefine;
-import org.eclipse.xsd.XSDSchema;
-import org.eclipse.xsd.XSDSchemaContent;
-import org.eclipse.xsd.XSDSimpleTypeDefinition;
-import org.eclipse.xsd.impl.XSDImportImpl;
-import org.eclipse.xsd.util.XSDConstants;
-import org.eclipse.xsd.util.XSDParser;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class XSDSetTypeDialog extends SetTypeDialog {
-	private boolean showAnonymous = true;
-	boolean showComplexTypes = true;
-	private XSDSchema xsdSchema;
-	
-	/*
-	 * input should be of type Element.....  For example, if our current selection is a GlobalElement, input should
-	 * be the Element of the GlobalElement
-	 */
-	public XSDSetTypeDialog(Shell shell, Element input, String dialogTitle, XSDSchema xsdSchema) {
-		super(shell, input, dialogTitle, "type");
-		this.xsdSchema = xsdSchema;
-	}
-
-	protected void createTreeView(TypesDialogTreeObject root, String filterString) {
-		TypesDialogTreeObject builtInRoot = new TypesDialogTreeObject("Built-in simple type");
-	  	root.addChild(builtInRoot);
-	  	createBuiltInTypes(builtInRoot, filterString);
-	  	
-		TypesDialogTreeObject typesRoot = new TypesDialogTreeObject("Types");
-	  	root.addChild(typesRoot);	  	
-	  	createComplexTypes(typesRoot, filterString);
-	  	createSimpleTypes(typesRoot, filterString);
-	  	createFromImport(root, filterString, false);
-	  	createFromInclude(root, filterString, false);
-	  	createFromRedefine(root, filterString, false);
-	}
-
-	protected void createFlatView(TypesDialogTreeObject root, String filterString) {
-		createComplexTypes(treeRootViewerInput, filterString);
-		createSimpleTypes(treeRootViewerInput, filterString);
-	  	createFromImport(root, filterString, true);
-	  	createFromInclude(root, filterString, true);
-	  	createFromRedefine(root, filterString, true);
-		createBuiltInTypes(treeRootViewerInput, filterString);
-	}
-	
-	public void createBuiltInTypes(TypesDialogTreeObject root, String filterString) {
-		Iterator iterator = getBuiltInTypes().iterator();
-	  	Pattern regex = Pattern.compile(filterString);
-	  	if (iterator.hasNext()) {
-	  		while (iterator.hasNext()) {
-	  			Object item = iterator.next();
-	  			String itemString = item.toString();
-    			Matcher m = regex.matcher(itemString.toLowerCase());
-				if (itemString.toLowerCase().startsWith(filterString) || m.matches()) {
-		  			TypesDialogTreeObject treeObject = new TypesDialogTreeObject(item, TypesDialogTreeObject.BUILT_IN_TYPE);
-	  				root.addChild(treeObject);
-	  			}
-	  		}
-	  	}
-	}
-	
-	public void createComplexTypes(TypesDialogTreeObject root, String filterString) {
-		TypesHelper typesHelper = new TypesHelper(xsdSchema);
-		filterString = filterString.toLowerCase();
-	    Pattern regex = java.util.regex.Pattern.compile(filterString);
-	    
-	    // Add anonymous
-	    addAnonymousType(root, regex, filterString);
-
-	    List complexTypes = typesHelper.getUserComplexTypes();
-	    createComplexSimpleTreeObject(root, complexTypes, filterString, true);
-	}
-	
-	public void createSimpleTypes(TypesDialogTreeObject root, String filterString) {
-		TypesHelper typesHelper = new TypesHelper(xsdSchema);
-		filterString = filterString.toLowerCase();
-	    Pattern regex = java.util.regex.Pattern.compile(filterString);
-	    
-	    // Add anonymous
-	    addAnonymousType(root, regex, filterString);
-	    
-	    // Add anyType
-	    Matcher m = regex.matcher("anyType");
-	    if ("anyType".startsWith(filterString) || m.matches())  {
-		    TypesDialogTreeObject simpleTreeObject = new TypesDialogTreeObject("anyType");
-			root.addChild(simpleTreeObject);
-			simpleTreeObject.setLabel(typesHelper.getPrefix(xsdSchema.getSchemaForSchemaNamespace(), true) + "anyType");
-	    }
-	    
-	    List simpleTypes = typesHelper.getUserSimpleTypes();
-		createComplexSimpleTreeObject(root, simpleTypes, filterString, true);
-	}
-	
-	private void addAnonymousType(TypesDialogTreeObject root, Pattern regex, String filterString) {	    
-	    if (showAnonymous)
-	     {
-	    	Matcher m = regex.matcher("**anonymous**");
-	    	if ("**anonymous**".startsWith(filterString) || m.matches())  {
-	    		TypesDialogTreeObject simpleTreeObject = new TypesDialogTreeObject("**anonymous**");
-	    		simpleTreeObject.setType(TypesDialogTreeObject.ANONYMOUS_SIMPLE_TYPE);
-	  			root.addChild(simpleTreeObject);
-	    	}
-	    }
-	}
-	
-	private void createFromImport(TypesDialogTreeObject root, String filterString, boolean isFlatView) {
-		Iterator imports = getXSDImports().iterator();
-		while (imports.hasNext()) {
-			XSDImport importItem = (XSDImport) imports.next();
-			if (importItem.getSchemaLocation() != null) {
-				((XSDImportImpl) importItem).importSchema();
-				TypesHelper helper = new TypesHelper(importItem.getResolvedSchema());
-				
-				TypesDialogTreeObject importRoot = root;
-				if (!isFlatView) {
-					// Create the TypesDialogTreeObject
-					importRoot = new TypesDialogTreeObject(importItem.getResolvedSchema());
-					root.addChild(importRoot);
-					importRoot.setAppendLabel(" (Import)");
-				}
-				
-				List types = helper.getUserComplexTypes();
-				types.addAll(helper.getUserSimpleTypes());
-				createComplexSimpleTreeObject(importRoot, types, filterString, false);
-			}
-		}
-	}
-	
-	private void createFromInclude(TypesDialogTreeObject root, String filterString, boolean isFlatView) {
-		Iterator imports = getXSDIncludes().iterator();
-		while (imports.hasNext()) {
-			XSDInclude includeItem = (XSDInclude) imports.next();
-			if (includeItem.getSchemaLocation() != null) {
-				TypesHelper helper = new TypesHelper(includeItem.getResolvedSchema());
-				
-				TypesDialogTreeObject includeRoot = root;
-				if (!isFlatView) {
-					// Create the TypesDialogTreeObject
-					includeRoot = new TypesDialogTreeObject(includeItem.getResolvedSchema());
-					root.addChild(includeRoot);
-					includeRoot.setAppendLabel(" (Include)");
-				}
-				
-				List types = helper.getUserComplexTypes();
-				types.addAll(helper.getUserSimpleTypes());
-				createComplexSimpleTreeObject(includeRoot, types, filterString, false);
-			}
-		}
-	}
-	
-	private void createFromRedefine(TypesDialogTreeObject root, String filterString, boolean isFlatView) {
-		Iterator redefines = getXSDRedefines().iterator();
-		while (redefines.hasNext()) {
-			XSDRedefine redefineItem = (XSDRedefine) redefines.next();
-			if (redefineItem.getSchemaLocation() != null) {
-				TypesHelper helper = new TypesHelper(redefineItem.getResolvedSchema());
-				
-				TypesDialogTreeObject includeRoot = root;
-				if (!isFlatView) {
-					// Create the TypesDialogTreeObject
-					includeRoot = new TypesDialogTreeObject(redefineItem.getResolvedSchema());
-					root.addChild(includeRoot);
-					includeRoot.setAppendLabel(" (Redefine)");
-				}
-				
-				List types = helper.getUserComplexTypes();
-				types.addAll(helper.getUserSimpleTypes());
-				createComplexSimpleTreeObject(includeRoot, types, filterString, false);
-			}
-		}
-	}
-	
-	private void createComplexSimpleTreeObject(TypesDialogTreeObject root, List complexTypes, String filterString, boolean sameNS) {
-		Pattern regex = java.util.regex.Pattern.compile(filterString);
-		boolean proceed = true;
-		
-	    for (int i = 0; i < complexTypes.size(); i++) {
-	    	XSDNamedComponent item = (XSDNamedComponent) complexTypes.get(i); 
-	    
-	    	if (sameNS) {
-				// We do this check because Types from Includes might show up.  However, we don't want to show them
-				String itemLocation = item.getSchema().getSchemaLocation();
-				String currentSchemaLocation = xsdSchema.getSchemaLocation();
-				if (itemLocation != null) {
-					proceed = itemLocation.equals(currentSchemaLocation);
-				}
-				else {
-					proceed = false;
-				}
-	    	}
-	    	
-			if (proceed) {
-	    		String itemString = item.getName();
-		    	Matcher m = regex.matcher(itemString.toLowerCase());
-			    	
-		    	if (itemString.toLowerCase().startsWith(filterString) || m.matches()) {
-		    		TypesDialogTreeObject treeObject = new TypesDialogTreeObject(item);
-		  			root.addChild(treeObject);
-		  			treeObject.setLabel(itemString);
-		    	}
-			}
-	    }
-	}
-	
-	private List getXSDImports() {
-		List imports = new ArrayList();
-		
-		Iterator contents = xsdSchema.getContents().iterator();
-		while (contents.hasNext()) {
-			XSDSchemaContent content = (XSDSchemaContent) contents.next();
-			if (content instanceof XSDImport) {
-				imports.add(content);	          
-			}
-		}
-		
-		return imports;
-	}
-	
-	private List getXSDIncludes() {
-		List includes = new ArrayList();
-		
-		Iterator contents = xsdSchema.getContents().iterator();
-		while (contents.hasNext()) {
-			XSDSchemaContent content = (XSDSchemaContent) contents.next();
-			if (content instanceof XSDInclude) {
-				includes.add(content);	          
-			}
-		}
-		
-		return includes;
-	}
-
-	private List getXSDRedefines() {
-		List includes = new ArrayList();
-		
-		Iterator contents = xsdSchema.getContents().iterator();
-		while (contents.hasNext()) {
-			XSDSchemaContent content = (XSDSchemaContent) contents.next();
-			if (content instanceof XSDRedefine) {
-				includes.add(content);	          
-			}
-		}
-		
-		return includes;
-	}
-	
-	public java.util.List getBuiltInTypes() {
-		TypesHelper helper = new TypesHelper(xsdSchema);
-	    return helper.getBuiltInTypeNamesList();
-	}
-
-	private String getUniqueName(String baseName, List usedNames) {
-		String uniqueName = baseName;
-		int number = 1;
-		boolean foundMatch = true;
-		
-		while (foundMatch) {
-			foundMatch = false;
-			Iterator names = usedNames.iterator();
-			while (names.hasNext()) {
-				String name = (String) names.next();
-				
-				if (uniqueName.equalsIgnoreCase(name)) {
-					foundMatch = true;
-					uniqueName = baseName + String.valueOf(number++);
-					break;
-				}
-			}
-		}
-		
-		return uniqueName;
-	}
-
-	protected void createButtonPressed() {
-		List usedComplexNames = getUsedComplexTypeNames(xsdSchema);
-		List usedSimpleNames = getUsedSimpleTypeNames(xsdSchema);
-		String newItemName = getUniqueName("NewComplexType", usedComplexNames);
-		
-		NewTypeDialog dialog = new NewTypeDialog(XSDEditorPlugin.getShell(), newItemName, usedComplexNames);
-		dialog.setUsedSimpleTypeNames(usedSimpleNames);
-		
-		int rc = dialog.createAndOpen();
-		if (rc == IDialogConstants.OK_ID) {
-			newItemName = dialog.getName();
-		    ArrayList attributes = new ArrayList();
-	        attributes.add(new DOMAttribute(XSDConstants.NAME_ATTRIBUTE, newItemName));
-	        
-	        if (dialog.isComplexType()) {
-	        	CreateElementAction action = new CreateElementAction(XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_TYPE"));
-			    action.setElementTag(XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
-			    action.setAttributes(attributes);
-			    action.setParentNode(xsdSchema.getElement());
-			    action.setXSDSchema(xsdSchema);
-			    action.run();
-	        }
-	        else {
-	        	CreateSimpleTypeAction action = new CreateSimpleTypeAction(XSDEditorPlugin.getXSDString("_UI_ACTION_ADD_COMPLEX_TYPE"));
-			    action.setElementTag(XSDConstants.SIMPLETYPE_ELEMENT_TAG);
-			    action.setAttributes(attributes);
-			    action.setParentNode(xsdSchema.getElement());
-			    action.setXSDSchema(xsdSchema);
-			    action.run();
-	        }
-		    
-			// Update tree view
-			if (viewTypeCheckBox.getSelection()) {
-		      	populateTreeViewer(viewTypeCheckBox.getSelection(), textFilter.getText(), false, false);
-		      	treeView.selectTreeObject(TypesDialogTreeObject.getTreeObject(treeRootViewerInput, newItemName));
-		      }
-		      else {
-		      	populateTreeViewer(viewTypeCheckBox.getSelection(), textFilter.getText(), true, true);
-
-		      	TypesDialogTreeObject parentTreeObject = TypesDialogTreeObject.getTreeObject(treeRootViewerInput, "Types");
-		      	treeView.selectTreeObject(TypesDialogTreeObject.getTreeObject(parentTreeObject, newItemName));
-		      }
-		}
-	}
-
-	protected void importButtonPressed() {        
-		ImportTypesDialog dialog = new ImportTypesDialog(XSDEditorPlugin.getShell(), null, false, kind);
-	    String [] filters = { "xsd" };
-//	    IFile currentWFile = ((IFileEditorInput)editorPart.getEditorInput()).getFile();
-//	    IFile [] excludedFiles = { currentFile };
-	    IFile[] excludedFiles = new IFile[0];
-	    
-	    dialog.addFilterExtensions(filters, excludedFiles);
-	    dialog.create();
-
-	    // Translate strings below
-	    dialog.getShell().setText("Select");
-	    dialog.setTitle("Select File");
-	    dialog.setMessage("Select a XSD file to import");
-	    
-	    int rc = dialog.open();
-	    if (rc == IDialogConstants.OK_ID) {
-		  	  XSDNamedComponent selection = (XSDNamedComponent) dialog.getListSelection();
-			  IFile importFile = dialog.getFile();			    
-	          XSDSchema externalSchema = doLoadExternalModel(importFile);
-	          
-	          // Compare namespaces to determine if we should treat this as an Import or Include
-	          boolean isInclude = false;
-	          String externalNamespace = externalSchema.getTargetNamespace();
-	          if (externalNamespace.equalsIgnoreCase(xsdSchema.getTargetNamespace())) {
-	          	isInclude = true;
-	          }
-
-	          // Determine schemaLocation
-	          IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile();
-	          String locationAttribute = URIHelper.getRelativeURI(importFile.getLocation(), currentIFile.getLocation());
-	          
-	          if (externalSchema != null) { // In case we have problems loading the file.... we should display an error message.
-				    Element newElement;
-			        if (isInclude) {	        	
-			        	List attributes = new ArrayList();
-			            attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, locationAttribute));
-			            newElement = createElement(XSDConstants.INCLUDE_ELEMENT_TAG, attributes);
-			        }
-			        else if (!isInclude) {
-			        	List attributes = new ArrayList();
-			            attributes.add(new DOMAttribute(XSDConstants.NAMESPACE_ATTRIBUTE, externalNamespace));
-			            attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, locationAttribute));
-			        	newElement = createElement(XSDConstants.IMPORT_ELEMENT_TAG, attributes);
-			        	handleImportNS(newElement, externalSchema);
-			        }
-	          }
-	          
-		      // We need to refresh our tree view
-		      if (viewTypeCheckBox.getSelection()) {
-		      	populateTreeViewer(viewTypeCheckBox.getSelection(), textFilter.getText(), false, false);
-		      	treeView.selectTreeObject(TypesDialogTreeObject.getTreeObject(treeRootViewerInput, selection.getName()));
-		      }
-		      else {
-		      	populateTreeViewer(viewTypeCheckBox.getSelection(), textFilter.getText(), true, true);
-
-			    // We now want to expand the newly imported file and selected the proper type/element
-		      	TypesDialogTreeObject parentTreeObject = TypesDialogTreeObject.getTreeObject(treeRootViewerInput, dialog.getFile().getName());
-		      	treeView.selectTreeObject(TypesDialogTreeObject.getTreeObject(parentTreeObject, selection.getName()));
-		      }
-	          
-	    }
-	}
-	
-	private Element createElement(String elementTag, List attributes) {
-		Node relativeNode = XSDDOMHelper.getNextElementNode(xsdSchema.getElement().getFirstChild());
-		
-		CreateElementAction action = new CreateElementAction("");
-	    action.setElementTag(elementTag);
-	    action.setAttributes(attributes);
-	    action.setParentNode(xsdSchema.getElement());
-	    action.setRelativeNode(relativeNode);
-	    action.setXSDSchema(xsdSchema);
-	    return action.createAndAddNewChildElement();
-	}
-	
-	  private IEditorPart getActiveEditor()
-	  {
-	    IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
-	    IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
-	    IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
-
-	    return editorPart;
-	  }
-	
-	  /**
-	   * Create a MOF model for the imported file
-	   */
-	  protected XSDSchema doLoadExternalModel(IFile iFile)
-	  { 
-	    String xsdModelFile = iFile.getLocation().toOSString();
-	    String xsdFileName = iFile.getName();
-	  	IProgressMonitor monitor = new NullProgressMonitor();
-	    String errorMessage = null;
-	    String currentNameSpace = xsdSchema.getTargetNamespace();
-
-	    monitor.beginTask("Loading XML Schema", 100);
-	    monitor.worked(50);
-
-	    XSDParser parser = new XSDParser();
-	    parser.parse(xsdModelFile);
-
-	    XSDSchema externalSchema = parser.getSchema();
-	    if (externalSchema != null)
-	    {
-	      if (externalSchema.getDiagnostics() != null &&
-	          externalSchema.getDiagnostics().size() > 0)
-	      {
-	        errorMessage = XSDEditorPlugin.getPlugin().getString("_UI_INCORRECT_XML_SCHEMA", xsdFileName);
-	      }
-	    }
-	    else
-	    {
-	      errorMessage = XSDEditorPlugin.getPlugin().getString("_UI_INCORRECT_XML_SCHEMA", xsdFileName);
-	    }
-	    if (errorMessage != null) {
-//	    	System.out.println("\nError loading XML Schema:\n" + errorMessage);
-	    }
-
-	    monitor.subTask("Finish Loading");
-	    monitor.worked(80);
-
-	    return externalSchema;
-	  }
-	
-	private void handleImportNS(Element importElement, XSDSchema externalSchema) {
-          String namespace = externalSchema.getTargetNamespace();
-          if (namespace == null) namespace = "";
-
-          XSDImport xsdImport = (XSDImport) xsdSchema.getCorrespondingComponent(importElement);
-          xsdImport.setResolvedSchema(externalSchema);
-          
-          java.util.Map map = xsdSchema.getQNamePrefixToNamespaceMap();
-          
-//          System.out.println("changed Import Map is " + map.values());
-//          System.out.println("changed import Map keys are " + map.keySet());
-
-          // Referential integrity on old import
-          // How can we be sure that if the newlocation is the same as the oldlocation
-          // the file hasn't changed
-          
-          XSDSchema referencedSchema = xsdImport.getResolvedSchema();
-          if (referencedSchema != null)
-          {
-            XSDExternalFileCleanup cleanHelper = new XSDExternalFileCleanup(referencedSchema);
-            cleanHelper.visitSchema(xsdSchema);
-          }
-
-          Element schemaElement = xsdSchema.getElement();
-
-          // update the xmlns in the schema element first, and then update the import element next
-          // so that the last change will be in the import element.  This keeps the selection
-          // on the import element
-          TypesHelper helper = new TypesHelper(externalSchema);
-          String prefix = helper.getPrefix(namespace, false);
-          
-          if (map.containsKey(prefix))
-          {
-            prefix = null;
-          }
-
-          if (prefix == null || (prefix !=null && prefix.length() == 0))
-          {
-            StringBuffer newPrefix = new StringBuffer("pref");  //$NON-NLS-1$
-            int prefixExtension = 1;
-            while (map.containsKey(newPrefix.toString()) && prefixExtension < 100)
-            {
-              newPrefix = new StringBuffer("pref" + String.valueOf(prefixExtension));
-              prefixExtension++;
-            }
-            prefix = newPrefix.toString();
-          }
-
-          if (namespace.length() > 0)
-          {
-            // if ns already in map, use its corresponding prefix
-            if (map.containsValue(namespace))
-            {
-              TypesHelper typesHelper = new TypesHelper(xsdSchema);
-              prefix = typesHelper.getPrefix(namespace, false);
-            }
-            else // otherwise add to the map
-            {
-              schemaElement.setAttribute("xmlns:"+prefix, namespace);
-            }
-          }
-
-
-//          System.out.println("changed Import Map is " + map.values());
-//          System.out.println("changed import Map keys are " + map.keySet());
-	}
-	
-	protected void updateCanFinish(Object object) {
-		if (object instanceof StructuredSelection) {
-	  		Object selectionObject = ((StructuredSelection) object).getFirstElement();
-	  		if (selectionObject instanceof TypesDialogTreeObject) {
-	  			TypesDialogTreeObject treeObject = (TypesDialogTreeObject) selectionObject;
-	  			if (treeObject.getDataObject() instanceof XSDComplexTypeDefinition ||
-	  				treeObject.getDataObject() instanceof XSDSimpleTypeDefinition ||
-					(treeObject.getDataObject() instanceof String && treeObject.getDataObject().toString().equals("anyType")) ||
-					(treeObject.getDataObject() instanceof String && treeObject.getDataObject().toString().equals("**anonymous**") ||
-					(treeObject.getDataObject() instanceof String && treeObject.getType() == TypesDialogTreeObject.BUILT_IN_TYPE))) {
-					
-	  				getButton(IDialogConstants.OK_ID).setEnabled(true);
-	  			}
-	  			else {
-	  				getButton(IDialogConstants.OK_ID).setEnabled(false);
-	  			}
-	  		}
-	  		else {
-  				getButton(IDialogConstants.OK_ID).setEnabled(false);
-  			}
-	  	}
-	}
-
-	protected void okPressed() {
-		Element element = (Element) input;
-		String typeObject = "";
-		TypesDialogTreeObject treeObject = (TypesDialogTreeObject) treeView.getSelection();
-		
-		// Get the new type --> typeObject
-		if (treeObject.getDataObject() instanceof String) {
-			// Should be a built-in type or anonymous or anyType
-			typeObject = (String) treeObject.getDataObject();
-		}
-		else {
-			XSDNamedComponent item = (XSDNamedComponent) treeObject.getDataObject();
-			typeObject = item.getName();
-			
-			TypesHelper typesHelper = new TypesHelper(item.getSchema());
-		    List prefixedNames = typesHelper.getPrefixedNames(item.getTargetNamespace(), item.getName());
-		    if (prefixedNames.size() > 0) {
-		    	// Grab the first prefixed name
-		    	typeObject = (String) prefixedNames.get(0);
-		    }
-		}
-		
-		// Get the previous type --> previousStringType
-		String previousStringType = "";
-		Attr attr = element.getAttributeNode("type");
-		if (attr != null) {
-			String value = attr.getValue();
-		}
-
-	    if (!XSDDOMHelper.inputEquals(element, XSDConstants.UNION_ELEMENT_TAG, false))
-	    {
-		    if (typeObject.equals("**anonymous**"))
-		    {
-		      if (treeObject.getType() == TypesDialogTreeObject.ANONYMOUS_SIMPLE_TYPE)
-		      {
-		        if (!previousStringType.equals("**anonymous**"))
-		        {
-		          updateElementToAnonymous(element, XSDConstants.SIMPLETYPE_ELEMENT_TAG);
-		        }
-		      }
-		      else
-		      {
-		        if (!previousStringType.equals("**anonymous**"))
-		        {
-		          updateElementToAnonymous(element, XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
-		        }
-		      }
-		      // element.removeAttribute(XSDConstants.TYPE_ATTRIBUTE);
-		      element.removeAttribute("type");
-		    }
-		    else
-		    {
-		      XSDDOMHelper.updateElementToNotAnonymous(element);
-		      //element.setAttribute(XSDConstants.TYPE_ATTRIBUTE, typeObject.toString());
-		      element.setAttribute("type", typeObject.toString());
-		    }
-	    }
-	    
-		super.okPressed();
-	}
-	
-	private void updateElementToAnonymous(Element element, String xsdType) {
-		String prefix = element.getPrefix();
-		prefix = (prefix == null) ? "" : (prefix + ":");
-		XSDDOMHelper.updateElementToNotAnonymous(element);
-		boolean hasChildrenElements = hasElementChildren(element);
-		Element childNode = null;
-		if (xsdType.equals(XSDConstants.COMPLEXTYPE_ELEMENT_TAG)) {
-			childNode = element.getOwnerDocument().createElementNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, prefix + XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
-		}
-		else if (xsdType.equals(XSDConstants.SIMPLETYPE_ELEMENT_TAG)) {
-			childNode = element.getOwnerDocument().createElementNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, prefix + XSDConstants.SIMPLETYPE_ELEMENT_TAG);
-		}
-		
-		if (childNode != null) {
-			XSDDOMHelper helper = new XSDDOMHelper();
-			Node annotationNode = helper.getChildNode(element, XSDConstants.ANNOTATION_ELEMENT_TAG);
-			if (annotationNode == null) {
-				Node firstChild = element.getFirstChild();
-				element.insertBefore(childNode, firstChild);
-			} else {
-				Node nextSibling = annotationNode.getNextSibling();
-				element.insertBefore(childNode, nextSibling);
-			}
-			XSDDOMHelper.formatChild(childNode);
-		}
-	}
-	
-	private boolean hasElementChildren(Node parentNode) {
-		boolean hasChildrenElements = false;
-		if (parentNode != null && parentNode.hasChildNodes()) {
-			NodeList nodes = parentNode.getChildNodes();
-			for (int i = 0; i < nodes.getLength(); i++) {
-				if (nodes.item(i) instanceof Element) {
-					hasChildrenElements = true;
-					break;
-				}
-			}
-		}
-		return hasChildrenElements;
-	}
-}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/ComponentSelectionDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/ComponentSelectionDialog.java
new file mode 100644
index 0000000..3ac3853
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/ComponentSelectionDialog.java
@@ -0,0 +1,354 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.common;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+
+public class ComponentSelectionDialog extends Dialog {
+    private String dialogTitle;
+
+    protected IComponentSelectionProvider provider;
+    private List componentTreeViewerInput;
+    
+    // widgets
+    protected Composite topComposite;
+    private String filterTextLabel = "";
+    private String componentListLabel = "Components:";  // TODO: Externalize String
+    private Text textFilter;
+    protected TreeViewer componentTreeViewer;
+    private org.eclipse.swt.widgets.List qualifierList;
+    
+    protected Object componentSelection;
+    protected Object qualifierTextSelection;
+
+    public ComponentSelectionDialog(Shell shell, String dialogTitle, IComponentSelectionProvider provider) {
+        super(shell);
+        setShellStyle(getShellStyle() | SWT.RESIZE);
+        this.dialogTitle = dialogTitle;
+        this.provider = provider;
+        
+        componentTreeViewerInput = new ArrayList();
+    }
+
+    /*
+     * This method should be called before createDialogArea(Composite)
+     */
+    public void setComponentTreeLabel(String string) {
+        componentListLabel = string;
+    }
+
+    /*
+     * This method should be called before createDialogArea(Composite)
+     */
+    public void setFilterLabel(String string) {
+        filterTextLabel = string;
+    }
+
+    public Control createDialogArea(Composite parent) {
+        getShell().setText(dialogTitle);
+
+        Composite mainComposite = (Composite) super.createDialogArea(parent);
+        GridData gData = (GridData) mainComposite.getLayoutData();
+        gData.heightHint = 500;
+        gData.widthHint = 400;
+
+        // Subclasses may use this Composite to add desired widgets
+        topComposite = new Composite(mainComposite, SWT.NONE);
+        topComposite.setLayoutData(new GridData());
+        topComposite.setLayout(new GridLayout());
+        
+        // do we need to introduce a method here to contain this
+        // so we can add different parent other than 'topComposite'
+        Composite filterLabelAndTree = new Composite(mainComposite, SWT.NONE);
+        GridData gd = new GridData(GridData.FILL_BOTH);
+        GridLayout layout = new GridLayout();
+        layout.marginWidth = 0;
+        filterLabelAndTree.setLayoutData(new GridData(GridData.FILL_BOTH));
+        filterLabelAndTree.setLayout(layout);
+
+        // Create Text textFilter
+        Label filterLabel = new Label(filterLabelAndTree, SWT.NONE);
+        filterLabel.setText(filterTextLabel + "(? = any character, * = any string):"); // TODO: Externalize String
+
+        textFilter = new Text(filterLabelAndTree, SWT.SINGLE | SWT.BORDER);
+        textFilter.addModifyListener(new TextFilterModifyAdapter());
+        GridData textFilterData = new GridData();
+        textFilterData.horizontalAlignment = GridData.FILL;
+        textFilterData.grabExcessHorizontalSpace = true;
+        textFilter.setLayoutData(textFilterData);
+
+        // Create Component TreeViewer
+        createComponentTreeViewer(filterLabelAndTree);
+
+        // Create Qualifier List widget
+        Label qualifierLabel = new Label(mainComposite, SWT.NONE);
+        qualifierLabel.setText("Qualifier:");                       // TODO: Externalize String
+
+        qualifierList = new org.eclipse.swt.widgets.List(mainComposite, SWT.BORDER | SWT.SINGLE);
+        GridData data = new GridData();
+        data.horizontalAlignment = GridData.FILL;
+        data.grabExcessHorizontalSpace = true;
+        data.heightHint = 45;
+        qualifierList.setLayoutData(data);
+
+        // Populate the Component TreeViewer via the provider
+        // TODO: Is this the right way to set/get the ContentProvider?
+        componentTreeViewer.setContentProvider(new ComponentTreeContentProvider());
+        componentTreeViewer.setLabelProvider(provider.getLabelProvider());
+        componentTreeViewer.setSorter(new ViewerSorter());
+        populateComponentTreeViewer("");
+
+        return mainComposite;
+    }
+
+    protected TreeViewer createTreeViewer(Composite comp, String title) {
+        Label label = new Label(comp, SWT.NONE);
+        label.setText(title);
+
+        TreeViewer treeViewer = new TreeViewer(new Tree(comp, SWT.SINGLE | SWT.BORDER));
+        Control treeWidget = treeViewer.getTree();
+        GridData gd = new GridData(GridData.FILL_BOTH);
+        treeWidget.setLayoutData(gd);
+
+        return treeViewer;
+    }
+    
+    /*
+     * Creates the Component TreeViewer.
+     */
+    private void createComponentTreeViewer(Composite base) {
+        componentTreeViewer = createTreeViewer(base, componentListLabel);    
+        
+        componentTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+            public void selectionChanged(SelectionChangedEvent event) {
+                IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
+                List qualifiers = provider.getQualifier(structuredSelection.getFirstElement());
+                updateQualifierList(qualifiers);
+            }
+        });
+    }
+    
+    private void updateQualifierList(List qualifiers) {
+        qualifierList.removeAll();
+        Iterator it = qualifiers.iterator();
+        while (it.hasNext()) {
+            qualifierList.add(it.next().toString());
+        }
+    }
+    
+    
+    /*
+     * Returns the processed filter text for the Text field.  Inserts a "."
+     * before each supported meta-character.
+     */
+    protected String getProcessedFilterString() {
+        return processFilterString(textFilter.getText());
+    }
+
+    /*
+     * If supported metacharacters are used in the filter string, we need to
+     * insert a "." before each metacharacter.
+     */
+    private String processFilterString(String inputString) {
+        if (!(inputString.equals(""))) {
+            inputString = insertString("*", ".", inputString);
+            inputString = insertString("?", ".", inputString);
+            inputString = inputString + ".*";
+        } else {
+            inputString = ".*";
+        }
+
+        return inputString.toLowerCase();
+    }
+    
+    /*
+     * Helper method to insert a "." before each metacharacter in the
+     * search/filter string.
+     */
+    private String insertString(String target, String newString, String string) {
+        ArrayList list = new ArrayList();
+        StringBuffer stringBuffer = new StringBuffer(string);
+
+        int index = stringBuffer.indexOf(target);
+        while (index != -1) {
+            stringBuffer = stringBuffer.insert(index, newString);
+            index = stringBuffer.indexOf(target, index + newString.length() + target.length());
+        }
+
+        return stringBuffer.toString();
+    }
+
+    /*
+     * Listens to changes made in the text filter widget
+     */
+    private class TextFilterModifyAdapter implements ModifyListener {
+        public void modifyText(ModifyEvent e) {
+            if (e.widget == textFilter) {
+                if (delayedEvent != null) {
+                    delayedEvent.CANCEL = true;
+                }
+
+                delayedEvent = new DelayedEvent();
+                Display.getCurrent().timerExec(400, delayedEvent);
+            }
+        }
+    }
+
+    //TODO... do we really need one instance?
+    private DelayedEvent delayedEvent;
+
+    /*
+     * Update the component TreeViewer when the text filter is modified.
+     * Use a DelayedEvent so we don't update on every keystroke.
+     */
+    private class DelayedEvent implements Runnable {
+        public boolean CANCEL = false;
+
+        public void run() {
+            if (!CANCEL) {
+                populateComponentTreeViewer(getProcessedFilterString());
+                
+                // Select first match
+                if (componentTreeViewer.getTree().getItemCount() > 0) {
+                    TreeItem item = componentTreeViewer.getTree().getItems()[0];
+                    TreeItem items[] = new TreeItem[1];
+                    items[0] = item;
+                    componentTreeViewer.getTree().setSelection(items);
+                }
+                
+                // Update qualifierList
+                IStructuredSelection structuredSelection = (IStructuredSelection) componentTreeViewer.getSelection();
+                List qualifiers = provider.getQualifier(structuredSelection.getFirstElement());
+                updateQualifierList(qualifiers);
+                
+                updateCanFinish();
+            }
+        }
+    }
+
+    class ComponentList implements IComponentList
+    {
+        
+        
+            public void addComponent(Object o) {
+            // TODO Auto-generated method stub
+
+        }
+}
+    
+    /*
+     * Populate the Component TreeViewer with items.  If a filter text is
+     * available, filter out the items.
+     */
+    protected void populateComponentTreeViewer(String filter) {
+        componentTreeViewerInput.clear();
+        ILabelProvider labelProvider = provider.getLabelProvider();
+        
+        // TODO: We need to use getComponents(IComponentList) instead...        
+//       IComponentList
+        Pattern regex = Pattern.compile(filter);
+        Iterator it = provider.getComponents().iterator();
+        while (it.hasNext()) {
+            Object item = it.next();
+            String itemString = labelProvider.getText(item);           
+            Matcher m = regex.matcher(itemString.toLowerCase());
+            if (itemString.toLowerCase().startsWith(filter) || m.matches()) {
+                componentTreeViewerInput.add(item);
+            }
+        }
+        
+        
+        componentTreeViewer.setInput(componentTreeViewerInput);
+    }
+    
+    /*
+     * If there is a selection in the ComponentTreeViewer, enable OK
+     */
+    protected void updateCanFinish() {
+        IStructuredSelection selection = (IStructuredSelection) componentTreeViewer.getSelection();
+        if (selection.getFirstElement() != null) {
+            getButton(IDialogConstants.OK_ID).setEnabled(true);
+        }
+        else {
+            getButton(IDialogConstants.OK_ID).setEnabled(false);
+        }
+    }
+    
+    protected void okPressed() {
+        IStructuredSelection selection = (IStructuredSelection) componentTreeViewer.getSelection();
+        componentSelection = selection.getFirstElement();
+        int qualifierIndex = qualifierList.getSelectionIndex();
+        if (qualifierIndex < 0) {
+            qualifierIndex = 0;
+        }
+        qualifierTextSelection = qualifierList.getItem(qualifierIndex);
+        
+        super.okPressed();
+    }
+    
+    private class ComponentTreeContentProvider implements ITreeContentProvider {
+        public Object[] getChildren(Object parentElement) {
+            if (parentElement instanceof List) {
+                return ((List) parentElement).toArray();
+            }
+            return new Object[0];
+        }
+        
+        public Object[] getElements(Object inputElement) {
+            return getChildren(inputElement);
+        }
+        
+        public Object getParent(Object element) {
+            return null;
+        }
+        
+        public boolean hasChildren(Object element) {
+            if (getChildren(element).length > 0) {
+                return true;
+            }
+            return false;
+        }
+        
+        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+        }
+        
+        public void dispose() {
+        }
+    }
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentList.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentList.java
new file mode 100644
index 0000000..2ee9a3a
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentList.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.common;
+
+public interface IComponentList {
+   void addComponent(Object o);   
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentSelectionProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentSelectionProvider.java
new file mode 100644
index 0000000..becb45c
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/common/IComponentSelectionProvider.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.common;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+
+public interface IComponentSelectionProvider {
+
+    // don't use
+	List getComponents();
+    
+    // instead use this one
+    // warning ... this will get called on a non UI thread
+    void getComponents(IComponentList list);
+    
+	String getType(Object component);
+	ILabelProvider getLabelProvider();
+	List getQualifier(Object component);
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/ResourceView.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/ResourceView.java
new file mode 100644
index 0000000..2a61449
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/ResourceView.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xml;
+
+public class ResourceView {
+/*
+	Label scopeComboLabel = new Label(topComposite, SWT.NONE);
+	scopeComboLabel.setText(searchScopeComboLabel);
+	scopeCombo = new Combo(topComposite, SWT.NONE);
+	initializeSearchScopeCombo();
+	
+	sashForm = new SashForm(topComposite,  SWT.VERTICAL);
+	GridData sashGD = new GridData(GridData.FILL_BOTH);
+	sashGD.grabExcessHorizontalSpace = true;
+	sashGD.grabExcessVerticalSpace = true;
+	sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+	sashForm.setLayout(new GridLayout());
+	
+				int[] sashFormWeights = new int[2];
+			sashFormWeights[0] = 0;
+			sashFormWeights[1] = 7;
+			sashForm.setWeights(sashFormWeights);
+	
+	// Create PageBook for High Level TreeViewer
+			highLevelPageBook = new PageBook(sashForm, SWT.NONE);
+			GridData fileSystemPBData = new GridData();
+			fileSystemPBData.horizontalAlignment = SWT.FILL;
+			highLevelPageBook.setLayoutData(fileSystemPBData);
+			
+			blankHighLevelComposite = new Composite(highLevelPageBook, SWT.NONE);
+			highLevelComposite = new Composite(highLevelPageBook, SWT.NONE);
+			GridLayout fileSystemLayout = new GridLayout();
+			fileSystemLayout.marginWidth = 0;
+			highLevelComposite.setLayout(fileSystemLayout);
+			highLevelComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+			createHighLevelTreeViewer(highLevelComposite);
+			populateHighLevelTreeViewer();
+			
+			highLevelPageBook.showPage(blankHighLevelComposite);
+//////////////////////////////////////////////////////////////////////////////	//
+			
+		/*
+		 * Creates the High Level TreeViewer (Top TreeViewer).
+		 *
+		private void createHighLevelTreeViewer(Composite base) {
+			highLevelTreeViewer = createTreeViewer(highLevelComposite, "Resources");
+			initializeHighLevelTreeViewer();
+			String ext[] = new String[1];
+			ext[0] = "xsd";
+			addFilterExtensions(highLevelTreeViewer, ext, new IFile[0]); 
+			
+			initializeHighLevelTreeViewer();
+			populateHighLevelTreeViewer();
+		}
+        
+        
+          protected void showHighLevelView(boolean show) {
+        if (show) {
+            int[] sashFormWeights = new int[2];
+            sashFormWeights[0] = 4;
+            sashFormWeights[1] = 5;
+            sashForm.setWeights(sashFormWeights);
+
+            highLevelPageBook.showPage(highLevelComposite);
+            topComposite.layout(true, true);
+
+            showHighLevelView();
+        } else {
+            int[] sashFormWeights = new int[2];
+            sashFormWeights[0] = 0;
+            sashFormWeights[1] = 7;
+            sashForm.setWeights(sashFormWeights);
+
+            highLevelPageBook.showPage(blankHighLevelComposite);
+            topComposite.layout(true, true);
+
+            hideHighLevelView();
+        }
+    }
+    
+    protected void setFilter(TreeViewer treeViewer, ViewerFilter filter) {
+        treeViewer.getTree().setRedraw(false);
+        treeViewer.resetFilters();
+        treeViewer.addFilter(filter);
+        treeViewer.getTree().setRedraw(true);
+        treeViewer.getTree().redraw();
+    }
+    
+  // ///////////////////////////////////////////////////
+    // This is a convenience method that allows filtering of the given file
+    // exensions. It internally creates a ResourceFilter so that users of this
+    // class don't have to construct one.
+    // If the extensions provided don't have '.', one will be added.
+    protected void addFilterExtensions(TreeViewer treeViewer, String[] filterExtensions, IFile[] excludedFiles) {
+        // First add the '.' to the filterExtensions if they don't already have
+        // one
+        String[] correctedFilterExtensions = new String[filterExtensions.length];
+        for (int i = 0; i < filterExtensions.length; i++) {
+            // If the extension doesn't start with a '.', then add one.
+            if (filterExtensions[i].startsWith(".")) {
+                correctedFilterExtensions[i] = filterExtensions[i];
+            } else {
+                correctedFilterExtensions[i] = "." + filterExtensions[i];
+            }
+        }
+        ViewerFilter filter;
+        if (excludedFiles != null) {
+            filter = new SetTypeResourceFilter(correctedFilterExtensions, excludedFiles, null);
+        } else {
+            filter = new SetTypeResourceFilter(correctedFilterExtensions, null);
+        }
+        setFilter(treeViewer, filter);
+    }    
+    
+    
+  
+     * Creates a Generic TreeViewer object with the specified label and sets
+     * it's GridData value.
+  
+    protected TreeViewer createTreeViewer(Composite comp, String title) {
+        Label label = new Label(comp, SWT.NONE);
+        label.setText(title);
+
+        TreeViewer treeViewer = new TreeViewer(new Tree(comp, SWT.SINGLE | SWT.BORDER));
+        Control treeWidget = treeViewer.getTree();
+        GridData gd = new GridData(GridData.FILL_BOTH);
+        treeWidget.setLayoutData(gd);
+
+        return treeViewer;
+    }
+*/		
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentFinder.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentFinder.java
new file mode 100644
index 0000000..910b851
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentFinder.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xml;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+
+/**
+ * this thing parsers xml artifacts and picks out the components names
+ * 
+ */
+public class XMLComponentFinder {	
+    protected IFile currentIFile;
+//	protected List validExtensions;			// List of extensions as String objects
+//	protected List excludeFiles;			// List of files (full path) as String objects
+
+	
+	/**
+	 * 
+	 */
+	public XMLComponentFinder() {
+//		validExtensions = new ArrayList();
+//		excludeFiles = new ArrayList();
+	}
+    
+    /*
+     * Takes in the IFile we are currently editing.
+     * The currentIFile must be set before the getEnclosingProjectFiles()
+     * method will return correctly.
+     */
+    public void setFile(IFile file) {
+        currentIFile = file;
+    }
+    
+/*    
+     private String getNormalizedLocation(String location) {
+        try {
+            URL url = new URL(location);
+            URL resolvedURL = Platform.resolve(url);
+            location = resolvedURL.getPath();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return location;
+    }
+  */   
+
+     
+// /////////////////////////////////////////////////////////////////////////////////
+    /**
+     * Returns a List of absolute file locations. For example
+     * "D:\files\....\file.xsd"
+     */
+    protected void traverseIContainer(IContainer container, List extensions, List excludeFiles, List list) throws Exception {
+        IResource[] children = container.members();
+
+        for (int index = 0; index < children.length; index++) {
+            if (children[index] instanceof IFolder) {
+                traverseIContainer((IFolder) children[index], extensions, excludeFiles, list);
+            } else if (children[index] instanceof IFile) {
+                IFile file = (IFile) children[index];
+                String fileName = file.getLocation().toOSString();
+                String ext = file.getFileExtension();
+                boolean b = true;
+                if (extensions.contains(ext) && !excludeFiles.contains(fileName)) {
+                    list.add(file.getLocation());
+                }
+            }
+        }
+    }
+
+
+///////////////////////////////////////////////////////////////////////////////////
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSelectionProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSelectionProvider.java
new file mode 100644
index 0000000..a59f9b1
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSelectionProvider.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xml;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentList;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider;
+
+public class XMLComponentSelectionProvider implements IComponentSelectionProvider {
+
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider#getComponents()
+     */
+    public List getComponents() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider#getComponents(org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentList)
+     */
+    public void getComponents(IComponentList list) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider#getType(java.lang.Object)
+     */
+    public String getType(Object component) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider#getLabelProvider()
+     */
+    public ILabelProvider getLabelProvider() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider#getQualifier(java.lang.Object)
+     */
+    public List getQualifier(Object component) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSpecification.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSpecification.java
new file mode 100644
index 0000000..04c2546
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLComponentSpecification.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xml;
+
+import java.util.Hashtable;
+
+/*
+ * Simple class which keeps track of attribute information.
+ * This class is basically a Hashtable with convenience methods.
+ */
+public class XMLComponentSpecification {
+    String tagPath;
+    Hashtable hashtable;
+    String targetNamespace;
+    String fileLocation;
+    
+    public XMLComponentSpecification(String path) {
+        this.tagPath = path;
+        hashtable = new Hashtable();
+    }
+    
+    public void addAttributeInfo(Object attribute, Object value) {
+        hashtable.put(attribute, value);
+    }
+    
+    public Object getAttributeInfo(Object attribute) {
+        return hashtable.get(attribute);
+    }
+    
+    public String getTagPath() {
+        return tagPath;
+    }
+    
+    public String getTargetNamespace() {
+        return targetNamespace;
+    }
+    
+    public void setTargetNamespace(String tns) {
+        targetNamespace = tns;
+    }
+    
+    public String getFileLocation() {
+        return fileLocation;
+    }
+    
+    public void setFileLocation(String location) {
+        fileLocation = location;
+    }
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLQuickScan.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLQuickScan.java
new file mode 100644
index 0000000..47d56a1
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xml/XMLQuickScan.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xml;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.transform.TransformerFactory;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ *
+ */
+public class XMLQuickScan {
+  
+	/*
+	 * Returns information about matches encountered
+     * based on the criteria provided. 
+	 */
+  public static List getTagInfo(String fullFilePath, List paths, List attributes) {
+    XSDGlobalElementTypeContentHandler handler = new XSDGlobalElementTypeContentHandler();
+    handler.stringTagPaths = paths;
+    handler.searchAttributes = attributes;
+    handler.fileLocation = fullFilePath;
+
+    ClassLoader prevClassLoader = Thread.currentThread().getContextClassLoader();
+    
+    try {
+        IPath path = new Path(fullFilePath);
+    	FileInputStream inputStream = new FileInputStream(new File(path.toOSString()));
+    	
+        
+//      SAXParser  sparser = SAXParserFactory.newInstance().newSAXParser();
+//      XMLReader reader = sparser.getXMLReader();
+        
+        // Line below is a hack to get XMLReader working
+        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        
+    	XMLReader reader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
+    	reader.setContentHandler(handler);
+    	reader.parse(new InputSource(inputStream));
+    }
+    catch (Exception e) {
+    	e.printStackTrace();
+    }
+    finally {
+      Thread.currentThread().setContextClassLoader(prevClassLoader);
+    }
+    return handler.getSearchAttributeValues();
+  }
+  
+  public static class XSDGlobalElementTypeContentHandler extends DefaultHandler {
+  	protected List stringTagPaths;
+  	protected List searchAttributes;
+  	private List matchingTags = new ArrayList();
+  	private String targetNamespace = "";
+  	private String fileLocation;
+
+  	StringBuffer currentPath = new StringBuffer();
+  	
+    public void startElement(String uri, String localName, String qName, Attributes attributes)  throws SAXException {
+    	currentPath.append("/" + localName);
+    	
+    	// Search for targetNamespace if we haven't encountered it yet.
+    	if (targetNamespace.equals("")) {
+	        int nAttributes = attributes.getLength();
+	        for (int i = 0; i < nAttributes; i++)
+	        {
+	          if (attributes.getLocalName(i).equals("targetNamespace"))
+	          {
+	            targetNamespace = attributes.getValue(i);
+	            break;
+	          }
+	        }
+    	}
+    	
+    	// Search for the path
+    	for (int index = 0; index < stringTagPaths.size(); index++) {
+    		String path = (String) stringTagPaths.get(index);
+    		if (currentPath.length() == path.length() && currentPath.toString().equals(path)) {
+    			// Found a path match
+    			createTagInfo(attributes, (String[]) searchAttributes.get(index));
+    		}
+    	}
+    }
+    
+    public void endElement(String uri, String localName, String qName) throws SAXException {
+    	int slashIndex = currentPath.lastIndexOf("/");
+    	currentPath.delete(slashIndex, currentPath.length());
+    }
+    
+    /*
+     * Information about a tag is stored in a TagInfo class.
+     */
+    private void createTagInfo(Attributes attributes, String[] attributesToSearch) {
+    	XMLComponentSpecification spec = new XMLComponentSpecification(currentPath.toString());
+    	
+//    	tagInfo.addAttributeInfo("name", attributes.getValue("name"));
+    	for (int index = 0; index < attributesToSearch.length; index++) {
+    		String attrString = (String) attributesToSearch[index];
+    		String value = attributes.getValue(attrString);
+    		if (value != null) {
+    			spec.addAttributeInfo(attrString, value);
+    		}
+    	}
+    	spec.setTargetNamespace(targetNamespace);
+    	spec.setFileLocation(fileLocation);
+    	matchingTags.add(spec);
+    }
+    
+    private int getAttributeNameIndex(String attrName) {
+    	for (int index = 0; index < searchAttributes.size(); index++) {
+    		if (searchAttributes.get(index).equals(attrName)) {
+    			return index;
+    		}
+    	}
+    	
+    	// Not found.  We are not looking for this Attribute Name
+    	return -1;
+    }
+        
+    public List getSearchAttributeValues() {
+    	return matchingTags;
+    }
+  }
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentFinder.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentFinder.java
new file mode 100644
index 0000000..2b2ce2d
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentFinder.java
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentFinder;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLQuickScan;
+
+public class XSDComponentFinder extends XMLComponentFinder {
+    public static final int ENCLOSING_PROJECT_SCOPE = 0;
+    public static final int ENTIRE_WORKSPACE_SCOPE = 1;    
+    
+    private List extensions;
+    private List excludeFiles;
+    
+    public XSDComponentFinder() {
+        extensions = new ArrayList();
+        excludeFiles = new ArrayList();
+        
+        extensions.add("xsd");
+    }
+    
+    public void addValidExtensions(List newExtensions) {
+        extensions.addAll(newExtensions);
+    }
+
+    public void addExcludeFiles(List newExclude) {
+        excludeFiles.addAll(newExclude);
+    }
+    
+    public List getWorkbenchResourceComponents(int scope) {
+        List components = new ArrayList();
+        List filePaths = new ArrayList();
+        
+        // We don't want to search through the current file we're working on.
+        if (currentIFile != null) {
+            excludeFiles.add(currentIFile.getLocation().toOSString());
+        }
+        
+        // Find files matching the search criteria specified in List extensions and
+        // List excludeFiles.
+        switch (scope) {
+        case ENCLOSING_PROJECT_SCOPE:
+            filePaths = getEnclosingProjectFiles();
+            break;
+            
+        case ENTIRE_WORKSPACE_SCOPE:
+            filePaths = getWorkspaceFiles();
+            break;
+            
+        default:
+            
+            break;
+        }
+        
+        // Search for the components in each of the files specified in the path.
+        List paths = new ArrayList();
+        paths.add("/schema/complexType");
+        paths.add("/schema/simpleType");
+        
+        List attributes = new ArrayList();
+        String[] nameAttr = new String[1];
+        String[] nameAttr2 = new String[1];
+        nameAttr[0] = "name";
+        nameAttr2[0] = "name";
+        attributes.add(nameAttr);
+        attributes.add(nameAttr2);
+
+        Iterator pathsIterator = filePaths.iterator();
+        while (pathsIterator.hasNext()) {
+//           String stringPath = ((Path) pathsIterator.next()).toOSString();
+           String stringPath = ((Path) pathsIterator.next()).toString();
+           components.addAll(XMLQuickScan.getTagInfo(stringPath, paths, attributes));
+        }
+        
+        return components;
+    }
+    
+    /*
+     * Returns a List of absolute file locations. For example
+     * "D:\files\....\file.xsd"
+     */
+    private List getEnclosingProjectFiles() {
+        List files = new ArrayList();
+        
+        if (currentIFile != null) {
+            IWorkspaceRoot iwr = ResourcesPlugin.getWorkspace().getRoot();
+            IProject project = currentIFile.getProject();
+            try {
+                traverseIContainer(project, extensions, excludeFiles, files);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        
+        return files;
+    }
+
+    private List getWorkspaceFiles() {
+        List files = new ArrayList();
+        IWorkspaceRoot iwr = ResourcesPlugin.getWorkspace().getRoot();
+        IProject[] projects = iwr.getProjects();
+
+        try {
+            for (int index = 0; index < projects.length; index++) {
+                traverseIContainer(projects[index], extensions, excludeFiles, files);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return files;
+    }
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionDialog.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionDialog.java
new file mode 100644
index 0000000..dfaf18c
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionDialog.java
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.ComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentSpecification;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider.XMLComponentTreeObject;
+
+public class XSDComponentSelectionDialog extends ComponentSelectionDialog {
+    private CCombo scopeCombo;
+    
+    public static final String explicitlyReferencedString = "Explicitly Referenced Files";
+    public static final String enclosingProjectString = "Enclosing Project";
+    public static final String entireWorkspaceString = "Entire Workspace";
+    
+    private String searchScopeString = enclosingProjectString;
+    public XSDComponentSelectionDialog(Shell shell, String dialogTitle, IComponentSelectionProvider provider) {
+        super(shell, dialogTitle, provider);
+    }
+    
+    public Control createDialogArea(Composite parent) {
+        setFilterLabel("Filter by name ");          // TODO: Externalize String
+        setComponentTreeLabel("Matching types:");    // TODO: Externalize String
+        super.createDialogArea(parent);
+        
+        // We use the Composite topComposite to create additional widgets
+        GridLayout layout = new GridLayout();
+        layout.marginWidth = 0;
+        topComposite.setLayout(layout);
+        
+        Label scopeComboLabel = new Label(topComposite, SWT.NONE);
+        scopeComboLabel.setText("Search Scope:");       // TODO: Externalize String
+        scopeCombo = new CCombo(topComposite, SWT.BORDER);
+        scopeCombo.setBackground(ColorConstants.white);
+        scopeCombo.addSelectionListener(new ScopeComboSelectionListener());
+        
+        scopeCombo.add(explicitlyReferencedString);
+        scopeCombo.add(enclosingProjectString);
+        scopeCombo.add(entireWorkspaceString);
+        scopeCombo.setText(enclosingProjectString);
+        scopeCombo.setEditable(false);
+        topComposite.setFocus();
+        
+        return parent;
+    }
+    
+    /*
+     * Returns the selected search scope.
+     */
+    public String getSearchScope() {
+        return searchScopeString;
+    }
+    
+    public XMLComponentSpecification getSelection() {
+        XMLComponentTreeObject treeObject = (XMLComponentTreeObject) componentSelection;
+        List specs = treeObject.getXMLComponentSpecification();
+        
+        int matchingIndex = 0;
+        for (int index = 0; index < specs.size(); index++) {
+            XMLComponentSpecification spec = (XMLComponentSpecification) specs.get(index);
+            IPath path = new Path(spec.getFileLocation());
+            String specText = spec.getTargetNamespace() + " - " + path.lastSegment();
+            if (specText.equals(qualifierTextSelection)) {
+                matchingIndex = index;
+                break;
+            }
+        }
+        
+        return (XMLComponentSpecification) specs.get(matchingIndex);
+    }
+    
+    private class ScopeComboSelectionListener extends SelectionAdapter {
+        public void widgetSelected(SelectionEvent e) {
+            if (e.widget == scopeCombo) {
+                searchScopeString = scopeCombo.getItem(scopeCombo.getSelectionIndex());
+                populateComponentTreeViewer(getProcessedFilterString());
+                
+                // Select the first matching component.  Though we should be smarter here
+                // and determine if there was a selection before the scope switch (and if
+                // the component is still available.
+                Tree tree = componentTreeViewer.getTree();
+                TreeItem items[] = tree.getItems();
+                if (items.length > 0) {
+                    TreeItem select[] = new TreeItem[1];
+                    select[0] = items[0];
+                    tree.setSelection(select);
+                }
+                
+                updateCanFinish();
+            }
+        }
+    }
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionProvider.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionProvider.java
new file mode 100644
index 0000000..895d598
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDComponentSelectionProvider.java
@@ -0,0 +1,433 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentList;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.common.IComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentSpecification;
+import org.eclipse.wst.xsd.ui.internal.util.TypesHelper;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDImport;
+import org.eclipse.xsd.XSDInclude;
+import org.eclipse.xsd.XSDNamedComponent;
+import org.eclipse.xsd.XSDRedefine;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaContent;
+import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.impl.XSDImportImpl;
+
+/*
+ *
+ */
+public class XSDComponentSelectionProvider extends LabelProvider implements IComponentSelectionProvider {
+    private XSDComponentFinder xsdComponentFinder;
+    private XSDComponentSelectionDialog dialog;
+    private XSDSchema schema;
+    
+    private boolean showComplexTypes = true;
+    
+    /*
+     * Takes in the IFile we are currently editing.
+     */
+    public XSDComponentSelectionProvider(IFile file, XSDSchema schema) {
+        xsdComponentFinder = new XSDComponentFinder();
+        xsdComponentFinder.setFile(file);
+        this.schema = schema;
+    }
+    
+    public void setDialog(XSDComponentSelectionDialog dialog) {
+        this.dialog = dialog;
+    }
+    
+    public void showComplexTypes(boolean show) {
+        showComplexTypes = show;
+    }
+        
+    /*
+     * The return value is a List of XMLComponentTreeObjects.
+     * 
+     */
+	public void getComponents(IComponentList list) {
+
+	}
+    
+    /*
+     * TODO: Need to revisit how we build up our treeObject list.... how we use
+     * the filterText.  And it's somewhat messy, clean this up.
+     */
+    public List getComponents() {
+        List extensions = new ArrayList();
+        extensions.add("xsd");
+        
+        String scope = "";
+        if (dialog != null) {
+            scope = dialog.getSearchScope();
+        }
+        
+        List comps = new ArrayList();
+        if (scope.equals(XSDComponentSelectionDialog.enclosingProjectString)) {
+            comps = xsdComponentFinder.getWorkbenchResourceComponents(XSDComponentFinder.ENCLOSING_PROJECT_SCOPE);
+        }
+        else if (scope.equals(XSDComponentSelectionDialog.entireWorkspaceString)) {
+            comps = xsdComponentFinder.getWorkbenchResourceComponents(XSDComponentFinder.ENTIRE_WORKSPACE_SCOPE);            
+        }
+        
+//      Group same item types together (simple/complex)
+        List complex = new ArrayList();
+        List simple = new ArrayList();
+        Iterator itemsIterator = comps.iterator();
+        while (itemsIterator.hasNext()) {
+            XMLComponentSpecification tagItem = (XMLComponentSpecification) itemsIterator.next();
+            if (tagItem.getTagPath().equals("/schema/complexType")) {
+                complex.add(tagItem);
+            }               
+            else if (tagItem.getTagPath().equals("/schema/simpleType")) {
+                simple.add(tagItem);
+            }
+        }
+        
+        Iterator complexIt = complex.iterator();
+        Iterator simpleIt = simple.iterator();
+        List treeObjects = new ArrayList();
+        if (showComplexTypes) {
+            while (complexIt.hasNext()) {
+                XMLComponentSpecification item = (XMLComponentSpecification) complexIt.next();
+                addDataItemToTreeNode(treeObjects, item);
+            }
+        }
+        
+        while (simpleIt.hasNext()) {
+            XMLComponentSpecification item = (XMLComponentSpecification) simpleIt.next();
+            addDataItemToTreeNode(treeObjects, item);
+        }
+        
+        // Grab Built-In types
+        Iterator builtInIt = getBuiltInTypes().iterator();
+        while (builtInIt.hasNext()) {
+            XMLComponentSpecification tagItem = (XMLComponentSpecification) builtInIt.next();
+            addDataItemToTreeNode(treeObjects, tagItem);
+        }
+        
+        // Create current Schema's complex and simple types
+        createComplexTypes(treeObjects);
+        createSimpleTypes(treeObjects);
+        
+        // Create from imports, includes, and redefines
+        createFromImport(treeObjects);
+        createFromInclude(treeObjects);
+        createFromRedefine(treeObjects);
+        
+       return treeObjects;
+    }
+
+
+    protected void addDataItemToTreeNode(List comps, XMLComponentSpecification dataItem) {
+        boolean foundMatch = false;
+        Iterator it = comps.iterator();
+        XMLComponentTreeObject containingTreeObject = null;
+
+        while (it.hasNext()) {
+            XMLComponentTreeObject treeObject = (XMLComponentTreeObject) it.next();
+            if (treeObject.getName().equals(dataItem.getAttributeInfo("name"))) {
+                // If the existing data item and the new data item have the same names
+                if (treeObject.getXMLComponentSpecification().size() > 0) {
+                    String existingPath = ((XMLComponentSpecification) treeObject.getXMLComponentSpecification().get(0)).getTagPath();
+                    if (existingPath.equals(dataItem.getTagPath())) {
+                        // If they are the same 'type' of items (according to the path value)
+                        containingTreeObject = treeObject;
+                        foundMatch = true;
+                        break;
+                    }
+                }
+            }
+        }
+        
+        if (!foundMatch) {
+            containingTreeObject = new XMLComponentTreeObject(dataItem);
+            comps.add(containingTreeObject);
+        }
+        else {
+            containingTreeObject.addXMLComponentSpecification(dataItem);
+        }
+    }
+    
+////////////////////////////////////////////////////////////////////////////////    
+    private List getBuiltInTypes() {
+        TypesHelper helper = new TypesHelper(schema);
+        Iterator it = helper.getBuiltInTypeNamesList().iterator();
+        
+        List builtInComponentSpecs = new ArrayList();
+        while (it.hasNext()) {
+            Object item = it.next();
+            String itemString = item.toString();
+            
+            XMLComponentSpecification builtInTypeItem = new XMLComponentSpecification("BUILT_IN_SIMPLE_TYPE");
+            builtInTypeItem.addAttributeInfo("name", itemString);
+            builtInTypeItem.setTargetNamespace(schema.getTargetNamespace());
+            String normalizedFile = getNormalizedLocation(schema.getSchemaLocation());
+            builtInTypeItem.setFileLocation(normalizedFile);
+            
+            builtInComponentSpecs.add(builtInTypeItem);
+        }
+        
+        return builtInComponentSpecs;
+    }
+
+    private void createComplexTypes(List treeObjectList) {
+        TypesHelper typesHelper = new TypesHelper(schema);
+        List complexTypes = typesHelper.getUserComplexTypes();
+        createComplexSimpleTreeObject(treeObjectList, complexTypes, true);
+    }
+    
+    private void createSimpleTypes(List treeObjectList) {
+        TypesHelper typesHelper = new TypesHelper(schema);
+        List complexTypes = typesHelper.getUserSimpleTypes();
+        createComplexSimpleTreeObject(treeObjectList, complexTypes, true);
+    }
+
+    
+    private void createFromImport(List treeObjectList) {
+        Iterator imports = getXSDImports().iterator();
+        while (imports.hasNext()) {
+            XSDImport importItem = (XSDImport) imports.next();
+            if (importItem.getSchemaLocation() != null) {
+                ((XSDImportImpl) importItem).importSchema();
+                TypesHelper helper = new TypesHelper(importItem.getResolvedSchema());
+                
+                List types = helper.getUserComplexTypes();
+                types.addAll(helper.getUserSimpleTypes());
+                createComplexSimpleTreeObject(treeObjectList, types, false);
+            }
+        }
+    }
+    
+        private void createFromInclude(List treeObjectList) {
+        Iterator imports = getXSDIncludes().iterator();
+        while (imports.hasNext()) {
+            XSDInclude includeItem = (XSDInclude) imports.next();
+            if (includeItem.getSchemaLocation() != null) {
+                TypesHelper helper = new TypesHelper(includeItem.getResolvedSchema());  
+                
+                List types = helper.getUserComplexTypes();
+                types.addAll(helper.getUserSimpleTypes());
+                createComplexSimpleTreeObject(treeObjectList, types, false);
+            }
+        }
+    }
+    
+    private void createFromRedefine(List treeObjectList) {
+        Iterator redefines = getXSDRedefines().iterator();
+        while (redefines.hasNext()) {
+            XSDRedefine redefineItem = (XSDRedefine) redefines.next();
+            if (redefineItem.getSchemaLocation() != null) {
+                TypesHelper helper = new TypesHelper(redefineItem.getResolvedSchema());
+                
+                List types = helper.getUserComplexTypes();
+                types.addAll(helper.getUserSimpleTypes());
+                createComplexSimpleTreeObject(treeObjectList, types, false);
+            }
+        }
+    }
+    
+        protected List getXSDImports() {
+        List imports = new ArrayList();
+        
+        Iterator contents = schema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDImport) {
+                imports.add(content);             
+            }
+        }
+        
+        return imports;
+    }
+    
+    protected List getXSDIncludes() {
+        List includes = new ArrayList();
+        
+        Iterator contents = schema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDInclude) {
+                includes.add(content);            
+            }
+        }
+        
+        return includes;
+    }
+
+    protected List getXSDRedefines() {
+        List includes = new ArrayList();
+        
+        Iterator contents = schema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDRedefine) {
+                includes.add(content);            
+            }
+        }
+        
+        return includes;
+    }
+
+    private void createComplexSimpleTreeObject(List treeObjectList, List complexTypes, boolean sameNS) {
+        boolean proceed = true;
+        
+        for (int i = 0; i < complexTypes.size(); i++) {
+            XSDNamedComponent item = (XSDNamedComponent) complexTypes.get(i); 
+        
+            if (sameNS) {
+                // We do this check because Types from Includes might show up.  However, we don't want to show them
+                String itemLocation = item.getSchema().getSchemaLocation();
+                String currentSchemaLocation = schema.getSchemaLocation();
+                if (itemLocation != null) {
+                    proceed = itemLocation.equals(currentSchemaLocation);
+                }
+                else {
+                    proceed = false;
+                }
+            }
+            
+            if (proceed) {
+                XMLComponentSpecification typeItem =  null;
+                if (showComplexTypes && item instanceof XSDComplexTypeDefinition) {
+                    typeItem = new XMLComponentSpecification("/schema/complexType");
+                    typeItem.addAttributeInfo("name", ((XSDComplexTypeDefinition) item).getName());
+                }
+                else if (item instanceof XSDSimpleTypeDefinition) {
+                    typeItem = new XMLComponentSpecification("/schema/simpleType");
+                    typeItem.addAttributeInfo("name", ((XSDSimpleTypeDefinition) item).getName());
+                }
+                
+                if (typeItem != null) {
+                    typeItem.setTargetNamespace(item.getTargetNamespace());
+                    String normalizedFile = getNormalizedLocation(schema.getSchemaLocation());
+                    typeItem.setFileLocation(normalizedFile);
+    
+                    addDataItemToTreeNode(treeObjectList, typeItem);
+                }
+            }
+        }
+    }
+    
+    private String getNormalizedLocation(String location) {
+        try {
+            URL url = new URL(location);
+            URL resolvedURL = Platform.resolve(url);
+            location = resolvedURL.getPath();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return location;
+    }
+    
+    
+////////////////////////////////////////////////////////////////////////////////
+    
+	public ILabelProvider getLabelProvider() {
+		// TODO Auto-generated method stub
+		return this;
+	}
+
+    public Image getImage(Object element) {
+        XMLComponentTreeObject specification = (XMLComponentTreeObject) element;
+        XMLComponentSpecification spec = (XMLComponentSpecification) specification.getXMLComponentSpecification().get(0);
+        if (spec.getTagPath().equals("/schema/complexType")) {
+            return XSDEditorPlugin.getXSDImage("icons/XSDComplexType.gif");
+        }
+        else if (spec.getTagPath().equals("/schema/simpleType")) {
+            return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+        }
+        else if (spec.getTagPath().equals("BUILT_IN_SIMPLE_TYPE")) {
+            return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+        }
+
+        return null;
+    }
+    
+    public String getText(Object element) {
+        XMLComponentTreeObject specification = (XMLComponentTreeObject) element;
+        return specification.getName();
+    }
+    
+	public List getQualifier(Object component) {
+        List qualifiers = new ArrayList();
+        if (component != null) {
+    		XMLComponentTreeObject specification = (XMLComponentTreeObject) component;
+    		Iterator it = specification.getXMLComponentSpecification().iterator();
+            while (it.hasNext()) {
+                XMLComponentSpecification spec = (XMLComponentSpecification) it.next();
+                IPath path = new Path(spec.getFileLocation());
+                qualifiers.add(spec.getTargetNamespace() + " - " + path.lastSegment());
+            }
+        }
+        
+        return qualifiers;
+	}
+    
+	public String getType(Object component) {
+        XMLComponentTreeObject specification = (XMLComponentTreeObject) component;		
+//		return specification.kind;
+        return "";
+	}
+    
+    private String processSeparators(String location) {
+        String processedString = location;
+        
+        
+        
+        return processedString;
+    }
+    
+    /*
+     * Object used to hold components with the same name but different qualifiers.
+     * This object will contain a list of XMLComponentSpecifications (with the same
+     * names but different qualifiers).
+     */
+    public class XMLComponentTreeObject {
+        private String name;
+        private List xmlComponentSpecifications;
+        
+        public XMLComponentTreeObject(XMLComponentSpecification spec) {
+            xmlComponentSpecifications = new ArrayList();
+            xmlComponentSpecifications.add(spec);
+            name = (String) spec.getAttributeInfo("name");
+        }
+        
+        public String getName() {
+            return name;
+        }
+        
+        public void addXMLComponentSpecification(XMLComponentSpecification spec) {
+            xmlComponentSpecifications.add(spec);
+        }
+        
+        public List getXMLComponentSpecification() {
+            return xmlComponentSpecifications;
+        }
+    }
+}
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDSetTypeHelper.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDSetTypeHelper.java
new file mode 100644
index 0000000..2d5594c
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/dialogs/types/xsd/XSDSetTypeHelper.java
@@ -0,0 +1,378 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.xml.uriresolver.util.URIHelper;
+import org.eclipse.wst.xsd.ui.internal.actions.CreateElementAction;
+import org.eclipse.wst.xsd.ui.internal.actions.DOMAttribute;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentSpecification;
+import org.eclipse.wst.xsd.ui.internal.refactor.delete.XSDExternalFileCleanup;
+import org.eclipse.wst.xsd.ui.internal.util.TypesHelper;
+import org.eclipse.wst.xsd.ui.internal.util.XSDDOMHelper;
+import org.eclipse.xsd.XSDImport;
+import org.eclipse.xsd.XSDInclude;
+import org.eclipse.xsd.XSDRedefine;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaContent;
+import org.eclipse.xsd.XSDSchemaDirective;
+import org.eclipse.xsd.util.XSDConstants;
+import org.eclipse.xsd.util.XSDParser;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class XSDSetTypeHelper {
+    private XSDSchema xsdSchema;
+    private IFile currentIFile;
+    
+    public XSDSetTypeHelper(IFile iFile, XSDSchema schema) {
+        currentIFile = iFile;
+        xsdSchema = schema;
+    }
+
+    public void setType(Element element, String property, XMLComponentSpecification spec) {
+        addImportIfNecessary(element, spec);        
+        String typeObject = getPrefixedTypeName(spec);
+        
+        // Get the previous type --> previousStringType
+        String previousStringType = "";
+        Attr attr = element.getAttributeNode(property);
+        if (attr != null) {
+            String value = attr.getValue();
+        }
+
+        if (!XSDDOMHelper.inputEquals(element, XSDConstants.UNION_ELEMENT_TAG, false))
+        {
+            if (spec != null && spec.getTagPath().equals("**anonymous**"))
+            {
+              if (spec.getTagPath().equals("ANONYMOUS_SIMPLE_TYPE"))
+              {
+                if (!previousStringType.equals("**anonymous**"))
+                {
+                  updateElementToAnonymous(element, XSDConstants.SIMPLETYPE_ELEMENT_TAG);
+                }
+              }
+              else
+              {
+                if (!previousStringType.equals("**anonymous**"))
+                {
+                  updateElementToAnonymous(element, XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
+                }
+              }
+              // element.removeAttribute(XSDConstants.TYPE_ATTRIBUTE);
+              element.removeAttribute(property);
+            }
+            else
+            {
+              XSDDOMHelper.updateElementToNotAnonymous(element);
+              //element.setAttribute(XSDConstants.TYPE_ATTRIBUTE, typeObject.toString());
+              element.setAttribute(property, typeObject.toString());
+            }
+        }
+    }
+    
+    public void addImportIfNecessary(Element element, XMLComponentSpecification spec) {
+        String typeObject = "";
+        
+        // Get the new type --> typeObject
+        if (spec != null) {
+            String itemType = spec.getTagPath();
+            typeObject = (String) spec.getAttributeInfo("name");
+            
+            if (!itemType.equals("BUILT_IN_SIMPLE_TYPE")) {
+                // Do an actual import if needed
+                XSDParser parser = new XSDParser();
+                parser.parse(spec.getFileLocation());
+                XSDSchema schema = parser.getSchema();
+                String tns = schema.getTargetNamespace();
+                
+                boolean exists = false;
+                // Check if the type is defined in the 'current' file itself.
+                String currentFile = getNormalizedLocation(xsdSchema.getSchemaLocation());
+                IPath currentFilePath = new Path(currentFile);
+                if (currentFilePath.equals(spec.getFileLocation())) {
+                    exists = true;
+                }
+
+                if (!exists) {
+                    if (tns.equals(xsdSchema.getTargetNamespace())) {
+                        // Check if the schema is in a redefine/include
+                        List existingList = getXSDIncludes();
+                        existingList.addAll(getXSDRedefines());
+                        Iterator it = existingList.iterator();
+                        while (it.hasNext()) {
+                            XSDSchemaDirective existingSchema = (XSDSchemaDirective) it.next();
+                            String normalizedFile = getNormalizedLocation(existingSchema.getResolvedSchema().getSchemaLocation());
+                            String normalizedSpec = spec.getFileLocation();
+                            
+                            if (normalizedFile.equals(normalizedSpec)) {
+                                // Found and existing one
+                                exists = true;
+                            }
+                        }                        
+                    }
+                    else {
+                        // Check if the schema is in a import
+                        List existingList = getXSDImports();
+                        Iterator it = existingList.iterator();
+                        while (it.hasNext()) {
+                            XSDSchemaDirective existingSchema = (XSDSchemaDirective) it.next();
+                            String normalizedFile = getNormalizedLocation(existingSchema.getResolvedSchema().getSchemaLocation());
+                            String normalizedSpec = spec.getFileLocation();
+
+                            if (normalizedFile.equals(normalizedSpec)) {
+                                // Found and existing one
+                                exists = true;
+                            }
+                        }                        
+                    }
+                }
+                
+                if (!exists) {
+                    doImport(spec.getFileLocation(), schema);
+                }
+            }
+        }
+    }
+    
+    /*
+     * Return the prefixed type name for the type described by the given
+     * XMLComponentSpecification object.
+     * If the type described is a Built-in type, do not add the prefix
+     */
+    public String getPrefixedTypeName(XMLComponentSpecification spec) {
+        String typeObject = (String) spec.getAttributeInfo("name");
+        
+        if (!spec.getTagPath().equals("BUILT_IN_SIMPLE_TYPE")) {
+            TypesHelper typesHelper = new TypesHelper(xsdSchema); // ???? Is this correct?
+            List prefixedNames = typesHelper.getPrefixedNames(spec.getTargetNamespace(), typeObject);
+            if (prefixedNames.size() > 0) {
+                // Grab the first prefixed name
+                typeObject = (String) prefixedNames.get(0);
+            }
+        }
+        
+        return typeObject;
+    }
+    
+    private void updateElementToAnonymous(Element element, String xsdType) {
+        String prefix = element.getPrefix();
+        prefix = (prefix == null) ? "" : (prefix + ":");
+        XSDDOMHelper.updateElementToNotAnonymous(element);
+        boolean hasChildrenElements = hasElementChildren(element);
+        Element childNode = null;
+        if (xsdType.equals(XSDConstants.COMPLEXTYPE_ELEMENT_TAG)) {
+            childNode = element.getOwnerDocument().createElementNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, prefix + XSDConstants.COMPLEXTYPE_ELEMENT_TAG);
+        }
+        else if (xsdType.equals(XSDConstants.SIMPLETYPE_ELEMENT_TAG)) {
+            childNode = element.getOwnerDocument().createElementNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, prefix + XSDConstants.SIMPLETYPE_ELEMENT_TAG);
+        }
+        
+        if (childNode != null) {
+            XSDDOMHelper helper = new XSDDOMHelper();
+            Node annotationNode = helper.getChildNode(element, XSDConstants.ANNOTATION_ELEMENT_TAG);
+            if (annotationNode == null) {
+                Node firstChild = element.getFirstChild();
+                element.insertBefore(childNode, firstChild);
+            } else {
+                Node nextSibling = annotationNode.getNextSibling();
+                element.insertBefore(childNode, nextSibling);
+            }
+            XSDDOMHelper.formatChild(childNode);
+        }
+    }
+
+    private boolean hasElementChildren(Node parentNode) {
+        boolean hasChildrenElements = false;
+        if (parentNode != null && parentNode.hasChildNodes()) {
+            NodeList nodes = parentNode.getChildNodes();
+            for (int i = 0; i < nodes.getLength(); i++) {
+                if (nodes.item(i) instanceof Element) {
+                    hasChildrenElements = true;
+                    break;
+                }
+            }
+        }
+        return hasChildrenElements;
+    }
+
+    // TODO: We shouldn't need to pass in IPath externalSchemaPath.
+    private void doImport(String externalSchemaPath, XSDSchema externalSchema) {
+        // Determine schemaLocation
+        String locationAttribute = URIHelper.getRelativeURI(externalSchemaPath, currentIFile.getLocation().toOSString());
+        
+        boolean isInclude = false;
+        if (externalSchema.getTargetNamespace().equals(xsdSchema.getTargetNamespace())) {
+            isInclude = true;
+        }
+        
+        if (externalSchema != null) { // In case we have problems loading the file.... we should display an error message.
+                Element newElement;
+                if (isInclude) {                
+                    List attributes = new ArrayList();
+                    attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, locationAttribute));
+                    newElement = createElement(XSDConstants.INCLUDE_ELEMENT_TAG, attributes);
+                }
+                else if (!isInclude) {
+                    List attributes = new ArrayList();
+                    attributes.add(new DOMAttribute(XSDConstants.NAMESPACE_ATTRIBUTE, externalSchema.getTargetNamespace()));
+                    attributes.add(new DOMAttribute(XSDConstants.SCHEMALOCATION_ATTRIBUTE, locationAttribute));
+                    newElement = createElement(XSDConstants.IMPORT_ELEMENT_TAG, attributes);
+                    handleImportNS(newElement, externalSchema);
+                }
+        }
+    }
+
+    private void handleImportNS(Element importElement, XSDSchema externalSchema) {
+        String namespace = externalSchema.getTargetNamespace();
+        if (namespace == null) namespace = "";
+
+        XSDImport xsdImport = (XSDImport) xsdSchema.getCorrespondingComponent(importElement);
+        xsdImport.setResolvedSchema(externalSchema);
+        
+        java.util.Map map = xsdSchema.getQNamePrefixToNamespaceMap();
+        
+//        System.out.println("changed Import Map is " + map.values());
+//        System.out.println("changed import Map keys are " + map.keySet());
+
+        // Referential integrity on old import
+        // How can we be sure that if the newlocation is the same as the oldlocation
+        // the file hasn't changed
+        
+        XSDSchema referencedSchema = xsdImport.getResolvedSchema();
+        if (referencedSchema != null)
+        {
+          XSDExternalFileCleanup cleanHelper = new XSDExternalFileCleanup(referencedSchema);
+          cleanHelper.visitSchema(xsdSchema);
+        }
+
+        Element schemaElement = xsdSchema.getElement();
+
+        // update the xmlns in the schema element first, and then update the import element next
+        // so that the last change will be in the import element.  This keeps the selection
+        // on the import element
+        TypesHelper helper = new TypesHelper(externalSchema);
+        String prefix = helper.getPrefix(namespace, false);
+        
+        if (map.containsKey(prefix))
+        {
+          prefix = null;
+        }
+
+        if (prefix == null || (prefix !=null && prefix.length() == 0))
+        {
+          StringBuffer newPrefix = new StringBuffer("pref");  //$NON-NLS-1$
+          int prefixExtension = 1;
+          while (map.containsKey(newPrefix.toString()) && prefixExtension < 100)
+          {
+            newPrefix = new StringBuffer("pref" + String.valueOf(prefixExtension));
+            prefixExtension++;
+          }
+          prefix = newPrefix.toString();
+        }
+
+        if (namespace.length() > 0)
+        {
+          // if ns already in map, use its corresponding prefix
+          if (map.containsValue(namespace))
+          {
+            TypesHelper typesHelper = new TypesHelper(xsdSchema);
+            prefix = typesHelper.getPrefix(namespace, false);
+          }
+          else // otherwise add to the map
+          {
+            schemaElement.setAttribute("xmlns:"+prefix, namespace);
+          }
+        }
+
+
+//        System.out.println("changed Import Map is " + map.values());
+//        System.out.println("changed import Map keys are " + map.keySet());
+    }
+    
+    private Element createElement(String elementTag, List attributes) {
+        Node relativeNode = XSDDOMHelper.getNextElementNode(xsdSchema.getElement().getFirstChild());
+        
+        CreateElementAction action = new CreateElementAction("");
+        action.setElementTag(elementTag);
+        action.setAttributes(attributes);
+        action.setParentNode(xsdSchema.getElement());
+        action.setRelativeNode(relativeNode);
+        action.setXSDSchema(xsdSchema);
+        return action.createAndAddNewChildElement();
+    }
+
+    private String getNormalizedLocation(String location) {
+        try {
+            URL url = new URL(location);
+            URL resolvedURL = Platform.resolve(url);
+            location = resolvedURL.getPath();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+        
+        return location; 
+      }
+    
+    private List getXSDImports() {
+        List imports = new ArrayList();
+        
+        Iterator contents = xsdSchema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDImport) {
+                imports.add(content);             
+            }
+        }
+        
+        return imports;
+    }
+    
+    private List getXSDIncludes() {
+        List includes = new ArrayList();
+        
+        Iterator contents = xsdSchema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDInclude) {
+                includes.add(content);            
+            }
+        }
+        
+        return includes;
+    }
+
+    private List getXSDRedefines() {
+        List includes = new ArrayList();
+        
+        Iterator contents = xsdSchema.getContents().iterator();
+        while (contents.hasNext()) {
+            XSDSchemaContent content = (XSDSchemaContent) contents.next();
+            if (content instanceof XSDRedefine) {
+                includes.add(content);            
+            }
+        }
+        
+        return includes;
+    }
+
+}
\ No newline at end of file
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 1ccb786..8646771 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
@@ -14,6 +14,7 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.Label;
@@ -27,8 +28,18 @@
 import org.eclipse.gef.Request;
 import org.eclipse.gef.RequestConstants;
 import org.eclipse.gef.requests.LocationRequest;
+import org.eclipse.jface.window.Window;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper;
 import org.eclipse.wst.xsd.ui.internal.gef.util.figures.SpacingFigure;
 import org.eclipse.wst.xsd.ui.internal.graph.XSDChildUtility;
 import org.eclipse.wst.xsd.ui.internal.graph.XSDGraphUtil;
@@ -37,7 +48,6 @@
 import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.ComboBoxCellEditorManager;
 import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.ComponentNameDirectEditManager;
 import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.SimpleDirectEditPolicy;
-import org.eclipse.wst.xsd.ui.internal.graph.editpolicies.TypeReferenceDirectEditManager;
 import org.eclipse.wst.xsd.ui.internal.graph.figures.ContainerFigure;
 import org.eclipse.wst.xsd.ui.internal.graph.figures.ExpandableGraphNodeFigure;
 import org.eclipse.wst.xsd.ui.internal.graph.figures.FillLayout;
@@ -50,6 +60,7 @@
 import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
 import org.eclipse.xsd.XSDTypeDefinition;
+import org.w3c.dom.Element;
 
               
 
@@ -308,9 +319,33 @@
   {
 		if (!getXSDElementDeclaration().isElementDeclarationReference())
 		{    
-      TypeReferenceDirectEditManager manager = new TypeReferenceDirectEditManager(this, getXSDElementDeclaration(), typeValueLabel);   
-      simpleDirectEditPolicy.setDelegate(manager);
-      manager.show();
+//      TypeReferenceDirectEditManager manager = new TypeReferenceDirectEditManager(this, getXSDElementDeclaration(), typeValueLabel);   
+//      simpleDirectEditPolicy.setDelegate(manager);
+//      manager.show();
+//TODO remove TypeReferenceDirectEditManager since it is not used any longer
+            
+            Shell shell = Display.getCurrent().getActiveShell();
+            IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+            IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+            IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+            IFile currentIFile = ((IFileEditorInput)editorPart.getEditorInput()).getFile();
+            
+            XSDSchema schema = getXSDElementDeclaration().getSchema();
+                
+            XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, schema);
+            XSDComponentSelectionDialog dialog = new XSDComponentSelectionDialog(shell, "Set Type", provider);  // TODO: Externalize This
+            provider.setDialog(dialog);
+            
+            dialog.setBlockOnOpen(true);
+            dialog.create();
+
+            if (dialog.open() == Window.OK) {
+                Element element = getXSDElementDeclaration().getElement();
+                XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, schema);
+                helper.setType(element, "type", dialog.getSelection());
+            }        
+
+            
 		}
 		// just ignore type edit for element ref's
   }                                                                
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/ComplexTypeSection.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/ComplexTypeSection.java
index 4de57c5..62bbb24 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/ComplexTypeSection.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/ComplexTypeSection.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xsd.ui.internal.properties.section;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
@@ -23,12 +24,21 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.wst.common.ui.properties.ITabbedPropertyConstants;
 import org.eclipse.wst.common.ui.properties.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
 import org.eclipse.wst.xsd.ui.internal.actions.SetBaseTypeAction;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xml.XMLComponentSpecification;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper;
 import org.eclipse.xsd.XSDComplexTypeDefinition;
 import org.eclipse.xsd.XSDConcreteComponent;
+import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.util.XSDConstants;
 import org.w3c.dom.Element;
 
@@ -173,25 +183,44 @@
   	    element = ((XSDComplexTypeDefinition)getInput()).getContent().getElement();
 	    }
 	    
-	    SimpleContentBaseTypeOptionsDialog dialog = new SimpleContentBaseTypeOptionsDialog(shell, element, BASE_TYPE_ID, ((XSDConcreteComponent)getInput()).getSchema());
-
-	    dialog.setBlockOnOpen(true);
-	    dialog.create();
-	    
-	    int result = dialog.open();
+//	    SimpleContentBaseTypeOptionsDialog dialog = new SimpleContentBaseTypeOptionsDialog(shell, element, BASE_TYPE_ID, ((XSDConcreteComponent)getInput()).getSchema());
+//	    dialog.setBlockOnOpen(true);
+//	    dialog.create();
+//	    int result = dialog.open();
+        
+        IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+        IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+        IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+        IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile();
+        
+        Object input = getInput();
+        XSDSchema schema = null;
+        if (input instanceof XSDConcreteComponent) {
+            schema = ((XSDConcreteComponent) input).getSchema();
+        }
+        
+        XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, schema);
+        XSDComponentSelectionDialog dialog = new XSDComponentSelectionDialog(shell, "Set Type", provider);  // TODO: Externalize This
+        provider.setDialog(dialog);
+        dialog.setBlockOnOpen(true);
+        dialog.create();
+        int result = dialog.open();
    
 	    if (result == Window.OK)
 	    {
-	      String typeString = dialog.getType();
-	     
-        String derivedBy = getDomHelper().getDerivedByName(element);
-        SetBaseTypeAction setBaseTypeAction = new SetBaseTypeAction(XSDEditorPlugin.getXSDString("_UI_LABEL_SET_BASE_TYPE")); //$NON-NLS-1$
-        setBaseTypeAction.setXSDSchema(xsdSchema);
-        setBaseTypeAction.setComplexTypeElement(ctElement);
-        setBaseTypeAction.setType(typeString);
-        setBaseTypeAction.setDerivedBy(derivedBy);
-        setBaseTypeAction.performAction();
-	      
+            XMLComponentSpecification spec = dialog.getSelection();            
+            XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, schema);
+            helper.addImportIfNecessary(element, spec);
+            
+            String typeString = helper.getPrefixedTypeName(spec);
+            String derivedBy = getDomHelper().getDerivedByName(element);
+            SetBaseTypeAction setBaseTypeAction = new SetBaseTypeAction(XSDEditorPlugin.getXSDString("_UI_LABEL_SET_BASE_TYPE")); //$NON-NLS-1$
+            setBaseTypeAction.setXSDSchema(xsdSchema);
+            setBaseTypeAction.setComplexTypeElement(ctElement);
+            setBaseTypeAction.setType(typeString);
+            setBaseTypeAction.setDerivedBy(derivedBy);
+            setBaseTypeAction.performAction();
+
 	    }
 
       refresh();
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/SimpleTypeSection.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/SimpleTypeSection.java
index 833292e..ddcaf08 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/SimpleTypeSection.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/SimpleTypeSection.java
@@ -15,7 +15,9 @@
 import java.util.List;
 import java.util.StringTokenizer;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CCombo;
@@ -28,11 +30,18 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.wst.common.ui.properties.ITabbedPropertyConstants;
 import org.eclipse.wst.common.ui.properties.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
 import org.eclipse.wst.xsd.ui.internal.actions.CreateElementAction;
 import org.eclipse.wst.xsd.ui.internal.actions.DOMAttribute;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper;
 import org.eclipse.wst.xsd.ui.internal.util.XSDDOMHelper;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
@@ -255,8 +264,19 @@
     {
       Shell shell = Display.getCurrent().getActiveShell();
       Element element = ((XSDConcreteComponent)input).getElement();
-      TypesDialog dialog = null;
+      Dialog dialog = null;
+      String property = "";
+      Element secondaryElement = null;
+      
+      IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+      IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+      IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+      IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile();
 
+      XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, xsdSchema);
+      dialog = new XSDComponentSelectionDialog(shell, "Set Type", provider);  // TODO: Externalize This
+      provider.setDialog((XSDComponentSelectionDialog) dialog);
+      
       if (input instanceof XSDSimpleTypeDefinition)
       {
         XSDSimpleTypeDefinition st = (XSDSimpleTypeDefinition)input;
@@ -264,8 +284,12 @@
         if (st.getVariety() == XSDVariety.LIST_LITERAL)
         {
           Element listElement = (Element)domHelper.getChildNode(simpleTypeElement, XSDConstants.LIST_ELEMENT_TAG);
-          dialog = new TypesDialog(shell, listElement, XSDConstants.ITEMTYPE_ATTRIBUTE, xsdSchema);
-          dialog.showComplexTypes = false;
+//          dialog = new TypesDialog(shell, listElement, XSDConstants.ITEMTYPE_ATTRIBUTE, xsdSchema);
+//          dialog.showComplexTypes = false;
+          provider.showComplexTypes(false);
+          
+          secondaryElement = listElement;
+          property = XSDConstants.ITEMTYPE_ATTRIBUTE;
         }
         else if (st.getVariety() == XSDVariety.ATOMIC_LITERAL)
         {
@@ -277,8 +301,12 @@
           }
           if (derivedByElement != null)
           {
-            dialog = new TypesDialog(shell, derivedByElement, XSDConstants.BASE_ATTRIBUTE, xsdSchema);
-            dialog.showComplexTypes = false;
+//            dialog = new TypesDialog(shell, derivedByElement, XSDConstants.BASE_ATTRIBUTE, xsdSchema);
+//            dialog.showComplexTypes = false;
+              provider.showComplexTypes(false);
+
+              secondaryElement = derivedByElement;
+              property = XSDConstants.BASE_ATTRIBUTE;
           }
           else
           {
@@ -317,12 +345,14 @@
         }
         else
         {
-          dialog = new TypesDialog(shell, element, "type", xsdSchema); //$NON-NLS-1$
+//          dialog = new TypesDialog(shell, element, "type", xsdSchema); //$NON-NLS-1$
+            property = "type";
         }
       }
       else
       {
-        dialog = new TypesDialog(shell, element, "type", xsdSchema); //$NON-NLS-1$
+//        dialog = new TypesDialog(shell, element, "type", xsdSchema); //$NON-NLS-1$
+          property = "type";
       }
       beginRecording(XSDEditorPlugin.getXSDString("_UI_TYPE_CHANGE"), element); //$NON-NLS-1$
       dialog.setBlockOnOpen(true);
@@ -331,6 +361,12 @@
       
       if (result == Window.OK)
       {
+          if (secondaryElement == null) {
+              secondaryElement = element;
+          }
+          XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, xsdSchema);
+          helper.setType(secondaryElement, property, ((XSDComponentSelectionDialog) dialog).getSelection());          
+
         XSDSimpleTypeDefinition st = (XSDSimpleTypeDefinition)getInput();
         st.setElement(element);
         updateSimpleTypeFacets();
diff --git a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesSection.java b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesSection.java
index c0d8ab0..db1a417 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesSection.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src/org/eclipse/wst/xsd/ui/internal/properties/section/TypesSection.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xsd.ui.internal.properties.section;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
@@ -22,13 +23,21 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.wst.common.ui.properties.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.xsd.ui.internal.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionDialog;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDComponentSelectionProvider;
+import org.eclipse.wst.xsd.ui.internal.dialogs.types.xsd.XSDSetTypeHelper;
 import org.eclipse.wst.xsd.ui.internal.widgets.TypeSection;
 import org.eclipse.xsd.XSDAttributeDeclaration;
 import org.eclipse.xsd.XSDAttributeUse;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.XSDTypeDefinition;
 import org.eclipse.xsd.util.XSDConstants;
 import org.w3c.dom.Element;
@@ -221,6 +230,7 @@
   {
     if (e.widget == button)
     {
+/*        
 	    Shell shell = Display.getCurrent().getActiveShell();
 	    Object input = getInput();
 	    Element element = ((XSDConcreteComponent)getInput()).getElement();
@@ -262,7 +272,7 @@
 //	    {
 	      dialog = new TypesDialog(shell, element, "type", xsdSchema); //$NON-NLS-1$
 //	    }
-	    
+
 	    dialog.setBlockOnOpen(true);
 	    dialog.create();
 	    int result = dialog.open();
@@ -281,6 +291,31 @@
 //          endRecording(element);
 //		    }
 	    }
+*/        
+        Shell shell = Display.getCurrent().getActiveShell();
+        IWorkbench workbench = XSDEditorPlugin.getPlugin().getWorkbench();
+        IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+        IEditorPart editorPart = workbenchWindow.getActivePage().getActiveEditor();
+        IFile currentIFile = ((IFileEditorInput)getActiveEditor().getEditorInput()).getFile();
+        
+        Object input = getInput();
+        XSDSchema schema = null;
+        if (input instanceof XSDConcreteComponent) {
+            schema = ((XSDConcreteComponent) input).getSchema();
+        }
+        
+        XSDComponentSelectionProvider provider = new XSDComponentSelectionProvider(currentIFile, schema);
+        XSDComponentSelectionDialog dialog = new XSDComponentSelectionDialog(shell, "Set Type", provider);  // TODO: Externalize This
+        provider.setDialog(dialog);
+        
+        dialog.setBlockOnOpen(true);
+        dialog.create();
+
+        if (dialog.open() == Window.OK) {
+            Element element = ((XSDConcreteComponent)getInput()).getElement();
+            XSDSetTypeHelper helper = new XSDSetTypeHelper(currentIFile, schema);
+            helper.setType(element, "type", dialog.getSelection());
+        }        
 
       refresh();
     }