Tartalomtípusok közreadása

Új tartalomtípus megadása

A platform megad néhány alapvető tartalomtípust, mint például a sima és XML. Ezek a tartalomtípusok ugyanúgy vannak megadva, mint a bedolgozók által biztosítottak. A tartalomtípus-keretrendszer egyszerűbb megértése érdekében megtekintjük, hogy a platform hogyan ad meg néhány tartalomtípust.

A bedolgozók tartalomtípusokat határoznak meg azáltal, hogy kiegészítést biztosítanak az org.eclipse.core.runtime.contentTypes kiterjesztési ponthoz. Ebben a kiterjesztésben a bedolgozó egy egyszerű azonosítót és nevet ad meg a tartalomtípushoz (a teljes azonosító az aktuális névtartományból és az egyszerű azonosítóból áll). Az alábbi részlet az org.eclipse.core.runtime.text tartalomtípus-közreadás leegyszerűsített változatát mutatja be:

	<extension point="org.eclipse.core.runtime.contentTypes">
		<content-type id="text" name="%textContentTypeName">
			file-extensions="txt">
			<describer class="org.eclipse.core.internal.content.TextContentDescriber"/>
		</content-type>
		...

A file-extensions attribútum megadja, hogy mely fájlkiterjesztések kerülnek hozzárendelésre a tartalomtípushoz (ebben a példában ".txt"). A file-names attribútum (ebben az esetben nem használt) teljes nevek hozzárendelését teszi lehetővé. A platform a tartalomtípus-megállapítás és leírás végrehajtásakor mindkét attribútumot figyelembe veszi (ha az ügyfél megad egy fájlnevet).

A leíró elem a tartalomtípushoz megad egy tartalomleírót.

Tartalom felismerése és leírása

A tartalomtípusnak meg kell adnia egy tartalomleírót, ha található olyan azonosítható jellemző, amely az automatikus tartalomfelismerést lehetővé teszi, vagy ha rendelkezésre állnak a tartalomtípushoz tartozó érdekes tulajdonságok. org.eclipse.core.runtime.text esetén a tartalom egyszerű megjelenítésével nem található ki a tartalomtípus. A szövegfolyamokhoz egy bytesorrend-jelzés fűzhető, amely egy olyan tulajdonság, amelyek ismerete az ügyfeleket érdekelheti, így ez garantál egy tartalomleírót.

A leíró az IContentDescriber vagy ITextContentDescriber megvalósítása. Az utóbbi az előbbi specializálódása, amelyet szövegorientált tartalomtípusok leíróinak kell megvalósítania. A tartalomtípus jellegétől függetlenül a leíró két dologért felelős: segít meghatározni, hogy a tartalomtípus megfelelő-e az adott adatfolyamhoz, és kibontja az érdekes tulajdonságokat az adatfolyamból, amely feltehetőleg a tartalomtípusához tartozik.

A describe(stream, description) metódus akkor kerül meghívásra, ha a platform megpróbálja meghatározni egy adott adatfolyam tartalomtípusát vagy leíni a tartalmát. A leírás értéke null, ha csak felismerésre van szükség. Ellenkező esetben a leírónak meg kell próbálnia kitölteni a tartalomleírást a folyam olvasásával megtalálható tulajdonságokkal és csak azokkal. A tartalomtípus leírónyelv segítségével kell deklarálni az alapértelmezett értékekkel rendelkező tulajdonságokat (például: az org.eclipse.core.runtime.xml deklarálja az UTF-8-at alapértelmezett karakterkészletként).

Ha a végrehajtás kötelesség, akkor a tartalomleírónak a lehető leggyorsabban kell lefutnia. Annál jobb, minél kevesebbet kell az adatfolyamnak olvasnia. Az is elvárás, hogy a tartalomleíró megvalósítás egy csomagban kerüljön deklarálásra, amely mentesít a bedolgozóaktiválás alól (lásd: Eclipse-AutoStart kötegjegyzékfájl-fejléc). Mivel minden leíró a tartalomtípus-keretrendszer inicializálásakor kerül elindításra, ezen követelmény teljesítése közbeni hiba idő előtti aktiválást eredményez, amelyet el kell kerülni. A platform jövőbeli megvalósítása megtagadhatja a leírók indítását, ha ennek végrehajtása a megfelelő bedolgozó aktiválását eredményezné.

