级别: 中级 John Casey (jocasey@us.ibm.com), WebSphere Developer for z/Series 全球技术销售支持, IBM
2006 年 9 月 04 日 LPEX 用户概要允许您为特定任务组织 LPEX 编辑器自定义,而不用手动自定义 LPEX 编辑器。本文介绍如何在WebSphere® Developer for zSeries v6.0 中创建和实现用户概要。
引言
在我以前的文章 Extending the LPEX Editor in WebSphere Developer for zSeries v6.0 中,我介绍了如何创建和部署新的 LPEX 操作。要使用新的操作,您需要手动识别 LPEX 编辑器的此操作及其快捷键。有了用户概要,您就不用手动自定义 LPEX 编辑器了。
用户概要的另一个好处在于提供了一种方法来对 LPEX 编辑器自定义进行分组。通过创建多个用户概要,您可以针对某一特定需求激活一组自定义。使用 LPEX 编辑器基本概要,您可以将编辑器配置为采用几种流行编辑器(例如 ISPF、XEDIT、VI 和 Emacs)的键盘与个性化命令。当选择要使用哪一个基本概要时,LPEX 编辑器会为正在打开的文档运行一组相应的定义,如果是手动调用,则 LPEX 编辑器会为已打开的文档运行一组相应的定义。
您可以通过 userProfile 方法将用户概要实现为 Java ™ 类。然后使用 userProfile 方法通过调用 LPEX 命令和操作来编写 LPEX 自定义代码。当 LPEX 编辑器打开一个新文档时,它会发出 updateProfile 命令,该命令将调用定义为缺省用户概要的类的 userProfile 方法。
LPEX 提供了三种上下文(或者说是范围),它们决定哪个编辑器设置对正在编辑的文档有效:
- install 上下文标识从
com.ibm.lpex.core 包中的 Install.properties 文件读取的编辑器设置。
- Default 编辑器设置位于 Preferences 视图的 LPEX 编辑器页面中。它们可通过
Install.properties 文件设置,或者在注册客户端 LPEX 插件时由用户手动设置,如本文所介绍的。
- 最后,current 上下文描述具有编辑焦点的特定文档的设置。每个文档都具有各自的current 上下文设置。通过使用这些设置,可以使编辑某个文档中的文本时可用的操作、键分配或编辑器参数与编辑另一个文档中的文本时不同。
第一次打开一个文档时,其上下文设置为 default。当执行 preload 方法时,我们将利用这一事实将缺省用户概要设置为用户概要类。因而,当打开 LPEX 编辑器时,它将运行 userProfile classname 方法,此方法定义新的操作,分配快捷键,并将我们的首选编辑器样式设置为 ISPF。
在本文中,我们将向您介绍如何为 LPEX 编辑器创建、测试和部署用户概要。尽管您不需要熟悉 Java 或 Eclipse 来按照本文的指导一步步进行操作,但我们假定您对 Eclipse 或基于 Eclipse 的某种产品有所了解,例如 WebSphere Developer for zSeries。
创建用户概要插件
在 Eclipse 平台中,插件是打包函数的基本单元。您可以使用插件清单文件 plugin.xml 描述插件。我们的 LPEX 编辑器用户概要将被打包为插件。
尽管可以使用任何 Java IDE 构建 Eclipse 插件,但 Eclipse 插件开发环境(Eclipse Plug-in Development Environment,PDE)提供了简化插件开发的工具。例如,PDE 创建了支持插件定义和部署的项目结构,以及 Java 编码。PDE 提供向导来简化清单文件和支持 Java 类的定义。
启用插件开发环境
-
启动 WebSphere Developer for zSeries。当提示输入工作区名称时 ,创建一个在其中开发插件的新工作区。
-
从 Workbench 菜单栏选择 Windows - Preferences。
-
在左侧的 Preferences 视图中,展开 Workbench 并选择 Capabilities。
-
在 Preferences 视图右侧的 Capabilities 窗格中,展开 Eclipse Developer 并选中 Eclipse Plug-in Development 和 Eclipse Plug-in Development Examples 的复选框。
-
在 Preferences 视图的底部单击 OK,以保存更改并关闭窗口。
创建插件开发项目
-
从 Workbench 菜单栏选择 Window - Open Perspective - Other ...。
-
在 Select Perspective 窗口中,选择 Plug-in Development 并单击 OK,以打开为插件开发人员提供帮助的透视图。
-
通过选择 File - New - Plug-in Project 启动 New Project Wizard。
-
在 Plug-in Project 页面上输入
com.mycompany.lpexExtensions 作为项目名,然后单击 Next。
-
在 Plug-in Content 页面上单击 Finish,以创建插件项目以及必要的文件夹和文件。
您应该在左侧的 Package Explorer 视图中看到新插件 com.mycompany.lpexExtensions,以及在编辑器区域打开的该插件的 plugin.xml 文件。
提示:编辑器中活动文件的选项卡为蓝色,如果将鼠标悬停在蓝色区域上,则会显示文件 com.mycompany.lpexExtensions/plugin.xml 的全名。
完成插件清单文件
插件(例如 LPEX 编辑器)可能已定义了客户端插件可以使用的扩展点。这些扩展点是基本编程接口。插件清单捕获客户端插件将使用哪些 LPEX 扩展点。
-
在编辑器中,单击 Dependencies(使用底部的选项卡或 Overview 页面上文本中的链接),以切换到 Dependencies 页面。
-
在 Dependencies 页面上,单击 Add 按钮。
-
在 Plug-in Selection 窗口上的 Select a Plug-in 字段中输入
com.ibm.lpex,这样会将显示在此字段下的列表减少为三个条目。选择 com.ibm.lpex 并单击 OK。此步骤会将这些插件添加到插件项目的类路径中。
-
在编辑器中,单击 Extensions(使用底部的选项卡),以切换到 Extensions 页面。
-
在 Extensions 页面上,单击 Add 按钮。
-
在 New Extension 窗口中,选择 com.ibm.lpex.preload 并单击 Finish。
-
右键单击 com.ibm.lpex.preload 并单击 New - preload。
-
在 Extension Element Details 下,将生成的类名称更改为
com.mycompany.lpexExtensions.Preload。
-
按 Ctrl+S,以将更改保存到 plugin.xml。
创建 Preload 类
Preload Java 类定义了 preload 方法。此方法(由 LPEX 编辑器调用)将我们的用户概要类定义为缺省用户概要。
要创建这种类,请执行以下步骤:
-
在 Package Explorer 视图中,展开 src 文件夹,然后右键单击 com.mycompany.lpexExtensions 包。在上下文菜单中选择 New - Class,如图 1 所示:
图 1. 指定 Preload 类
-
在 New Java Class 窗口中,验证 Source Folder 和 Package 字段是否分别预填写为
com.mycompany.lpexExtensions/src 和 com.mycompany.lpexExtensions,这样填写是因为您已从包文件夹启动了 New Java Class 向导。
- 在 Name 字段中输入
Preload。
- 单击 Interfaces 文本框旁边的 Add 按钮。
-
在 Implemented Interfaces Selection 窗口的 Choose interfaces 字段中输入
lpexp,这样就缩短了您键入的列表。
-
选择 LpexPreload 并单击 OK。此步骤会将
com.ibm.lpex.core.LpexPreload 添加到 Interfaces 框。
-
单击 Finish,以创建此类并打开它进行编辑。
-
在 Preload.java 的编辑器中,将下列语句添加到现有 import 语句之后:
import com.ibm.lpex.core.LpexView;
-
在 Preload.java 的编辑器中,将下列语句添加到 preload 方法中:
LpexView.doGlobalCommand("set default.updateProfile.userProfile
com.mycompany.lpexExtensions.UserProfile1");
-
按 Ctrl+S,以保存更改。
-
验证您的代码是否与清单 1 中的代码类似。您可以忽略注释。确保没有错误。
- 关闭 Preload.java 的编辑器。
清单 1. 已完成的 Preload 类定义(已删除了模板生成的注释)
package com.mycompany.lpexExtensions;
import com.ibm.lpex.alef.LpexPreload;
import com.ibm.lpex.core.LpexView;
public class Preload implements LpexPreload {
public void preload() {
LpexView.doGlobalCommand(
"set default.updateProfile.userProfile
com.mycompany.lpexExtensions.UserProfile1" );
}
}
|
创建用户概要类
将 LPEX 编辑器用户概要实现为具有 userProfile 方法的 Java 类。然后通过调用 userProfile 方法中的 LPEX 命令和操作来编写 LPEX 自定义代码。
要创建这种类,请执行以下步骤:
- 在 Package Explorer 视图中,展开 src 文件夹,然后右键单击 com.mycompany.lpexExtensions 包。在上下文菜单中选择 New - Class。
- 在 New Java Class 窗口中,验证 Source Folder 和 Package 字段是否分别预填写为
com.mycompany.lpexExtensions/src 和 com.mycompany.lpexExtensions。
- 在 Name 字段中输入
UserProfile1。
- 单击 Finish,以创建此类并打开它进行编辑。
-
在 UserProfile1.java 编辑器中,在
package 语句后添加两个import 语句,如清单 2 所示。
-
添加
userProfile 方法以及其所有语句,如清单 2 所示。
-
按 Ctrl+S,以保存更改。
-
验证您的代码是否与清单 2 中的代码类似。您可以忽略注释。确保没有错误。
- 关闭 UserProfile1.java 的编辑器。
清单 2. 已完成的 UserProfile1 类(已删除了模板生成的注释)
package com.mycompany.lpexExtensions;
import com.ibm.lpex.core.LpexAction;
import com.ibm.lpex.core.LpexView;
public class UserProfile1 {
public static void userProfile(LpexView lpexView) {
// define new action
lpexView.defineAction("insertSemicolon2Action", new LpexAction() {
public void doAction(LpexView view) {
// go to the end of the line
view.doAction(view.actionId("contextEnd"));
// insert a semicolon and comment string
view.doCommand("insertText ; /* */");
// position the cursor in the middle of the comment
view.doAction(view.actionId("left"));
view.doAction(view.actionId("left"));
view.doAction(view.actionId("left"));
}
public boolean available(LpexView view) {
// allow the action to run for any visible text line in a writable document
return view.currentElement() != 0 && !view.queryOn("readonly");
}
});
// Assign keys "Ctrl+5" to run insertSemicolon2Action
lpexView.doCommand("set keyAction.c-5 insertSemicolon2Action");
// set ispf as default editor style
lpexView.doDefaultCommand("set default.updateProfile.baseProfile ispf");
/* lpexView.doDefaultCommand("updateProfile"); */
}
} |
测试用户概要插件
Eclipse 提供了一个运行时环境,运行时 Workbench,以便在开发插件的过程中同时对其进行测试。要启动该运行时 Workbench,请执行以下步骤:
- 转到 plugin.xml 的编辑器中的 Overview 页面(单击 Overview 选项卡)。
- 在 Overview 页面上,单击 Launch a runtime workbench,这样就启动了可以访问您的插件代码的 WebSphere Developer for zSeries 的另一个实例。
观察 Preload 类的效果
- 通过从菜单栏选择 Window - Preferences 来打开 Preferences 页面。
- 在 Preferences 窗口中,展开左侧的 LPEX Editor 并选择 User Profiles。请注意,Preload 方法已被调用,并将
com.mycompany.lpexExtensions.UserProfile1 设置为缺省用户概要,如图 2 所示:
图 2. 观察 Preload 类的效果
- 单击 Cancel,以关闭 Preferences 窗口。
测试用户概要
要测试新操作,您需要在 z/OS LPEX 编辑器中打开一个文件。执行此操作的一个简单方法是,使用随 WebSphere Developer for zSeries 一起提供的示例代码创建一个新项目。由于我们的用户操作支持使用分号作为命令结尾的 PL/I 语法,因此我们将使用 PL/I 示例。
要测试您的操作,请执行以下步骤:
- 从菜单栏选择 File - New - Example。
- 在 New Example 窗口中,展开 Examples,再展开 Workstation PL/I,选择 PLI Sample 1,然后单击 Next。
- 在 z/OS Local Project 页面上的 Project name 字段中输入
PLITest,然后单击 Finish。
- 如果出现 Confirm Perspective Switch 对话框,则单击 Yes。
- 在 z/OS Projects 视图中展开项目 PLITest,展开文件夹 pli,然后双击 HelloApp.pli,以对其进行编辑。
- 将光标置于文本行的行首,然后按 Ctrl+5。将执行您的新操作,在这一行末尾加分号,并在其下面新插入一行。
- 也可以使用操作命令从命令行运行您的操作。将光标置于文本行的行首,然后按 Esc,从而将光标置于命令行中。在命令行区域输入 action insertSemicolon2Action,然后按 Enter。将随即执行您的新操作。
- 测试新操作结束后,关闭 HelloApp.pli 的编辑器。无需保存更改。
- 在测试 Workbench 窗口的菜单栏中选择 File - Exit,以关闭此 Workbench 窗口。
将插件部署到 WebSphere Developer for zSeries
要部署插件,首先需要将其从 PDE 导出,然后将该插件复制到 WebSphere Developer for zSeries 安装目录。
从 PDE 导出插件
在开发过程中,工作区中的插件“按原样”使用,这样您就可以快速对其进行测试和调试。当对新插件的操作满意后,您将希望发布此插件,以便其他人使用。发布插件最简单的方法是使用导出插件和代码片段向导:
- 从 WebSphere Developer for zSeries 菜单栏中选择 File - Export...
- 在 Select 窗口中选择 Deployable plug-ins and fragments,然后单击 Next。
- 在 Deployable plug-ins and fragments 窗口中,选中在 Available Plug-ins and Fragments 文本框中列出的 com.mycompany.lpexExtensions 复选框。
- 在 Export Options 字段中,从列表选择目录结构。您可将插件部署为如下三种格式之一:
- 单个 ZIP 文件,其内容可以解压缩到任何基于 Eclipse 的产品中。
- 目录结构,因而导出操作的目标位置可以为 Eclipse 安装的根目录。
- 更新站点的单个 JAR 存档。此选项为每个插件创建一个 JAR,并将这些 JAR 置于所选目的地的 /plugins/ 子目录中。
- 在 Destination 字段(其包含您希望在其中写入目录结构的路径名称)中输入
C:\WDzPlugins。
- 单击 Finish 以启动构建过程,这样会显示一个消息框,指示正在进行构建。您不需要按任何按钮。当完成构建后,此对话框将关闭。
将插件复制到 WebSphere Developer for zSeries 安装目录
- 通过 Windows Explorer 导航至
WDzPlugins 目录,以查看结果。该目录应该包含一个子目录 plugins,其包含您选择导出的插件的文件夹。此文件夹包含一个 JAR 文件(它包含您的 preload 和用户概要代码)和 plugin.xml(它是您插件的清单)。
- 将
c:\WDzPlugins\plugins\com.mycompany.lpexExtensions_1.0.0 文件夹移至 WDz60\wdz\eclipse\plugins,其中,WDz60 是 WebSphere Developer for zSeries 安装目录。
验证插件是否正常工作
- 停止 WebSphere Developer for zSeries 并重新启动它。
- 验证该用户概要是否已添加到 Preferences 视图中的 LPEX editor User Profile 页面。
- 在 LPEX 编辑器中打开 PL/I 文件,并确认
insertSemicolon2Action 是否正常工作。
结束语
用户概要有助于轻松自定义 LPEX 编辑器。它们使得不需要手动定义,并为特殊任务提供了一种组织编辑器设置的方法。本文介绍了如何在 WebSphere Developer for z/Series 中扩展 LPEX 编辑器,以便在编辑器打开时自动加载用户概要。遵循本文的步骤,您将获得一个模型,您可以采用此模型为 LPEX 编辑器创建自己的用户概要。
参考资料 学习
讨论
关于作者  | |  | John Casey 是 IBM 认证应用程序开发专家。在供职于 IBM 的 27 年间,他曾参与分布式平台和 zSeries 平台上的很多应用程序项目。他曾在 IBM 内部和外部举行过很多技术研讨会并负责撰写相关培训材料。他目前的主要职责是帮助全球的 IBM 客户了解和使用 IBM 开发工具(如 WebSphere Developer for zSeries 和 WebSphere Studio Asset Analyzer),以满足他们的应用程序转换需求。您可以通过 jcasey@us.ibm.com 与 John 联系。
|
对本文的评价
|