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