Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Интеграция IBM Lotus Sametime с поисковым REST-сервисом IBM Lotus Quickr

Полный контроль над контентом IBM Lotus Quickr

Эйтан Шапиро, инженер-программист, IBM
Эйтан Шапиро (Eitan Shapiro) получил степень бакалавра наук в области проектирования информационных систем в Израильском технологическом институте (Technion), Хайфа, Израиль. Он начал работать в IBM в 2005 г. и является руководителем и ведущим программистом группы по технологиям поиска в Lotus Quickr (Lotus Quickr Search Technologies Team).

Описание:  В статье представлен поисковый REST-сервис IBM Lotus Quickr и примеры его использования. Познакомьтесь с плагином IBM Lotus Sametime, позволяющим выполнять поиск по содержимому, расположенному на сервере Lotus Quickr, а также делиться этим содержимым, разговаривая через IBM Lotus Sametime Connect, или отправляя почтовое сообщение в IBM Lotus Notes.

Дата:  18.07.2008
Уровень сложности:  средний
Активность:  1585 просмотров
Комментарии:  


IBM Lotus Quickr облегчает совместное использование бизнес-контента, так как построен на открытых интерфейсах, позволяющих клиентам и бизнес-партнёрам разрабатывать собственные приложения на основе своих потребностей. Статья познакомит вас как с устройством поискового сервиса, так и с применяемыми шаблонами запросов и ответов, чтобы вы смогли начать разработку собственных приложений. Для получения информации по другим опубликованным интерфейсам, взаимодействующим с контентом Lotus Quickr, обратитесь к Руководству разработчика IBM Lotus Quickr (EN). Введение в поисковые REST-сервисы Lotus Quickr можно найти в сопутствующей статье developerWorks: Введение в REST-сервисы IBM Lotus Quickr (EN).

Предварительные требования

Для получения максимального результата от статьи вы должны хорошо разбираться в Java-программировании и Web 2.0. Для использования примера кода необходимы базовые знания IBM Lotus Sametime Software Development Kit (SDK) и инструментария клиента Apache Abdera. ПРИМЕЧАНИЕ: пример кода будет работать только после установки iFix для поискового REST-сервлета Lotus Quickr (iFix L025578).

Информацию по Lotus Sametime SDK см. в статье developerWorks: Расширение IBM Lotus Sametime Connect V7.5. Информацию по инструментарию клиента Apache Abdera можно найти в статье developerWorks: Знакомство с протоколом публикации Atom, Часть 3: Введение в проект Apache Abdera.

Загрузить Lotus Sametime SDK можно со страницы developerWorks, посвящённой инструментариям Lotus (EN).


Обзор

Поисковый REST-сервис IBM Lotus Quickr предназначен для создания решений для совместной работы с минимальными усилиями. Сервис базируется на открытых стандартах и технологиях Web 2.0, что позволяет создавать приложения, обладая элементарными знаниями и навыками в области существующих Web-технологий, например HTTP и XML. В частности, для поиска информации на сервере используются URL-адреса в стиле REST. Сервис основан на формате Atom Syndication Format, описанном в RFC 4287, и в нём используются элементы отклика OpenSearch (OpenSearch response elements) для расширения формата синдикации Atom дополнительными метаданными, необходимыми для возвращения результатов поиска.


Плагин Lotus Sametime для поиска и совместного использования контента Lotus Quickr

В нашем примере мы реализуем две точки расширения для Lotus Sametime Connect. Первая позволяет пользователям открывать окно поиска из панели контактов, а вторая даёт возможность открывать такое же окно из окна чата. За оба сценария отвечает один и тот же код; тем не менее, во втором сценарии мы открываем окно чата и добавляем возможность выбора результата поиска и предоставления его другим пользователям при нажатии на кнопку Share. В листинге 1 показана часть файла plugin.xml, содержащая расширения и определения, например, имя класса реализации.


Листинг 1. Точки расширения плагина Lotus Sametime
                
<plugin>
   <extension
         point="org.eclipse.ui.viewActions">
      <viewContribution
            id="com.ibm.lotus.search.feed.viewactions"
            targetID="com.ibm.collaboration.realtime.imhub">
         <action ... here specify what class handle and more .../>                      
      </viewContribution>  
   </extension>
   <extension
         point="com.ibm.collaboration.realtime.chatwindow.chatAction">
      <chatAction ... here specify what class handle and more .../>
   </extension>
</plugin>

