Contribuições de Objetos Sensíveis ao Conteúdo

Anteriormente, os menus de contexto de alguns aplicativos eram limitados pela exclusão de algumas opções de menu. Isso tinha como base as informações periféricas conhecidas, como o número de recursos selecionados, o nome físico do arquivo, o tipo de recurso e assim por diante. Em algumas instâncias, uma quantidade restrita de informações era conhecida sobre o conteúdo de um recurso e isso reduzia significativamente as opções não utilizáveis do menu. Tais informações poderiam ter grande utilidade em um arquivo XML pois há diversas situações nas quais uma ação é aplicável para um tipo de arquivo XML mas não para outro, como arquivos XML que contêm scripts do Ant. A ação Executar Ant..., embora seja lógica em seu menu de contexto, não é uma ação aplicável a um arquivo XML que é utilizado para definir um plug-in.

Com a inclusão do ponto de extensão, org.eclipse.core.runtime.contentTypes, o Eclipse agora fornece um 'tipo de conteúdo', permitindo que os plug-ins contribuam para o catálogo do tipo de conteúdo da Plataforma e, além disso, classes denominadas Descritores de Tipo de Conteúdo também estão disponíveis. Para os desenvolvedores que fornecem seus próprios tipos de conteúdo, há dois descritores de tipo de conteúdo incorporados personalizáveis disponíveis: BinarySignatureDescriber (para tipos de conteúdo binário) e XMLRootElementContentDescriber (para tipos de conteúdo com base em XML e texto). Além disso, os provedores de plug-in podem criar seus próprios descritores de conteúdo; para obter informações detalhadas, consulte o Guia do Desenvolvedor de Plug-in da Plataforma (Guia do Programador > Visão geral do tempo de execução > Tipos de conteúdo).

XMLRootElementContentDescriber

Agora é possível definir contribuições de objetos específicas para um arquivo XML com uma determinada marcação de nível superior ou que especifique um determinado DTD. Para fazer isso, defina uma extensão para o ponto de extensão org.eclipse.core.runtime.contentTypes com uma classe descritora XMLRootElementContentDescriber e parâmetros que indiquem o nome da marcação de nível superior ou o nome do DTD da seguinte forma:

      <extension
       point="org.eclipse.core.runtime.contentTypes">
       <content-type 
           id=<id>
           name=<name> 	
           base-type="org.eclipse.core.runtime.xml">
           <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
               <parameter name="element" value=tagValue />
           </describer>
       </content-type>
   </extension>
ou
      <extension
       point="org.eclipse.core.runtime.contentTypes">
       <content-type 
           id=<id>
           name=<name> 	
           base-type="org.eclipse.core.runtime.xml">
           <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
               <parameter name="dtd" value=dtdValue />
           </describer>
       </content-type>
    </extension>
em que tagValue representa o nome da marcação de nível superior a ser correspondida e

dtdValue representa o nome do DTD como visto no arquivo XML.

Considere a seguinte contribuição de objeto em um arquivo plugin.xml:

      <extension
       point="org.eclipse.core.runtime.contentTypes">
       <content-type 
           id="topElementContentType"
           name="Tests top-level element recognition" 	
           base-type="org.eclipse.core.runtime.xml"
           priority="high">
           <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
               <parameter name="element" value="myTag" />
           </describer>
       </content-type>
   </extension>

   <extension
       point="org.eclipse.core.runtime.contentTypes">
       <content-type 
           id="dtdContentType"
           name="Tests dtd element recognition" 	
           base-type="org.eclipse.core.runtime.xml"
           priority="high">
           <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
               <parameter name="dtd" value="myDTD.xml" />
           </describer>
       </content-type>
   </extension>
   <extension point="org.eclipse.ui.popupMenus">
       <objectContribution
           id="org.eclipse.ui.examples.objectContributions"
           objectClass="org.eclipse.core.resources.IFile"
           nameFilter="*.xml">
           <visibility>
               <or>
                   <objectState
                       name="contentTypeId"
                       value="org.eclipse.ui.examples.topElementContentType"/>
                   <objectState
                       name="contentTypeId"
                       value="org.eclipse.ui.examples.dtdContentType"/>
               </or>
           </visibility>
           <action id="org.eclipse.ui.examples.objectContributions.action1"
               label="%PopupMenus.action"
               icon="icons/ctool16/openbrwsr.png"
               menubarPath="additions"
               class="org.eclipse.ui.examples.objectContributions.PopupMenuActionDelegate"
               enablesFor="1">
           </action>
       </objectContribution>
   </extension>

Isso tornará visível action1 para qualquer IFile com um nome correspondente a *.xml desde que ele contenha myTag como a marcação XML de nível superior ou utilize o DTD denominado myDTD.xml. Assim, os seguintes arquivos XML irão corresponder:

<?xml version="1.0" encoding="UTF-8"?>
<myTag
  id="org.eclipse.ui.workbench"
   name="%pluginName"
  version="3.0.0"
  provider-name="%providerName"
  class="org.eclipse.ui.internal.WorkbenchPlugin">
</myTag>

ou

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Book SYSTEM "myDTD.xml">
<fragment
  id="org.eclipse.ui.workbench"
   name="%pluginName"
	version="3.0.0"
	provider-name="%providerName"
	class="org.eclipse.ui.internal.WorkbenchPlugin">
	<runtime>
	   <library name="workbench.jar">
	      <export name="*"/>
		  <packages prefixes="org.eclipse.ui, org.eclipse.jface"/>
	   </library>
	</runtime>
</fragment>

BinarySignatureDescriber

BinarySignatureDescriber é um descritor de conteúdo que detecta uma 'assinatura' binária especificada em um determinado deslocamento em um arquivo. Este descritor é utilizado da mesma maneira que XMLRootElementContentDescriber com a exceção de que ele obtém os parâmetros "signature", "offset" e "required" em vez de "element" ou "dtd". O Javadoc para BinarySignatureDescriber fornece detalhes completos sobre o uso da classe desse descritor de conteúdo.