--- /dev/null
+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