/**
* Copyright (c) 2011-2012 Eclipse contributors 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
*/
package org.eclipse.emf.ecore.xcore.ui.refactoring;
import org.eclipse.emf.codegen.ecore.genmodel.GenBase;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.xcore.XNamedElement;
import org.eclipse.emf.ecore.xcore.mappings.XcoreMapper;
import org.eclipse.emf.ecore.xcore.util.XcoreEcoreBuilder;
import org.eclipse.emf.ecore.xcore.util.XcoreJvmInferrer;
import org.eclipse.xtext.xbase.ui.jvmmodel.refactoring.DefaultJvmModelRenameStrategy;
import com.google.inject.Inject;
/**
* Encapsulates the model changes of a rename refactoring.
*/
public class XcoreRenameStrategy extends DefaultJvmModelRenameStrategy
{
@Inject
private XcoreMapper mapper;
@Override
protected EObject setName(URI targetElementURI, final String newName, ResourceSet resourceSet)
{
EObject targetElement = super.setName(targetElementURI, newName, resourceSet);
if (targetElement instanceof XNamedElement)
{
XNamedElement xNamedElement = (XNamedElement)targetElement;
ENamedElement eNamedElement = mapper.getEcore(xNamedElement);
if (eNamedElement instanceof EPackage)
{
XcoreEcoreBuilder.setQualifiedPackageName((EPackage)eNamedElement, newName);
}
else
{
eNamedElement.setName(newName);
}
GenBase genBase = mapper.getGen(xNamedElement);
XcoreJvmInferrer.inferName(genBase);
}
return targetElement;
}
@Override
protected void setInferredJvmElementName(String newName, ResourceSet resourceSet)
{
// Do nothing.
}
}