Tipos de Mecanismos de Procura Federada

A nova procura de informações federadas no sistema de Ajuda utiliza a noção de tipos de mecanismo de procura e mecanismos de procura. Um tipo de mecanismo é um meta-mecanismo do qual uma série de mecanismos de procura concretos podem ser criados por parametrização.

Os novos tipos de mecanismo são contribuídos por meio do org.eclipse.help.ui.searchEngine:

<extension point="org.eclipse.help.ui.searchEngine">
	<engineType
		scopeFactory="com.example.xyz.XYZScopeFactory"
		label="XYZ Search"
		class="com.example.xyz.search.XYZSearch"
		icon="icons/etool16/xyzsearch.gif"
		pageClass="com.example.xyz.search.XYZSearchPage"
		id="com.example.xyz.XYZSearch">
		<description>
As instâncias da Procura XYZ procuram o site XYZ.
		</description>
	</engineType>
Esse ponto de extensão é utilizado para conectar participantes de procura na procura de informações. Cada mecanismo de procura pode ser configurado individualmente. Quando a procura é iniciada, cada mecanismo de procura é executado como uma tarefa de segundo plano e os resultados são conferidos na visualização de ajuda imediatamente na consulta.

Os mecanismos de procura definidos aqui, não serão mostrados automaticamente como participantes de procura federados até que a ligação do produto do mecanismo seja estabelecida, a menos que o atributo productId seja deixado como indefinido. Para mecanismos que o definem, apenas aqueles ligados a um produto específico serão mostrados quando esse produto está em execução.

Os mecanismos de procura podem simplesmente compor uma URL e fornecer apenas uma dica que contém essa URL como href. Os mecanismos populares de procura para os quais o suporte da API requer licença podem ser conectados como esse. Na outra extremidade do espectro, os mecanismos de procura podem comunicar-se com o servidor e receber dicas individuais com informações como etiqueta, href, descrição curta, score, etc. O mecanismo de ajuda local pode produzir dicas dessa maneira.

Independemente do mecanismo de procura, os mecanismos podem fornecer várias configurações do escopo de procura, utilizando páginas de preferências JFace. Essas páginas são mostradas quando o link 'Configurações Avançadas' é seguido a partir da visualização Ajuda. Além das páginas de preferências da raiz definidas com o mecanismo, sub-páginas de preferências adicionais podem ser conectadas para obter mais configurações avançadas.

As configurações de escopo são carregadas e armazenadas, utilizando objetos IPreferenceStore. As configurações de escopo para todos os mecanismos estão agrupadas em um denominado conjunto de escopos. Quando é aberto pela primeira vez, o conjunto de escopos padrão ('Default') é criado, mas os usuários podem definir mais conjuntos de escopos e fazer a inversão entre eles.

Como o suporte de procura federado faz parte do plug-in org.eclipse.help.base, um depósito de informações do provedor é necessário para criar objetos de escopo de procura a partir dos dados do armazenamento de preferências. Os clientes que conectam páginas de preferências do escopo devem conectar também os depósitos de informações dos provedores de escopo.

Os mecanismos definidos nesse ponto de extensão não são mostrados na UI, por padrão. O que é mostrado ali, é uma instância concreta de um mecanismo de procura que pode ser modificado individualmente. Os produtos podem pré-configurar o sistema de ajuda com uma série de instâncias dos tipos de mecanismos registrados, possivelmente parametrizados para serem executados da maneira desejada. Além disso, os usuários podem incluir suas próprias instâncias de mecanismos registrados e configurá-los da maneia como desejarem:

<engine
	enabled="true"
	engineTypeId="com.example.xyz.search.XYZSearch"
	id="com.example.xyz.XYZSearch"
	label="XYZ Search">
</engine>
<engine
	enabled="true"
	engineTypeId="org.eclipse.help.ui.web"
	id="org.eclipse.sdk.Eclipse"
	label="%search.Eclipse.label">
	<description>
		%search.Eclipse.desc
	</description>
	<param
		name="url"
		value="http://eclipse.org/search/search.cgi?q={expression}&amp;ul=&amp;ps=20&amp;m=all">
	</param>
</engine>