IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Lotus  >

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

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

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Эйтан Шапиро, инженер-программист, IBM

18.07.2008

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

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>

Поделиться...

digg Разместить на Digg
del.icio.us Разместить на del.icio.us
Slashdot Разместить на Slashdot!

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

  • Получение списка диапазонов
  • Поиск по любому из имеющихся диапазонов
  • Отображение значка, титула, владельца, даты обновления и описания для каждого результата поиска
  • Отправка результатов поиска через 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).




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.
    IBM в России Конфиденциальность Контакты