Статьи

Поиск в зоне NetBeans в среде IDE NetBeans

Новый API-интерфейс быстрого поиска NetBeans предоставляет вам точку входа в новую функцию быстрого поиска в среде IDE NetBeans, которая станет частью 6.5 начиная с M1. По умолчанию функция быстрого поиска позволяет искать действия (т. Е. Объекты, которые вызываются с помощью пунктов меню, кнопок панели инструментов и сочетаний клавиш) и типы (т. Е. Интерфейсы и классы), которые затем можно вызывать / открывать при выборе.

В результате в случае действий пользователю не нужно знать местоположение в строке меню или панели инструментов рассматриваемого действия . Например, не знаете, куда обратиться, чтобы вызвать действие «Помощь»? Введите «help» в Быстрый поиск, и вы получите список действий и типов, соответствующих строке поиска:

Затем справка появляется, когда вы выбираете справку выше, не требуя, чтобы вы пошли в меню справки. Даже если вы знаете, где находится этот пункт меню, возможность вызывать все ваши действия из одного места экономит много времени. Представьте, если вы хотите, например, открыть окно «Проекты» после того, как вы открыли справку. Раньше вам приходилось переходить от одного пункта меню (или кнопки панели инструментов) к другому, тогда как теперь вы просто вводите новую строку поиска и затем нажимаете соответствующий результат. Экономия времени. После его использования вызванное действие (или тип) добавляется в список недавнего поиска, что облегчает поиск в следующий раз:

Однако благодаря API функция быстрого поиска — это не просто функция. Это инфраструктура , предоставляющая вам пользовательский интерфейс, механизм фильтрации и соответствующие алгоритмы поиска, так что все, что вам нужно предоставить, — это контент.

Простой пример Давайте интегрируем учебные руководства с platform.netbeans.org/tutorials в функцию быстрого поиска:

Это очень удобно. Теперь вы можете увидеть учебники, которые относятся к действиям и типам, которые вы ищете. Наоборот. Таким же образом, давайте включим названия статей зоны NetBeans в функцию быстрого поиска:

При нажатии соответствующая статья открывается в браузере. В приведенном ниже коде (это ВСЕ код, который вам понадобится для интеграции, показанной выше), вы можете увидеть, что JTidy используется для анализа, но вместо этого вы можете использовать любой подход, который вам нравится:

public class NetBeansZoneSearchProvider implements SearchProvider {

public void evaluate(SearchRequest request, SearchResponse response) {
try {

//The URL that we are providing a search for:
URL url = new URL("http://netbeans.dzone.com");

//Stuff needed by Tidy:
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.setTidyMark(false);
tidy.setShowWarnings(false);
tidy.setQuiet(true);

//Get the org.w3c.dom.Document from Tidy:
Document doc = tidy.parseDOM(url.openStream(), null);

//Get all "a" elements:
NodeList list = doc.getElementsByTagName("a");

//Get the number of elements:
int length = list.getLength();

//Loop through all the "a" elements:
for (int i = 0; i < length; i++) {

String href = null;
if (null != list.item(i).getAttributes().getNamedItem("href")) {
//Get the "href" attribute from the current "a" element:
href = list.item(i).getAttributes().getNamedItem("href").getNodeValue();
}

//Get the "title" attribute from the current "a" element:
if (null != list.item(i).getAttributes().getNamedItem("title")) {
String title = list.item(i).getAttributes().getNamedItem("title").getNodeValue();

//If the title matches the requested text:
if (title.toLowerCase().indexOf(request.getText().toLowerCase()) != -1) {

//Add the runnable and the title to the response
//and return if nothing is added:
if (!response.addResult(new OpenFoundArticle(href), title)) {
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 {
URLDisplayer.getDefault().showURL(new URL("http://netbeans.dzone.com" + article));
} catch (MalformedURLException ex) {
Logger.getLogger(NetBeansZoneSearchProvider.class.getName()).log(Level.SEVERE, null, ex);
}
}

}

}

Вот еще один пример, через код выше, указывающий на netbeans.dzone.com , который показывает полезность этого расширения функции быстрого поиска:

Вот как зарегистрировать его в файле layer.xml:

<folder name="QuickSearch">
<folder name="NetBeansZone">
<attr name="SystemFileSystem.localizingBundle"
stringvalue="org.nb.nbzonesearch.Bundle"/>
<attr name="command" stringvalue="G"/>
<attr name="position" intvalue="1"/>
<file name="org-nb-nbzonesearch-NetBeansZoneSearchProvider.instance"/>
</folder>
</folder>

Также есть шаблон (начиная с 6.5 Milestone 2 и далее), который генерирует записи слоя, соответствующие зависимости и заглушки Java-класса, как описано в моем блоге .

Наконец, представьте, как здорово было бы создать расширение для быстрого поиска для сайта, подобного часто задаваемым вопросам пользователей NetBeans.! Пользователь сможет найти решение своих проблем прямо в среде IDE вместе со всеми связанными действиями и типами. Но эти сценарии — только вершина айсберга. И даже если бы у вас было около десятка различных категорий поиска, было бы довольно просто включить параметры настройки, чтобы пользователь мог определить, какой / сколько запросов фактически выполняется. Кроме того, возможно, вместо поиска по заголовкам (как это было сделано выше), можно искать, например, теги META в файле HTML. Это полностью зависит от разработчика. Также имейте в виду, что здесь функция быстрого поиска и ее API обсуждаются в контексте IDE NetBeans, хотя все сказанное здесь в равной степени относится к ЛЮБОМ приложению, созданному поверх платформы NetBeans, где эта функциональность может быть в равной степени полезной. Короче говоря,API быстрого поиска открывает IDE (илюбое другое приложение на платформе NetBeans ) вплоть до обширной интеграции поисков с перекрестными ссылками на столько связанных элементов, сколько хотят ваши пользователи. Это довольно крутая разработка.