///*******************************************************************************
// * Copyright (c) 2000, 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.search.internal.ui.text;
//
//import java.io.IOException;
//import java.lang.reflect.InvocationTargetException;
//import com.ibm.icu.text.MessageFormat;
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.List;
//import java.util.regex.Pattern;
//import java.util.regex.PatternSyntaxException;
//
//import org.eclipse.core.filebuffers.FileBuffers;
//import org.eclipse.core.filebuffers.ITextFileBuffer;
//import org.eclipse.core.filebuffers.ITextFileBufferManager;
//import org.eclipse.core.filebuffers.LocationKind;
//
//import org.eclipse.core.runtime.Assert;
//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.core.runtime.jobs.ISchedulingRule;
//
//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IResource;
//import org.eclipse.core.resources.IResourceRuleFactory;
//import org.eclipse.core.resources.IWorkspace;
//import org.eclipse.core.resources.IWorkspaceDescription;
//import org.eclipse.core.resources.IncrementalProjectBuilder;
//import org.eclipse.core.resources.ResourcesPlugin;
//
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.events.SelectionAdapter;
//import org.eclipse.swt.events.SelectionEvent;
//import org.eclipse.swt.layout.GridData;
//import org.eclipse.swt.layout.GridLayout;
//import org.eclipse.swt.widgets.Button;
//import org.eclipse.swt.widgets.Combo;
//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.jface.contentassist.SubjectControlContentAssistant;
//import org.eclipse.jface.dialogs.IDialogConstants;
//import org.eclipse.jface.dialogs.IDialogSettings;
//import org.eclipse.jface.dialogs.MessageDialog;
//import org.eclipse.jface.operation.IRunnableWithProgress;
//import org.eclipse.jface.resource.JFaceColors;
//import org.eclipse.jface.viewers.ISelection;
//import org.eclipse.jface.viewers.IStructuredSelection;
//import org.eclipse.jface.viewers.StructuredSelection;
//
//import org.eclipse.jface.text.BadLocationException;
//import org.eclipse.jface.text.DefaultInformationControl;
//import org.eclipse.jface.text.IDocument;
//import org.eclipse.jface.text.IInformationControl;
//import org.eclipse.jface.text.IInformationControlCreator;
//import org.eclipse.jface.text.Position;
//import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
//import org.eclipse.jface.text.contentassist.IContentAssistant;
//
//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.PlatformUI;
//import org.eclipse.ui.actions.GlobalBuildAction;
//import org.eclipse.ui.contentassist.ContentAssistHandler;
//import org.eclipse.ui.ide.IDE;
//import org.eclipse.ui.part.FileEditorInput;
//import org.eclipse.ui.texteditor.ITextEditor;
//
//import org.eclipse.search.ui.NewSearchUI;
//import org.eclipse.search.ui.text.Match;
//
//import org.eclipse.search.internal.core.text.PatternConstructor;
//import org.eclipse.search.internal.ui.ISearchHelpContextIds;
//import org.eclipse.search.internal.ui.Messages;
//import org.eclipse.search.internal.ui.SearchMessages;
//import org.eclipse.search.internal.ui.SearchPlugin;
//import org.eclipse.search.internal.ui.util.ExceptionHandler;
//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 implements IRunnableWithProgress {
//
// public void run(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;
// }
//
// private static final String SETTINGS_GROUP= "ReplaceDialog2"; //$NON-NLS-1$
// private static final String SETTINGS_REPLACE_WITH= "replace_with"; //$NON-NLS-1$
//
// // 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 Combo fTextField;
// private Button fReplaceWithRegex;
// 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 FileSearchPage fPage;
// private ContentAssistHandler fReplaceContentAssistHandler;
// private Label fStatusLabel;
//
// private boolean fSaved= false;
//
// protected ReplaceDialog2(Shell parentShell, IFile[] entries, FileSearchPage page) {
// super(parentShell);
// Assert.isNotNull(entries);
// Assert.isNotNull(page.getInput());
// fPage= page;
// fMarkers= new ArrayList();
// initializeMarkers(entries);
// }
//
// /* (non-Javadoc)
// * @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
// */
// protected IDialogSettings getDialogBoundsSettings() {
// return SearchPlugin.getDefault().getDialogSettingsSection("DialogBounds_ReplaceDialog2"); //$NON-NLS-1$
// }
//
// private FileSearchQuery getQuery() {
// return (FileSearchQuery) fPage.getInput().getQuery();
// }
//
// private void initializeMarkers(IFile[] entries) {
// for (int j= 0; j < entries.length; j++) {
// IFile entry = entries[j];
// Match[] matches= fPage.getDisplayedMatches(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();
//
// if (!canReplace()) {
// statusMessage(true, MessageFormat.format(SearchMessages.ReplaceDialog2_nomatches_error, new String[] { getQuery().getSearchString() }));
// }
//
// }
//
// public int open() {
// boolean wasAutobuild = false;
// try {
// wasAutobuild= disableAutobuild();
// } catch (CoreException e) {
// ExceptionHandler.handle(e, getShell(), getDialogTitle(), SearchMessages.ReplaceDialog2_error_disableAutobuild);
// }
// try {
// return super.open();
// } finally {
// if (wasAutobuild)
// try {
// restoreAutobuild();
// } catch (CoreException e1) {
// ExceptionHandler.handle(e1, getShell(), getDialogTitle(), SearchMessages.ReplaceDialog2_error_restoreAutobuild);
// return CANCEL;
// }
// }
// }
//
// private void restoreAutobuild() throws CoreException {
// // this is only called if autobuild was on before.
// IWorkspace workspace= ResourcesPlugin.getWorkspace();
// IWorkspaceDescription description = workspace.getDescription();
// description.setAutoBuilding(true);
// workspace.setDescription(description);
//
// if (fSaved) {
// new GlobalBuildAction(fPage.getSite().getWorkbenchWindow(), IncrementalProjectBuilder.INCREMENTAL_BUILD).run();
// }
// }
//
// private boolean disableAutobuild() throws CoreException {
// IWorkspace workspace = ResourcesPlugin.getWorkspace();
// boolean autobuild = workspace.isAutoBuilding();
// if (autobuild) {
// IWorkspaceDescription description = workspace.getDescription();
// description.setAutoBuilding(false);
// workspace.setDescription(description);
// }
// return autobuild;
// }
//
// protected Control createPageArea(Composite parent) {
// initializeDialogUnits(parent);
// PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ISearchHelpContextIds.REPLACE_DIALOG);
// Composite result= new Composite(parent, SWT.NULL);
// GridLayout layout= new GridLayout();
// result.setLayout(layout);
// layout.numColumns= 2;
//
// layout.marginHeight = 0;
// layout.marginWidth = 0;
//
// initializeDialogUnits(result);
//
// FileSearchQuery query= getQuery();
//
// Label label= new Label(result, SWT.NONE);
// label.setText(SearchMessages.ReplaceDialog_replace_label);
// Text clabel= new Text(result, SWT.BORDER | SWT.READ_ONLY);
// clabel.setText(query.getSearchString());
// GridData gd= new GridData(GridData.FILL_HORIZONTAL);
// gd.widthHint= convertWidthInCharsToPixels(50);
// clabel.setLayoutData(gd);
//
//
// label= new Label(result, SWT.NONE);
// label.setText(SearchMessages.ReplaceDialog_with_label);
// fTextField= new Combo(result, SWT.DROP_DOWN);
// gd= new GridData(GridData.FILL_HORIZONTAL);
// gd.widthHint= convertWidthInCharsToPixels(50);
// fTextField.setLayoutData(gd);
// fTextField.setFocus();
//
// IDialogSettings settings= SearchPlugin.getDefault().getDialogSettings().getSection(SETTINGS_GROUP);
// if (settings != null) {
// String[] previousReplaceWith= settings.getArray(SETTINGS_REPLACE_WITH);
// if (previousReplaceWith != null) {
// fTextField.setItems(previousReplaceWith);
// fTextField.select(0);
// }
// }
//
// new Label(result, SWT.NONE);
// fReplaceWithRegex= new Button(result, SWT.CHECK);
// fReplaceWithRegex.setText(SearchMessages.ReplaceDialog_isRegex_label);
// fReplaceWithRegex.addSelectionListener(new SelectionAdapter() {
// public void widgetSelected(SelectionEvent e) {
// setContentAssistsEnablement(fReplaceWithRegex.getSelection());
// }
// });
// if (query.isRegexSearch()) {
// fReplaceWithRegex.setSelection(true);
// } else {
// fReplaceWithRegex.setSelection(false);
// fReplaceWithRegex.setEnabled(false);
// }
//
//
// fStatusLabel= new Label(result, SWT.NULL);
// gd= new GridData(GridData.FILL_HORIZONTAL);
// gd.verticalAlignment= SWT.BOTTOM;
// gd.horizontalSpan= 2;
// fStatusLabel.setLayoutData(gd);
//
// setContentAssistsEnablement(fReplaceWithRegex.getSelection());
//
// applyDialogFont(result);
// return result;
// }
//
// protected Control createButtonBar(Composite parent) {
// Composite composite= new Composite(parent, SWT.NONE);
// GridLayout layout= new GridLayout();
// layout.numColumns= 0; // createActionButton increments
// layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
// layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
// layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
// layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
//
// composite.setLayout(layout);
// composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
//
// fReplaceButton= createActionButton(composite, REPLACE, SearchMessages.ReplaceDialog_replace, true);
// fReplaceAllInFileButton= createActionButton(composite, REPLACE_ALL_IN_FILE, SearchMessages.ReplaceDialog_replaceAllInFile, false);
//
// Label filler= new Label(composite, SWT.NONE);
// filler.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
//
// fReplaceAllButton= createActionButton(composite, REPLACE_ALL, SearchMessages.ReplaceDialog_replaceAll, false);
// fSkipButton= createActionButton(composite, SKIP, SearchMessages.ReplaceDialog_skip, false);
// fSkipFileButton= createActionButton(composite, SKIP_FILE, SearchMessages.ReplaceDialog_skipFile, false);
//
// filler= new Label(composite, SWT.NONE);
// filler.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL));
// super.createButtonsForButtonBar(composite); // cancel button
//
// layout.numColumns= 4; // createActionButton increments
//
// return composite;
// }
//
// private void enableButtons() {
// fSkipButton.setEnabled(hasNextMarker());
// fSkipFileButton.setEnabled(hasNextFile());
// fReplaceButton.setEnabled(canReplace());
// fReplaceAllInFileButton.setEnabled(canReplace());
// fReplaceAllButton.setEnabled(canReplace());
// }
//
// protected void buttonPressed(int buttonId) {
// if (buttonId == IDialogConstants.CANCEL_ID) {
// super.buttonPressed(buttonId);
// return;
// }
//
//
// final String replaceText= fTextField.getText();
// statusMessage(false, ""); //$NON-NLS-1$
// try {
// switch (buttonId) {
// case SKIP :
// skip();
// break;
// case SKIP_FILE :
// skipFile();
// break;
// case REPLACE :
// run(new ReplaceOperation() {
// protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException {
// replace(pm, replaceText);
// }
// }, (IResource) getCurrentMarker().getElement());
// gotoCurrentMarker();
// break;
// case REPLACE_ALL_IN_FILE :
// run(new ReplaceOperation() {
// protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException {
// replaceInFile(pm, replaceText);
// }
// }, (IResource) getCurrentMarker().getElement());
// gotoCurrentMarker();
// break;
// case REPLACE_ALL :
// run(new ReplaceOperation() {
// protected void doReplace(IProgressMonitor pm) throws BadLocationException, CoreException {
// replaceAll(pm, replaceText);
// }
// }, ResourcesPlugin.getWorkspace().getRoot());
// gotoCurrentMarker();
// break;
// default : {
// }
// }
// } catch (InvocationTargetException e) {
// Throwable targetException= e.getTargetException();
// if (targetException instanceof PatternSyntaxException) {
// String format= SearchMessages.ReplaceDialog2_regexError_format;
// String message= MessageFormat.format(format, new Object[] { targetException.getLocalizedMessage() });
// statusMessage(true, message);
// } else {
// String message= Messages.format(SearchMessages.ReplaceDialog_error_unable_to_replace, ((IFile)getCurrentMarker().getElement()).getName());
// ExceptionHandler.handle(e, getParentShell(), getDialogTitle(), message);
// }
// } catch (InterruptedException e) {
// // means operation canceled
// } finally {
// if (!canReplace())
// close();
// else {
// enableButtons();
// }
// }
// }
//
// private void run(ReplaceOperation operation, IResource resource) throws InvocationTargetException, InterruptedException {
// IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
// ISchedulingRule rule= ruleFactory.modifyRule(resource);
//
// PlatformUI.getWorkbench().getProgressService().runInUI(this, operation, rule);
// }
//
// private Match getCurrentMarker() {
// return (Match)fMarkers.get(0);
// }
//
// private void replace(IProgressMonitor pm, String replacementText) throws BadLocationException, CoreException {
// Match marker= getCurrentMarker();
// pm.beginTask(SearchMessages.ReplaceDialog_task_replace, 10);
// 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(Messages.format(SearchMessages.ReplaceDialog_task_replaceInFile, ((IFile)firstMarker.getElement()).getFullPath().toOSString()), 4);
// replaceInFile(pm, (IFile) firstMarker.getElement(), replacementText, markers);
// }
//
// private void replaceAll(IProgressMonitor pm, String replacementText) throws BadLocationException, CoreException {
// int resourceCount= countResources();
// pm.beginTask(SearchMessages.ReplaceDialog_task_replace_replaceAll, resourceCount);
// try {
// while (fMarkers.size() > 0) {
// replaceInFile(new SubProgressMonitor(pm, 1, 0), replacementText);
// }
// } finally {
// 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 {
// Pattern pattern= null;
// FileSearchQuery query= getQuery();
// if (query.isRegexSearch()) {
// pattern= createReplacePattern(query);
// }
// try {
// 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(), LocationKind.IFILE, new SubProgressMonitor(pm, 1));
// ITextFileBuffer fb= bm.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE);
// boolean wasDirty= fb.isDirty();
// IDocument doc= fb.getDocument();
// for (int i= 0; i < markers.length; i++) {
// PositionTracker tracker= InternalSearchUI.getInstance().getPositionTracker();
// Match match= markers[i];
// int offset= match.getOffset();
// int length= match.getLength();
// Position currentPosition= tracker.getCurrentPosition(match);
// if (currentPosition != null) {
// offset= currentPosition.offset;
// length= currentPosition.length;
// }
// String originalText= doc.get(offset, length);
// String replacementString= computeReplacementString(pattern, originalText, replacementText);
// doc.replace(offset, length, replacementString);
// fMarkers.remove(match);
// fPage.getInput().removeMatch(match);
// }
// if (!wasDirty) {
// fb.commit(new SubProgressMonitor(pm, 1), true);
// fSaved= true;
// }
// } finally {
// bm.disconnect(file.getFullPath(), LocationKind.IFILE, new SubProgressMonitor(pm, 1));
// }
// } finally {
// pm.done();
// }
// }
//
// private Pattern createReplacePattern(FileSearchQuery query) {
// return PatternConstructor.createPattern(query.getSearchString(), true, true, query.isCaseSensitive(), false);
// }
//
// private String computeReplacementString(Pattern pattern, String originalText, String replacementText) {
// if (pattern != null) {
// try {
// return pattern.matcher(originalText).replaceFirst(replacementText);
// } catch (IndexOutOfBoundsException ex) {
// throw new PatternSyntaxException(ex.getLocalizedMessage(), replacementText, -1);
// }
// }
// return replacementText;
// }
//
// private int askForSkip(final IFile file) {
//
// String message= Messages.format(SearchMessages.ReadOnlyDialog_message, file.getFullPath().toOSString());
// String[] buttonLabels= null;
// boolean showSkip= countResources() > 1;
// if (showSkip) {
// String skipLabel= SearchMessages.ReadOnlyDialog_skipFile;
// String skipAllLabel= SearchMessages.ReadOnlyDialog_skipAll;
// 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.ReplaceDialog_dialog_title;
// }
//
// 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 (NewSearchUI.reuseEditor())
// editor= openEditorReuse(marker);
// else
// editor= openEditorNoReuse(marker);
// Position p= InternalSearchUI.getInstance().getPositionTracker().getCurrentPosition(marker);
// if (p != null)
// editor.selectAndReveal(p.getOffset(), p.getLength());
// else
// editor.selectAndReveal(marker.getOffset(), marker.getLength());
// if (focusControl != null && !focusControl.isDisposed())
// focusControl.setFocus();
// } catch (PartInitException e) {
// String message= Messages.format(SearchMessages.ReplaceDialog_error_unable_to_open_text_editor, ((IFile)marker.getElement()).getName());
// MessageDialog.openError(getParentShell(), getDialogTitle(), message);
// }
// }
// }
//
// private void selectEntry(Match marker) {
// ISelection sel= fPage.getViewer().getSelection();
// if (!(sel instanceof IStructuredSelection))
// return;
// IStructuredSelection ss= (IStructuredSelection) sel;
// IFile file= (IFile) marker.getElement();
// if (ss.size() == 1 && file.equals(ss.getFirstElement()))
// return;
// fPage.getViewer().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;
// }
// 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;
// }
// 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;
// }
//
// public static SubjectControlContentAssistant createContentAssistant(boolean isFind) {
// final SubjectControlContentAssistant contentAssistant= new SubjectControlContentAssistant();
//
// contentAssistant.setRestoreCompletionProposalSize(SearchPlugin.getDefault().getDialogSettings());
//
// IContentAssistProcessor processor= new RegExContentAssistProcessor(isFind);
// contentAssistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE);
//
// contentAssistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
// contentAssistant.setInformationControlCreator(new IInformationControlCreator() {
// /*
// * @see org.eclipse.jface.text.IInformationControlCreator#createInformationControl(org.eclipse.swt.widgets.Shell)
// */
// public IInformationControl createInformationControl(Shell parent) {
// return new DefaultInformationControl(parent);
// }});
//
// return contentAssistant;
// }
//
// private void setContentAssistsEnablement(boolean enable) {
// if (enable) {
// if (fReplaceContentAssistHandler == null) {
// fReplaceContentAssistHandler= ContentAssistHandler.createHandlerForCombo(fTextField, createContentAssistant(false));
// }
// fReplaceContentAssistHandler.setEnabled(true);
//
// } else {
// if (fReplaceContentAssistHandler == null)
// return;
// fReplaceContentAssistHandler.setEnabled(false);
// }
// }
//
// private void statusMessage(boolean error, String message) {
// fStatusLabel.setText(message);
//
// if (error)
// fStatusLabel.setForeground(JFaceColors.getErrorText(fStatusLabel.getDisplay()));
// else
// fStatusLabel.setForeground(null);
//
// if (error)
// getShell().getDisplay().beep();
// }
//
//
// /* (non-Javadoc)
// * @see org.eclipse.jface.dialogs.Dialog#close()
// */
// public boolean close() {
// String[] items= fTextField.getItems();
// ArrayList history= new ArrayList();
// history.add(fTextField.getText());
// int historySize= Math.min(items.length, 6);
// for (int i= 0; i < historySize; i++) {
// String curr= items[i];
// if (!history.contains(curr)) {
// history.add(curr);
// }
// }
// IDialogSettings settings= SearchPlugin.getDefault().getDialogSettings().addNewSection(SETTINGS_GROUP);
// settings.put(SETTINGS_REPLACE_WITH, (String[]) history.toArray(new String[history.size()]));
// return super.close();
// }
//
//
//}