 | Уровень сложности: средний Эйтан Шапиро, инженер-программист, 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>
|
Плагин позволяет выполнять следующие операции:
- Получение списка диапазонов
- Поиск по любому из имеющихся диапазонов
- Отображение значка, титула, владельца, даты обновления и описания для каждого результата поиска
- Отправка результатов поиска через 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"
Как поделиться результатами поиска с коллегами
После выполнения поискового запроса вернитесь к списку результатов и выберите из него какой-нибудь элемент, которым вы хотите поделиться с другими. Здесь можно выбрать два варианта. Первый вариант - отправить ссылку по электронной почте, перетащив элемент из окна поиска в почтовое приложение 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
Рисунок 5. Выбор в результатах поиска файла Quickr Developers Guide.zip и предоставление к нему общего доступа через окно чата
Получение канала для поискового запроса
Выполнив поиск по серверу Lotus Quickr, и предоставив к найденным элементам общий доступ, можно также зарегистрировать поисковый запрос через программу чтения каналов. В поисковом приложении плагина для этого уже имеется специальная кнопка. При нажатии на неё открывается Интернет-браузер по умолчанию, в котором результаты поиска представляются в виде канала Atom. Ссылку можно скопировать из браузера и вставить в любое другое приложение для чтения каналов по вашему выбору, как показано на рисунке 6.
Рисунок 6. Отображение результатов поиска в виде канала, открытого в браузере
Заключение
Поисковый REST-сервис IBM Lotus Quickr предлагает простой способ поиска и совместного использования контента. Поскольку все операции выполняются с помощью технологии REST, можно быстро создавать код для взаимодействия с удалённым сервером, используя язык программирования по вашему выбору и соответствующие инструменты. В статье показывается, как с помощью этого сервиса выполнять базовые поисковые операции; в ней также рассматриваются основные шаблоны сообщений, содержащих запросы и ответы.
Загрузка | Имя | Размер | Метод загрузки |
|---|
| com.ibm.lotus.search.feed_7.5.1.jar | 4329KB | HTTP |
Ресурсы Научиться
Получить продукты и технологии
Обсудить
Об авторе  | |  | Эйтан Шапиро (Eitan Shapiro) получил степень бакалавра наук в области проектирования информационных систем в Израильском технологическом институте (Technion), Хайфа, Израиль. Он начал работать в IBM в 2005 г. и является руководителем и ведущим программистом группы по технологиям поиска в Lotus Quickr (Lotus Quickr Search Technologies Team). |
Выскажите мнение об этой странице
|  |