Плагин позволяет выполнять следующие операции:

  • Получение списка диапазонов
  • Поиск по любому из имеющихся диапазонов
  • Отображение значка, титула, владельца, даты обновления и описания для каждого результата поиска
  • Отправка результатов поиска через IBM Lotus Notes
  • Совместное использование результатов поиска через Lotus Sametime Connect
  • Открытие результатов поиска в браузере в виде канала Atom

Структура плагина очень проста. Экземпляр класса SearchApplication создаётся двумя реализациями разных точек расширения. Наше поисковое приложение является основной точкой входа в код. В нём содержится несколько экземпляров других классов, помогающих получить требуемую функциональность. Эти три класса можно найти в пакете com.ibm.lotus.search.feed.application.

  • Класс SearchTable отвечает за отображение результатов поиска и поддержку различных операций, например, операций перетаскивания в Lotus Notes, двойного щелчка мышью для открытия результатов поиска в браузере или наведения курсора на элемент для отображения более подробной информации.
  • Класс ScopesList отвечает за отображение диапазонов в списке и позволяет пользователю выбрать релевантный для текущего поиска.
  • Класс DetailedDialog отвечает за получение от пользователя подробной информации, необходимой для подключения к удалённому серверу Lotus Quickr.

В нашем примере для анализа каналов Atom в классе SearchFeedParser используется клиент Apache Abdera с открытым исходным кодом. На рисунке 1 показано высокоуровневое представление архитектуры плагина.


Рисунок 1. Высокоуровневая архитектура плагина
Высокоуровневая архитектура плагина

Получение списка диапазонов

Сначала необходимо извлечь список диапазонов, чтобы можно было отобразить их в окне Scopes и позволить пользователям выбирать определённый диапазон, по которому они хотят выполнять поиск. Для извлечения канала диапазонов необходимо знать имя сервера, а также идентификатор (ID) и пароль пользователя для подключения к серверу. Так как формат URL опубликован в документации, можно создать его самостоятельно, применительно к вашему серверу. В нашем случае URL выглядит следующим образом:

http://quickr.bookswisdom.com/searchfeed/myserver/scopes

Для извлечения списка диапазонов используется запрос GET к этому URL-адресу. В ответе содержится канал Atom с двумя записями (см. листинг 2), описывающими два диапазона, My Places и My Favorites. Диапазон All Sources, при выборе которого поиск будет выполняться по всей расположенной на сервере информации, представляет собой виртуальный диапазон с пустой строкой ID и как таковой не публикуется в канале.


Листинг 2. Канал с доступными диапазонами с сервера Lotus Quickr
                
<?xml version="1.0" encoding="UTF-8"?>
<atom:feed xmlns:atom="http://www.w3.org/2005/Atom" 
           xmlns:xhtml="http://www.w3.org/1999/xhtml" 
           xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
<atom:title>Available Scopes</atom:title>
<atom:link href=
    "http://bookswisdom/searchfeed/myserver/scopes" rel="self" 
    type="application/atom+xml"/>
<atom:author>
    <atom:name>Enterprise Search API Web Service.</atom:name>
