diff options
Diffstat (limited to 'bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RenameParticipant.java')
-rw-r--r-- | bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RenameParticipant.java | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RenameParticipant.java b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RenameParticipant.java new file mode 100644 index 00000000..5972877a --- /dev/null +++ b/bundles/org.eclipse.e4.tools.emf.editor3x/src/org/eclipse/e4/tools/emf/editor3x/RenameParticipant.java @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (c) 2011 BestSolution.at 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: + * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.tools.emf.editor3x; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.e4.tools.emf.editor3x.extension.Util; +import org.eclipse.jdt.core.IPackageFragment; +import org.eclipse.jdt.core.IType; +import org.eclipse.ltk.core.refactoring.Change; +import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; + +public class RenameParticipant extends + org.eclipse.ltk.core.refactoring.participants.RenameParticipant { + private IType _type; + private IPackageFragment _pckage; + private IFile _file; + private IFolder _folder; + + @Override + protected boolean initialize(Object element) { + + if (element instanceof IType) { + _type = (IType) element; + return true; + } + + if (element instanceof IPackageFragment) { + _pckage = (IPackageFragment) element; + return true; + } + + if (element instanceof IFile) { + _file = (IFile) element; + return true; + } + + if (element instanceof IFolder) { + _folder = (IFolder) element; + return true; + } + return false; + } + + @Override + public String getName() { + return "Workbench Model Contribution Participant"; + } + + @Override + public RefactoringStatus checkConditions(IProgressMonitor pm, + CheckConditionsContext context) throws OperationCanceledException { + return new RefactoringStatus(); + } + + @Override + public Change createChange(IProgressMonitor pm) throws CoreException, + OperationCanceledException { + if (_type != null) { + return createClassChange(pm, _type); + } + + if (_pckage != null) { + return createPackageChange(pm, _pckage); + } + + if (_file != null) { + return createFileChange(pm, _file); + } + + if (_folder != null) { + return createFolderChange(pm, _folder); + } + + return null; + } + + private Change createFolderChange(IProgressMonitor pm, IFolder folder) + throws CoreException { + + String SPLIT = "/"; + if (folder.getParent().getFullPath().segmentCount() == 1) { + SPLIT = ""; + } + + String newUrl = "platform:/plugin/" + folder.getProject().getName() + "/" + + folder.getParent().getProjectRelativePath().toString() + + SPLIT + getArguments().getNewName(); + + String oldUrl = "platform:/plugin" + folder.getFullPath(); + + return RefactorParticipantDelegate.createChange(pm, this, oldUrl, + newUrl); + } + + private Change createFileChange(IProgressMonitor pm, IFile file) + throws CoreException { + + String SPLIT = "/"; + if (file.getParent().getFullPath().segmentCount() == 1) { + SPLIT = ""; + } + String newUrl = "platform:/plugin/" + file.getProject().getName() + "/" + + file.getParent().getProjectRelativePath().toString() + SPLIT + + getArguments().getNewName(); + + String oldUrl = "platform:/plugin" + file.getFullPath(); + + return RefactorParticipantDelegate.createChange(pm, this, oldUrl, + newUrl); + } + + private Change createPackageChange(IProgressMonitor pm, + IPackageFragment pckage) throws CoreException { + String bundle = Util.getBundleSymbolicName(pckage.getJavaProject() + .getProject()); + + final String newUrl = "bundleclass://" + bundle + "/" + + getArguments().getNewName(); + + String oldUrl = "bundleclass://" + bundle + "/" + + pckage.getElementName(); + + return RefactorParticipantDelegate.createChange(pm, this, oldUrl, + newUrl); + } + + private Change createClassChange(IProgressMonitor pm, IType type) + throws CoreException { + String bundle = Util.getBundleSymbolicName(type.getJavaProject() + .getProject()); + + final String newUrl = "bundleclass://" + + bundle + + "/" + + (type.getPackageFragment().getElementName().length() == 0 ? getArguments() + .getNewName() : type.getPackageFragment() + .getElementName() + "." + getArguments().getNewName()); + String oldUrl = "bundleclass://" + bundle + "/" + + type.getFullyQualifiedName().replace(".", "\\."); + + return RefactorParticipantDelegate.createChange(pm, this, oldUrl, + newUrl); + } + +} |