副标题#e#
配景
Eclipse 从推出到此刻一直很是乐成,而且大部门乐成源自组成 Eclipse 平 台的各个项目。个中包罗的一个项目名为 Plug-in Development Environment( PDE)。假如您曾经在 Eclipse 中建设过插件,那么必然利用过 PDE。PDE 是一 组用于辅佐建设、打包和打点插件的东西。
我们将会合精神研究 PDE 中提供的模板成果。假如您还记得在 Eclipse 中 实验建设第一个插件时的情景,则知道一切都是从 New Plug-in Project 领导 开始的。
图 1. PDE 插件领导
然后,在建设第一个插件的进程中,您无意中发明白很有代价的对象。
图 2. PDE 插件领导模板
噢,我的 —— 模板!PDE 提供了各类模板让您开始 Eclipse 插件建设之旅 。本文的目标是接头如何建设这些模板,从而简化最终用户利用扩展点或代码时 面对的进修曲线。
建设模板
方针
我发明进修常识的最佳要领是通过一个精采的简朴示例。那么,猜猜是什么 ?那就是我们本日将要做的工作。我们将开拓一个用于建设纯真视图的简朴模板 。我但愿通过本文可觉得未来的模板建设事情打下基本。
建设插件
本次路程的第一站是建设新插件项目(File > New > Project > Plug-in Project)。请利用模板。确保项目与 org.eclipse.pde.ui 之间存在 依赖性。此操纵完成后,可以转至插件编辑器的 Extensions 选项卡,然后开始 建设模板。
模板领导
用于建设模板的最重要的扩展点是 org.eclipse.pde.ui.pluginContent。此 扩展点可以或许孝敬用于为 PDE 插件项目建设附加内容的领导。建设了插件列表和 要害文件后,可以利用这些领导来将更多文件和扩展添加到初始架构中。此领导 的实现将按照用户在领导中的选择基于自界说的参数化模板添加内容。此刻,让 我们开始利用此扩展点。
图 3. 示例扩展页面
#p#副标题#e#
在图 3 中,我们界说了一个带有 ID (com.ibm.pde.simple.template.wizard)、名称(Simple View Wizard)图标 和类界说的新领导(拜见以下代码)。类界说的重要要领是 createTemplateSections(),该要领认真返回驱动内容建设的模板部门。下一节 将接头如何建设模板文件以及建设之后毕竟有哪些内容驻留在模板部门中。
清单 1. SimpleViewTemplateWizard.java
package com.ibm.pde.simple.template;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.ITemplateSection;
import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
public class SimpleViewTemplateWizard extends NewPluginTemplateWizard {
protected IFieldData fData;
public void init(IFieldData data) {
super.init(data);
fData = data;
setWindowTitle("Simple View Wizard");
public ITemplateSection[] createTemplateSections() {
return new ITemplateSection[] {new SimpleViewTemplateSection()};
}
}
模板文件
图 4. 模板项目布局
本次路程的下一站是建设用于生成代码的模板。为此,必需正确配置项目。 假如看一看图 4,则会发明有一个 templates_3.2 文件夹。此文件夹的名称十 分重要,因为它将指示 PDE 此模板合用于哪些版本的 Eclipse。假如但愿模板 可以在 V3.1 及更高版本上运行,请将文件夹定名为 templates_3.1。此模板文 件夹的子文件夹是 viewtemplate 而且暗示需要与模板关联起来的文件分组,称 为 分区。可以将此文件夹定名为任意名称。
在分区文件夹下,有两个文件夹:bin 和 java。这两个文件夹包括建设模板 时将复制的内容。java 文件夹中的内容很是重要,因为这是暗示视图的类。由 于模板系统将为用户需要的名称自动换出变量 $className$,因此将其定名为 $className$.java。
在此类文件内,尚有一些需要用户自界说的变量替换。这些变量替换的名称 十分机动,将在下一节中接头,接头的主要内容会合在模板分区上。
清单 2. $className$.java
package $packageName$;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;
public class $className$ extends ViewPart {
public void createPartControl(Composite parent) {
Label label = new Label(parent, SWT.CENTER);
%if importantMessage
String message = new String("$message$!!!");
%else
String message = new String("$message$");
%endif
label.setText(message);
}
public void setFocus() {}
}
模板分区
#p#分页标题#e#
模板分区是包括驱动模板输入的 UI 和节制逻辑的 Java 类。模板分区必需 实现 ITemplateSection 接口。为利便起见,PDE 提供了一个抽象类 OptionTemplateSection,利用它可觉得您节减大量时间。可以对模板分区执行 的操纵有许多(我将把这些内容给您留作操练以研究附带的代码样例),我们将 去存眷更重要的内容。第一步是确保通过 addPages(…) 要领添加领导页面。 在这个简朴的例子中,我们只在第一个页面中添加一个页面。
清单 3. SimpleViewTemplateSection.java
...
public void addPages(Wizard wizard) {
WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_INTRO);
page.setTitle("Simple View Template");
page.setDescription("Creates a simple view");
wizard.addPage(page);
markPagesAdded();
}
...
下一步是为客户提供 UI 以便他们可以利用模板。通过声明模板所利用的变 量,也可以通过利用 addOption(…) 要领添加选项来完成。在我们的类中,有 一种利便的要领 createOptions(),结构函数将挪用此要领来建设选项。
清单 4. SimpleViewTemplateSection.java
...
private static final String KEY_CLASS_NAME = "className";
private static final String KEY_VIEW_NAME = "viewName";
private static final String KEY_MESSAGE_NAME = "message";
private static final String KEY_IMP_MESSAGE_NAME = "importantMessage";
...
private void createOptions() {
addOption(KEY_CLASS_NAME, "Class Name ", "SimpleView", 0);
addOption(KEY_VIEW_NAME, "View Name", "SimpleView", 0);
addOption(KEY_MESSAGE_NAME, "Message", "Hello World", 0);
addOption(KEY_IMP_MESSAGE_NAME, "Important?", false, 0);
}
...
图 5. 简朴的视图选项领导页面
模板系统提供了若干种要领辅佐添加选项;在 BaseOptionTemplateSection 类中可以看到这些要领的实现。可是,假如需要比模板系统提供的更大的机动性 ,发起利用 registerOption(…) 要领。可以建设一组本身的选项,譬喻,如 果需要利用组合框选项,则需要将 ComboChoiceOption 实例化并挪用 registerOption(…) 要领(有关选项的说明,请拜见表 1;有关完整的范例层 次布局,请拜见图 6)。
表 1. PDE 模板选项
选项(类名) | 说明 |
BlankField | 用于在模板分区领导页面中建设空缺空间 |
StringOption | 用于在模板分区领导页面中收集来自用户的字符串 |
BooleanOption | 用于在模板分区领导页面中收集来自用户的布尔型选项 |
RadioChoiceOption | 用于在模板分区领导页面中收集来自用户的一组单选选项 |
ComboChoiceOption | 用于在模板分区领导页面中收集来自用户的一组组合选项 |
ChoiceOption | 不发起利用 —— 请利用 RadioChoiceOption 或 ComboChoiceOption |
图 6. 选项条理布局
最后一步是编写建设和填充感乐趣的扩展点的代码。在我们的简朴示例中, 我们只存眷了 org.eclipse.ui.views 扩展点。在 PDE 模板系统中,建设模板 时将挪用 updateModel(…) 要领,而且在这里但愿您以模板建设者的身份建设 扩展以及其他内容。另请留意,还可以建设多个扩展点,纵然下面的代码清单显 示只建设一个扩展点。
清单 5. SimpleViewTemplateSection.java
...
protected void updateModel(IProgressMonitor monitor) throws CoreException {
IPluginBase plugin = model.getPluginBase();
IPluginModelFactory factory = model.getPluginFactory();
// org.eclipse.core.runtime.applications
IPluginExtension extension = \
createExtension("org.eclipse.ui.views", true);
IPluginElement element = factory.createElement (extension);
element.setName("view");
element.setAttribute("id", getStringOption (KEY_CLASS_NAME));
element.setAttribute("name", getStringOption (KEY_VIEW_NAME));
element.setAttribute("icon", "icons/sample.gif");
String fullClassName =
getStringOption(KEY_PACKAGE_NAME)\
+"."+getStringOption (KEY_CLASS_NAME);
element.setAttribute("class", fullClassName);
extension.add(element);
plugin.add(extension);
}
...
org.eclipse.pde.ui.templates
#p#分页标题#e#
在竣事之前,需要留意的是 org.eclipse.pde.ui.templates 扩展点很是重 要。此扩展点提供了通向自界说插件领导的进口。假如有要建设模板的特定扩展 点,发起扩展该扩展点,因为它答允客户利用模板以及其他内容(拜见图 7)。 在本例中,只重用了 OptionTemplateSection implementation (SimpleViewTemplateSection)。我想强调的是假如建设了自界说扩展点而且 提供了模板,则它将对用户起到辅佐浸染。
记恰当您第一次进修 Eclipse 时必需建设一个视图么?视图模板在领略事情 道理时具有极高的代价。此刻,这种实惠您的用户也将感觉获得。
清单 6. plugin.xml
<extension
point="org.eclipse.pde.ui.templates">
<template
class="com.ibm.pde.simple.template.SimpleViewTemplateSection"
contributingId="org.eclipse.ui.views"
id="com.ibm.pde.simple.template"
name="Simple View"/>
</extension>
图 7. 自界说插件领导
竣事语
在完成这项难题的事情之后,保佑我们可以或许建设项目而且让它可以或许利用简朴 的模板。建设了此项目后,我们可以轻松地查察代码而且开始相识错综巨大的模 板。还可以启动一个运行时事情区情况并查察模板的功效。
图 8. 简朴的视图
我们的方针是向您先容 PDE 的模板系统,而这一方针通过一个亲手实践的示 例实现了。勉励您下载下面列出的示例来查察其事情道理。但愿它向您证明白 PDE 的模板系统为最终用户提供了一种强大的要领可以快速地引导建设项目,或 者大概使自界说扩展点的示例实现很显眼。假如您以为 PDE 模板系统缺少某些 区域,我们十分乐意收到 Bugzilla 条目 形式的反馈。我们一直在不绝地寻找 改造 PDE 的要领。
本文配套源码