blob: 335780cd4cc8df200363c346ebb31d60a571b2cf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.internal.wizards.preferences;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IPreferenceFilter;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.preferences.PreferenceTransferElement;
/**
* Page 1 of the base preference export Wizard
*
* @since 3.1
*/
public class WizardPreferencesExportPage1 extends WizardPreferencesPage {
// constants
private static final String PREFERENCESEXPORTPAGE1 = "preferencesExportPage1"; // //$NON-NLS-1$
/**
* Create an instance of this class
*/
protected WizardPreferencesExportPage1(String name) {
super(name);
setTitle(PreferencesMessages.WizardPreferencesExportPage1_exportTitle);
setDescription(PreferencesMessages.WizardPreferencesExportPage1_exportDescription);
}
/**
* Create an instance of this class
*/
public WizardPreferencesExportPage1() {
this(PREFERENCESEXPORTPAGE1);
}
protected String getOutputSuffix() {
return ".epf"; //$NON-NLS-1$
}
/**
* Answer the contents of self's destination specification widget
*
* @return java.lang.String
*/
protected String getDestinationValue() {
String idealSuffix = getOutputSuffix();
String destinationText = super.getDestinationValue();
// only append a suffix if the destination doesn't already have a . in
// its last path segment.
// Also prevent the user from selecting a directory. Allowing this will
// create a ".epf" file in the directory
if (destinationText.length() != 0
&& !destinationText.endsWith(File.separator)) {
int dotIndex = destinationText.lastIndexOf('.');
if (dotIndex != -1) {
// the last path seperator index
int pathSepIndex = destinationText.lastIndexOf(File.separator);
if (pathSepIndex != -1 && dotIndex < pathSepIndex) {
destinationText += idealSuffix;
}
} else {
destinationText += idealSuffix;
}
}
return destinationText;
}
protected String getAllButtonText() {
return PreferencesMessages.WizardPreferencesExportPage1_all;
}
protected String getChooseButtonText() {
return PreferencesMessages.WizardPreferencesExportPage1_choose;
}
/**
* @param composite
*/
protected void createTransferArea(Composite composite) {
createTransfersList(composite);
createDestinationGroup(composite);
createOptionsGroup(composite);
}
/**
* Answer the string to display in self as the destination type
*
* @return java.lang.String
*/
protected String getDestinationLabel() {
return PreferencesMessages.WizardPreferencesExportPage1_file;
}
/*
* return the PreferenceTransgerElements specified
*/
protected PreferenceTransferElement[] getTransfers() {
PreferenceTransferElement[] elements = super.getTransfers();
PreferenceTransferElement[] returnElements = new PreferenceTransferElement[elements.length];
IPreferenceFilter[] filters = new IPreferenceFilter[1];
IPreferenceFilter[] matches;
IPreferencesService service = Platform.getPreferencesService();
int count = 0;
try {
for (int i = 0; i < elements.length; i++) {
PreferenceTransferElement element = elements[i];
filters[0] = element.getFilter();
matches = service.matches((IEclipsePreferences) service
.getRootNode().node("instance"), filters); //$NON-NLS-1$
if (matches.length > 0) {
returnElements[count++] = element;
}
}
elements = new PreferenceTransferElement[count];
System.arraycopy(returnElements, 0, elements, 0, count);
} catch (CoreException e) {
WorkbenchPlugin.log(e.getMessage(), e);
return new PreferenceTransferElement[0];
}
return elements;
}
/**
* @param transfers
* @return <code>true</code> if the transfer was succesful, and
* <code>false</code> otherwise
*/
protected boolean transfer(IPreferenceFilter[] transfers) {
File exportFile = new File(getDestinationValue());
if (!ensureTargetIsValid(exportFile)) {
return false;
}
FileOutputStream fos = null;
try {
if (transfers.length > 0) {
try {
fos = new FileOutputStream(exportFile);
} catch (FileNotFoundException e) {
WorkbenchPlugin.log(e.getMessage(), e);
MessageDialog.openError(getControl().getShell(), new String(), e.getLocalizedMessage());
return false;
}
IPreferencesService service = Platform.getPreferencesService();
try {
service.exportPreferences(service.getRootNode(), transfers,
fos);
} catch (CoreException e) {
WorkbenchPlugin.log(e.getMessage(), e);
MessageDialog.openError(getControl().getShell(), new String(), e.getLocalizedMessage());
return false;
}
}
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
WorkbenchPlugin.log(e.getMessage(), e);
MessageDialog.openError(getControl().getShell(), new String(), e.getLocalizedMessage());
return false;
}
}
}
return true;
}
protected String getFileDialogTitle() {
return PreferencesMessages.WizardPreferencesExportPage1_title;
}
protected int getFileDialogStyle() {
return SWT.SAVE;
}
/* (non-Javadoc)
* @see org.eclipse.ui.internal.wizards.preferences.WizardPreferencesPage#getInvalidDestinationMessage()
*/
protected String getInvalidDestinationMessage() {
return PreferencesMessages.WizardPreferencesExportPage1_noPrefFile;
}
}