]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.project/src/org/simantics/project/management/install/SWTInstallAdvisor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.project / src / org / simantics / project / management / install / SWTInstallAdvisor.java
diff --git a/bundles/org.simantics.project/src/org/simantics/project/management/install/SWTInstallAdvisor.java b/bundles/org.simantics.project/src/org/simantics/project/management/install/SWTInstallAdvisor.java
new file mode 100644 (file)
index 0000000..2aec7ae
--- /dev/null
@@ -0,0 +1,82 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2008 IBM Corporation and others.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     IBM Corporation - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.project.management.install;\r
+\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.equinox.internal.provisional.p2.installer.IInstallOperation;\r
+import org.eclipse.equinox.internal.provisional.p2.installer.InstallAdvisor;\r
+import org.eclipse.equinox.internal.provisional.p2.installer.InstallDescription;\r
+import org.eclipse.swt.widgets.Display;\r
+\r
+/**\r
+ * Install context that creates a simple SWT-based UI and interacts with a user.\r
+ */\r
+public class SWTInstallAdvisor extends InstallAdvisor {\r
+       private InstallDialog dialog;\r
+       private boolean started = false;\r
+       private boolean stopped = false;\r
+\r
+       public IStatus performInstall(IInstallOperation operation) {\r
+               return dialog.run(operation);\r
+       }\r
+\r
+       public InstallDescription prepareInstallDescription(InstallDescription description) {\r
+               if (description.getInstallLocation() == null)\r
+                       dialog.promptForLocations(description);\r
+               return description;\r
+       }\r
+\r
+       public boolean promptForLaunch(InstallDescription description) {\r
+               return dialog.promptForLaunch(description);\r
+       }\r
+\r
+       public void setResult(IStatus status) {\r
+               String message;\r
+               if (status.getSeverity() == IStatus.CANCEL) {\r
+                       message = "Canceled";\r
+               } else {\r
+                       message = status.getMessage();\r
+               }\r
+               dialog.promptForClose(message);\r
+       }\r
+\r
+       public synchronized void start() {\r
+               if (stopped || started)\r
+                       return;\r
+               started = true;\r
+               Display display = Display.getCurrent();\r
+               if (display == null)\r
+                       display = new Display();\r
+               dialog = new InstallDialog();\r
+               dialog.setMessage("Preparing");\r
+       }\r
+\r
+       public synchronized void stop() {\r
+               if (stopped || !started)\r
+                       return;\r
+               stopped = true;\r
+               final InstallDialog activeDialog = dialog;\r
+               if (activeDialog == null)\r
+                       return;\r
+               //clear the window now, so the reference is gone no matter what happens during cleanup\r
+               dialog = null;\r
+               final Display display = activeDialog.getDisplay();\r
+               if (display == null || display.isDisposed())\r
+                       return;\r
+               display.syncExec(new Runnable() {\r
+                       public void run() {\r
+                               activeDialog.close();\r
+                       }\r
+               });\r
+               display.dispose();\r
+       }\r
+\r
+}\r