blob: 1a0d38c53c421ccfed8afcbab30046a21729c936 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 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.team.internal.ccvs.ui.wizards;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.client.Diff;
import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
import org.eclipse.team.internal.ccvs.ui.ICVSUIConstants;
import org.eclipse.team.internal.ccvs.ui.IHelpContextIds;
import org.eclipse.team.internal.ccvs.ui.Policy;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.internal.ide.misc.ContainerContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* A wizard for creating a patch file by running the CVS diff command.
*/
public class GenerateDiffFileWizard extends Wizard {
/**
* Page to select a patch file. Overriding validatePage was necessary to allow
* entering a file name that already exists.
*/
private class LocationPage extends WizardPage {
/**
* The possible locations to save a patch.
*/
public final static int CLIPBOARD = 1;
public final static int FILESYSTEM = 2;
public final static int WORKSPACE = 3;
/**
* GUI controls for clipboard (cp), filesystem (fs) and workspace (ws).
*/
private Button cpRadio;
private Button fsRadio;
protected Text fsPathText;
private Button fsBrowseButton;
private Button wsRadio;
protected TreeViewer wsTreeViewer;
private Text wsFilenameText;
/**
* State information of this page, updated by the listeners.
*/
protected boolean pageValid;
protected IContainer wsSelectedContainer;
protected int selectedLocation;
/**
* The default values store used to initialize the selections.
*/
private final DefaultValuesStore store;
LocationPage(String pageName, String title, ImageDescriptor image, DefaultValuesStore store) {
super(pageName, title, image);
setPageComplete(false);
this.store= store;
}
/**
* Allow the user to finish if a valid file has been entered.
*/
protected boolean validatePage() {
switch (selectedLocation) {
case WORKSPACE:
pageValid= validateWorkspaceLocation();
break;
case FILESYSTEM:
pageValid= validateFilesystemLocation();
break;
case CLIPBOARD:
pageValid= true;
break;
}
/**
* Avoid draw flicker by clearing error message
* if all is valid.
*/
if (pageValid) {
setMessage(null);
setErrorMessage(null);
}
setPageComplete(pageValid);
return pageValid;
}
/**
* The following conditions must hold for the file system location
* to be valid:
* - the path must be valid and non-empty
* - the path must be absolute
* - the specified file must be of type file
* - the parent must exist (new folders can be created via the browse button)
*/
private boolean validateFilesystemLocation() {
final String pathString= fsPathText.getText().trim();
if (pathString.length() == 0 || !new Path("").isValidPath(pathString)) { //$NON-NLS-1$
setErrorMessage(Policy.bind("GenerateDiffFileWizard.0")); //$NON-NLS-1$
return false;
}
final File file= new File(pathString);
if (!file.isAbsolute()) {
setErrorMessage(Policy.bind("GenerateDiffFileWizard.0")); //$NON-NLS-1$
return false;
}
if (file.isDirectory()) {
setErrorMessage(Policy.bind("GenerateDiffFileWizard.2")); //$NON-NLS-1$
return false;
}
if (pathString.endsWith("/") || pathString.endsWith("\\")) { //$NON-NLS-1$//$NON-NLS-2$
setErrorMessage(Policy.bind("GenerateDiffFileWizard.3")); //$NON-NLS-1$
return false;
}
final File parent= file.getParentFile();
if (!(parent.exists() && parent.isDirectory())) {
setErrorMessage(Policy.bind("GenerateDiffFileWizard.3")); //$NON-NLS-1$
return false;
}
return true;
}
/**
* The following conditions must hold for the file system location to be valid:
* - a parent must be selected in the workspace tree view
* - the resource name must be valid
*/
private boolean validateWorkspaceLocation() {
if (wsSelectedContainer == null) {
setErrorMessage(Policy.bind("GenerateDiffFileWizard.4")); //$NON-NLS-1$
return false;
}
final String filename= wsFilenameText.getText().trim();
if (!new Path("").isValidSegment(filename)) { //$NON-NLS-1$
setErrorMessage(Policy.bind("GenerateDiffFileWizard.5")); //$NON-NLS-1$
return false;
}
return true;
}
/**
* Answers a full path to a file system file or <code>null</code> if the user
* selected to save the patch in the clipboard.
*/
public File getFile() {
if (pageValid && selectedLocation == FILESYSTEM) {
return new File(fsPathText.getText().trim());
}
if (pageValid && selectedLocation == WORKSPACE) {
final String filename= wsFilenameText.getText().trim();
final IFile file= wsSelectedContainer.getFile(new Path(filename));
return file.getLocation().toFile();
}
return null;
}
/**
* Get the selected workspace resource if the patch is to be saved in the
* workspace, or null otherwise.
*/
public IResource getResource() {
if (pageValid && selectedLocation == WORKSPACE) {
final String filename= wsFilenameText.getText().trim();
return wsSelectedContainer.getFile(new Path(null, filename));
}
return null;
}
/**
* Allow the user to chose to save the patch to the workspace or outside
* of the workspace.
*/
public void createControl(Composite parent) {
final Composite composite= new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
setControl(composite);
initializeDialogUnits(composite);
// set F1 help
WorkbenchHelp.setHelp(composite, IHelpContextIds.PATCH_SELECTION_PAGE);
setupClipboardControls(composite);
setupFilesystemControls(composite);
setupWorkspaceControls(composite);
Dialog.applyDialogFont(parent);
initializeDefaultValues();
/**
* Ensure the page is in a valid state.
*/
if (!validatePage()) {
store.storeRadioSelection(CLIPBOARD);
initializeDefaultValues();
validatePage();
}
pageValid= true;
updateEnablements();
setupListeners();
}
/**
* Setup the controls for the workspace option.
*/
private void setupWorkspaceControls(Composite composite) {
wsRadio= new Button(composite, SWT.RADIO);
wsRadio.setText(Policy.bind("Save_In_Workspace_7")); //$NON-NLS-1$
new Label(composite, SWT.LEFT).setText(Policy.bind("Select_a_folder_then_type_in_the_file_name__8")); //$NON-NLS-1$
wsTreeViewer = new TreeViewer(composite, SWT.BORDER);
final GridData gd= new GridData(SWT.FILL, SWT.FILL, true, true);
gd.widthHint= 0;
gd.heightHint= 0;
wsTreeViewer.getTree().setLayoutData(gd);
final ContainerContentProvider cp = new ContainerContentProvider();
cp.showClosedProjects(false);
wsTreeViewer.setContentProvider(cp);
wsTreeViewer.setLabelProvider(new WorkbenchLabelProvider());
wsTreeViewer.setInput(ResourcesPlugin.getWorkspace());
final Composite group = new Composite(composite, SWT.NONE);
final GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
group.setLayout(layout);
group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
final Label label = new Label(group, SWT.NONE);
label.setLayoutData(new GridData());
label.setText(Policy.bind("Fi&le_name__9")); //$NON-NLS-1$
wsFilenameText = new Text(group,SWT.BORDER);
wsFilenameText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
}
/**
* Setup the controls for the file system option.
*/
private void setupFilesystemControls(final Composite composite) {
GridLayout layout;
fsRadio= new Button(composite, SWT.RADIO);
fsRadio.setText(Policy.bind("Save_In_File_System_3")); //$NON-NLS-1$
final Composite nameGroup = new Composite(composite,SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 0;
nameGroup.setLayout(layout);
final GridData data = new GridData(SWT.FILL, SWT.FILL, false, false);
nameGroup.setLayoutData(data);
fsPathText= new Text(nameGroup, SWT.BORDER);
GridData gd= new GridData(GridData.FILL_HORIZONTAL);
fsPathText.setLayoutData(gd);
fsBrowseButton = new Button(nameGroup, SWT.NULL);
fsBrowseButton.setText(Policy.bind("Browse..._4")); //$NON-NLS-1$
}
/**
* Setup the controls for the clipboard option.
*/
private void setupClipboardControls(final Composite composite) {
cpRadio= new Button(composite, SWT.RADIO);
cpRadio.setText(Policy.bind("Save_To_Clipboard_2")); //$NON-NLS-1$
}
/**
* Initialize the controls with the saved default values which are
* obtained from the DefaultValuesStore.
*/
private void initializeDefaultValues() {
selectedLocation= store.getRadioSelection();
wsSelectedContainer= store.getWorkspaceSelection();
/**
* Radio buttons
*/
cpRadio.setSelection(selectedLocation == CLIPBOARD);
fsRadio.setSelection(selectedLocation == FILESYSTEM);
wsRadio.setSelection(selectedLocation == WORKSPACE);
/**
* Text fields.
*/
fsPathText.setText(store.getFilesystemPath());
wsFilenameText.setText(store.getWorkspaceFilename());
/**
* Tree viewer.
*/
if (wsSelectedContainer != null) {
final ISelection selection= new StructuredSelection(wsSelectedContainer);
wsTreeViewer.setSelection(selection, true);
}
}
/**
* Setup all the listeners for the controls.
*/
private void setupListeners() {
cpRadio.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
selectedLocation= CLIPBOARD;
validatePage();
updateEnablements();
}
});
fsRadio.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
selectedLocation= FILESYSTEM;
validatePage();
updateEnablements();
}
});
wsRadio.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
selectedLocation= WORKSPACE;
validatePage();
updateEnablements();
}
});
fsPathText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validatePage();
}
});
fsBrowseButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
final FileDialog dialog = new FileDialog(getShell(), SWT.PRIMARY_MODAL | SWT.SAVE);
if (pageValid) {
final File file= new File(fsPathText.getText());
dialog.setFilterPath(file.getParent());
}
dialog.setText(Policy.bind("Save_Patch_As_5")); //$NON-NLS-1$
dialog.setFileName(Policy.bind("patch.txt_6")); //$NON-NLS-1$
final String path = dialog.open();
if (path != null) {
fsPathText.setText(new Path(path).toOSString());
}
}
});
wsTreeViewer.addSelectionChangedListener(
new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection s = (IStructuredSelection)event.getSelection();
wsSelectedContainer = ((IContainer) s.getFirstElement());
validatePage();
}
});
wsTreeViewer.addDoubleClickListener(
new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
ISelection s= event.getSelection();
if (s instanceof IStructuredSelection) {
Object item = ((IStructuredSelection)s).getFirstElement();
if (wsTreeViewer.getExpandedState(item))
wsTreeViewer.collapseToLevel(item, 1);
else
wsTreeViewer.expandToLevel(item, 1);
}
}
});
wsFilenameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
validatePage();
}
});
}
/**
* Enable and disable controls based on the selected radio button.
*/
protected void updateEnablements() {
fsBrowseButton.setEnabled(selectedLocation == FILESYSTEM);
fsPathText.setEnabled(selectedLocation == FILESYSTEM);
wsTreeViewer.getTree().setEnabled(selectedLocation == WORKSPACE);
wsFilenameText.setEnabled(selectedLocation == WORKSPACE);
}
public int getSelectedLocation() {
return selectedLocation;
}
}
/**
* Page to select the options for creating the patch.
*/
private class OptionsPage extends WizardPage {
private Button recurseOption;
private Button contextDiffOption;
private Button unifiedDiffOption;
private Button regularDiffOption;
private Button includeNewFilesOptions;
/**
* Constructor for PatchFileCreationOptionsPage.
*/
protected OptionsPage(String pageName) {
super(pageName);
}
/**
* Constructor for PatchFileCreationOptionsPage.
*/
protected OptionsPage(String pageName, String title, ImageDescriptor titleImage) {
super(pageName, title, titleImage);
}
/*
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
Composite composite= new Composite(parent, SWT.NULL);
GridLayout layout= new GridLayout();
composite.setLayout(layout);
composite.setLayoutData(new GridData());
setControl(composite);
// set F1 help
WorkbenchHelp.setHelp(composite, IHelpContextIds.PATCH_OPTIONS_PAGE);
recurseOption = new Button(composite, SWT.CHECK);
recurseOption.setText(Policy.bind("Do_not_recurse_into_sub-folders_10")); //$NON-NLS-1$
recurseOption.setSelection(true);
includeNewFilesOptions = new Button(composite, SWT.CHECK);
includeNewFilesOptions.setText(Policy.bind("Do_not_include_new_files_in_patch_11")); //$NON-NLS-1$
includeNewFilesOptions.setSelection(true);
Group diffTypeGroup = new Group(composite, SWT.NONE);
layout = new GridLayout();
layout.marginHeight = 0;
diffTypeGroup.setLayout(layout);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
diffTypeGroup.setLayoutData(data);
diffTypeGroup.setText(Policy.bind("Diff_output_format_12")); //$NON-NLS-1$
unifiedDiffOption = new Button(diffTypeGroup, SWT.RADIO);
unifiedDiffOption.setText(Policy.bind("Unified_(format_required_by_Compare_With_Patch_feature)_13")); //$NON-NLS-1$
unifiedDiffOption.setSelection(true);
contextDiffOption = new Button(diffTypeGroup, SWT.RADIO);
contextDiffOption.setText(Policy.bind("Context_14")); //$NON-NLS-1$
regularDiffOption = new Button(diffTypeGroup, SWT.RADIO);
regularDiffOption.setText(Policy.bind("Standard_15")); //$NON-NLS-1$
Dialog.applyDialogFont(parent);
}
/**
* Answers if the difference operation should be run recursively.
*/
public boolean isRecursive() {
return !recurseOption.getSelection();
}
/**
* Return the list of Diff command options configured on this page.
*/
public LocalOption[] getOptions() {
List options = new ArrayList(5);
if(includeNewFilesOptions.getSelection()) {
options.add(Diff.INCLUDE_NEWFILES);
}
if(!recurseOption.getSelection()) {
options.add(Command.DO_NOT_RECURSE);
}
if(unifiedDiffOption.getSelection()) {
options.add(Diff.UNIFIED_FORMAT);
} else if(contextDiffOption.getSelection()) {
options.add(Diff.CONTEXT_FORMAT);
}
return (LocalOption[]) options.toArray(new LocalOption[options.size()]);
}
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
recurseOption.setFocus();
}
}
}
/**
* Class to retrieve and store the default selected values.
*/
private final class DefaultValuesStore {
private static final String PREF_LAST_SELECTION= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.selection"; //$NON-NLS-1$
private static final String PREF_LAST_FS_PATH= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.fs.path"; //$NON-NLS-1$
private static final String PREF_LAST_WS_FILENAME= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.ws.filename"; //$NON-NLS-1$
private static final String PREF_LAST_WS_PATH= "org.eclipse.team.internal.ccvs.ui.wizards.GenerateDiffFileWizard.PatchFileSelectionPage.ws.path"; //$NON-NLS-1$
private final IDialogSettings dialogSettings;
public DefaultValuesStore() {
dialogSettings= CVSUIPlugin.getPlugin().getDialogSettings();
}
public int getRadioSelection() {
int value= LocationPage.CLIPBOARD;
try {
value= dialogSettings.getInt(PREF_LAST_SELECTION);
} catch (NumberFormatException e) {
}
switch (value) {
case LocationPage.FILESYSTEM:
case LocationPage.WORKSPACE:
case LocationPage.CLIPBOARD:
return value;
default:
return LocationPage.CLIPBOARD;
}
}
public String getFilesystemPath() {
final String path= dialogSettings.get(PREF_LAST_FS_PATH);
return path != null ? path : ""; //$NON-NLS-1$
}
public String getWorkspaceFilename() {
final String filename= dialogSettings.get(PREF_LAST_WS_FILENAME);
return filename != null ? filename : ""; //$NON-NLS-1$
}
public IContainer getWorkspaceSelection() {
final String value= dialogSettings.get(PREF_LAST_WS_PATH);
if ( value != null ) {
final IPath path= new Path(value);
final IResource container= ResourcesPlugin.getWorkspace().getRoot().findMember(path);
if (container instanceof IContainer) {
return (IContainer)container;
}
}
return null;
}
public void storeRadioSelection(int defaultSelection) {
dialogSettings.put(PREF_LAST_SELECTION, defaultSelection);
}
public void storeFilesystemPath(String path) {
dialogSettings.put(PREF_LAST_FS_PATH, path);
}
public void storeWorkspacePath(String path) {
dialogSettings.put(PREF_LAST_WS_PATH, path);
}
public void storeWorkspaceFilename(String filename) {
dialogSettings.put(PREF_LAST_WS_FILENAME, filename);
}
}
private LocationPage locationPage;
private OptionsPage optionsPage;
private final IResource resource;
private final DefaultValuesStore defaultValuesStore;
public GenerateDiffFileWizard(IResource resource) {
super();
this.resource = resource;
setWindowTitle(Policy.bind("GenerateCVSDiff.title")); //$NON-NLS-1$
initializeDefaultPageImageDescriptor();
defaultValuesStore= new DefaultValuesStore();
}
public void addPages() {
String pageTitle = Policy.bind("GenerateCVSDiff.pageTitle"); //$NON-NLS-1$
String pageDescription = Policy.bind("GenerateCVSDiff.pageDescription"); //$NON-NLS-1$
locationPage = new LocationPage(pageTitle, pageTitle, CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_DIFF), defaultValuesStore);
locationPage.setDescription(pageDescription);
addPage(locationPage);
pageTitle = Policy.bind("Advanced_options_19"); //$NON-NLS-1$
pageDescription = Policy.bind("Configure_the_options_used_for_the_CVS_diff_command_20"); //$NON-NLS-1$
optionsPage = new OptionsPage(pageTitle, pageTitle, CVSUIPlugin.getPlugin().getImageDescriptor(ICVSUIConstants.IMG_WIZBAN_DIFF));
optionsPage.setDescription(pageDescription);
addPage(optionsPage);
}
/**
* Declares the wizard banner iamge descriptor
*/
protected void initializeDefaultPageImageDescriptor() {
final String iconPath= "icons/full/"; //$NON-NLS-1$
try {
final URL installURL = CVSUIPlugin.getPlugin().getBundle().getEntry("/"); //$NON-NLS-1$
final URL url = new URL(installURL, iconPath + "wizards/newconnect_wiz.gif"); //$NON-NLS-1$
ImageDescriptor desc = ImageDescriptor.createFromURL(url);
setDefaultPageImageDescriptor(desc);
} catch (MalformedURLException e) {
// Should not happen. Ignore.
}
}
/* (Non-javadoc)
* Method declared on IWizard.
*/
public boolean needsProgressMonitor() {
return true;
}
/**
* Completes processing of the wizard. If this method returns <code>
* true</code>, the wizard will close; otherwise, it will stay active.
*/
public boolean performFinish() {
final int location= locationPage.getSelectedLocation();
final File file= location != LocationPage.CLIPBOARD? locationPage.getFile() : null;
if (!(file == null || validateFile(file))) {
return false;
}
/**
* Perform diff operation.
*/
try {
getContainer().run(true, true, new GenerateDiffFileOperation(resource, file, optionsPage.getOptions(), getShell()));
} catch (InterruptedException e1) {
return true;
} catch (InvocationTargetException e2) {
CVSUIPlugin.openError(getShell(), null, null, e2);
return false;
}
/**
* Refresh workspace if necessary and save default selection.
*/
switch (location) {
case LocationPage.WORKSPACE:
defaultValuesStore.storeRadioSelection(LocationPage.WORKSPACE);
final IResource workspaceResource= locationPage.getResource();
defaultValuesStore.storeWorkspacePath(workspaceResource.getParent().getFullPath().toString());
defaultValuesStore.storeWorkspaceFilename(workspaceResource.getName());
try {
workspaceResource.getParent().refreshLocal(IResource.DEPTH_ONE, null);
} catch(CoreException e) {
CVSUIPlugin.openError(getShell(), Policy.bind("GenerateCVSDiff.error"), null, e); //$NON-NLS-1$
return false;
}
break;
case LocationPage.FILESYSTEM:
defaultValuesStore.storeFilesystemPath(file.getPath());
defaultValuesStore.storeRadioSelection(LocationPage.FILESYSTEM);
break;
case LocationPage.CLIPBOARD:
defaultValuesStore.storeRadioSelection(LocationPage.CLIPBOARD);
break;
default:
return false;
}
return true;
}
public boolean validateFile(File file) {
if (file == null)
return false;
/**
* Consider file valid if it doesn't exist for now.
*/
if (!file.exists())
return true;
/**
* The file exists.
*/
if (!file.canWrite()) {
final String title= Policy.bind("GenerateCVSDiff.1"); //$NON-NLS-1$
final String msg= Policy.bind("GenerateCVSDiff.2"); //$NON-NLS-1$
final MessageDialog dialog= new MessageDialog(getShell(), title, null, msg, MessageDialog.ERROR, new String[] { IDialogConstants.OK_LABEL }, 0);
dialog.open();
return false;
}
final String title = Policy.bind("GenerateCVSDiff.overwriteTitle"); //$NON-NLS-1$
final String msg = Policy.bind("GenerateCVSDiff.overwriteMsg"); //$NON-NLS-1$
final MessageDialog dialog = new MessageDialog(getShell(), title, null, msg, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.CANCEL_LABEL }, 0);
dialog.open();
if (dialog.getReturnCode() != 0)
return false;
return true;
}
}