Tartalom érzékeny objektum közreműködések

Az előzőekben egyes alkalmazások környezetérzékeny menüit bizonyos menüpontok kizárása korlátozta. Ez olyan periféria információkon alapult, mint a kijelölt erőforrások száma, a fájl fizikai neve, az erőforrás típusa stb. Néhány esetben az erőforrás tartalmáról korlátozott információk álltak rendelkezésre, ami jelentősen korlátozta a nem használható menüpontokat. Az ilyen információk igen hasznosak lehetnek egy XML fájlban, mivel számos esetben előfordul, hogy egyes műveletek az egyik XML fájlra alkalmazhatók (például az Ant parancsfájlokat tartalmazó XML fájlokra), másokra viszont nem. Az Ant futtatása... például logikus egy XML fájl előugró menüjében, de nem használható például egy bedolgozót meghatározó XML fájlhoz.

Az org.eclipse.core.runtime.contentTypes kiterjesztési pont hozzáadásával az Eclipse 'tartalomtípus' megadását biztosítja, ami lehetővé teszi a bedolgozók számára, hogy közzétegyék a platform tartalomtípus katalógust, sőt Tartalomtípus leíró osztályokat is használhatnak. A saját tartalomtípusokat használó fejlesztők két testreszabható, beépített tartalomtípus leírót használhatnak: BinarySignatureDescriber (bináris tartalomtípusokhoz) és XMLRootElementContentDescriber (szöveghez és XML alapú tartalomtípusokhoz). A bedolgozók fejlesztői ezenkívül saját tartalom leírókat is biztosíthatnak. Erről részletes információkat a Platform bedolgozó fejlesztői útmutatóban (Programozói útmutató > Futtatási környezet áttekintése > Tartalomtípusok) talál.

XMLRootElementContentDescriber

Lehetséges adott legfelsőszintű címkével rendelkező vagy adott DTD-t meghatározó XML fájlhoz objektum közreműködéseket megadni. Ehhez adjon meg egy kiterjesztést az org.eclipse.core.runtime.contentTypes kiterjesztési ponthoz XMLRootElementContentDescriber leíró osztállyal és olyan paraméterekkel, amelyek jelzik a legfelső szintű címke vagy a dtd nevét:

   <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>
vagy
   <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>
A tagValue azt a legfelső szintű címkét jelzi, amelynek egyeznie kell, a

dtdValue pedig az XML fájlban található DTD nevét jelöli.

Fontolja meg az alábbi objektum közreműködést egy plugin.xml fájlban:

   <extension
       point="org.eclipse.core.runtime.contentTypes">
       <content-type 
           id="topElementContentType"
           name="Legfelső szintű elem felismerésének tesztelése"
           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="DTD elem felismerésének tesztelése"
           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>

Az action1 minden olyan IFile számára látható lesz, amelynek a neve *.xml és amely tartalmazza a myTag legfelső szintű XML címkét vagy használja a myDTD.xml nevű DTD-t. Így az alábbi XML fájlok fognak megfelelni:

<?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>

vagy

<?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

A BinarySignatureDescriber egy olyan tartalom leíró, amely észleli a megadott bináris 'aláírást' egy adott eltolásnál a fájlokban. Ezt a leírót ugyanúgy lehet használni mint az XMLRootElementContentDescriber-t azzal a különbséggel, hogy ez a leíró az "element" vagy "dtd" paraméter helyett a "signature", "offset" és "required" paramétereket használja. A BinarySignatureDescriber Java dokumentációja teljes leírást tartalmaz ennek a tartalom leíró osztálynak a használatáról.