IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management | Lotus  >

将 IBM OmniFind Yahoo! Edition 搜索引擎添加到 IBM Lotus Sametime Connect V7.5

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 中级

Srinivas Varma Chitiveli (schitive@us.ibm.com), 咨询软件工程师, IBM

2007 年 1 月 18 日

现在您可以使用 IBM OmniFind Yahoo! Edition 了,它是一款可免费下载的搜索引擎,使用它可以抓取和索引高达五十万 Web 页面或文件系统文件。本文将学习如何使用 Eclipse 插件将 IBM OmniFind Yahoo! 搜索界面集成到 IBM Lotus Sametime Connect 客户端中。

简介

IBM 和 Yahoo! 合作提供了一个可以免费下载的、易于安装和使用的搜索引擎。IBM 的 OmniFind Yahoo! Edition(本文简称为 “OmniFind”)可以抓取和索引高达五十万 Web 页面或文件系统文档,并通过一个操作简单的 Web 界面对内容进行搜索。您可能已经下载了 OmniFind 并且发现它能够快速轻松地设置索引和开始搜索。

现在,您可能正在研究怎样将企业 OmniFind 搜索界面集成到您日常使用的桌面应用程序。如果您是一位 IBM Lotus Sametime Connect 用户,您可能希望在常用工具栏或聊天区域显示一个可点击的 Search 图标。当单击这个 Search 图标时,您希望企业搜索界面能够在浏览器中启动,为您提供搜索服务。这个 Search 图标使您不必手动启动您喜爱的浏览器,也不必键入您的搜索引擎的 URL 。 因此,我将为这个实现添加一些灵活性,这样您可以指定您偏好的浏览器和搜索引擎的 URL。

场景

OmniFind 搜索界面由一个宿主在搜索服务器的 Web 客户机组成。这个 Web 客户机公开了一个编辑框,可输入搜索条目和显示收集到的索引数据结果。这篇文章演示了 Eclipse 和 Sametime 插件的扩展从而实现在您选的浏览器里启动 OmniFind 搜索界面 。本文着重介绍了插件的开发,它能够在工具栏、弹出菜单和聊天窗口中显示可点击的搜索图标。您可以将图标部署到您希望的位置。

为便于理解,在随后的子节中我将从预期的结果开始,为您介绍通过插件实现将图标嵌入到 Sametime GUI 不同的可见区域。本文将在后面的部分中介绍插件的代码实现。

配置参数

为了保持灵活性,我实现了一个插件,它将展开参数页面,您可以指定喜爱的搜索引擎的 URL 和喜爱的浏览器的绝对路径。图 1 中,用红色标识的参数是插件增加的部分。


图 1:IBM OmniFind Yahoo! 参数
IBM OmniFind Yahoo! 参数

在上面显示的搜索引擎的 URL 中,必须标记一个代替物来指定搜索条目。在下面的例子中,URL 引用了 OmniFind 搜索服务器,搜索条目的代替物用 <SUB> 标识:

http://mecklenburg.wma.ibm.com:8080/search/?index=Default&start=0&results=10& preview=false&output=html&query=<SUB>

可以使用这个 URL 代表进行适当参数设置的 Google 或者 Yahoo 搜索服务器的代替物。在随后的内容中,您将看到如何在 Sametime Connect 客户机上用选择的个人数据替换 <SUB>

工具栏中的 Search 图标

图 2 演示了 Sametime Connect 客户机主工具栏上面的 Search 图标:


图 2: 主工具栏中的 Search 图标
工具栏中的 Search 图标

单击上面的 Search 图标来使用您预先定义好的 URL 打开一个浏览器窗口。

图 3 显示了在指定浏览器中启动的 OmniFind 搜索界面:


图 3:基于 Web 的搜索界面
基于 Web 的搜索界面

聊天视图中的 Search 图标

在聊天视图中添加搜索图标可以帮助我将精力集中在聊天室中。

图 4 显示了将 Search 图标显示在聊天视图中的插件实现:


图 4: 聊天视图中的 Search 图标
聊天视图中的 Search 图标

当单击上面的图标,浏览器将显示在选项卡区域。

图 5 显示了选项卡区域具有指定 URL 的浏览器,证明了插件可以在一个内部浏览器中启动 URL :


图 5: 内部浏览器中的 Search 界面
内部浏览器中的 Search 界面

弹出菜单中的 Search 图标

图 6 显示了弹出菜单中的 Search 项。


图 6: 弹出菜单中的 Search 项
弹出菜单中的 Search 项

