Do niedawna menu kontekstowe niektórych aplikacji były ograniczone ze względu na wykluczenie niektórych opcji menu. Było to zależne od znanych informacji peryferyjnych, takich jak liczba wybranych zasobów, fizyczna nazwa pliku, typ zasobu itd. W niektórych przypadkach dostępna była ograniczona ilość informacji o treści zasobu, co pozwalało znacząco zredukować nieprzydatne opcje menu. Takie informacje mogą być szczególnie przydatne w przypadku pliku XML, ponieważ istnieje wiele sytuacji, w których dana akcja odnosi się tylko do określonego typu pliku XML (na przykład do plików XML zawierających skrypty Ant). Z logicznego punktu widzenia akcja Wykonaj Ant należy do menu kontekstowego pliku XML służącego do definiowania modułu dodatkowego, ale nie odnosi się do tego pliku.
Dzięki dodaniu punktu rozszerzenia org.eclipse.core.runtime.contentTypes środowisko Eclipse udostępnia obecnie typ treści, dzięki czemu moduły dodatkowe mogą rozszerzać katalog typów treści tej platformy. Co więcej, dostępne są również klasy nazywane obiektami opisu typu treści. Dla programistów dostarczających własne typy treści zapewniono dwa wbudowane, dostosowywalne obiekty opisu typu treści: BinarySignatureDescriber (dla binarnych typów treści) i XMLRootElementContentDescriber (dla typów treści opartych na tekście i języku XML). Oprócz tego, dostawcy modułów dodatkowych mogą tworzyć własne obiekty opisu treści. Szczegółowe informacje na ten temat zawiera Podręcznik programisty modułów dodatkowych platformy Eclipse (Podręcznik programisty > Przegląd środowiska wykonawczego > Typy treści).
Obecnie możliwe jest zdefiniowanie uzupełnień obiektu odnoszących się do pliku XML zawierającego określony znacznik najwyższego poziomu lub określającego wybraną definicję DTD. W tym celu należy zdefiniować rozszerzenie punktu rozszerzenia org.eclipse.core.runtime.contentTypes z użyciem klasy obiektu opisu XMLRootElementContentDescriber i parametrów wskazujących nazwę znacznika najwyższego poziomu lub nazwę definicji DTD. Odbywa się to w następujący sposób:
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id=<identyfikator> name=<nazwa> base-type="org.eclipse.core.runtime.xml"> <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber"> <parameter name="element" value=wartośćZnacznika /> </describer> </content-type> </extension>lub
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id=<identyfikator> name=<nazwa> base-type="org.eclipse.core.runtime.xml"> <describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber"> <parameter name="dtd" value=wartośćDTD /> </describer> </content-type> </extension>
gdzie wartośćZnacznika reprezentuje nazwę znacznika najwyższego poziomu, który należy dopasować, awartośćDTD reprezentuje nazwę definicji DTD z pliku XML.
Rozważmy następujące uzupełnienie obiektu w pliku plugin.xml:
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id="topElementContentType" name="Testuje rozpoznawanie elementu najwyższego poziomu" 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>
Sprawi to, że akcja action1 będzie widoczna dla dowolnego pliku IFile o nazwie zgodnej z wzorcem *xml, pod warunkiem, że zawiera on znacznik myTag jako znacznik XML najwyższego poziomu lub wykorzystuje definicję DTD o nazwie myDTD.xml. Dopasowane zostaną następujące pliki XML:
<?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>
lub
<?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 to obiekt opisu treści, który wykrywa w pliku podaną "sygnaturę" binarną w miejscu o określonym przesunięciu. Ten obiekt jest używany w identyczny sposób co obiekt XMLRootElementContentDescriber, ale zamiast parametrów "element" lub "dtd" należy użyć parametrów "signature", "offset" i "required". Dokumentacja Javadoc dla klasy BinarySignatureDescriber udostępnia pełne informacje na temat sposobu użycia klasy tego obiektu opisu treści.