最后,需要修改 openContentStream() 方法的很大一部分才能够将文件中的 $title 值替换为用户提供的值(参见清单 15)。在配有大量不同值的模板中,您可以使用更精确的解决方案,例如扩展 FilterInputStream 并替换一整组不同值的新类。
清单 15. 最终的 openContentStream() 方法 /** * Initialize the file contents to contents of the given resource. */ private InputStream openContentStream(String title ) throws CoreException { final String newline = " "; // System.getProperty("line.separator"); String line; StringBuffer sb = new StringBuffer(); try { InputStream input = this.getClass().getResourceAsStream( "index-xhtml-template.resource"); BufferedReader reader = new BufferedReader(new InputStreamReader( input)); try { while ((line = reader.readLine()) != null) { line = line.replaceAll("${title}", title); sb.append(line); sb.append(newline); } } finally { reader.close(); } } catch (IOException ioe) { IStatus status = new Status(IStatus.ERROR, "ExampleWizard", IStatus.OK, ioe.getLocalizedMessage(), null); throw new CoreException(status); } return new ByteArrayInputStream(sb.toString().getBytes()); }
openContentStream() 方法的功能现在不仅限于装入资源文件的内容和将其作为 InputStream 返回。新代码将迭代流,使用 InputStreamReader 读取流,并替换每行中的值 $title。结果将以 ByteArrayInputStream 的形式返回,这与首次生成 NewXHTMLFileWizard 类时使用的流对象相同。
创建新项目向导
如果您从头阅读了文本,则应当有一个在已有项目中创建新文件的向导。但是为什么不到此为止呢?因为在诸如 XHTML 文件之类的资源中企业可能需要遵循一些约定,项目布局可能也有相应的约定。
通过向已有项目中添加相对较少的内容,就可以构建将整个项目连同文件夹和一些初始文件添加到工作区中的向导。向导将为 Web 站点 Example.com 创建新文件夹并创建 images 文件夹和 styles 文件夹。在 styles 文件夹中,向导将创建名为 site.css 的层叠样式表(Cascading Style Sheet,CSS)文件。向导最后通过重用 NewXHTMLFileWizard 类中的方法来添加新的 XHTML 文件,该文件的初始名称是新项目的名称附带一些新文本。
构建新 NewSiteProjectWizard
由于有一个插件项目已经设置并正在运行,因此无需使用向导构建新类。相反,您自己可以通过创建扩展自 Wizard 并且实现两个接口 INewWizard 和 IExecutableExtension 的新类来构建新向导。
把 NewSiteProjectWizard 新类添加到 NewXHTMLFileWizard 类所在的包中。查看清单 16 中的 NewSiteProjectWizard 类声明,并确保扩展 Wizard 类。同时添加 INewWizard 和 IExecutableExtension 接口。
由于 NewSiteProjectWizard 类扩展同一个类并且实现由 NewXHTMLFileWizard 类实现的一个接口,因此如果将两者相比较,您会发现共有方法。清单 16 中显示了 NewSiteProjectWizard,这里为了简短起见省略了方法的内容(您将稍后在本文中看到这些内容)。
(编辑:aniston)
|