Meglévő tartalomtípus kiterjesztése

A tartalomtípusok hierarchikusak. Ennek segítségével az új tartalomtípusok kihasználhatják az általánosabb tartalomtípusok attribútumait és jellemzőit. Az XML adatok tartalomtípusa például a szöveg tartalomtípus leszármazottja:

       <content-type 
	id="xml"
	name="%xmlContentTypeName"
	base-type="org.eclipse.core.runtime.text"
	file-extensions="xml">
	<describer class="org.eclipse.core.internal.content.XMLContentDescriber"/>
	<property name="charset" default="UTF-8"/>
</content-type>

Az XML fájlt egy szövegfájlfajtaként kezelik, így a szövegfájlra alkalmazható szolgáltatásoknak az XML fájlra is alkalmazhatóknak kell lenniük.

Ne feledje el, hogy az XML tartalomtípus számos tartalomtípus-attribútumot újradefiniál, amelyek eredetileg a Szöveg tartalomtípusban lettek megadva, mint például a fájlhozzárendelések és a leírómegvalósítás. Ez a tartalomtípus egy alapértelmezett értéket is deklarál a charset tulajdonsághoz. Ez azt jelenti, hogy ha egy adatfolyam - amely vélhetően XML tartalomtípushoz tartozik - tartalomleírása során a leíró nem tölti ki a karakterkészlet tulajdonságot, akkor a platform ezt "UTF-8"-ra állítja.

Másik példa: az org.eclipse.ant.core.antBuildFile tartalomtípus (Ant összeépítési parancsfájlok) kiterjeszti az XML tartalomtípust:

       <content-type  
id="antBuildFile"
name="%antBuildFileContentType.name"
base-type="org.eclipse.core.runtime.xml"
file-names="build.xml"
file-extensions="macrodef,ent,xml">
<describer
class="org.eclipse.ant.internal.core.contentDescriber.AntBuildfileContentDescriber">
</describer>
</content-type>

Ne feledje, hogy a karakterkészlet tulajdonság alapértelmezett értéke örökölt. Az örökölt tulajdonság és leíró úgy törölhető, ha újradefiniálja és üres karaktersorozatot ad meg értékként.

További fájlhozzárendelések

A meglévő tartalomtípusokhoz új fájlhozzárendelések is hozzáadhatók. Például: az Erőforrás bedolgozó hozzárendeli az org.eclipse.core.runtime.xml hozzárendelést a ".project" fájlokhoz:

	<extension point="org.eclipse.core.runtime.contentTypes">
	<file-association content-type="org.eclipse.core.runtime.xml" file-names=".project"/>
	...

Tartalomtípus-álnevek

Az Eclipse bővíthető jellegéből fakadóan elképzelhető, a tartalomtípus, amelyre a bedolgozó épül, nem áll rendelkezésre egy adott termékkonfigurációban. Ez tartalomtípus-álnevekkel kiküszöbölhető. A tartalomtípus-álnév egy másik preferált tartalomtípus helyettesítője, melynek rendelkezésre állása nem garantált. Például a Futási környezet megad egy álnevet (org.eclipse.core.runtime.properties) a Java Development Tooling (org.eclipse.jdt.core.javaProperties) által biztosított Java tulajdonságok tartalomtípushoz:

<!-- a helyettesítő olyan beállításokhoz, amelyekben a JDT
hivatalos típus nem áll rendelkezésre -->			
<content-type id="properties" name="%propertiesContentTypeName"
base-type="org.eclipse.core.runtime.text"
alias-for="org.eclipse.jdt.core.javaProperties"
file-extensions="properties">
<property name="charset" default="ISO-8859-1"/>
</content-type>

Ez egy helyettesítőt biztosít, amelyre a bedolgozók hivatkozhatnak attól függetlenül, hogy a preferált tartalomtípus rendelkezésre áll-e. Ha igen, akkor az álnév-tartalomtípus felülírásra kerül a tartalomtípus-katalógus megfelelő értékével és a rá mutató hivatkozások a céltartalomtípus hivatkozásaiként kerülnek interpretálásra. Ha nem, akkor a rendszer az álnevet használja általános tartalomtípusként.