当您选择自己的好朋友并单击弹出菜单时,将启动搜索页面并将用户电子邮件的 ID 作为搜索条目。这在博客、developerWork 或由 IBM OmniFind Yahoo! Edition 索引的企业内容中搜索某人的文章时非常有用。





回页首


开始

要构建搜索插件,您需要使您的插件环境适合 Lotus Sametime。下面是编写该产品任意插件的基本步骤:

  1. 下载 Eclipse SDK 3.2 ,安装面向 Eclipse 的 J9 Java Development Tools (JDT) 启动插件。
  2. 配置您的运行时以使用 J9。
  3. 为 Java Developer Kit (JDK) 1.4 配置 Eclipse 编译器设置。
  4. 指定 Lotus Sametime 为 Eclipse 中的目标平台。

这开始的四个步骤在 Lotus Sametime Lotus Sametime Software Development Kit 中做了更详细的说明,所以本文不再多做介绍。

将 Lotus Sametime 作为 Eclipse 中的目标平台

要使用 Eclipse 为 Lotus Sametime 创建插件,必须指定 Lotus Sametime 作为目标平台。 在 Eclipse 中,选择 Window > Preferences 打开 Preferences 对话框。在左边的面板中选择 Plug-in Development > Target Platform

在 Location 字段中,浏览 Lotus Sametime Connect 客户机安装位置,如 C:\Program Files\IBM\Sametime,并单击 Reload。参见下图:


图 7: Preferences 对话框
Preferences 对话框

创建一个新的插件开发项目

在 Eclipse 中创建开始一个项目所需的插件。要实现此目的,执行以下步骤:

  1. 选择 File > New Project
  2. 在 New Project 对话框中,打开 Plug-in Development 文件夹,选择 Plug-in Project,然后单击 Next
  3. 在 New Plug-in Project 向导中,将项目命名为 com.developerworks.sametime.search ,然后单击 Next
  4. 在下一个向导面板中,完成以下字段:
    • Plug-in ID:com.developerworks.sametime.search (或类似内容)
    • Plug-in Version: 1.0.0
    • Plug-in Name:Search Plug-in (与插件 ID 相同)
    • Plug-in Provider:(输入公司名字)
  5. 选择 “Generate an activator, a Java class that controls the plug-in's life cycle”“This plug-in will make contributions to the UI” 选项(参见图 8)。单击 Finish 结束。

图 8:New Plug-in Project 向导
New Plug-in Project 向导

Plug-in 依赖关系

搜索插件要集成到 Lotus Sametime Connect 用户界面还需要其他的插件,以下步骤将添加需要的插件:

  1. 在 Eclipse 的 Manifest Editor 中打开 META-INF MANIFEST.MF
  2. 选择 Dependencies 选项卡。
  3. 在 Required Plug-ins 部分添加以下插件(参见图 9):
    • org.eclipse.ui
    • org.eclipse.core.runtime
    • com.ibm.collaboration.realtime.browser
    • com.ibm.collaboration.realtime.people
    • com.ibm.rcp.realtime.livenames
    • com.ibm.collaboration.realtime.imhub
    • com.ibm.collaboration.realtime.chatwindow

图 9: Eclipse 依赖关系
Eclipse dependencies

完成 Eclipse 项目配置后,您可以继续阅读本文后面的部分。这些部分将向您介绍之前提到的各种插件的开发。





回页首


通过参数页面实现参数

展开 Eclipse 插件为 Sametime GUI 客户机添加一个参数页面。在参数页面中,将使用参数描述搜索引擎,指定 Web 界面的 URL 和您喜爱的浏览器的绝对路径:

IBM OmniFind Yahoo! 参数

在 IBM OmniFind Yahoo! 参数页面保存您设置的参数,如图 10 所示:


图 10: IBM OmniFind Yahoo! 参数
IBM OmniFind Yahoo! 参数

要创建搜索参数页面,打开 META-INF/MANIFEST.MF 文件,选择 Extensions 选择卡并单击 Add 按钮打开 New Extension 窗口。在 New Extension 窗口中,选择 Extension Wizards 选项卡。在 Extension Wizards 选项卡右侧的面板中选择 Preference Page 扩展模板并单击 Next。如下图所示。


图 11. New Extension 向导
New Extension 向导

这一步为您的参数页面创建了一个模板,您可以根据需要进行修改。将参数页面的类名设置为 SearchPreferences。将参数页面名字设置为 IBM OmniFind Yahoo! 参数。使用默认的包名 com.developerworks.sametime.search.preferences 作为您的 Java 包名,单击 Finish(参见图 10)。

当创建您的模板时,Eclipse 会为您生成一个名为 PreferenceConstants 的类。这个类可以方便存储您的参数页面使用的常量值。您可以使用以下代码来替换自动生成的代码:


