说到切换工作区,很快会想到 Eclipse 的“ Switch Workspace ”按钮的功能,他能够从另一个工作区加载用户的数据,如果我们在 Eclipse RCP 的开发中要实现此类似的功能的话,不妨可以参考一下 Eclipse 本身的实现。
此功能的实现在 org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction 类中,位于 org.eclipse.ui.ide 插件里,要查看源代码的话,可以从 Eclipse IDE 的插件列表视图中将此插件导出为源文件项目即可。
下面来看看 OpenWorkspaceAction 的做法是如何实现的:
1) 通过用户的输入(工作空间选择对话框)信息来拼装一个启动命令,通过这个命令直接可以启动一个 Eclipse 平台的实例;
2) 通过方法 System..setProperty ( ”eclipse.exitdata” , ”value” )将这个启动命令存储在 System 的 eclipse.exitdata 属性中;
3) 将 System 的 eclipse.exitcode 属性设置为 24 ( relaunch )。 eclipse.exitcode 可以有三种状态,在 IApplication 中注册的,分别是 0 ( EXIT_OK ), 23 ( EXIT_RESTART ) , 24(EXIT_RELAUNCH), 具体每个状态的含义可以参考 IApplication 的帮助。
4) 调用 window.getWorkbench().restart() 方法重新启动。
明白了整个的实现过程后,再来看看关键部分的功能实现,首先是 OpenWorkspaceAction 的 buildCommansLinke ( String workspace )方法:
再来看方法 promptForWorkspace(), 作用是提示选择工作空间:
接下来是 restart 方法:
最后是 run() 方法: