blob: 730a7c279085e5c35a605f47fb2a57a33f6c7d0d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 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.common.commands;
import org.eclipse.ltk.core.refactoring.participants.RenameRefactoring;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
import org.eclipse.wst.xsd.ui.internal.refactor.PerformUnsavedRefactoringOperation;
import org.eclipse.wst.xsd.ui.internal.refactor.RefactoringComponent;
import org.eclipse.wst.xsd.ui.internal.refactor.XMLRefactoringComponent;
import org.eclipse.wst.xsd.ui.internal.refactor.rename.RenameComponentProcessor;
import org.eclipse.xsd.XSDComplexTypeDefinition;
import org.eclipse.xsd.XSDNamedComponent;
import org.eclipse.xsd.XSDSchema;
public class UpdateNameCommand extends BaseCommand
{
// private String oldName;
private String newName;
private XSDNamedComponent component;
public UpdateNameCommand(String label, XSDNamedComponent component, String newName)
{
super(label);
if (component instanceof XSDComplexTypeDefinition && component.getName() == null && component.eContainer() instanceof XSDNamedComponent && ((XSDNamedComponent) component.eContainer()).getName() != null)
{
component = (XSDNamedComponent) component.eContainer();
}
this.component = component;
this.newName = newName;
// this.oldName = component.getName();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.commands.Command#execute()
*/
public void execute()
{
try
{
beginRecording(component.getElement());
renameComponent(newName);
}
finally
{
endRecording();
}
}
/**
* Performs a rename refactoring to rename the component and all the
* references to it within the current schema.
*
* @param newName the new component name.
*/
private void renameComponent(String newName)
{
// this is a 'globally' defined component (e.g. global element)
if (component.eContainer() instanceof XSDSchema)
{
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (workbenchWindow != null)
{
IWorkbenchPage page = workbenchWindow.getActivePage();
if (page != null)
{
IEditorInput editorInput = page.getActiveEditor().getEditorInput();
if (editorInput instanceof FileEditorInput)
{
RefactoringComponent refactoringComponent = new XMLRefactoringComponent(
component,
(IDOMElement)component.getElement(),
component.getName(),
component.getTargetNamespace());
RenameComponentProcessor processor = new RenameComponentProcessor(refactoringComponent, newName, true);
RenameRefactoring refactoring = new RenameRefactoring(processor);
PerformUnsavedRefactoringOperation operation = new PerformUnsavedRefactoringOperation(refactoring);
operation.run(null);
}
else
{
// We can't refactor rename external files
component.setName(newName);
}
}
}
}
else
{
// this is a 'locally' defined component (e.g. local element)
// no need to call refactoring since this component can't be referenced
component.setName(newName);
}
}
}