]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.team.ui/src/org/simantics/team/ui/StageInitWizard.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.team.ui / src / org / simantics / team / ui / StageInitWizard.java
diff --git a/bundles/org.simantics.team.ui/src/org/simantics/team/ui/StageInitWizard.java b/bundles/org.simantics.team.ui/src/org/simantics/team/ui/StageInitWizard.java
new file mode 100644 (file)
index 0000000..6976c30
--- /dev/null
@@ -0,0 +1,104 @@
+package org.simantics.team.ui;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.Deque;\r
+import java.util.LinkedList;\r
+\r
+import org.eclipse.core.runtime.preferences.InstanceScope;\r
+import org.eclipse.jface.dialogs.Dialog;\r
+import org.eclipse.jface.preference.IPersistentPreferenceStore;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.wizard.Wizard;\r
+import org.eclipse.jface.wizard.WizardDialog;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.ui.IImportWizard;\r
+import org.eclipse.ui.IWorkbench;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.preferences.ScopedPreferenceStore;\r
+import org.simantics.db.common.utils.Logger;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.team.Activator;\r
+import org.simantics.team.Utils;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+\r
+public class StageInitWizard extends Wizard implements IImportWizard {\r
+    static public class Data {\r
+        public Boolean ok = false;\r
+        public Boolean requireExisting = false;\r
+        public String comment; // Initial comment.\r
+        Deque<String> recentLocations = new LinkedList<String>();;\r
+        final File stagingFolder;\r
+        public File teamFolder;\r
+        public Data(File stagingFolder, File teamFolder) {\r
+            this.stagingFolder = stagingFolder;\r
+            this.teamFolder = teamFolder;\r
+        }\r
+    }\r
+    public static boolean openInitWizard(final Data data)\r
+    throws DatabaseException {\r
+        final Display display = PlatformUI.getWorkbench().getDisplay();\r
+        display.syncExec(new Runnable() {\r
+            @Override\r
+            public void run() {\r
+                StageInitWizard stageInitWizard = new StageInitWizard(data);\r
+                WizardDialog dialog = new WizardDialog(display.getActiveShell(), stageInitWizard);\r
+                if (Dialog.OK != dialog.open())\r
+                    data.ok = false;\r
+                else\r
+                    data.ok = true;\r
+            }});\r
+        return data.ok;\r
+    }\r
+    private final Data data;\r
+    private static final int MAX_RECENT_IMPORT_PATHS = 10;\r
+    private boolean readPreferences(IStructuredSelection selection) {\r
+        IPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, Activator.PLUGIN_ID);\r
+        try {\r
+            data.teamFolder = Utils.getTeamFolder();\r
+            if (null == data.teamFolder)\r
+                data.teamFolder = new File("Default Team Folder");\r
+        } catch (DatabaseException e) {\r
+            Logger.defaultLogError("Failed to get team folder.", e);\r
+            data.teamFolder = new File("Default Team Folder");\r
+        }\r
+        String recentPathsPref = store.getString(Preferences.RECENT_TEAM_FOLDERS);\r
+        data.recentLocations = Preferences.decodePaths(recentPathsPref);\r
+        return true;\r
+    }\r
+    private void writePreferences() throws IOException {\r
+        IPersistentPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, Activator.PLUGIN_ID);\r
+        store.putValue(Preferences.CURRENT_TEAM_FOLDER, data.teamFolder.getAbsolutePath());\r
+        store.putValue(Preferences.RECENT_TEAM_FOLDERS, Preferences.encodePaths(data.recentLocations));\r
+        if (store.needsSaving())\r
+            store.save();\r
+    }\r
+    public StageInitWizard(Data data) {\r
+        this.data = data;\r
+        setWindowTitle("Staging Init");\r
+        setNeedsProgressMonitor(true);\r
+    }\r
+    @Override\r
+    public void init(IWorkbench workbench, IStructuredSelection selection) {\r
+        readPreferences(selection);\r
+    }\r
+    @Override\r
+    public void addPages() {\r
+        super.addPages();\r
+        addPage(new StageInitPage(data));\r
+    }\r
+    @Override\r
+    public boolean performFinish() {\r
+        try {\r
+            data.recentLocations.addFirst(data.teamFolder.getAbsolutePath());\r
+            Preferences.removeDuplicates(data.recentLocations);\r
+            if (data.recentLocations.size() > MAX_RECENT_IMPORT_PATHS)\r
+                data.recentLocations.pollLast();\r
+            writePreferences();\r
+        } catch (IOException e) {\r
+            ErrorLogger.defaultLogError("Failed to write preferences", e);\r
+        }\r
+        return true;\r
+    }\r
+}\r