</atom:author>
<atom:id>[http://bookswisdom/searchfeed/myserver/scopes]</atom:id>
<atom:updated>2007-12-20T21:07:36.250+00:00</atom:updated>
<atom:entry>
    <atom:title>My Favorites</atom:title>
    <atom:summary>Search content from your favorite Places</atom:summary>
    <atom:id>DYNAMIC_SCOPE.MyFavoritesScopeBrowseFactory</atom:id>
    <opensearch:image>/lotus/themes/html/QPG/icons/scope_search_favorites.gif
    </opensearch:image>
</atom:entry>
<atom:entry>
    <atom:title>My Places</atom:title>
    <atom:summary>Search content from your Places.</atom:summary>
    <atom:id>DYNAMIC_SCOPE.TSScopeBrowseFactory</atom:id>
    <opensearch:image>/lotus/themes/html/QPG/icons/scope_search_teamspaces.gif
    </opensearch:image>
</atom:entry>
</atom:feed>

Элемент summary может использоваться как текст, появляющийся при наведении курсора, а элемент image - в качестве значка диапазона. Самый важный элемент - ID, его следует использовать при построении поискового запроса в качестве одного из параметров запроса URL. В листинге 3 показан фрагмент кода, обрабатывающий ответ в примере. В коде используется класс SearchEntryData, представляющий результат поиска или диапазон. Этот класс считывает информацию из объекта канала Abdera.


Листинг 3. Фрагмент кода, обрабатывающий ответ
                
public class SearchFeedParser implements FeedParser {
	private Stream feed;
	private Abdera abdera;

	public SearchFeedParser(Stream feed) {
		this.feed = feed;
		AbderaConfiguration config = new AbderaConfiguration();
		config.addExtensionFactory(new OpenSearchExtensionFactory());
		abdera = new Abdera(config);
	}

	public List getEntries() throws ParseException, HttpException,
			MalformedURLException, IRISyntaxException, IOException {
		List entriesList = new ArrayList();
		try {
			Parser parser = abdera.getParser();
			Document doc = parser.parse(feed.getContent(), feed.getFullUri());
			Feed f = (Feed) doc.getRoot();
			List entries = f.getEntries();
			Iterator it = entries.iterator();
			while (it.hasNext()) {
				entriesList.add(
					new SearchEntryData((Entry) it.next(), 
					feed.getSource()));
			}
		} finally {
			feed.release();
		}
		return entriesList;
	}
}

В маленьком окне на рисунке 2 показывается список имеющихся диапазонов, которые может выбрать пользователь. В качестве диапазона по умолчанию используется диапазон All Sources.


Рисунок 2. Плагин, показывающий список диапазонов, доставленных с сервера
Плагин, показывающий список диапазонов, доставленных с сервера

Поиск по определённому диапазону

Теперь, когда мы выбрали диапазон и его ID, следующий шаг - создать URL с поисковым запросом, который пользователь ввёл в поле поиска, и отправить поисковый запрос серверу Lotus Quickr. Опять же, для выполнения поиска требуется знать имя сервера и пользовательские идентификатор и пароль, с помощью которых происходит подключение к серверу. Так как формат URL опубликован в документации, можно создать его самостоятельно, применительно к вашему серверу. В нашем случае URL выглядит следующим образом:

http://quickr.bookswisdom.com/searchfeed/myserver/search?scope= &query=test

Для извлечения списка диапазонов используется запрос GET к этому URL-адресу. В ответе содержится канал Atom с двумя записями (см. листинг 4), описывающими два диапазона, My Places и My Favorites. Диапазон All Sources, при выборе которого поиск будет выполняться по всей расположенной на сервере информации, представляет собой виртуальный диапазон с пустой строкой ID и как таковой не публикуется в канале.


Листинг 4. Канал с результатами поиска по запросу "test"
                
<?xml version="1.0" encoding="UTF-8"?>
<atom:feed xmlns:atom="http://www.w3.org/2005/Atom" 
           xmlns:xhtml="http://www.w3.org/1999/xhtml" 
           xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/">
<atom:title>Search results for query test on all sources</atom:title>
<atom:link href="http://bookswisdom/searchfeed/myserver/search?scope=&query=test"
 rel="self" type="application/atom+xml"/>
<atom:author><atom:name>Enterprise Search API Web Service.
</atom:name></atom:author>
<atom:id>http://maggie:10038/searchfeed/myserver/search?scope=
&query=test</atom:id>
<atom:category term="all sources" label="all sources"/>
<atom:updated>2007-12-20T22:06:23.438+00:00</atom:updated>
<opensearch:totalResults>3</opensearch:totalResults>
<opensearch:Query role="request" searchTerms="a*"/>
<opensearch:startIndex>0</opensearch:startIndex>
<opensearch:itemsPerPage>3</opensearch:itemsPerPage>
<atom:entry><atom:title>CAIDesign.ppt</atom:title>
    <atom:author>
        <atom:uri>uid=quikradm,o=default organization</atom:uri>
        <atom:name>aa bb</atom:name>
        <atom:email>quikradm@gmail.com</atom:email>
    </atom:author>
    <atom:link href="/lotus/poc/?uri=dm%3a18b90c0047dded508e259f15926dda5e&
    pageHint=6_GQJU461028VI602DJC28AV00O7" 
        type="application/vnd.ms-powerpoint" hreflang="en"/>
    <atom:category term="ContentSourceType/clb:clbDocument" 
    scheme="com.ibm.wplc.taxonomy://feature_taxonomy"
        label="Document"/>
    <opensearch:relevance>41.0</opensearch:relevance>
    <atom:updated>2007-12-11T16:06:59.703+00:00</atom:updated>
    <atom:id>/lotus/poc/?uri=dm%3a18b90c0047dded508e259f15926dda5e&
    pageHint=6_GQJU461028VI602DJC28AV00O7</atom:id>
    <atom:summary type="html"><ul class="property-list"><li><
    span dir="ltr">Place:
        someplace over the rainbow</span> - <span dir="ltr">Library:  
        <a class="action-links" 
        href="/lotus/poc/?uri=dm%3acb5bd40047ddb13cbd8cffdc14da9f2b" 
        >Library</span></a></li></ul></atom:summary>
    <opensearch:image>/lotus/themes/html/QPG/icons/scope_search_docs.gif
    </opensearch:image>
</atom:entry>
    ... more entries goes here ...
</atom:feed>

На рисунке 3 показан список результатов поиска по выполненному запросу. Пользователь может выбрать элемент, которым он желает поделиться со своими коллегами, или, дважды щёлкнув по этому элементу мышью, перейти к странице расположенного на сервере документа.


Рисунок 3. Плагин, показывающий результаты поиска по запросу "test"
Плагин, показывающий результаты поиска по запросу "test"

Как поделиться результатами поиска с коллегами

После выполнения поискового запроса вернитесь к списку результатов и выберите из него какой-нибудь элемент, которым вы хотите поделиться с другими. Здесь можно выбрать два варианта. Первый вариант - отправить ссылку по электронной почте, перетащив элемент из окна поиска в почтовое приложение Lotus Notes. Кроме того, можно выбрать элемент из окна поиска и нажать на кнопку Share; выбранный элемент будет отправлен в окно чата. Второй вариант возможен лишь в том случае, если окно поиска было открыто из окна чата. В листинге 5 показан фрагмент кода, добавляющий функцию перетаскивания в таблицу результатов поиска.


Листинг 5. Фрагмент кода, добавляющий функцию перетаскивания в таблицу результатов поиска
                
public DndSearchResult(final Control dragControl, final List entries) {
	// Разрешаем копировать и перемещать данные из элемента, 
	// из которого выполняется перетаскивание
	int operations = DND.DROP_MOVE | DND.DROP_COPY;
	DragSource source = new DragSource(dragControl, operations);		
	Transfer[] types = new Transfer[] { RTFTransfer.getInstance()};
	source.setTransfer(types);
	source.addDragListener(new DragSourceListener() {
		// ... здесь мы реализуем методы DragSourceListener
                       и обрабатываем RTFTransfer и FileTransfer
	});
}

На рисунке 4 показано, как можно перетащить результаты поиска из окна поиска плагина в почтовое приложение Lotus Notes. А на рисунке 5 показано, как поделиться результатом поиска из окна поиска плагина и отправить его в окно чата.


Рисунок 4. Файл Quickr Developers Guide.zip из результатов поиска, перетащенный в почтовое приложение Lotus Notes
Файл Quickr Developers Guide.zip из результатов поиска, перетащенный в почтовое приложение Lotus Notes

Рисунок 5. Выбор в результатах поиска файла Quickr Developers Guide.zip и предоставление к нему общего доступа через окно чата
Выбор в результатах поиска файла Quickr Developers Guide.zip и предоставление к нему общего доступа через окно чата

Получение канала для поискового запроса

Выполнив поиск по серверу Lotus Quickr, и предоставив к найденным элементам общий доступ, можно также зарегистрировать поисковый запрос через программу чтения каналов. В поисковом приложении плагина для этого уже имеется специальная кнопка. При нажатии на неё открывается Интернет-браузер по умолчанию, в котором результаты поиска представляются в виде канала Atom. Ссылку можно скопировать из браузера и вставить в любое другое приложение для чтения каналов по вашему выбору, как показано на рисунке 6.


Рисунок 6. Отображение результатов поиска в виде канала, открытого в браузере
Отображение результатов поиска в виде канала, открытого в браузере

Заключение

Поисковый REST-сервис IBM Lotus Quickr предлагает простой способ поиска и совместного использования контента. Поскольку все операции выполняются с помощью технологии REST, можно быстро создавать код для взаимодействия с удалённым сервером, используя язык программирования по вашему выбору и соответствующие инструменты. В статье показывается, как с помощью этого сервиса выполнять базовые поисковые операции; в ней также рассматриваются основные шаблоны сообщений, содержащих запросы и ответы.



Загрузка

ИмяРазмерМетод загрузки
com.ibm.lotus.search.feed_7.5.1.jar4329KBHTTP

Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Эйтан Шапиро (Eitan Shapiro) получил степень бакалавра наук в области проектирования информационных систем в Израильском технологическом институте (Technion), Хайфа, Израиль. Он начал работать в IBM в 2005 г. и является руководителем и ведущим программистом группы по технологиям поиска в Lotus Quickr (Lotus Quickr Search Technologies Team).

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=322060
ArticleTitle=Интеграция IBM Lotus Sametime с поисковым REST-сервисом IBM Lotus Quickr
publish-date=07182008
author1-email=EITANS@il.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).