diff options
Diffstat (limited to 'org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java')
-rw-r--r-- | org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java | 587 |
1 files changed, 0 insertions, 587 deletions
diff --git a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java b/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java deleted file mode 100644 index bb66174726e..00000000000 --- a/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java +++ /dev/null @@ -1,587 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.search.internal.ui.text; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubProgressMonitor; - -import org.eclipse.swt.SWT; -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.core.filebuffers.FileBuffers; -import org.eclipse.core.filebuffers.ITextFileBuffer; -import org.eclipse.core.filebuffers.ITextFileBufferManager; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.StructuredViewer; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.Position; - -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IReusableEditor; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.ide.IDE; -import org.eclipse.ui.part.FileEditorInput; -import org.eclipse.ui.texteditor.ITextEditor; - -import org.eclipse.search.ui.SearchUI; -import org.eclipse.search.ui.text.AbstractTextSearchResult; -import org.eclipse.search.ui.text.Match; - -import org.eclipse.search.internal.ui.SearchMessages; -import org.eclipse.search.internal.ui.SearchPlugin; -import org.eclipse.search.internal.ui.util.ExtendedDialogWindow; - -import org.eclipse.search2.internal.ui.InternalSearchUI; -import org.eclipse.search2.internal.ui.text.PositionTracker; - -class ReplaceDialog2 extends ExtendedDialogWindow { - - private abstract static class ReplaceOperation extends WorkspaceModifyOperation { - ReplaceOperation(IResource lock) { - super(lock); - } - ReplaceOperation() { - super(); - } - public void execute(IProgressMonitor monitor) throws InvocationTargetException { - try { - doReplace(monitor); - } catch (BadLocationException e) { - throw new InvocationTargetException(e); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (IOException e) { - throw new InvocationTargetException(e); - } - } - - protected abstract void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException, IOException; - } - - // various widget related constants - private static final int REPLACE= IDialogConstants.CLIENT_ID + 1; - private static final int REPLACE_ALL_IN_FILE= IDialogConstants.CLIENT_ID + 2; - private static final int REPLACE_ALL= IDialogConstants.CLIENT_ID + 3; - private static final int SKIP= IDialogConstants.CLIENT_ID + 4; - private static final int SKIP_FILE= IDialogConstants.CLIENT_ID + 5; - private static final int SKIP_ALL= IDialogConstants.CLIENT_ID + 6; - - // Widgets - private Text fTextField; - private Button fReplaceButton; - private Button fReplaceAllInFileButton; - private Button fReplaceAllButton; - private Button fSkipButton; - private Button fSkipFileButton; - - private List fMarkers; - private boolean fSkipReadonly= false; - - // reuse editors stuff - private IReusableEditor fEditor; - private AbstractTextSearchResult fSearchResult; - private StructuredViewer fViewer; - - protected ReplaceDialog2(Shell parentShell, IFile[] entries, StructuredViewer viewer, AbstractTextSearchResult result) { - super(parentShell); - Assert.isNotNull(entries); - Assert.isNotNull(result); - fSearchResult= result; - fMarkers= new ArrayList(); - fViewer= viewer; - initializeMarkers(entries); - } - - private void initializeMarkers(IFile[] entries) { - for (int j= 0; j < entries.length; j++) { - IFile entry = entries[j]; - Match[] matches= fSearchResult.getMatches(entry); - for (int i= 0; i < matches.length; i++) { - fMarkers.add(matches[i]); - } - } - } - - // widget related stuff ----------------------------------------------------------- - public void create() { - super.create(); - Shell shell= getShell(); - shell.setText(getDialogTitle()); - gotoCurrentMarker(); - enableButtons(); - } - - protected Control createPageArea(Composite parent) { - Composite result= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - result.setLayout(layout); - layout.numColumns= 2; - - layout.marginHeight = - convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); - layout.marginWidth = - convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); - layout.verticalSpacing = - convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); - layout.horizontalSpacing = - convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); - - initializeDialogUnits(result); - - Label label= new Label(result, SWT.NONE); - label.setText(SearchMessages.getString("ReplaceDialog.replace_label")); //$NON-NLS-1$ - Text clabel= new Text(result, SWT.BORDER); - clabel.setEnabled(false); - clabel.setText(((FileSearchQuery)fSearchResult.getQuery()).getSearchString()); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint= convertWidthInCharsToPixels(50); - clabel.setLayoutData(gd); - - - label= new Label(result, SWT.NONE); - label.setText(SearchMessages.getString("ReplaceDialog.with_label")); //$NON-NLS-1$ - fTextField= new Text(result, SWT.BORDER); - gd= new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint= convertWidthInCharsToPixels(50); - fTextField.setLayoutData(gd); - fTextField.setFocus(); - - - new Label(result, SWT.NONE); - Button replaceWithRegex= new Button(result, SWT.CHECK); - replaceWithRegex.setText(SearchMessages.getString("ReplaceDialog.isRegex.label")); //$NON-NLS-1$ - replaceWithRegex.setEnabled(false); - replaceWithRegex.setSelection(false); - - applyDialogFont(result); - return result; - } - - protected void createButtonsForButtonBar(Composite parent) { - fReplaceButton= createButton(parent, REPLACE, SearchMessages.getString("ReplaceDialog.replace"), true); //$NON-NLS-1$ - fReplaceAllInFileButton= createButton(parent, REPLACE_ALL_IN_FILE, SearchMessages.getString("ReplaceDialog.replaceAllInFile"), false); //$NON-NLS-1$ - - Label filler= new Label(parent, SWT.NONE); - filler.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); - - fReplaceAllButton= createButton(parent, REPLACE_ALL, SearchMessages.getString("ReplaceDialog.replaceAll"), false); //$NON-NLS-1$ - fSkipButton= createButton(parent, SKIP, SearchMessages.getString("ReplaceDialog.skip"), false); //$NON-NLS-1$ - fSkipFileButton= createButton(parent, SKIP_FILE, SearchMessages.getString("ReplaceDialog.skipFile"), false); //$NON-NLS-1$ - - filler= new Label(parent, SWT.NONE); - filler.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); - super.createButtonsForButtonBar(parent); - ((GridLayout)parent.getLayout()).numColumns= 4; - } - - private void enableButtons() { - fSkipButton.setEnabled(hasNextMarker()); - fSkipFileButton.setEnabled(hasNextFile()); - fReplaceButton.setEnabled(canReplace()); - fReplaceAllInFileButton.setEnabled(canReplace()); - fReplaceAllButton.setEnabled(canReplace()); - } - - protected void buttonPressed(int buttonId) { - final String replaceText= fTextField.getText(); - try { - switch (buttonId) { - case SKIP : - skip(); - break; - case SKIP_FILE : - skipFile(); - break; - case REPLACE : - run(false, true, new ReplaceOperation((IResource) getCurrentMarker().getElement()) { - protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException { - replace(pm, replaceText); - } - }); - gotoCurrentMarker(); - break; - case REPLACE_ALL_IN_FILE : - run(false, true, new ReplaceOperation((IResource) getCurrentMarker().getElement()) { - protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException { - replaceInFile(pm, replaceText); - - } - }); - gotoCurrentMarker(); - break; - case REPLACE_ALL : - run(false, true, new ReplaceOperation() { - protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException { - replaceAll(pm, replaceText); - } - }); - gotoCurrentMarker(); - break; - default : - { - super.buttonPressed(buttonId); - return; - } - } - } catch (InvocationTargetException e) { - SearchPlugin.log(e); - String message= SearchMessages.getFormattedString("ReplaceDialog.error.unable_to_replace", ((IFile)getCurrentMarker().getElement()).getName()); //$NON-NLS-1$ - MessageDialog.openError(getParentShell(), getDialogTitle(), message); - } catch (InterruptedException e) { - // means operation canceled - } - if (!hasNextMarker() && !hasNextFile() && !canReplace()) - close(); - else { - enableButtons(); - } - } - - private Match getCurrentMarker() { - return (Match)fMarkers.get(0); - } - - private void replace(IProgressMonitor pm, String replacementText) throws BadLocationException, CoreException { - Match marker= getCurrentMarker(); - pm.beginTask(SearchMessages.getString("ReplaceDialog.task.replace"), 10); //$NON-NLS-1$ - replaceInFile(pm, (IFile) marker.getElement(), replacementText, new Match[]{marker}); - } - - private void replaceInFile(IProgressMonitor pm, String replacementText) throws BadLocationException, CoreException { - Match firstMarker= getCurrentMarker(); - Match[] markers= collectMarkers((IFile)firstMarker.getElement()); - pm.beginTask(SearchMessages.getFormattedString("ReplaceDialog.task.replaceInFile", ((IFile)firstMarker.getElement()).getFullPath().toOSString()), 4); //$NON-NLS-1$ - replaceInFile(pm, (IFile) firstMarker.getElement(), replacementText, markers); - } - - private void replaceAll(IProgressMonitor pm, String replacementText) throws BadLocationException, CoreException { - int resourceCount= countResources(); - pm.beginTask(SearchMessages.getString("ReplaceDialog.task.replace.replaceAll"), resourceCount); //$NON-NLS-1$ - while (fMarkers.size() > 0) { - replaceInFile(new SubProgressMonitor(pm, 1, 0), replacementText); - } - pm.done(); - } - - private void replaceInFile(final IProgressMonitor pm, final IFile file, final String replacementText, final Match[] markers) throws BadLocationException, CoreException { - if (pm.isCanceled()) - throw new OperationCanceledException(); - doReplaceInFile(pm, file, replacementText, markers); - } - - private void doReplaceInFile(IProgressMonitor pm, IFile file, String replacementText, final Match[] markers) throws BadLocationException, CoreException { - try { - if (file.isReadOnly()) { - file.getWorkspace().validateEdit(new IFile[]{file}, null); - } - if (file.isReadOnly()) { - if (fSkipReadonly) { - skipFile(); - return; - } - int rc= askForSkip(file); - switch (rc) { - case CANCEL : - throw new OperationCanceledException(); - case SKIP_FILE : - skipFile(); - return; - case SKIP_ALL : - fSkipReadonly= true; - skipFile(); - return; - } - } - ITextFileBufferManager bm= FileBuffers.getTextFileBufferManager(); - try { - bm.connect(file.getFullPath(), new SubProgressMonitor(pm, 1)); - ITextFileBuffer fb= bm.getTextFileBuffer(file.getFullPath()); - boolean wasDirty= fb.isDirty(); - IDocument doc= fb.getDocument(); - for (int i= 0; i < markers.length; i++) { - PositionTracker tracker= InternalSearchUI.getInstance().getPositionTracker(); - int offset= markers[i].getOffset(); - int length= markers[i].getLength(); - Position currentPosition= tracker.getCurrentPosition(markers[i]); - if (currentPosition != null) { - offset= currentPosition.offset; - length= currentPosition.length; - } - doc.replace(offset, length, replacementText); - fMarkers.remove(0); - fSearchResult.removeMatch(markers[i]); - } - if (!wasDirty) - fb.commit(new SubProgressMonitor(pm, 1), true); - } finally { - bm.disconnect(file.getFullPath(), new SubProgressMonitor(pm, 1)); - } - } finally { - pm.done(); - } - } - - private int askForSkip(final IFile file) { - - String message= SearchMessages.getFormattedString("ReadOnlyDialog.message", file.getFullPath().toOSString()); //$NON-NLS-1$ - String[] buttonLabels= null; - boolean showSkip= countResources() > 1; - if (showSkip) { - String skipLabel= SearchMessages.getString("ReadOnlyDialog.skipFile"); //$NON-NLS-1$ - String skipAllLabel= SearchMessages.getString("ReadOnlyDialog.skipAll"); //$NON-NLS-1$ - buttonLabels= new String[]{skipLabel, skipAllLabel, IDialogConstants.CANCEL_LABEL}; - } else { - buttonLabels= new String[]{IDialogConstants.CANCEL_LABEL}; - - } - - MessageDialog msd= new MessageDialog(getShell(), getShell().getText(), null, message, MessageDialog.ERROR, buttonLabels, 0); - int rc= msd.open(); - switch (rc) { - case 0 : - return showSkip ? SKIP_FILE : CANCEL; - case 1 : - return SKIP_ALL; - default : - return CANCEL; - } - } - - private String getDialogTitle() { - return SearchMessages.getString("ReplaceDialog.dialog.title"); //$NON-NLS-1$ - } - - private void skip() { - fMarkers.remove(0); - Assert.isTrue(fMarkers.size() > 0); - gotoCurrentMarker(); - } - - private void skipFile() { - Match currentMarker= getCurrentMarker(); - if (currentMarker == null) - return; - IResource currentFile= (IResource) currentMarker.getElement(); - while (fMarkers.size() > 0 && getCurrentMarker().getElement().equals(currentFile)) - fMarkers.remove(0); - gotoCurrentMarker(); - } - - private void gotoCurrentMarker() { - if (fMarkers.size() > 0) { - Match marker= getCurrentMarker(); - Control focusControl= getShell().getDisplay().getFocusControl(); - try { - selectEntry(marker); - ITextEditor editor= null; - if (SearchUI.reuseEditor()) - editor= openEditorReuse(marker); - else - editor= openEditorNoReuse(marker); - editor.selectAndReveal(marker.getOffset(), marker.getLength()); - if (focusControl != null && !focusControl.isDisposed()) - focusControl.setFocus(); - } catch (PartInitException e) { - String message= SearchMessages.getFormattedString("ReplaceDialog.error.unable_to_open_text_editor", ((IFile)marker.getElement()).getName()); //$NON-NLS-1$ - MessageDialog.openError(getParentShell(), getDialogTitle(), message); - } - } - } - - private void selectEntry(Match marker) { - ISelection sel= fViewer.getSelection(); - if (!(sel instanceof IStructuredSelection)) - return; - IStructuredSelection ss= (IStructuredSelection) sel; - IFile file= (IFile) marker.getElement(); - if (ss.size() == 1 && file.equals(ss.getFirstElement())) - return; - fViewer.setSelection(new StructuredSelection(marker.getElement())); - } - - // opening editors ------------------------------------------ - private ITextEditor openEditorNoReuse(Match marker) throws PartInitException { - IFile file= (IFile) marker.getElement(); - IWorkbenchPage activePage= SearchPlugin.getActivePage(); - if (activePage == null) - return null; - ITextEditor textEditor= showOpenTextEditor(activePage, file); - if (textEditor != null) - return textEditor; - return openNewTextEditor(file, activePage); - } - - private ITextEditor openNewTextEditor(IFile file, IWorkbenchPage activePage) throws PartInitException { - IEditorDescriptor desc= IDE.getDefaultEditor(file); - if (desc != null) { - String editorID= desc.getId(); - IEditorPart editor; - if (desc.isInternal()) { - editor= activePage.openEditor(new FileEditorInput(file), editorID); - if (editor instanceof ITextEditor) { - if (editor instanceof IReusableEditor) - fEditor= (IReusableEditor) editor; - return (ITextEditor)editor; - } else - activePage.closeEditor(editor, false); - } - } - IEditorPart editor= activePage.openEditor(new FileEditorInput(file), "org.eclipse.ui.DefaultTextEditor"); //$NON-NLS-1$ - return (ITextEditor)editor; - } - - private ITextEditor openEditorReuse(Match marker) throws PartInitException { - IWorkbenchPage page= SearchPlugin.getActivePage(); - IFile file= (IFile) marker.getElement(); - if (page == null) - return null; - - ITextEditor textEditor= showOpenTextEditor(page, file); - if (textEditor != null) - return textEditor; - - String editorId= null; - IEditorDescriptor desc= IDE.getDefaultEditor(file); - if (desc != null && desc.isInternal()) - editorId= desc.getId(); - - boolean isOpen= isEditorOpen(page, fEditor); - - boolean canBeReused= isOpen && !fEditor.isDirty() && !isPinned(fEditor); - boolean showsSameInputType= fEditor != null && (editorId == null || fEditor.getSite().getId().equals(editorId)); - - if (canBeReused) { - if (showsSameInputType) { - fEditor.setInput(new FileEditorInput(file)); - page.bringToTop(fEditor); - return (ITextEditor) fEditor; - } else { - page.closeEditor(fEditor, false); - fEditor= null; - } - } - return openNewTextEditor(file, page); - } - - private boolean isEditorOpen(IWorkbenchPage page, IEditorPart editor) { - if (editor != null) { - IEditorReference[] parts= page.getEditorReferences(); - int i= 0; - for (int j = 0; j < parts.length; j++) { - if (editor == parts[i++].getEditor(false)) - return true; - } - } - return false; - } - - private ITextEditor showOpenTextEditor(IWorkbenchPage page, IFile file) { - IEditorPart editor= page.findEditor(new FileEditorInput(file)); - if (editor instanceof ITextEditor) { - page.bringToTop(editor); - return (ITextEditor) editor; - } - return null; - } - - private boolean isPinned(IEditorPart editor) { - if (editor == null) - return false; - - IEditorReference[] editorRefs= editor.getEditorSite().getPage().getEditorReferences(); - int i= 0; - while (i < editorRefs.length) { - if (editor.equals(editorRefs[i].getEditor(false))) - return editorRefs[i].isPinned(); - i++; - } - return false; - } - - // resource related ------------------------------------------------------------- - /** - * @return the number of resources referred to in fMarkers - */ - private int countResources() { - IResource r= null; - int count= 0; - for (Iterator elements= fMarkers.iterator(); elements.hasNext(); ) { - Match element= (Match)elements.next(); - if (!element.getElement().equals(r)) { - count++; - r= (IResource) element.getElement(); - } - } - return count; - } - - private Match[] collectMarkers(IFile resource) { - List matching= new ArrayList(); - for (int i= 0; i < fMarkers.size(); i++) { - Match marker= (Match)fMarkers.get(i); - if (!resource.equals(marker.getElement())) - break; - matching.add(marker); - } - Match[] markers= new Match[matching.size()]; - return (Match[])matching.toArray(markers); - } - - - // some queries ------------------------------------------------------------- - private boolean hasNextMarker() { - return fMarkers.size() > 1; - } - - private boolean hasNextFile() { - if (!hasNextMarker()) - return false; - IResource currentFile= (IResource) getCurrentMarker().getElement(); - for (int i= 0; i < fMarkers.size(); i++) { - if (!((Match)fMarkers.get(i)).getElement().equals(currentFile)) - return true; - } - return false; - } - - private boolean canReplace() { - return fMarkers.size() > 0; - } -}
\ No newline at end of file |