blob: 190440a1f125eea0d7dda3bcc016ab4d61f62bf4 [file] [log] [blame]
package org.eclipse.ui.wizards.datatransfer;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.dialogs.WizardExportPage;
/**
* Page 1 of the base resource export-to-file-system Wizard
* @deprecated use WizardFileSystemResourceExportPage1
*/
/*package*/ class WizardFileSystemExportPage1 extends WizardExportPage implements Listener {
// widgets
private Combo destinationNameField;
private Button destinationBrowseButton;
private Button overwriteExistingFilesCheckbox;
private Button createDirectoryStructureCheckbox;
private Button createDirectoriesForSelectedContainersCheckbox;
// constants
private static final int SIZING_TEXT_FIELD_WIDTH = 250;
private static final int COMBO_HISTORY_LENGTH = 5;
// dialog store id constants
private static final String STORE_DESTINATION_NAMES_ID = "WizardFileSystemExportPage1.STORE_DESTINATION_NAMES_ID";//$NON-NLS-1$
private static final String STORE_OVERWRITE_EXISTING_FILES_ID = "WizardFileSystemExportPage1.STORE_OVERWRITE_EXISTING_FILES_ID";//$NON-NLS-1$
private static final String STORE_CREATE_STRUCTURE_ID = "WizardFileSystemExportPage1.STORE_CREATE_STRUCTURE_ID";//$NON-NLS-1$
private static final String STORE_CREATE_DIRECTORIES_FOR_SPECIFIED_CONTAINER_ID = "WizardFileSystemExportPage1.STORE_CREATE_DIRECTORIES_FOR_SPECIFIED_CONTAINER_ID";//$NON-NLS-1$
/**
* Create an instance of this class
*/
protected WizardFileSystemExportPage1(String name, IStructuredSelection selection) {
super(name, selection);
}
/**
* Create an instance of this class
*/
public WizardFileSystemExportPage1(IStructuredSelection selection) {
this("fileSystemExportPage1", selection);//$NON-NLS-1$
setTitle(DataTransferMessages.getString("DataTransfer.fileSystemTitle")); //$NON-NLS-1$
setDescription(DataTransferMessages.getString("FileExport.exportLocalFileSystem")); //$NON-NLS-1$
}
/**
* Add the passed value to self's destination widget's history
*
* @param value java.lang.String
*/
protected void addDestinationItem(String value) {
destinationNameField.add(value);
}
/** (non-Javadoc)
* Method declared on IDialogPage.
*/
public void createControl(Composite parent) {
super.createControl(parent);
giveFocusToDestination();
}
/**
* Create the export destination specification widgets
*
* @param parent org.eclipse.swt.widgets.Composite
*/
protected void createDestinationGroup(Composite parent) {
// destination specification group
Composite destinationSelectionGroup = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
destinationSelectionGroup.setLayout(layout);
destinationSelectionGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
new Label(destinationSelectionGroup, SWT.NONE).setText(getDestinationLabel());
// destination name entry field
destinationNameField = new Combo(destinationSelectionGroup, SWT.SINGLE | SWT.BORDER);
destinationNameField.addListener(SWT.Modify, this);
destinationNameField.addListener(SWT.Selection, this);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
destinationNameField.setLayoutData(data);
// destination browse button
destinationBrowseButton = new Button(destinationSelectionGroup, SWT.PUSH);
destinationBrowseButton.setText(DataTransferMessages.getString("DataTransfer.browse")); //$NON-NLS-1$
destinationBrowseButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
destinationBrowseButton.addListener(SWT.Selection, this);
new Label(parent, SWT.NONE); // vertical spacer
}
/**
* Create the export options specification widgets.
*
* @param parent org.eclipse.swt.widgets.Composite
*/
protected void createOptionsGroup(Composite parent) {
// options group
Composite optionsGroup = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
optionsGroup.setLayout(layout);
optionsGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
// overwrite... checkbox
overwriteExistingFilesCheckbox = new Button(optionsGroup,SWT.CHECK|SWT.LEFT);
overwriteExistingFilesCheckbox.setText(DataTransferMessages.getString("ExportFile.overwriteExisting")); //$NON-NLS-1$
// create directory structure checkbox
createDirectoryStructureCheckbox = new Button(optionsGroup,SWT.CHECK|SWT.LEFT);
createDirectoryStructureCheckbox.setText(DataTransferMessages.getString("ExportFile.createDirectoryStructure")); //$NON-NLS-1$
createDirectoryStructureCheckbox.addListener(SWT.Selection,this);
// create directory for container checkbox
createDirectoriesForSelectedContainersCheckbox = new Button(optionsGroup,SWT.CHECK|SWT.LEFT);
createDirectoriesForSelectedContainersCheckbox.setText(DataTransferMessages.getString("ExportFile.createDirectoriesForSelected")); //$NON-NLS-1$
// initial setup
createDirectoryStructureCheckbox.setSelection(true);
}
/**
* Attempts to ensure that the specified directory exists on the local file system.
* Answers a boolean indicating success.
*
* @return boolean
* @param directory java.io.File
*/
protected boolean ensureDirectoryExists(File directory) {
if (!directory.exists()) {
if (!queryYesNoQuestion(DataTransferMessages.getString("DataTransfer.createTargetDirectory"))) //$NON-NLS-1$
return false;
if (!directory.mkdirs()) {
displayErrorDialog(DataTransferMessages.getString("DataTransfer.directoryCreationError")); //$NON-NLS-1$
giveFocusToDestination();
return false;
}
}
return true;
}
/**
* If the target for export does not exist then attempt to create it.
* Answer a boolean indicating whether the target exists (ie.- if it
* either pre-existed or this method was able to create it)
*
* @return boolean
*/
protected boolean ensureTargetIsValid(File targetDirectory) {
if (targetDirectory.exists() && !targetDirectory.isDirectory()) {
displayErrorDialog(DataTransferMessages.getString("FileExport.directoryExists")); //$NON-NLS-1$
giveFocusToDestination();
return false;
}
return ensureDirectoryExists(targetDirectory);
}
/**
* Set up and execute the passed Operation. Answer a boolean indicating success.
*
* @return boolean
*/
protected boolean executeExportOperation(FileSystemExportOperation op) {
op.setCreateContainerDirectories(createDirectoriesForSelectedContainersCheckbox.getSelection());
op.setCreateLeadupStructure(createDirectoryStructureCheckbox.getSelection());
op.setOverwriteFiles(overwriteExistingFilesCheckbox.getSelection());
try {
getContainer().run(true, true, op);
} catch (InterruptedException e) {
return false;
} catch (InvocationTargetException e) {
displayErrorDialog(e.getTargetException().getMessage());
return false;
}
IStatus status = op.getStatus();
if (!status.isOK()) {
ErrorDialog.openError(getContainer().getShell(),
DataTransferMessages.getString("DataTransfer.exportProblems"), //$NON-NLS-1$
null, // no special message
status);
return false;
}
return true;
}
/**
* The Finish button was pressed. Try to do the required work now and answer
* a boolean indicating success. If false is returned then the wizard will
* not close.
*
* @return boolean
*/
public boolean finish() {
if (!ensureTargetIsValid(new File(getDestinationValue())))
return false;
List resourcesToExport = getSelectedResources();
// about to invoke the operation so save our state
saveWidgetValues();
if (resourcesToExport.size() > 0)
return executeExportOperation(
new FileSystemExportOperation(
getSourceResource(),
resourcesToExport,
getDestinationValue(),
this));
MessageDialog.openInformation(
getContainer().getShell(),
DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$
DataTransferMessages.getString("FileExport.noneSelected")); //$NON-NLS-1$
return false;
}
/**
* Answer the string to display in self as the destination type
*
* @return java.lang.String
*/
protected String getDestinationLabel() {
return DataTransferMessages.getString("DataTransfer.directory"); //$NON-NLS-1$
}
/**
* Answer the contents of self's destination specification widget
*
* @return java.lang.String
*/
protected String getDestinationValue() {
return destinationNameField.getText().trim();
}
/**
* Set the current input focus to self's destination entry field
*/
protected void giveFocusToDestination() {
destinationNameField.setFocus();
}
/**
* Open an appropriate destination browser so that the user can specify a source
* to import from
*/
protected void handleDestinationBrowseButtonPressed() {
DirectoryDialog dialog = new DirectoryDialog(getContainer().getShell(),SWT.SAVE);
dialog.setMessage(DataTransferMessages.getString("DataTransfer.selectDestination")); //$NON-NLS-1$
dialog.setFilterPath(getDestinationValue());
String selectedDirectoryName = dialog.open();
if (selectedDirectoryName != null)
setDestinationValue(selectedDirectoryName);
}
/**
* Handle all events and enablements for widgets in this page
*
* @param e org.eclipse.swt.widgets.Event
*/
public void handleEvent(Event e) {
Widget source = e.widget;
if (source == destinationBrowseButton)
handleDestinationBrowseButtonPressed();
super.handleEvent(e);
}
/**
* Hook method for saving widget values for restoration by the next instance
* of this class.
*/
protected void internalSaveWidgetValues() {
// update directory names history
IDialogSettings settings = getDialogSettings();
if(settings != null) {
String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID);
if (directoryNames == null)
directoryNames = new String[0];
directoryNames = addToHistory(directoryNames,getDestinationValue());
settings.put(
STORE_DESTINATION_NAMES_ID,
directoryNames);
// options
settings.put(
STORE_OVERWRITE_EXISTING_FILES_ID,
overwriteExistingFilesCheckbox.getSelection());
settings.put(
STORE_CREATE_STRUCTURE_ID,
createDirectoryStructureCheckbox.getSelection());
settings.put(
STORE_CREATE_DIRECTORIES_FOR_SPECIFIED_CONTAINER_ID,
createDirectoriesForSelectedContainersCheckbox.getSelection());
}
}
/**
* Hook method for restoring widget values to the values that they held
* last time this wizard was used to completion.
*/
protected void restoreWidgetValues() {
IDialogSettings settings = getDialogSettings();
if(settings != null) {
String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID);
if (directoryNames == null)
return; // ie.- no settings stored
// destination
setDestinationValue(directoryNames[0]);
for (int i = 0; i < directoryNames.length; i++)
addDestinationItem(directoryNames[i]);
// options
overwriteExistingFilesCheckbox.setSelection(
settings.getBoolean(STORE_OVERWRITE_EXISTING_FILES_ID));
createDirectoryStructureCheckbox.setSelection(
settings.getBoolean(STORE_CREATE_STRUCTURE_ID));
createDirectoriesForSelectedContainersCheckbox.setSelection(
settings.getBoolean(STORE_CREATE_DIRECTORIES_FOR_SPECIFIED_CONTAINER_ID));
}
}
/**
* Set the contents of self's destination specification widget to
* the passed value
*
* @param value java.lang.String
*/
protected void setDestinationValue(String value) {
destinationNameField.setText(value);
}
/**
* Answer a boolean indicating whether self's destination specification
* widgets currently all contain valid values.
*
* @return boolean
*/
protected boolean validateDestinationGroup() {
return !getDestinationValue().equals("");//$NON-NLS-1$
}
}