blob: 2ac06a6f9f43fed5c90b2436a843f8d0e2c109b6 [file] [log] [blame]
package org.eclipse.ptp.services.ui.wizards;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.ptp.services.core.IServiceConfiguration;
import org.eclipse.ptp.services.core.ServiceModelManager;
import org.eclipse.ptp.services.ui.messages.Messages;
import org.eclipse.ptp.services.ui.widgets.ServiceConfigurationSelectionWidget;
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.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;
public class ServiceConfigurationExportWizard extends Wizard implements IImportWizard {
private class MainExportWizardPage extends WizardPage {
private String file = ""; //$NON-NLS-1$
private Combo fileCombo;
private Button browseButton;
private int messageType = NONE;
private ServiceConfigurationSelectionWidget serviceConfigWidget;
public MainExportWizardPage(String pageName, String title, ImageDescriptor titleImage) {
super(pageName, title, titleImage);
setDescription(Messages.ServiceConfigurationExportWizard_0);
}
public void createControl(Composite parent) {
Composite workArea = new Composite(parent, SWT.NONE);
setControl(workArea);
workArea.setFont(parent.getFont());
workArea.setLayout(new GridLayout());
workArea.setLayoutData(new GridData(GridData.FILL_BOTH
| GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
createFileSelectionArea(workArea);
createConfigurationsSelectionArea(workArea);
setControl(workArea);
Dialog.applyDialogFont(parent);
updateEnablement();
messageType = ERROR;
}
public void createFileSelectionArea(Composite workArea) {
Composite composite = new Composite(workArea, SWT.NULL);
composite.setFont(workArea.getFont());
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout layout = new GridLayout();
layout.numColumns = 3;
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
Label label = new Label(composite, SWT.NONE);
label.setText(Messages.ServiceConfigurationExportWizard_4);
fileCombo = new Combo(composite, SWT.DROP_DOWN);
GridData comboData = new GridData(GridData.FILL_HORIZONTAL);
comboData.verticalAlignment = GridData.CENTER;
comboData.grabExcessVerticalSpace = false;
comboData.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
fileCombo.setLayoutData(comboData);
file = FilenameStore.getSuggestedDefault();
fileCombo.setItems(FilenameStore.getHistory());
fileCombo.setText(file);
fileCombo.addListener(SWT.Modify, new Listener() {
public void handleEvent(Event event) {
file = fileCombo.getText();
updateEnablement();
}
});
browseButton = new Button(composite, SWT.PUSH);
browseButton.setText(Messages.ServiceConfigurationExportWizard_5);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
data.widthHint = Math.max(widthHint, browseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
browseButton.setLayoutData(data);
browseButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
FileDialog d = new FileDialog(getShell(), SWT.SAVE);
d.setFilterExtensions(new String[] {"*.cfg"}); //$NON-NLS-1$
d.setFilterNames(new String[] {Messages.ServiceConfigurationExportWizard_6});
d.setFileName(Messages.ServiceConfigurationExportWizard_7);
String fileName = getFileName();
if (fileName != null) {
int separator = fileName.lastIndexOf(System.getProperty("file.separator").charAt(0)); //$NON-NLS-1$
if (separator != -1) {
fileName = fileName.substring(0, separator);
}
}
d.setFilterPath(fileName);
String f = d.open();
if (f != null) {
fileCombo.setText(f);
file = f;
}
}
});
}
public String getFileName() {
return file;
}
public IServiceConfiguration[] getServiceConfigurations() {
return serviceConfigWidget.getCheckedServiceConfigurations();
}
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
fileCombo.setFocus();
}
}
private void createConfigurationsSelectionArea(Composite workArea) {
Composite composite = new Composite(workArea, SWT.NULL);
composite.setFont(workArea.getFont());
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
Label label = new Label(composite, SWT.NONE);
label.setText(Messages.ServiceConfigurationExportWizard_1);
serviceConfigWidget = new ServiceConfigurationSelectionWidget(composite, SWT.CHECK, null, null, true);
GridData data = new GridData(GridData.FILL_BOTH);
data.heightHint = 100;
serviceConfigWidget.setLayoutData(data);
serviceConfigWidget.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
updateEnablement();
}
});
}
private void updateEnablement() {
boolean complete = false;
setMessage(null);
setPageComplete(false);
if (getServiceConfigurations().length == 0) {
setPageComplete(false);
return;
}
if (file.length() == 0) {
setMessage(Messages.ServiceConfigurationExportWizard_8, messageType);
setPageComplete(false);
return;
} else {
// See if the file exists
File f = new File(file);
if (f.isDirectory()) {
setMessage(Messages.ServiceConfigurationExportWizard_9, messageType);
setPageComplete(false);
return;
}
complete = true;
}
if (complete) {
setErrorMessage(null);
setDescription(Messages.ServiceConfigurationExportWizard_10);
}
setPageComplete(complete);
}
}
private MainExportWizardPage mainPage =
new MainExportWizardPage("exportWizardPage",
Messages.ServiceConfigurationExportWizard_11, null); //$NON-NLS-1$;
public ServiceConfigurationExportWizard() {
setNeedsProgressMonitor(true);
setWindowTitle(Messages.ServiceConfigurationExportWizard_13);
}
public void addPages() {
addPage(mainPage);
}
/* (non-Javadoc)
* @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
*/
public void init(IWorkbench workbench, IStructuredSelection selection) {
FilenameStore.setDefaultFromSelection(workbench);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
File f = new File(mainPage.getFileName());
if (f.exists()) {
boolean result = MessageDialog.openQuestion(getShell(), Messages.ServiceConfigurationExportWizard_14, Messages.ServiceConfigurationExportWizard_15);
if (!result) {
return false;
}
}
try {
ServiceModelManager.getInstance().exportConfigurations(mainPage.getFileName(),
mainPage.getServiceConfigurations());
} catch (InvocationTargetException e) {
// TODO: error dialog?
return false;
}
return true;
}
}