blob: 04701ac4d46c5d22b1d10788cca18fafce7442fc [file] [log] [blame]
package org.eclipse.ptp.services.ui.wizards;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
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.IServiceModelManager;
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 ServiceConfigurationImportWizard extends Wizard implements IImportWizard {
private class SelectFilePage extends WizardPage {
private String file = ""; //$NON-NLS-1$
private Combo fileCombo;
private Button browseButton;
private ServiceConfigurationSelectionWidget fServiceWidget;
private int messageType = NONE;
public SelectFilePage(String pageName, String title, ImageDescriptor titleImage) {
super(pageName, title, titleImage);
setDescription(Messages.ServiceConfigurationImportWizard_1);
}
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);
createConfigurationsArea(workArea);
updateEnablement();
Dialog.applyDialogFont(parent);
messageType = ERROR;
}
private void createFileSelectionArea(Composite workArea) {
Composite composite = new Composite(workArea, SWT.NULL);
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.ServiceConfigurationImportWizard_2);
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.ServiceConfigurationImportWizard_3);
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.OPEN);
d.setFilterExtensions(new String[] {"*.cfg", "*"}); //$NON-NLS-1$ //$NON-NLS-2$
d.setFilterNames(new String[] {Messages.ServiceConfigurationImportWizard_4, Messages.ServiceConfigurationImportWizard_5});
String fileName= getFileName();
if (fileName != null && fileName.length() > 0) {
int separator = fileName.lastIndexOf(System.getProperty("file.separator").charAt(0)); //$NON-NLS-1$
if (separator != -1) {
fileName= fileName.substring(0, separator);
}
} else {
fileName= ResourcesPlugin.getWorkspace().getRoot().getLocation().toString();
}
d.setFilterPath(fileName);
String f = d.open();
if (f != null) {
fileCombo.setText(f);
file = f;
updateConfigurations(file);
}
}
});
}
private void updateConfigurations(String file) {
try {
final String filename = file;
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
monitor.beginTask(Messages.ServiceConfigurationImportWizard_0, 100);
fServiceConfigurations = fModelManager.importConfigurations(filename);
monitor.worked(100);
monitor.done();
}
});
} catch (InvocationTargetException e) {
} catch (InterruptedException e) {
// Do nothing
}
fServiceWidget.setConfigurations(fServiceConfigurations);
fServiceWidget.setAllChecked(true);
}
private void createConfigurationsArea(Composite workArea) {
Composite composite = new Composite(workArea, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
| GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
Label label = new Label(composite, SWT.NONE);
label.setText(Messages.ServiceConfigurationImportWizard_12);
fServiceWidget = new ServiceConfigurationSelectionWidget(composite, SWT.CHECK, null, null, true);
fServiceWidget.setConfigurations(new IServiceConfiguration[0]);
}
public String getFileName() {
return file;
}
public IServiceConfiguration[] getServiceConfigurations() {
return fServiceWidget.getCheckedServiceConfigurations();
}
private void updateEnablement() {
boolean complete = false;
setMessage(null);
if (file.length() == 0) {
setMessage(Messages.ServiceConfigurationImportWizard_6, messageType);
setPageComplete(false);
return;
} else {
// See if the file exists
File f = new File(file);
if (!f.exists()) {
setMessage(Messages.ServiceConfigurationImportWizard_7, messageType);
setPageComplete(false);
return;
} else if (f.isDirectory()) {
setMessage(Messages.ServiceConfigurationImportWizard_8, messageType);
setPageComplete(false);
return;
} else if (!fModelManager.isValidConfigurationFile(file)) {
setMessage(Messages.ServiceConfigurationImportWizard_13, messageType);
setPageComplete(false);
return;
}
complete = true;
}
if (complete) {
setErrorMessage(null);
setDescription(Messages.ServiceConfigurationImportWizard_9);
}
setPageComplete(complete);
}
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
fileCombo.setFocus();
}
}
}
private SelectFilePage mainPage;
private IServiceConfiguration[] fServiceConfigurations;
private IServiceModelManager fModelManager = ServiceModelManager.getInstance();
public ServiceConfigurationImportWizard() {
setNeedsProgressMonitor(true);
setWindowTitle(Messages.ServiceConfigurationImportWizard_10);
}
public void addPages() {
mainPage = new SelectFilePage("importMainPage", Messages.ServiceConfigurationImportWizard_11, null); //$NON-NLS-1$
addPage(mainPage);
}
/* (non-Javadoc)
* @see org.eclipse.jface.wizard.Wizard#performFinish()
*/
@Override
public boolean performFinish() {
for (IServiceConfiguration config : mainPage.getServiceConfigurations()) {
fModelManager.addConfiguration(config);
}
return true;
}
/* (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);
}
}