package org.simantics.xml.sax.ui.datawizard; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.simantics.utils.ui.ErrorLogger; public class ImportProcessPage extends WizardPage { private Composite composite; private Button button; private Label label; private boolean doneImport = false; private boolean importing = false; public ImportProcessPage() { super("XML Data conversion","Conversion Summary", null); setPageComplete(false); } public boolean isDoneImport() { return doneImport; } @Override public void createControl(Composite parent) { composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1,true)); Label fileLabel = new Label(composite, SWT.NONE); fileLabel.setText("File: "); label = new Label(composite, SWT.NONE); label.setText("Import has not been started."); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.BOTTOM).grab(true, false).applyTo(label); button = new Button(composite, SWT.PUSH); button.setText("Import"); GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(button); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { doImport(); } }); setControl(composite); } private Exception exception; private void doImport() { button.setEnabled(false); label.setText("Import started."); importing = true; try { getWizard().getContainer().run(true, true, new IRunnableWithProgress() { @Override public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { monitor.beginTask("XML Data conversion", IProgressMonitor.UNKNOWN); final DataConversionWizard wizard = (DataConversionWizard)getWizard(); wizard.doConversion(); } catch (final Exception err) { exception = err; } monitor.done(); } }); } catch (InvocationTargetException err) { exception = err; } catch (InterruptedException err) { exception = err; } if (exception != null) { setErrorMessage("Conversion failed: " + exception.getMessage()); ErrorLogger.defaultLogError("XML data conversion failed.",exception); label.setText("Schema conversion failed."); } else { label.setText("Schema conversion done."); } doneImport = true; importing = false; setPreviousPage(null); setPageComplete(true); getContainer().updateButtons(); } public boolean isImporting() { return importing; } }