更改 plugin.xml 的目的是让 Eclipse 知道 NewSiteProjectWizard 类是可以由 Eclipse 调用的向导。它也被归到先前讨论的 NewXHTMLFileWizard 类所在的类别下。project="true" 属性告诉 Eclipse 它是一个项目,因此它将被显示在相应的上下文中。
addPages() 方法
Eclipse API 包括一些向导类和向导页面类,如果您要执行基本功能并且不需要进行定制,则这些类将十分有用。从技术上讲,NewSiteProjectWizard 可以扩展 BasicNewProjectResourceWizard —— 用于创建基本项目的已有项目向导 —— 虽然设计者在 JavaDoc 中注明不适于创建该类的子类。要获得基本的项目信息(如项目名称),可以使用 BasicNewProjectResourceWizard 所使用的同一个向导页面 —— WizardNewProjectCreationPage 类,如下所示:
清单 18. addPages() 方法 public void addPages() { /* * Unlike the custom new wizard, we just add the pre-defined one and * don't necessarily define our own. */ wizardPage = new WizardNewProjectCreationPage( "NewExampleComSiteProject"); wizardPage.setDescription("Create a new Example.com Site Project."); wizardPage.setTitle("New Example.com Site Project"); addPage(wizardPage); }
此方法将创建页面类的新实例,设定描述和标题,然后将其添加为向导页面。
performFinish() 方法
像 NewXHTMLFileWizard 类一样,NewSiteProjectWizard 也有 performFinish() 方法(如清单 19 所示),该方法将在用户完成向导中的步骤并单击了 Finish 时执行。此方法将调用执行 createProject() 方法的过程,该方法将执行大部分繁琐的创建工作,如创建项目、文件夹和文件。
清单 19. performFinish() 方法 @Override public boolean performFinish() { if (project != null) { return true; } final IProject projectHandle = wizardPage.getProjectHandle(); URI projectURI = (!wizardPage.useDefaults()) ? wizardPage .getLocationURI() : null; IWorkspace workspace = ResourcesPlugin.getWorkspace(); final IProjectDescription desc = workspace .newProjectDescription(projectHandle.getName()); desc.setLocationURI(projectURI); /* * Just like the ExampleWizard, but this time with an operation object * that modifies workspaces. */ WorkspaceModifyOperation op = new WorkspaceModifyOperation() { protected void execute(IProgressMonitor monitor) throws CoreException { createProject(desc, projectHandle, monitor); } }; /* * This isn't as robust as the code in the BasicNewProjectResourceWizard * class. Consider beefing this up to improve error handling. */ try { getContainer().run(true, true, op); } catch (InterruptedException e) { return false; } catch (InvocationTargetException e) { Throwable realException = e.getTargetException(); MessageDialog.openError(getShell(), "Error", realException .getMessage()); return false; } project = projectHandle; if (project == null) { return false; } BasicNewProjectResourceWizard.updatePerspective(config); BasicNewProjectResourceWizard.selectAndReveal(project, workbench .getActiveWorkbenchWindow()); return true; }
(编辑:aniston)
|