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.
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é.
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.
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"/> ...
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.