1 // Copyright (c) 2005 by Leif Frenzel. All rights reserved.
2 // See http://leiffrenzel.de
3 // modified for phpeclipse.de project by axelcl
4 package net.sourceforge.phpdt.ltk.ui.actions;
6 import net.sourceforge.phpdt.internal.ui.util.PHPFileUtil;
7 import net.sourceforge.phpdt.ltk.core.RenameIdentifierDelegate;
8 import net.sourceforge.phpdt.ltk.core.RenameIdentifierInfo;
9 import net.sourceforge.phpdt.ltk.core.RenameIdentifierRefactoring;
10 import net.sourceforge.phpdt.ltk.core.RenamePHPProcessor;
11 import net.sourceforge.phpdt.ltk.ui.UITexts;
12 import net.sourceforge.phpdt.ltk.ui.wizards.RenameIdentifierWizard;
13 import net.sourceforge.phpeclipse.phpeditor.PHPEditor;
14 import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor;
16 import org.eclipse.core.resources.IFile;
17 import org.eclipse.core.resources.IResource;
18 import org.eclipse.core.resources.IWorkspaceRoot;
19 import org.eclipse.core.resources.ResourcesPlugin;
20 import org.eclipse.jface.action.IAction;
21 import org.eclipse.jface.dialogs.MessageDialog;
22 import org.eclipse.jface.text.BadLocationException;
23 import org.eclipse.jface.text.IDocument;
24 import org.eclipse.jface.text.ITextSelection;
25 import org.eclipse.jface.viewers.ISelection;
26 import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
27 import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
28 import org.eclipse.swt.graphics.Point;
29 import org.eclipse.swt.widgets.Shell;
30 import org.eclipse.ui.IEditorActionDelegate;
31 import org.eclipse.ui.IEditorInput;
32 import org.eclipse.ui.IEditorPart;
33 import org.eclipse.ui.IFileEditorInput;
34 import org.eclipse.ui.PlatformUI;
35 import org.eclipse.ui.ide.IDE;
36 import org.eclipse.ui.texteditor.ITextEditor;
40 * action that is triggered from the editor context menu.
44 * This action is declared in the <code>plugin.xml</code>.
48 public class RenamePHPIdentifier implements IEditorActionDelegate {
50 private ISelection selection;
52 private IEditorPart targetEditor;
54 private boolean onPHPFile;
56 private RenameIdentifierInfo info = new RenameIdentifierInfo();
58 // interface methods of IEditorActionDelegate
59 // ///////////////////////////////////////////
61 public void setActiveEditor(final IAction action,
62 final IEditorPart targetEditor) {
63 this.targetEditor = targetEditor;
65 IFile file = getFile();
67 if (file != null && PHPFileUtil.isPHPFile(file)) {
72 public void run(final IAction action) {
76 if (selection != null && selection instanceof ITextSelection) {
79 if (targetEditor != null && (targetEditor instanceof PHPEditor)) {
80 PHPEditor editor = (PHPEditor) targetEditor;
82 ITextSelection textSelection = (ITextSelection) editor
83 .getSelectionProvider().getSelection();
84 IDocument doc = editor.getDocumentProvider()
85 .getDocument(editor.getEditorInput());
86 int pos = textSelection.getOffset();
87 point = PHPWordExtractor.findWord(doc, pos);
90 word = doc.get(point.x, point.y);
91 } catch (BadLocationException e) {
96 applySelection((ITextSelection) selection, word, point);
104 public void selectionChanged(final IAction action,
105 final ISelection selection) {
106 this.selection = selection;
112 private void applySelection(final ITextSelection textSelection,
113 String word, Point point) {
115 info.setOldName(word);
116 info.setNewName(word);
117 info.setOffset(point.x);
119 info.setOldName(textSelection.getText());
120 info.setNewName(textSelection.getText());
121 info.setOffset(textSelection.getOffset());
123 info.setSourceFile(getFile());
126 private void refuse() {
127 String title = UITexts.renameProperty_refuseDlg_title;
128 String message = UITexts.renameProperty_refuseDlg_message;
129 MessageDialog.openInformation(getShell(), title, message);
132 private static boolean saveAll() {
133 IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
134 return IDE.saveAllEditors(new IResource[] { workspaceRoot }, false);
137 private void openWizard() {
138 RenameIdentifierDelegate delegate = new RenameIdentifierDelegate(info);
139 RefactoringProcessor processor = new RenamePHPProcessor(info, delegate);
140 RenameIdentifierRefactoring ref = new RenameIdentifierRefactoring(
142 RenameIdentifierWizard wizard = new RenameIdentifierWizard(ref, info);
143 RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(
146 String titleForFailedChecks = ""; //$NON-NLS-1$
147 op.run(getShell(), titleForFailedChecks);
148 } catch (final InterruptedException irex) {
149 // operation was cancelled
153 private Shell getShell() {
155 if (targetEditor != null) {
156 result = targetEditor.getSite().getShell();
158 result = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
164 private final IFile getFile() {
166 if (targetEditor instanceof ITextEditor) {
167 ITextEditor editor = (ITextEditor) targetEditor;
168 IEditorInput input = editor.getEditorInput();
169 if (input instanceof IFileEditorInput) {
170 result = ((IFileEditorInput) input).getFile();