某些时候,我们的Action的执行依赖于某些配置已经完好才能运行,即要检查环境是否已经配置完好。
我们可以这样做:在Action的run中进行判断,然后将用户引导至配置页面进行环境配置。对用户体验是非常好的。
public class StartActionDelegate implements IWorkbenchWindowActionDelegate {
private IWorkbenchWindow window;
public void dispose() {
}
/*
* @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow)
*/
public void init(IWorkbenchWindow window) {
this.window = window;
}
/*
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
//查询首选项是否已经配置了tomcat的home目录
IPreferenceStore pref = TomcatLauncherPlugin.getDefault().getPreferenceStore();
String appHome = pref.getString(TOMCAT_PREF_HOME_KEY);
if("".equals(appHome)){//App Home未配置
//将用户引导至首选项配置页面
String pageId = "com.sysdeo.eclipse.tomcat.Page3";
PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
PreferenceDialog pd = new PreferenceDialog(shell, manager);
pd.setSelectedNode(pageId);//设置选中的页面
pd.open();
/**
* 上述代码可用这一行代替
*PreferencesUtil.createPreferenceDialogOn(getShell(), pageId, new String[] { pageId,"com.sysdeo.eclipse.tomcat.Page4"}, null).open();
*/
return;
}else{
//to-do something
}
}
如图即为点击StartTomcatAction后,将用户引导到的了如下首选项页面:
ps:代码是在tomcatplugin基础上修改的。
附录:
如下这样用也是可以的:
protected boolean showPreferencePage(GenericServerComposite composite) {
PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage"); //$NON-NLS-1$//$NON-NLS-2$
PreferenceManager manager2 = new PreferenceManager();
manager2.addToRoot(node);
final PreferenceDialog dialog = new PreferenceDialog(composite.getShell(), manager2);
final boolean[] result = new boolean[] { false };
BusyIndicator.showWhile(composite.getDisplay(), new Runnable() {
public void run() {
dialog.create();
if (dialog.open() == Window.OK)
result[0] = true;
}
});
return result[0];
}