Precedentemente, i menu di scelta rapida di alcune applicazioni erano limitati dall'esclusione di alcune opzioni. Questa limitazione si basava sulle informazioni note, quali il numero delle risorse selezionate, il nome fisico del file, il tipo di risorsa e così via. In alcune istanze, era nota una quantità limitata di informazioni sui contenuti di una risorsa e questo riduceva notevolmente le opzioni di menu non utilizzabili. Tali informazioni potevano essere largamente utilizzate in un file XML poiché esistono numerose situazioni in cui un'azione è applicabile a un tipo di file XML ma non a un altro, ad esempio ai file XML contenenti script Ant. L'azione Esegui Ant..., sebbene logica nel relativo menu di scelta rapida, non è un'azione applicabile a un file XML utilizzato per definire un plugin.
Con l'aggiunta del punto di estensione org.eclipse.core.runtime.contentTypes, Eclipse fornisce adesso un 'tipo di contenuto', che consente ai plugin di fornire un catalogo dei tipi di contenuto della piattaforma e, inoltre, sono disponibili le classi denominate Descrittori del tipo di contenuto. Per gli sviluppatori che forniscono i propri tipi di contenuto, esistono due descrittori del tipo di contenuto integrati e personalizzabili: BinarySignatureDescriber (per i tipi di contenuto binario) e XMLRootElementContentDescriber (per i tipi di contenuto di testo basati su XML). Inoltre, i fornitori di plugin possono creare i propri descrittori di contenuto. Per informazioni dettagliate, vedere la Guida per lo sviluppatore di plugin della piattaforma (Guida per il programmatore > Panoramica sul runtime > Tipi di contenuto).
Adesso è possibile definire i contributi dell'oggetto specifici di un file XML con un determinato tag di livello elevato o che specifica un determinato DTD. Per fare ciò, definire un'estensione nel punto di estensione org.eclipse.core.runtime.contentTypes con una classe del descrittore di XMLRootElementContentDescriber e i parametri che definiscono il nome del tag di livello elevato o il nome dtd come segue:
<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>oppure
<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>
dove tagValue rappresenta il nome del tag di livello elevato da far corrispondere edtdValue rappresenta il nome DTD come visualizzato nel file XML.
Considerare il seguente contributo dell'oggetto in un file 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>
Ciò renderà action1 visibile per qualsiasi IFile con un nome che corrisponde a *.xml ammesso che contenga myTag come tag XML di livello elevato o utilizzi un DTD denominato myDTD.xml. Di seguito viene riportato il file XML che corrisponderà:
<?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>
o
<?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 è un descrittore di contenuto che individua una specifica 'firma' binaria su un determinato offset in un file. Questo descrittore viene utilizzato allo stesso modo di XMLRootElementContentDescriber con l'eccezione che prende i parametri "signature", "offset" e "required" invece di "element" o "dtd". Il Javadoc per BinarySignatureDescriber fornisce i dettagli completi sull'utilizzo della classe del descrittore di contenuto.