|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | 
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | 
|  | <head> | 
|  | <!-- -*- xhtml -*- --> | 
|  | <title>Учебный курс по интеграции быстрого поиска для платформы NetBeans 6.5</title> | 
|  | <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | 
|  | <meta name="AUDIENCE" content="NBUSER"> | 
|  | <meta name="TYPE" content="ARTICLE"> | 
|  | <meta name="EXPIRES" content="N"> | 
|  | <meta name="developer" content="gwielenga@netbeans.org"> | 
|  | <meta name="indexed" content="y"> | 
|  | <meta name="description" | 
|  | content="A short guide to using the Nodes API."> | 
|  | <!--      Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. --> | 
|  | <!--     Use is subject to license terms.--> | 
|  | </head> | 
|  | <body> | 
|  | <h1>Учебный курс по интеграции быстрого поиска</h1> | 
|  |  | 
|  | <p>В этом руководстве показан способ написания модуля, интегрирующего новые элементы в функцию быстрого поиска NetBeans. | 
|  |  | 
|  | <p><b>Содержание</b></p> | 
|  |  | 
|  | <p><img  src="../images/articles/69/netbeans-stamp7-8-9.png" class="stamp" width="114" height="114" alt="Содержимое на этой странице относится к среде IDE NetBeans 6.5, 6.7, 6.8" title="Содержимое на этой странице относится к среде IDE NetBeans 6.5, 6.7, 6.8" /></p> | 
|  | <ul class="toc"> | 
|  | <li><a href="#intro">Введение в интеграцию быстрого поиска</a></li> | 
|  | <li><a href="#creating">Создание проекта модуля</a></li> | 
|  | <li><a href="#use">Использование диалогового окна "Поставщик быстрого поиска"</a></li> | 
|  | <li><a href="#third">Интеграция внешнего синтаксического анализатора HTML DOM</a></li> | 
|  | <li><a href="#code">Написание кода интеграции быстрого поиска</a></li> | 
|  | <li><a href="#install">Установка и ознакомление с функциональными возможностями</a></li> | 
|  | <li><a href="#platform">Использование функции быстрого поиска в платформе NetBeans</a></li> | 
|  | <ul> | 
|  | <li><a href="#enable">Включение функции быстрого поиска в платформе NetBeans</a></li> | 
|  | <li><a href="#enable2">Включение поставщика интернет-поиска по умолчанию в платформе NetBeans</a></li> | 
|  | </ul> | 
|  | <li><a href="#share">Создание совместно используемого исполняемого файла</a></li> | 
|  | </ul> | 
|  |  | 
|  | <p><b>Для работы с этим руководством требуется программное обеспечение и ресурсы, перечисленные в следующей таблице.</b></p> | 
|  |  | 
|  | <table> | 
|  | <tbody> | 
|  | <tr> | 
|  | <th class="tblheader" scope="col">Программное обеспечение или ресурс</th> | 
|  | <th class="tblheader" scope="col">Требуемая версия</th> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">Среда IDE NetBeans</a></td> | 
|  | <td class="tbltd1">версия 6.7 или выше </td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Комплект для разработчика на языке Java (JDK)</a></td> | 
|  | <td class="tbltd1">версия 6 или<br/>версия 5</td> | 
|  | </tr> | 
|  | </tbody> | 
|  | </table> | 
|  |  | 
|  | <p class="tips">Дополнительно, в целях поиска и устранения ошибок, можно <a href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=11179">загрузить готовый пример</a> и изучить исходный код. | 
|  |  | 
|  |  | 
|  |  | 
|  | <h2 class="tutorial"><a name="intro"></a>Введение в интеграцию быстрого поиска</h2> | 
|  |  | 
|  | <p>Функция быстрого поиска, впервые появившаяся в среде IDE NetBeans 6.5, состоит из текстового поля в правом верхнем углу среды IDE. При вводе строки поиска в это поле выводится раскрывающийся список совпадающих элементов. По умолчанию элементами списка являются имена действий, зарегистрированных в среде IDE, а также темы справки по Java среды IDE. При выборе действия оно будет вызвано; при выборе темы справки она будет открыта в JavaHelp. | 
|  |  | 
|  | <p>Кроме того, для использования предоставляется <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/overview-summary.html">интерфейс API быстрого поиска</a>. С его помощью в функцию быстрого поиска можно интегрировать собственные объекты для поиска. Этой функцией можно пользоваться как в рамках среды IDE, так и в собственных приложениях, построенных на платформе NetBeans. | 
|  |  | 
|  | <p>В этом руководстве показан способ написания модуля, интегрирующего новые элементы из <a href="http://netbeans.dzone.com">NetBeans Zone</a> в функцию быстрого поиска. | 
|  |  | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/deployed-result.png" alt="Развернутый результат"> | 
|  |  | 
|  |  | 
|  | <!-- ===================================================================================== --> | 
|  |  | 
|  | <h2 class="tutorial"><a name="creating"></a>Создание проекта модуля</h2> | 
|  |  | 
|  | <p>В этом разделе используется мастер для создания структуры исходного кода, требуемого любым модулем NetBeans. Эта структура исходного кода состоит из ряда папок в особых местах и набора файлов, которые требуются в любом случае. Например, для каждого модуля NetBeans требуется папка <tt>nbproject</tt>, в которой хранятся метаданные проекта, а также файл <tt>layer.xml</tt>, в котором объявляется регистрация таких элементов как кнопки панелей управления и окна. | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li>Выберите в меню "Файл" команду "Новый проект" (CTRL+SHIFT+N). В разделе "Категории" выберите параметр "Модули NetBeans". В области "Проекты" выберите "Модуль" и нажмите кнопку "Далее".</li> | 
|  | <li>На панели "Имя и расположение" в поле "Имя проекта" введите <tt>NetBeansZoneSearch</tt>. В поле "Расположение проекта" укажите любой каталог на компьютере, например <tt>c:\mymodules</tt>. Оставьте переключатель "Отдельный модуль" выбранным. Панель должна выглядеть следующим образом: | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/new-module-1.png" alt="Действие 1 мастера создания проекта"> | 
|  | <p>Нажмите кнопку "Далее". | 
|  |  | 
|  | <li>На панели "Основные настройки модуля" введите <tt>org.netbeans.modules.nbzone</tt> в поле "Основа кодового имени". Добавьте пробелы к предложенному отображаемому имени модуля, и измените его на <tt>NetBeans Zone Search</tt>. Установите флажок "Создать слой XML" и оставьте местоположение локализуемого файла ресурсов и слоя XML по умолчанию; при этом они будут храниться в пакете с именем <tt>org/netbeans/modules/nbzone</tt>. Панель должна выглядеть следующим образом: | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/new-module-2.png" alt="Действие 2 мастера создания проекта"> | 
|  |  | 
|  | <li>Нажмите кнопку "Готово". </ol> | 
|  |  | 
|  | <p> В среде IDE создается проект <tt>NetBeans Zone Search</tt>. Проект содержит все исходные файлы и метаданные проекта, например, сценарий сборки проекта Ant. Проект откроется в среде IDE. Логическую структуру проекта можно просмотреть в окне "Проекты" (CTRL+1), а его файловую структуру – в окне "Файлы" (CTRL+2). | 
|  |  | 
|  |  | 
|  | <br /> | 
|  |  | 
|  | <!-- ===================================================================================== --> | 
|  | <h2><a name="use"></a>Использование диалогового окна "Поставщик быстрого поиска"</h2> | 
|  |  | 
|  | <p>В этом разделе с помощью мастера будет создан класс заглушки и сущности слоя, необходимые для начала интеграции с функцией быстрого поиска. | 
|  |  | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li>Щелкните узел приложения правой кнопкой мыши и выберите в меню "Создать" команду "Прочее". В диалоговом окне "Новый файл" выберите в меню "Разработка модулей" команду "Поставщик быстрого поиска".</li> | 
|  | <li>Установите следующие значения на панели "Поставщик быстрого поиска": | 
|  | <p><ul> | 
|  | <li><b>Имя класса поставщика.</b> Имя класса для заглушки, генерируемой мастером. Введите в это поле значение "NBZoneSearchProvider". | 
|  | <li><b>Пакет.</b> Пакет, в котором будет создан класс заглушки. Выберите в раскрывающемся списке пункт "org.netbeans.modules.nbzone". | 
|  | <li><b>Отображаемое имя категории.</b> Отображаемое имя для категории, создаваемой с помощью заглушки. Введите в это поле значение "NetBeans Zone". | 
|  | <li><b>Префикс команды.</b> Префикс для сужения поиска до категории, создаваемой с помощью заглушки. Введите в это поле значение "nb". | 
|  | <li><b>Позиция в контекстном меню.</b> Выберите позицию новой категории в пределах функции быстрого поиска. Значение по умолчанию "0" соответствует размещению категории в первой позиции. | 
|  | </ul> | 
|  | <p>На экране должны быть представлены следующие параметры: | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/quick-search-template.png" alt="Шаблон быстрого поиска"> | 
|  |  | 
|  | <li>Нажмите кнопку "Готово". | 
|  |  | 
|  | <p><p>Окно "Проекты" должно выглядеть следующим образом: | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/projects-window-final.png" alt="Итоговое окно "Проекты". "></ol> | 
|  |  | 
|  | <p>В файле <tt>layer.xml</tt> должен содержаться следующий текст: | 
|  |  | 
|  | <pre><filesystem> | 
|  | <folder name="QuickSearch"> | 
|  | <folder name="NetBeansZone"> | 
|  | <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.nbzone.Bundle"/> | 
|  | <attr name="command" stringvalue="nb"/> | 
|  | <attr name="position" intvalue="0"/> | 
|  | <file name="org-netbeans-modules-nbzone-NBZoneSearchProvider.instance"/> | 
|  | </folder> | 
|  | </folder> | 
|  | </filesystem></pre> | 
|  |  | 
|  | <br /> | 
|  |  | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h2><a name="third"></a>Интеграция внешнего синтаксического анализатора HTML DOM</h2> | 
|  | <p>В следующем разделе потребуется синтаксический анализатор HTML DOM для синтаксического анализа NetBeans Zone. Можно воспользоваться любым подходящим синтаксическим анализатором по выбору. В данном учебным курсе используется <a href="http://sourceforge.net/project/showfiles.php?group_id=13153">JTidy</a>.</p> | 
|  |  | 
|  | <p>Существует два способа предоставления внешнего файла JAR для использования в модуле. Первый способ состоит в размещении файла JAR в отдельном модуле, так называемом "модуле-обертке библиотеки"; в таком случае модуль функциональных возможностей <i>зависит от</i> модуля-обертки библиотеки. Оба модуля размещаются в наборе модулей. Преимущество использования двух раздельных модулей заключается в том, что при выпуске новой версии внешнего файла JAR требуется распространить небольшой по объему модуль, содержащий только внешний файл JAR, а не крупный модуль, содержащий также код функциональных возможностей. Второй способ заключается в добавлении файла JAR к модулю функциональных возможностей, как показано ниже. Преимущество этого подхода заключается в большем удобстве в краткосрочной перспективе, поскольку распространять требуется только один модуль, однако недостаток заключается в смешении внешней библиотеки с кодом функциональных возможностей, что нарушает принцип модульности. | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li>Загрузите <a href="http://sourceforge.net/project/showfiles.php?group_id=13153">JTidy</a> и найдите файл <tt>Tidy.jar</tt> в пакете загрузки. | 
|  |  | 
|  | <li>В окне "Файлы" создайте структуру папок, показанную ниже, и разместите файл <tt>Tidy.jar</tt> в папке <tt>release/modules/ext</tt>: | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/tidyjar.png" alt="Файл JAR JTidy." /> | 
|  |  | 
|  | <li>В конце файла <tt>project.xml</tt>, расположенного в папке <tt>nbproject</tt>, добавьте теги, выделенные полужирным шрифтом: | 
|  |  | 
|  | <pre> | 
|  | ... | 
|  | ... | 
|  | ... | 
|  | <b><class-path-extension> | 
|  | <runtime-relative-path>ext/Tidy.jar</runtime-relative-path> | 
|  | <binary-origin>release/modules/ext/Tidy.jar</binary-origin> | 
|  | </class-path-extension></b> | 
|  | </data> | 
|  | </configuration> | 
|  | </project></pre> | 
|  |  | 
|  | <li>Добавьте следующую строку в файл <tt>project.properties</tt>: | 
|  |  | 
|  | <pre>cp.extra=release/modules/ext/Tidy.jar</pre> | 
|  |  | 
|  | </ol> | 
|  |  | 
|  | </div> | 
|  | <p>Внешний синтаксический анализатор HTML DOM теперь включен в путь к классам модуля. Теперь эти классы можно использовать в файле JAR; эта возможность будет реализована в следующем разделе. | 
|  |  | 
|  |  | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h2><a name="code"></a>Написание кода интеграции быстрого поиска</h2> | 
|  | <p>Далее необходимо реализовать интерфейс API. Используются следующие классы интерфейса API:</p> | 
|  |  | 
|  |  | 
|  | <table> | 
|  | <tbody> | 
|  | <tr> | 
|  | <th class="tblheader" scope="col">Класс</th> | 
|  | <th class="tblheader" scope="col">Описание</th> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchProvider.html">SearchProvider</a></td> | 
|  | <td class="tbltd1">Главный интерфейс API быстрого поиска. Этот интерфейс необходимо реализовать для предоставления новой группы результатов для быстрого поиска.</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchRequest.html">SearchRequest</a></td> | 
|  | <td class="tbltd1">Описание запроса на быстрый поиск.</td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td class="tbltd1"><a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchResponse.html">SearchResponse</a></td> | 
|  | <td class="tbltd1">Объект ответа для сбора результатов SearchRequest.</td> | 
|  | </tr> | 
|  | </tbody> | 
|  | </table> | 
|  |  | 
|  | <p><p>Ниже указываются зависимости требуемых модулей, которые затем реализуются в собственном модуле. | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <ol> | 
|  |  | 
|  | <li>Щелкните правой кнопкой мыши проект, выберите "Свойства", а затем укажите следующие зависимости на панели "Библиотеки": | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/set-dependencies.png" alt="Установка зависимостей." /> | 
|  |  | 
|  | <li>Откройте созданный класс. | 
|  |  | 
|  | <li>Измените класс следующим образом: | 
|  |  | 
|  | <pre>public class NBZoneSearchProvider implements <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchProvider.html">SearchProvider</a> { | 
|  |  | 
|  | /** | 
|  | * Метод вызывается инфраструктурой при запросе операции поиска. | 
|  | * Реализующие его объекты должны обрабатывать полученный запрос и заполнять объект ответа | 
|  | * соответствующими результатами | 
|  | * | 
|  | * @param request Объект запроса на поиск, содержащий строку поиска | 
|  | * @param response Объект ответа поиска, в котором хранятся результаты поиска | 
|  | * Обратите внимание, что важно реагировать на значение, возвращаемое методом | 
|  | * SearchResponse.addResult(...) и останавливать вычисления, | 
|  | * если возвращается значение "false". | 
|  | */ | 
|  | @Override | 
|  | public void evaluate(<a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchRequest.html">SearchRequest request</a>, <a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchResponse.html">SearchResponse response</a>) { | 
|  | try { | 
|  |  | 
|  | <b>//Адрес URL, для которого предоставляется поиск:</b> | 
|  | URL url = new URL("http://netbeans.dzone.com"); | 
|  | <b>//Stuff needed by Tidy:</b> | 
|  | Tidy tidy = new Tidy(); | 
|  | tidy.setXHTML(true); | 
|  | tidy.setTidyMark(false); | 
|  | tidy.setShowWarnings(false); | 
|  | tidy.setQuiet(true); | 
|  |  | 
|  | <b>//Получение org.w3c.dom.Document от Tidy, | 
|  | //или использование другого синтаксического анализатора по выбору:</b> | 
|  | Document doc = tidy.parseDOM(url.openStream(), null); | 
|  |  | 
|  | <b>//Получение всех элементов "a":</b> | 
|  | NodeList list = doc.getElementsByTagName("a"); | 
|  |  | 
|  | <b>//Получение количества элементов:</b> | 
|  | int length = list.getLength(); | 
|  |  | 
|  | <b>//Итерация по всем элементам "a":</b> | 
|  | for (int i = 0; i < length; i++) { | 
|  |  | 
|  | String href = null; | 
|  | if (null != list.item(i).getAttributes().getNamedItem("href")) { | 
|  | <b>//Получение атрибута "href" для текущего элемента "a":</b> | 
|  | href = list.item(i).getAttributes().getNamedItem("href").getNodeValue(); | 
|  | } | 
|  |  | 
|  | <b>//Получение атрибута "title" для текущего элемента "a":</b> | 
|  | if (null != list.item(i).getAttributes().getNamedItem("title")) { | 
|  | String title = list.item(i).getAttributes().getNamedItem("title").getNodeValue(); | 
|  |  | 
|  | <b>//Заголовок совпадает с запрошенным текстом:</b> | 
|  | if (title.toLowerCase().indexOf(<a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchRequest.html">request.getText().toLowerCase()</a>) != -1) { | 
|  |  | 
|  | <b>//Добавление выполняемого объекта и заголовка к запросу | 
|  | //и возвращение пустого результата, если ничего не добавлено:</b> | 
|  | if (!<a href="http://bits.netbeans.org/dev/javadoc/org-netbeans-spi-quicksearch/org/netbeans/spi/quicksearch/SearchResponse.html">response.addResult(new OpenFoundArticle(href), title)</a>) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | } catch (IOException ex) { | 
|  | Exceptions.printStackTrace(ex); | 
|  | } | 
|  | } | 
|  |  | 
|  | private static class OpenFoundArticle implements Runnable { | 
|  |  | 
|  | private String article; | 
|  |  | 
|  | public OpenFoundArticle(String article) { | 
|  | this.article = article; | 
|  | } | 
|  |  | 
|  | public void run() { | 
|  | try { | 
|  | URL url = new URL("http://netbeans.dzone.com" + article); | 
|  | StatusDisplayer.getDefault().setStatusText(url.toString()); | 
|  | URLDisplayer.getDefault().showURL(url); | 
|  | } catch (MalformedURLException ex) { | 
|  | Logger.getLogger(NBZoneSearchProvider.class.getName()).log(Level.SEVERE, null, ex); | 
|  | } | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | }</pre> | 
|  |  | 
|  | <li>Убедитесь в том, что определены следующие выражения импорта: | 
|  |  | 
|  | <pre>import java.io.IOException; | 
|  | import java.net.MalformedURLException; | 
|  | import java.net.URL; | 
|  | import java.util.logging.Level; | 
|  | import java.util.logging.Logger; | 
|  | import org.netbeans.spi.quicksearch.SearchProvider; | 
|  | import org.netbeans.spi.quicksearch.SearchRequest; | 
|  | import org.netbeans.spi.quicksearch.SearchResponse; | 
|  | import org.openide.awt.HtmlBrowser.URLDisplayer; | 
|  | import org.openide.awt.StatusDisplayer; | 
|  | import org.openide.util.Exceptions; | 
|  | import org.w3c.dom.Document; | 
|  | import org.w3c.dom.NodeList; | 
|  | import org.w3c.tidy.Tidy;</pre> | 
|  |  | 
|  | </ol> | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h2><a name="install"></a>Установка и ознакомление с функциональными возможностями</h2> | 
|  | <p>Теперь установим модуль и воспользуемся функцией интеграции быстрого поиска. Для построения и установки модуля в среде IDE используется сценарий построения Ant. При создании проекта автоматически создается сценарий построения.</p> | 
|  | <div class="indent"> | 
|  |  | 
|  |  | 
|  | <ol> | 
|  | <li>В окне "Проекты" щелкните проект правой кнопкой мыши и выберите "Выполнить". | 
|  | <p><p>Запускается новый экземпляр среды IDE, и выполняется установка модуля интеграции быстрого поиска. | 
|  | <li>Введите строку в средство быстрого поиска; если строка совпадает с заголовком одного из элементов в NetBeans Zone, к результату добавляется этот элемент из NetBeans Zone. | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/deployed-result.png" alt="Развернутый результат"> | 
|  | <p>При вводе префикса команды, определенного в файле <tt>layer.xml</tt>, с последующим пробелом, выполняется поиск только по связанной категории: | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/command.png" alt="Префикс команды"> | 
|  | <li>Щелкните элемент, и если в среде IDE настроен обозреватель, в нем выводится выбранная статья. | 
|  | </ol> | 
|  | </div> | 
|  | <br /> | 
|  |  | 
|  |  | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h2><a name="platform"></a>Использование функции быстрого поиска в платформе NetBeans</h2> | 
|  |  | 
|  | <p>В предыдущих разделах подразумевалось создание модуля для существующего приложения. Оставшиеся две темы имеют смысл, если создается не модуль, а отдельное приложение на платформе NetBeans. | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <h3><a name="enable"></a>Включение функции быстрого поиска в платформе NetBeans</h3> | 
|  |  | 
|  | <p>Несмотря на то, что среда IDE NetBeans поставляется с поддержкой функции быстрого поиска, в платформе NetBeans эта функция не предоставляется. По умолчанию функция быстрого поиска скрыта. Для включения этой функции необходимо выполнить шаги, приведенные ниже. | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <ol> | 
|  | <li>Добавьте в файл <tt>layer.xml</tt> следующие теги: | 
|  | <pre><folder name="Toolbars"> | 
|  | <folder name="QuickSearch"> | 
|  | <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.nbzone.Bundle"/> | 
|  | <file name="org-netbeans-modules-quicksearch-QuickSearchAction.shadow"> | 
|  | <attr name="originalFile" | 
|  | stringvalue="Actions/Edit/org-netbeans-modules-quicksearch-QuickSearchAction.instance"/> | 
|  | </file> | 
|  | </folder> | 
|  | </folder></pre> | 
|  |  | 
|  | <li>Добавьте в файл <tt>Bundle.properties</tt> следующую пару "ключ-значение": | 
|  |  | 
|  | <pre>Toolbars/QuickSearch=Quick Search</pre> | 
|  |  | 
|  | <li>Запустите приложение на платформе NetBeans и обратите внимание на то, что функция быстрого поиска доступна для использования и работает. | 
|  |  | 
|  | <p><p align="left"><img src="../images/tutorials/qsearch/netbeans-platform-qsearch.png" alt="Платформа NetBeans с функцией быстрого поиска"> | 
|  |  | 
|  |  | 
|  | </ol> | 
|  |  | 
|  | </div> | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h3><a name="enable2"></a>Включение поставщика интернет-поиска по умолчанию в платформе NetBeans</h3> | 
|  |  | 
|  | <p>В исходных файлах NetBeans доступна реализация поставщика интернет-поиска по умолчанию. Этот поставщик используется для поиска текста, совпадающего со строкой поиска, в Google. В среде IDE эта функция была предназначена для поиска по <tt>netbeans.org</tt> и связанным сайтам, содержащим интерактивную документацию по среде IDE. | 
|  |  | 
|  | <p><b>Примечание.</b> К сожалению, поставщик интернет-поиска в среде IDE пришлось отключить, поскольку после продолжительного использования компания Google выступила с жалобой о несоответствии автоматического поиска соглашению об использовании, и работа данной функции была остановлена. | 
|  |  | 
|  | <p>С учетом вышеуказанного ограничения этот поставщик интернет-поиска можно подвергнуть брэндингу и использовать в приложении на платформе NetBeans. | 
|  |  | 
|  |  | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <ol> | 
|  | <li>Убедитесь в том, что функция быстрого поиска включена, в соответствии с описанием в предыдущем разделе. | 
|  | <li>Добавьте в файл <tt>layer.xml</tt> следующие теги: | 
|  | <pre><folder name="Guardian"> | 
|  | <file name="org-netbeans-modules-quicksearch-web-WebQuickSearchProviderImpl.instance"/> | 
|  | </folder></pre> | 
|  |  | 
|  | <li>Создайте в папке <tt>branding</tt> приложения иерархию папок, показанную ниже, а также файл <tt>Bundle.properties</tt>, показанный на снимке экрана: | 
|  |  | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/brand-provider.png" alt="Поставщик брэндинга"> | 
|  |  | 
|  | <p><p>В среде IDE вышеупомянутые свойства жестко запрограммированы в следующем коде, однако в платформе NetBeans они не определены, поэтому требуется их брэндинг, как показано выше: | 
|  |  | 
|  | <pre>quicksearch.web.site=netbeans.org | 
|  | quicksearch.web.url_patterns=.*netbeans\.org/kb.*,\ | 
|  | /.*wiki\.netbeans\.org/.*faq.*,.*wiki\.netbeans\.org/.*howto.*,\ | 
|  | .*platform\.netbeans\.org/tutorials.*</pre> | 
|  |  | 
|  | <li>Запустите приложение на платформе NetBeans и обратите внимание на то, что поставщик быстрого интернет-поиска по умолчанию доступен для использования и работает. | 
|  |  | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/clare-wigfall.png" alt="Поиск по Guardian"> | 
|  |  | 
|  |  | 
|  | </ol> | 
|  |  | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  | <!-- ======================================================================================= --> | 
|  |  | 
|  | <h2><a name="share"></a>Создание совместно используемого исполняемого файла модуля</h2> | 
|  |  | 
|  | <p>Готовый модуль можно предоставить для использования другими разработчиками. Для этого необходимо создать и распространить двоичный файл "NBM" (модуль NetBeans). | 
|  |  | 
|  | <div class="indent"> | 
|  |  | 
|  | <ol> | 
|  | <li>В окне "Проекты" щелкните правой кнопкой мыши проект <tt>NetBeans Zone Search</tt> и выберите "Создать файл распространения модуля NBM". | 
|  |  | 
|  | <p><p>Создается файл NBM, который можно просмотреть в окне "Файлы" (CTRL+2). | 
|  | <p><p align="left"><img border="1" src="../images/tutorials/qsearch/shareable-binary.png" alt="Файл распространения модуля NBM, предназначенный для совместного использования."> | 
|  | <li>Чтобы предоставить этот файл для использования другим разработчикам, можно, например, воспользоваться <a href="http://plugins.netbeans.org/PluginPortal/">порталом подключаемых модулей NetBeans</a>. Для установки модуля получатель должен воспользоваться диспетчером подключаемых модулей ("Сервис > Подключаемые модули"). | 
|  | </ol> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <!-- ======================================================================================== --> | 
|  |  | 
|  |  | 
|  | <br> | 
|  | <div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&subject=Feedback:%20Quick%20Search%20Integration%20Tutorial">Мы ждем ваших отзывов</a></div> | 
|  | <br style="clear:both;" /> | 
|  |  | 
|  |  | 
|  | <!-- ======================================================================================== --> | 
|  |  | 
|  | <h2><a name="nextsteps"></a>Что дальше?</h2> | 
|  |  | 
|  | <p>Дополнительные сведения о создании и разработке модулей NetBeans приведены в следующих ресурсах: | 
|  | <ul> | 
|  | <li><a href="https://platform.netbeans.org/index.html">Домашняя страница платформы NetBeans</a></li> | 
|  | <li><a href="http://bits.netbeans.org/dev/javadoc/index.html">Список интерфейсов API среды NetBeans (текущая версия разработки)</a></li> | 
|  | <li><a href="https://netbeans.org/kb/trails/platform_ru.html">Другие связанные руководства</a></li></ul> | 
|  | </p> | 
|  |  | 
|  | <p><p> | 
|  | <!-- ======================================================================================== --> | 
|  | <!-- | 
|  | <h2><a name="version"></a>Versioning </h2> | 
|  | <p> | 
|  | <table width="76%" border="1"> | 
|  | <tbody> | 
|  | <tr> | 
|  | <td> | 
|  | <div align="left"><b>Version</b></div> | 
|  | </td> | 
|  | <td> | 
|  | <div align="left"><b>Date</b></div> | 
|  | </td> | 
|  | <td> | 
|  | <div align="left"><b>Changes</b></div> | 
|  | </td> | 
|  | </tr> | 
|  | <tr> | 
|  | <td> | 
|  | 1 | 
|  | </td> | 
|  | <td> | 
|  | 19 July 2008 | 
|  | </td> | 
|  | <td> | 
|  | Initial version. | 
|  | </td> | 
|  | </tr> | 
|  | </tbody> | 
|  | </table> | 
|  | --> | 
|  | </body> | 
|  | </html> |