blob: 13ca75c432e955b0bb0eed7cc1eb4b5e14ae355d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.ui.dialogs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.osgi.util.NLS;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IFileEditorMapping;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
/**
* Abstract superclass for a typical export wizard's main page.
* <p>
* Clients may subclass this page to inherit its common destination resource
* selection facilities.
* </p>
* <p>
* Subclasses must implement
* <ul>
* <li><code>createDestinationGroup</code></li>
* </ul>
* </p>
* <p>
* Subclasses may override
* <ul>
* <li><code>allowNewContainerName</code></li>
* </ul>
* </p>
* <p>
* Subclasses may extend
* <ul>
* <li><code>handleEvent</code></li>
* <li><code>internalSaveWidgetValues</code></li>
* <li><code>updateWidgetEnablements</code></li>
* </ul>
* </p>
* @deprecated use WizardExportResourcePage
*/
public abstract class WizardExportPage extends WizardDataTransferPage {
private IStructuredSelection currentResourceSelection;
private List selectedResources;
private List selectedTypes;
private boolean exportCurrentSelection = false;
private boolean exportAllResourcesPreSet = false;
// widgets
private Combo typesToExportField;
private Button typesToExportEditButton;
private Button exportAllTypesRadio;
private Button exportSpecifiedTypesRadio;
private Button resourceDetailsButton;
private Label resourceDetailsDescription;
private Text resourceNameField;
private Button resourceBrowseButton;
// initial value stores
private boolean initialExportAllTypesValue = true;
private String initialExportFieldValue;
private String initialTypesFieldValue;
// constants
private static final String CURRENT_SELECTION = "<current selection>";//$NON-NLS-1$
private static final String TYPE_DELIMITER = ",";//$NON-NLS-1$
// dialog store id constants
private static final String STORE_SELECTED_TYPES_ID = "WizardFileSystemExportPage1.STORE_SELECTED_TYPES_ID.";//$NON-NLS-1$
private static final String STORE_EXPORT_ALL_RESOURCES_ID = "WizardFileSystemExportPage1.STORE_EXPORT_ALL_RESOURCES_ID.";//$NON-NLS-1$
/**
* Creates an export wizard page. If the current resource selection
* is not empty then it will be used as the initial collection of resources
* selected for export.
*
* @param pageName the name of the page
* @param selection the current resource selection
*/
protected WizardExportPage(String pageName, IStructuredSelection selection) {
super(pageName);
this.currentResourceSelection = selection;
}
/**
* The <code>WizardExportPage</code> implementation of this
* <code>WizardDataTransferPage</code> method returns <code>false</code>.
* Subclasses may override this method.
*/
protected boolean allowNewContainerName() {
return false;
}
/** (non-Javadoc)
* Method declared on IDialogPage.
*/
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL
| GridData.HORIZONTAL_ALIGN_FILL));
createBoldLabel(composite, IDEWorkbenchMessages.WizardExportPage_whatLabel);
createSourceGroup(composite);
createSpacer(composite);
createBoldLabel(composite, IDEWorkbenchMessages.WizardExportPage_whereLabel);
createDestinationGroup(composite);
createSpacer(composite);
createBoldLabel(composite, IDEWorkbenchMessages.WizardExportPage_options);
createOptionsGroup(composite);
restoreResourceSpecificationWidgetValues(); // ie.- local
restoreWidgetValues(); // ie.- subclass hook
if (currentResourceSelection != null)
setupBasedOnInitialSelections();
updateWidgetEnablements();
setPageComplete(determinePageCompletion());
setControl(composite);
}
/**
* Creates the export destination specification visual components.
* <p>
* Subclasses must implement this method.
* </p>
*
* @param parent the parent control
*/
protected abstract void createDestinationGroup(Composite parent);
/**
* Creates the export source resource specification controls.
*
* @param parent the parent control
*/
protected final void createSourceGroup(Composite parent) {
// top level group
Composite sourceGroup = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
sourceGroup.setLayout(layout);
sourceGroup.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL
| GridData.HORIZONTAL_ALIGN_FILL));
// resource label
new Label(sourceGroup, SWT.NONE).setText(IDEWorkbenchMessages.WizardExportPage_folder);
// resource name entry field
resourceNameField = new Text(sourceGroup, SWT.SINGLE | SWT.BORDER);
resourceNameField.addListener(SWT.KeyDown, this);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
| GridData.GRAB_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
resourceNameField.setLayoutData(data);
// resource browse button
resourceBrowseButton = new Button(sourceGroup, SWT.PUSH);
resourceBrowseButton.setText(IDEWorkbenchMessages.WizardExportPage_browse);
resourceBrowseButton.addListener(SWT.Selection, this);
resourceBrowseButton.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
// export all types radio
exportAllTypesRadio = new Button(sourceGroup, SWT.RADIO);
exportAllTypesRadio.setText(IDEWorkbenchMessages.WizardExportPage_allTypes);
exportAllTypesRadio.addListener(SWT.Selection, this);
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
| GridData.GRAB_HORIZONTAL);
data.horizontalSpan = 3;
exportAllTypesRadio.setLayoutData(data);
// export specific types radio
exportSpecifiedTypesRadio = new Button(sourceGroup, SWT.RADIO);
exportSpecifiedTypesRadio.setText(IDEWorkbenchMessages.WizardExportPage_specificTypes);
exportSpecifiedTypesRadio.addListener(SWT.Selection, this);
// types combo
typesToExportField = new Combo(sourceGroup, SWT.NONE);
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
| GridData.GRAB_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
typesToExportField.setLayoutData(data);
typesToExportField.addListener(SWT.Modify, this);
// types edit button
typesToExportEditButton = new Button(sourceGroup, SWT.PUSH);
typesToExportEditButton.setText(IDEWorkbenchMessages.WizardExportPage_edit);
typesToExportEditButton.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL
| GridData.VERTICAL_ALIGN_END));
typesToExportEditButton.addListener(SWT.Selection, this);
// details button
resourceDetailsButton = new Button(sourceGroup, SWT.PUSH);
resourceDetailsButton.setText(IDEWorkbenchMessages.WizardExportPage_details);
resourceDetailsButton.addListener(SWT.Selection, this);
// details label
resourceDetailsDescription = new Label(sourceGroup, SWT.NONE);
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
| GridData.GRAB_HORIZONTAL);
data.horizontalSpan = 2;
resourceDetailsDescription.setLayoutData(data);
// initial setup
resetSelectedResources();
exportAllTypesRadio.setSelection(initialExportAllTypesValue);
exportSpecifiedTypesRadio.setSelection(!initialExportAllTypesValue);
typesToExportField.setEnabled(!initialExportAllTypesValue);
typesToExportEditButton.setEnabled(!initialExportAllTypesValue);
if (initialExportFieldValue != null)
resourceNameField.setText(initialExportFieldValue);
if (initialTypesFieldValue != null)
typesToExportField.setText(initialTypesFieldValue);
}
/**
* Display an error dialog with the specified message.
*
* @param message the error message
*/
protected void displayErrorDialog(String message) {
MessageDialog.openError(getContainer().getShell(), IDEWorkbenchMessages.WizardExportPage_errorDialogTitle, message);
}
/**
* Displays a description message that indicates a selection of resources
* of the specified size.
*
* @param selectedResourceCount the resource selection size to display
*/
protected void displayResourcesSelectedCount(int selectedResourceCount) {
if (selectedResourceCount == 1)
resourceDetailsDescription.setText(IDEWorkbenchMessages.WizardExportPage_oneResourceSelected);
else
resourceDetailsDescription
.setText(NLS.bind(IDEWorkbenchMessages.WizardExportPage_resourceCountMessage, new Integer(selectedResourceCount)));
}
/**
* Obsolete method. This was implemented to handle the case where ensureLocal()
* needed to be called but it doesn't use it any longer.
*
* @param resources the list of resources to ensure locality for
* @return <code>true</code> for successful completion
* @deprecated Only retained for backwards compatibility.
*/
protected boolean ensureResourcesLocal(List resources) {
return true;
}
/**
* Returns a new subcollection containing only those resources which are not
* local.
*
* @param originalList the original list of resources (element type:
* <code>IResource</code>)
* @return the new list of non-local resources (element type:
* <code>IResource</code>)
*/
protected List extractNonLocalResources(List originalList) {
Vector result = new Vector(originalList.size());
Iterator resourcesEnum = originalList.iterator();
while (resourcesEnum.hasNext()) {
IResource currentResource = (IResource) resourcesEnum.next();
if (!currentResource.isLocal(IResource.DEPTH_ZERO))
result.addElement(currentResource);
}
return result;
}
/**
* Returns the current selection value of the "Export all types" radio,
* or its set initial value if it does not exist yet.
*
* @return the "Export All Types" radio's current value or anticipated initial
* value
*/
public boolean getExportAllTypesValue() {
if (exportAllTypesRadio == null)
return initialExportAllTypesValue;
return exportAllTypesRadio.getSelection();
}
/**
* Returns the current contents of the resource name entry field,
* or its set initial value if it does not exist yet (which could
* be <code>null</code>).
*
* @return the resource name field's current value or anticipated initial value,
* or <code>null</code>
*/
public String getResourceFieldValue() {
if (resourceNameField == null)
return initialExportFieldValue;
return resourceNameField.getText();
}
/**
* Return the path for the resource field.
* @return org.eclipse.core.runtime.IPath
*/
protected IPath getResourcePath() {
return getPathFromText(this.resourceNameField);
}
/**
* Returns this page's collection of currently-specified resources to be
* exported. This is the primary resource selection facility accessor for
* subclasses.
*
* @return the collection of resources currently selected for export (element
* type: <code>IResource</code>)
*/
protected List getSelectedResources() {
if (selectedResources == null) {
IResource sourceResource = getSourceResource();
if (sourceResource != null)
selectAppropriateResources(sourceResource);
}
return selectedResources;
}
/**
* Returns the resource object specified in the resource name entry field,
* or <code>null</code> if such a resource does not exist in the workbench.
*
* @return the resource specified in the resource name entry field, or
* <code>null</code>
*/
protected IResource getSourceResource() {
IWorkspace workspace = IDEWorkbenchPlugin.getPluginWorkspace();
//make the path absolute to allow for optional leading slash
IPath testPath = getResourcePath();
IStatus result = workspace.validatePath(testPath.toString(),
IResource.ROOT | IResource.PROJECT | IResource.FOLDER
| IResource.FILE);
if (result.isOK() && workspace.getRoot().exists(testPath))
return workspace.getRoot().findMember(testPath);
return null;
}
/**
* Returns the current contents of the types entry field, or its set
* initial value if it does not exist yet (which could be <code>null</code>).
*
* @return the types entry field's current value or anticipated initial value,
* or <code>null</code>
*/
public String getTypesFieldValue() {
if (typesToExportField == null)
return initialTypesFieldValue;
return typesToExportField.getText();
}
/**
* Returns the resource extensions currently specified to be exported.
*
* @return the resource extensions currently specified to be exported (element
* type: <code>String</code>)
*/
protected List getTypesToExport() {
List result = new ArrayList();
StringTokenizer tokenizer = new StringTokenizer(typesToExportField
.getText(), TYPE_DELIMITER);
while (tokenizer.hasMoreTokens()) {
String currentExtension = tokenizer.nextToken().trim();
if (!currentExtension.equals(""))//$NON-NLS-1$
result.add(currentExtension);
}
return result;
}
/**
* The <code>WizardExportPage</code> implementation of this
* <code>Listener</code> method handles all events and enablements for controls
* on this page. Subclasses may extend.
*/
public void handleEvent(Event event) {
Widget source = event.widget;
if (source == exportAllTypesRadio || source == typesToExportField
|| source == resourceNameField)
resetSelectedResources();
else if (source == exportSpecifiedTypesRadio) {
resetSelectedResources();
typesToExportField.setFocus();
} else if (source == resourceDetailsButton)
handleResourceDetailsButtonPressed();
else if (source == resourceBrowseButton)
handleResourceBrowseButtonPressed();
else if (source == typesToExportEditButton)
handleTypesEditButtonPressed();
setPageComplete(determinePageCompletion());
updateWidgetEnablements();
}
/**
* Opens a container selection dialog and displays the user's subsequent
* container selection in this page's resource name field.
*/
protected void handleResourceBrowseButtonPressed() {
IResource currentFolder = getSourceResource();
if (currentFolder != null && currentFolder.getType() == IResource.FILE)
currentFolder = currentFolder.getParent();
IPath containerPath = queryForContainer((IContainer) currentFolder,
IDEWorkbenchMessages.WizardExportPage_selectResourcesToExport);
if (containerPath != null) { // null means user cancelled
String relativePath = containerPath.makeRelative().toString();
if (!relativePath.toString().equals(resourceNameField.getText())) {
resetSelectedResources();
resourceNameField.setText(relativePath);
}
}
}
/**
* Opens a resource selection dialog and records the user's subsequent
* resource selections.
*/
protected void handleResourceDetailsButtonPressed() {
IAdaptable source = getSourceResource();
if (source == null)
source = ResourcesPlugin.getWorkspace().getRoot();
selectAppropriateResources(source);
if (source instanceof IFile) {
source = ((IFile) source).getParent();
setResourceToDisplay((IResource) source);
}
Object[] newlySelectedResources = queryIndividualResourcesToExport(source);
if (newlySelectedResources != null) {
selectedResources = Arrays.asList(newlySelectedResources);
displayResourcesSelectedCount(selectedResources.size());
}
}
/**
* Queries the user for the types of resources to be exported and
* displays these types in this page's "Types to export" field.
*/
protected void handleTypesEditButtonPressed() {
Object[] newSelectedTypes = queryResourceTypesToExport();
if (newSelectedTypes != null) { // ie.- did not press Cancel
List result = new ArrayList(newSelectedTypes.length);
for (int i = 0; i < newSelectedTypes.length; i++)
result.add(((IFileEditorMapping) newSelectedTypes[i])
.getExtension());
setTypesToExport(result);
}
}
/**
* Returns whether the extension of the given resource name is an extension that
* has been specified for export by the user.
*
* @param resourceName the resource name
* @return <code>true</code> if the resource name is suitable for export based
* upon its extension
*/
protected boolean hasExportableExtension(String resourceName) {
if (selectedTypes == null) // ie.- all extensions are acceptable
return true;
int separatorIndex = resourceName.lastIndexOf(".");//$NON-NLS-1$
if (separatorIndex == -1)
return false;
String extension = resourceName.substring(separatorIndex + 1);
Iterator it = selectedTypes.iterator();
while (it.hasNext()) {
if (extension.equalsIgnoreCase((String) it.next()))
return true;
}
return false;
}
/**
* Persists additional setting that are to be restored in the next instance of
* this page.
* <p>
* The <code>WizardImportPage</code> implementation of this method does
* nothing. Subclasses may extend to persist additional settings.
* </p>
*/
protected void internalSaveWidgetValues() {
}
/**
* Queries the user for the individual resources that are to be exported
* and returns these resources as a collection.
*
* @param rootResource the resource to use as the root of the selection query
* @return the resources selected for export (element type:
* <code>IResource</code>), or <code>null</code> if the user canceled the
* selection
*/
protected Object[] queryIndividualResourcesToExport(IAdaptable rootResource) {
ResourceSelectionDialog dialog = new ResourceSelectionDialog(
getContainer().getShell(), rootResource, IDEWorkbenchMessages.WizardExportPage_selectResourcesTitle);
dialog.setInitialSelections(selectedResources
.toArray(new Object[selectedResources.size()]));
dialog.open();
return dialog.getResult();
}
/**
* Queries the user for the resource types that are to be exported and returns
* these types as a collection.
*
* @return the resource types selected for export (element type:
* <code>String</code>), or <code>null</code> if the user canceled the
* selection
*/
protected Object[] queryResourceTypesToExport() {
IFileEditorMapping editorMappings[] = PlatformUI.getWorkbench()
.getEditorRegistry().getFileEditorMappings();
int mappingsSize = editorMappings.length;
List selectedTypes = getTypesToExport();
List initialSelections = new ArrayList(selectedTypes.size());
for (int i = 0; i < mappingsSize; i++) {
IFileEditorMapping currentMapping = editorMappings[i];
if (selectedTypes.contains(currentMapping.getExtension()))
initialSelections.add(currentMapping);
}
ListSelectionDialog dialog = new ListSelectionDialog(getContainer()
.getShell(), editorMappings,
FileEditorMappingContentProvider.INSTANCE,
FileEditorMappingLabelProvider.INSTANCE, IDEWorkbenchMessages.WizardExportPage_selectionDialogMessage);
dialog.setTitle(IDEWorkbenchMessages.WizardExportPage_resourceTypeDialog);
dialog.open();
return dialog.getResult();
}
/**
* Resets this page's selected resources collection and updates its controls
* accordingly.
*/
protected void resetSelectedResources() {
resourceDetailsDescription.setText(IDEWorkbenchMessages.WizardExportPage_detailsMessage);
selectedResources = null;
if (exportCurrentSelection) {
exportCurrentSelection = false;
if (resourceNameField.getText().length() > CURRENT_SELECTION
.length())
resourceNameField.setText(resourceNameField.getText()
.substring(CURRENT_SELECTION.length()));
else
resourceNameField.setText("");//$NON-NLS-1$
}
}
/**
* Restores resource specification control settings that were persisted
* in the previous instance of this page. Subclasses wishing to restore
* persisted values for their controls may extend.
*/
protected void restoreResourceSpecificationWidgetValues() {
IDialogSettings settings = getDialogSettings();
if (settings != null) {
String pageName = getName();
boolean exportAllResources = settings
.getBoolean(STORE_EXPORT_ALL_RESOURCES_ID + pageName);
// restore all/typed radio values iff not already explicitly set
if (!exportAllResourcesPreSet) {
exportAllTypesRadio.setSelection(exportAllResources);
exportSpecifiedTypesRadio.setSelection(!exportAllResources);
}
// restore selected types iff not explicitly already set
if (initialTypesFieldValue == null) {
String[] selectedTypes = settings
.getArray(STORE_SELECTED_TYPES_ID + pageName);
if (selectedTypes != null) {
if (selectedTypes.length > 0)
typesToExportField.setText(selectedTypes[0]);
for (int i = 0; i < selectedTypes.length; i++)
typesToExportField.add(selectedTypes[i]);
}
}
}
}
/**
* Persists resource specification control setting that are to be restored
* in the next instance of this page. Subclasses wishing to persist additional
* setting for their controls should extend hook method
* <code>internalSaveWidgetValues</code>.
*/
protected void saveWidgetValues() {
IDialogSettings settings = getDialogSettings();
if (settings != null) {
String pageName = getName();
// update specific types to export history
String[] selectedTypesNames = settings
.getArray(STORE_SELECTED_TYPES_ID + pageName);
if (selectedTypesNames == null)
selectedTypesNames = new String[0];
if (exportSpecifiedTypesRadio.getSelection()) {
selectedTypesNames = addToHistory(selectedTypesNames,
typesToExportField.getText());
}
settings
.put(STORE_SELECTED_TYPES_ID + pageName, selectedTypesNames);
// radio buttons
settings.put(STORE_EXPORT_ALL_RESOURCES_ID + pageName,
exportAllTypesRadio.getSelection());
}
// allow subclasses to save values
internalSaveWidgetValues();
}
/**
* Records a container's recursive file descendents which have an extension
* that has been specified for export by the user.
*
* @param resource the parent container
*/
protected void selectAppropriateFolderContents(IContainer resource) {
try {
IResource[] members = resource.members();
for (int i = 0; i < members.length; i++) {
if (members[i].getType() == IResource.FILE) {
IFile currentFile = (IFile) members[i];
if (hasExportableExtension(currentFile.getFullPath()
.toString()))
selectedResources.add(currentFile);
}
if (members[i].getType() == IResource.FOLDER) {
selectAppropriateFolderContents((IContainer) members[i]);
}
}
} catch (CoreException e) {
//don't show children if there are errors -- should at least log this
}
}
/**
* Records a resource's recursive descendents which are appropriate
* for export based upon this page's current controls contents.
*
* @param resource the parent resource
*/
protected void selectAppropriateResources(Object resource) {
if (selectedResources == null) {
if (exportSpecifiedTypesRadio.getSelection())
selectedTypes = getTypesToExport();
else
selectedTypes = null; // sentinel for select all extensions
selectedResources = new ArrayList();
if (resource instanceof IWorkspaceRoot) {
IProject[] projects = ((IWorkspaceRoot) resource).getProjects();
for (int i = 0; i < projects.length; i++) {
selectAppropriateFolderContents(projects[i]);
}
} else if (resource instanceof IFile) {
IFile file = (IFile) resource;
if (hasExportableExtension(file.getFullPath().toString()))
selectedResources.add(file);
} else {
selectAppropriateFolderContents((IContainer) resource);
}
}
}
/**
* Sets the selection value of this page's "Export all types" radio, or stores
* it for future use if this visual component does not exist yet.
*
* @param value new selection value
*/
public void setExportAllTypesValue(boolean value) {
if (exportAllTypesRadio == null) {
initialExportAllTypesValue = value;
exportAllResourcesPreSet = true;
} else {
exportAllTypesRadio.setSelection(value);
exportSpecifiedTypesRadio.setSelection(!value);
}
}
/**
* Sets the value of this page's source resource field, or stores
* it for future use if this visual component does not exist yet.
*
* @param value new value
*/
public void setResourceFieldValue(String value) {
if (resourceNameField == null)
initialExportFieldValue = value;
else
resourceNameField.setText(value);
}
/**
* Set the resource whos name we will display.
* @param resource
*/
protected void setResourceToDisplay(IResource resource) {
setResourceFieldValue(resource.getFullPath().makeRelative().toString());
}
/**
* Sets the value of this page's "Types to export" field, or stores
* it for future use if this visual component does not exist yet.
*
* @param value new value
*/
public void setTypesFieldValue(String value) {
if (typesToExportField == null)
initialTypesFieldValue = value;
else
typesToExportField.setText(value);
}
/**
* Sets the value of this page's "Types to export" field based upon the
* collection of extensions.
*
* @param typeStrings the collection of extensions to populate the "Types to
* export" field with (element type: <code>String</code>)
*/
protected void setTypesToExport(List typeStrings) {
StringBuffer result = new StringBuffer();
Iterator typesEnum = typeStrings.iterator();
while (typesEnum.hasNext()) {
result.append(typesEnum.next());
result.append(TYPE_DELIMITER);
result.append(" ");//$NON-NLS-1$
}
typesToExportField.setText(result.toString());
}
/**
* Populates the resource name field based upon the currently selected resources.
*/
protected void setupBasedOnInitialSelections() {
if (initialExportFieldValue != null) {
// a source resource has been programatically specified, which overrides
// the current workbench resource selection
IResource specifiedSourceResource = getSourceResource();
if (specifiedSourceResource == null)
currentResourceSelection = new StructuredSelection();
else
currentResourceSelection = new StructuredSelection(
specifiedSourceResource);
}
if (currentResourceSelection.isEmpty())
return; // no setup needed
List selections = new ArrayList();
Iterator it = currentResourceSelection.iterator();
while (it.hasNext()) {
IResource currentResource = (IResource) it.next();
// do not add inaccessible elements
if (currentResource.isAccessible())
selections.add(currentResource);
}
if (selections.isEmpty())
return; // setup not needed anymore
int selectedResourceCount = selections.size();
if (selectedResourceCount == 1) {
IResource resource = (IResource) selections.get(0);
setResourceToDisplay(resource);
} else {
selectedResources = selections;
exportAllTypesRadio.setSelection(true);
exportSpecifiedTypesRadio.setSelection(false);
resourceNameField.setText(CURRENT_SELECTION);
exportCurrentSelection = true;
displayResourcesSelectedCount(selectedResourceCount);
}
}
/**
* Updates the enablements of this page's controls. Subclasses may extend.
*/
protected void updateWidgetEnablements() {
if (exportCurrentSelection)
resourceDetailsButton.setEnabled(true);
else {
IResource resource = getSourceResource();
resourceDetailsButton.setEnabled(resource != null
&& resource.isAccessible());
}
exportSpecifiedTypesRadio.setEnabled(!exportCurrentSelection);
typesToExportField.setEnabled(exportSpecifiedTypesRadio.getSelection());
typesToExportEditButton.setEnabled(exportSpecifiedTypesRadio
.getSelection());
}
/* (non-Javadoc)
* Method declared on WizardDataTransferPage.
*/
protected final boolean validateSourceGroup() {
if (exportCurrentSelection) // ie.- no more checking needed
return true;
String sourceString = resourceNameField.getText();
if (sourceString.equals("")) {//$NON-NLS-1$
setErrorMessage(null);
return false;
}
IResource resource = getSourceResource();
if (resource == null) {
setErrorMessage(IDEWorkbenchMessages.WizardExportPage_mustExistMessage);
return false;
}
if (!resource.isAccessible()) {
setErrorMessage(IDEWorkbenchMessages.WizardExportPage_mustBeAccessibleMessage);
return false;
}
return true;
}
}