清单 1: 搜索参数的代码片段
                
/**
 * Constant definitions for plug-in preferences
 */
public class PreferenceConstants {
  public static final String SearchEngineDescription = "Search engine description";
  public static final String SearchEngineURL = "Search URL";
  public static final String BrowserLocation = "Browser location";
}

另一个自动生成的类是 PreferenceInitializer 类。这个类的 InitializeDefaultPreference 方法可以为您的参数值填充默认值。注意下面的代码实现了类如何使用您在 PreferenceConstants 类中定义的常量。默认情况下,浏览器位置被放在了 Microsoft Internet Explorer 的默认安装位置(c:\Program Files\Internet Explorer\iexplore.exe)。


清单2: 初始化默认参数代码片段
                
public void initializeDefaultPreferences() {
  IPreferenceStore store = Activator.getDefault().getPreferenceStore();
  store.setDefault(PreferenceConstants.SearchEngineDescription,
  "IBM OmniFind Yahoo! Edition");
  store.setDefault(PreferenceConstants.SearchEngineURL,
  "http://mecklenburg.wma.ibm.com:8080/search/?index=Default&start=0&results=10&
  preview=false&output=html&query=<SUB>");
  store.setDefault(PreferenceConstants.BrowserLocation,
  "c:\\progra~1\\intern~1\\iexplore.exe");
}

模板生成创建了另一个 SearchPreferences 类。这个类为参数页面定义了布局。可以使用下面的构造器片段代替自动生成的构造器:


清单 3: 搜索参数的代码片段
                
public SearchPreferences() {
  super(GRID);
  setPreferenceStore(Activator.getDefault().getPreferenceStore());
  setDescription("IBM Omnifind Yahoo! preferences");
}

public void createFieldEditors() {
  addField(new StringFieldEditor(PreferenceConstants.SearchEngineDescription, 
  "Search engine:", getFieldEditorParent()));
  addField(new StringFieldEditor(PreferenceConstants.SearchEngineURL,
  "Search URL:", getFieldEditorParent()));
  addField(new StringFieldEditor(PreferenceConstants.BrowserLocation,
  "My browser location:", getFieldEditorParent()));
}

我们选择了默认情况下有一个列的 GRID 布局。您添加的每一个 FieldEditor 窗口部件都有自己的行。

您必须提供输入区域,供客户机编辑它的参数值(具体指浏览器位置和搜索 URL)。图 10 显示了合并到您的参数页面中的图形输入工具。

要创建输入区域,您要使用自己的代码替换生成的 createFieldEditors 方法(您必须在父 FieldEditorPreferencePage 类覆盖它)。在上面的代码中,使用 StringFieldEditor Eclipse 窗口部件通过编程的方法添加了三个字段编辑器。





回页首


搜索工具

在深入研究用于扩展插件的代码之前,先来看一些常用代码,它们可以处理 URL 编码、解析 URL 来使用搜索条目替换可替换的变量,以及在外部浏览器中启动指定的 URL 。

下面显示了自解释的工具类:


清单 4: 搜索工具代码片段
                
public class SearchUtilities {
  /*
   * Launch the URL in a external browser
   * 
   * @param String search term(s)
  */
  public static void showSearches(String searchTerm) {
    // get location of the specified browser
    String browserLocation = Activator.getDefault().getPreferenceStore()
				.getString(PreferenceConstants.BrowserLocation);
    try {
      // launch the browser
      Runtime.getRuntime().exec(browserLocation + " " + getSearchURL(searchTerm));
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  /*
   * Replace the substitutable variable in the search URL with search term.
   * Encode the URL for special characters. The parsed URL will be returned.
   * 
   * @param String search terms(s) @return String parser URL string
  */
  public static String getSearchURL(String searchTerm) {
    String searchURL = Activator.getDefault().getPreferenceStore()
				.getString(PreferenceConstants.SearchEngineURL);
    searchURL = searchURL.replaceAll("<SUB>", encodeSearchTerms(searchTerm));
    return searchURL;
  }

  /*
   * Encode the passed string.This function can be modifed further to address
   * various URL encoded characters.
   * 
   * @param String URL string @return String encode special characters
  */
  private static String encodeSearchTerms(String urlString) {
    return urlString.replace(' ', '+');
  }





回页首


在工具栏中实现一个搜索图标

这一节介绍了在工具栏显示搜索图标所需步骤。完成本节的学习之后,您将在 Sametime GUI 中实现如下更改:


图 12: 工具栏中的搜索图标
工具栏中的搜索图标

视图插件扩展

使用 Eclipse IDE 来扩展 “org.eclipse.ui.viewActions”。在图 13 中,指定了创建一个构成视图的动作所需的信息:


图 13: 扩展视图
扩展视图

这是在 plugin.xml 文件中填充的扩展:


清单 5: 改变 plugin.xml 的代码片段
                
<extension point="org.eclipse.ui.viewActions">
  <viewContribution id="com.developerworks.sametime.search.viewContribution1"
          targetID="com.ibm.collaboration.realtime.imhub" >
    <action
      class="com.developerworks.sametime.search.SearchViewActionDelegate"
      enablesFor="0"
      icon="images/searchI.gif"
      id="com.developerworks.sametime.search.action1"
      label="IBM Omnifind Yahoo! search"
      style="push"
      toolbarPath="buddylist/additions"
      tooltip="IBM Omnifind Yahoo! search"/>
  </viewContribution>
</extension>

您需要参考 Sametime SDK 来获得更多关于以上 XML 片段的各种属性的详细信息。

搜索视图动作代表

实现一个在单击 Search 图标时会触发的动作代表是十分必要的。这个动作代表实现了 BuddyListDelegate,它是 Sametime 发布的一部分。run() 方法在没有默认搜索条目下启动了一个外部浏览器:


清单 6: 搜索视图代表代码片段
                
public class SearchViewActionDelegate implements BuddyListDelegate {
  public void run(ISelection arg0) {
    // TODO Auto-generated method stub
    SearchUtilities.showSearches("");
  }
}

下面是搜索动作代表启动的 OmniFind 搜索界面:


图 14: IBM OmniFind Yahoo! 搜索界面
IBM Omnifind yahoo! 搜索界面




回页首


在聊天视图中实现 Search 图标

因为您在聊天窗口中比在 Sametime 主视图中会花费更多时间,所以在聊天窗口工具栏中显示 Search 图标非常有用。在本节末尾,您会看到聊天窗口发生下列变化:


图 15: 在聊天窗口中显示 Search 图标
Search icon in Chat window

聊天窗口的插件扩展

使用 Eclipse IDE 定义对 Sametime 的 “com.ibm.collaboration.realtime.chatwindow.chatArea” 和 “com.ibm.collaboration.realtime.chatwindow.chatAction” 插件的扩展。前一个扩展解决了在聊天窗口中显示 Search 图标所必需的实现,后者实现了在内部浏览器显示搜索界面。内部浏览器使用聊天视图作为显示区域。您也可以在一个外部浏览器显示搜索界面,但是这种方法削弱了 Eclipse 包一些增强的特性。

请参考 Sametime SDK 以了解更多关于 chatArea 和 chatAction 插件的详细信息。

图 16 显示了一个内部浏览器中的搜索界面。同样,因为我们没有指定任何搜索条目,这个搜索界面没有显示搜索条目:


图 16: 内部浏览器中的搜索界面
内部浏览器中的搜索界面

图 17 显示了 Eclipse IDE 和新插件的定义:


图 17: 扩展窗口
扩展窗口

这些是 plugin.xml 文件的附件:


图 7: plugin.xml 中聊天扩展的代码片段
                
<extension point="com.ibm.collaboration.realtime.chatwindow.chatArea">
  <chatArea
    class="com.developerworks.sametime.search.SearchChatWindowExtension1"
    enabled="false"
    id="com.developerworks.sametime.search.searchchatArea1"
    label="IBM Omnifind Yahoo! search"/>
</extension>
<extension point="com.ibm.collaboration.realtime.chatwindow.chatAction">
  <chatAction
    class="com.developerworks.sametime.search.SearchChatActionDelegate2"
    displayName="IBM Omnifind Yahoo! search"
    id="com.developerworks.sametime.search.chatAction2"
    image="images/searchI.gif"
    path="buddy/end"
    showsFor="both"
    tooltipText="Click to show search interface in tabbed area"
    type="buddy"/>
</extension>

聊天动作代表

以下的类可以实现聊天动作和聊天窗口的动作代表:


清单 8: 聊天动作代表的代码片段
                
public class SearchChatActionDelegate2 extends ChatWindowAction {
  public SearchChatActionDelegate2() { }
  public void run() {
    // Show all ChatArea extensions with getChatWindowHandler().addChatAreas()
    // or just one as shown below
    getChatWindowHandler().enableChatArea
    ("com.developerworks.sametime.search.searchchatArea1");		
  }
}


清单 9: 聊天窗口扩展的代码片段
                
public class SearchChatWindowExtension1 extends ViewPart implements ChatWindowExtension {
  ChatWindowHandler handler;
  public SearchChatWindowExtension1() {}

  public void createPartControl(Composite parent) {
    Browser browser = new Browser(parent, SWT.NONE);
    browser.setUrl(SearchUtilities.getSearchURL(""));
  }
  public void setFocus() {}

  public ChatWindowHandler getChatWindowHandler() {
    return handler;
  }

  public void setChatWindowHandler(ChatWindowHandler handler) {
    this.handler = handler;
  }
}





回页首


在弹出菜单中实现 Search 图标

Internet 中的内容过多,因此有时在公司索引中发现关于一个人的信息非常有用。这个索引可以来自博客或 developerWork 文章,或者其他来源。查询基于博客的索引,一个用户名或一个电子邮件的 ID 是很好的搜索条目。本节演示了作为弹出菜单显示的搜索动作。当选择一个人的条目(或几个人的条目)并右键单击时会启动弹出菜单。演示代码从选择的聊天好友提取了电子邮件 ID 并将其作为搜索条目填充到一个外部浏览器的 URL。

图 18 显示了作为弹出菜单一部分的搜索动作:


图 18: Search 作为弹出菜单的一个条目
Search 作为弹出菜单的一个条目

弹出菜单的插件扩展

使用 Eclipse IDE 扩展 “org.eclipse.ui.popupMenus”。在图 19 中,我指定了创建一个动作所需的所有信息,这个动作被指定为一个 Sametime 对象的对象贡献,称为 “com.ibm.collaboration.realtime.livenames.PersonSelection”。 PersonSelection 在 Sametime 中代表了一个聊天好友实例。请参考 Sametime SDK 了解更多详细信息。

图 19 显示了具有插件扩展的 Eclipse IDE:


图 19: Extensions view
扩展视图

以下是适合添加到 plugin.xml 文件的内容:


图 10:plugin.xml 中弹出菜单条目的代码片段
                
<extension point="org.eclipse.ui.popupMenus">
  <objectContribution
    adaptable="false"
    id="com.developerworks.sametime.search.personselection"
    objectClass="com.ibm.collaboration.realtime.livenames.PersonSelection">
    <action
      class="com.developerworks.sametime.search.SearchDelegate"
      enablesFor="+"
      id="com.developerworks.sametime.search.SearchDelegate"
      label="IBM Omnifind Yahoo! search"
      style="push"/>
  </objectContribution>
 </extension>
 

弹出菜单的动作代表

当选择 Search 菜单时要调用下面这个类:


清单 11: 搜索代表的代码片段
                
public class SearchDelegate extends LiveNameActionDelegate{
	
  public void run(IAction arg0) {
    Person[] persons = getSelectedPersons();
    String searchTerm = "";
    for(int i=0; i<persons.length; ++i){
      Person p = persons[i];
      searchTerm += " " + p.getContactId();
    }
    if (searchTerm != null) {
      SearchUtilities.showSearches(searchTerm);
    }
  }
}

在上面的代码片段中,电子邮件 ID 从选择的对象中提取,并被馈送到启动外部浏览器的搜索工具。您可以对此代码进行修改,使其提取用户名而不是电子邮件 ID 。





回页首


部署插件

从本文 下载 部分中下载 com.developerworks.sametime.search.deploy.zip 文件并将它移动到 Sametime 安装根目录下的插件目录。在 Microsoft Windows® 中,将文件放到 c:\program files\IBM\sametime\plugins。如果您不打算使用本文中介绍的全部三种插件,您需要修改 plugin.xml 文件(绑定在档案中)并且注释掉您不希望 Sametime 客户机继承的扩展。如果您修改了打包的 plugin.xml 文件,就需要在将它移入 Sametime 插件目录之前重新打包这些更改。





回页首


源代码

插件的示例源代码被打包在位于 下载 部分的 com.developerworks.sametime.search.source.zip 文件中。解压缩源代码后,您可以使用 Eclipse IDE 检查和修改示例源代码。





回页首


结束语

这篇文章介绍了将搜索界面集成到基于 Eclipse 的应用程序。我们检验了定制插件在 Sametime Connect 客户机不同显示区域的效果,并且学习了如何在您的系统中实现这些更改。






回页首


下载

描述名字大小下载方法
本文中使用的文件com.developerworks.sametime.search.source.zip17805BHTTP
本文中使用的文件com.developerworks.sametime.search.deploy.zip13045BHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论


关于作者

Srinivas Varma Chitiveli 是 IBM 软件组的一名软件工程师。他参与开发了 IBM 产品,这些产品处理针对安全的电子商务事务、内容管理和跨分布式数据源搜索信息而发布数字证书相关的技术。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款