Platformen definerer nogle grundlæggende indholdstyper, f.eks. almindelig tekst og XML. Disse indholdstyper er defineret på samme måde som dem, der leveres af andre plugins. For at du kan få en bedre forståelse for indholdstyperammen, vil der i det følgende blive gennemgået, hvordan platformen definerer nogle af indholdstyperne.
Plugins definerer indholdstyper ved at levere en udvidelse for udvidelsespunktet org.eclipse.core.runtime.contentTypes. I denne udvidelse angiver en plugin en enkel id og et navn for indholdstypen (den fuldstændige id er altid den simple id med det aktuelle navneområde som præfiks). I følgende stykke kode vises en afkortet version af org.eclipse.core.runtime.text
-indholdstypeleverancen:
<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> ...
Attributten file-extensions
definerer, hvilke filtyper der er knyttet til indholdstypen - i dette eksempel ".txt". Attributten file-names
(ikke benyttet her) tillader tilknytning af fuldstændige navne. Platformen tager begge attributter med i betragtning ved udførelsen af indholdstypesporing og -beskrivelse (hvis klienten oplyser et filnavn).
Elementet describer
bruges til at definere en content describer for indholdstypen.
En indholdstype bør stille en indholdsbeskrivelse til rådighed, hvis der eksisterer identificérbare egenskaber, som tillader automatisk sporing af indholdstype, eller hvis der i de data, der tilhører indholdstypen, findes interessante egenskaber. I forbindelse med org.eclipse.core.runtime.text
er det ikke muligt at konstatere indholdstypen ved blot at se på indholdet.
Tekststrømme kan dog være indledt med et mærke for byterækkefølge, som kan være en egenskab, klienter kan være interesseret i at kende til, hvorfor dette berettiger en indholdsbeskrivelse.
Beskrivelsen er en implementering af IContentDescriber eller ITextContentDescriber. Sidstnævnte er en specialiseret udgave af den første, som skal implementeres af beskrivelser af tekstorienterede indholdstyper. Uanset indholdstypens natur er beskrivelsen ansvarlig for to ting: at afgøre, om indholdstypen er relevant for en given datastrøm og at udlede interessante egenskaber fra en datastrøm, der tilsyneladende hører til indholdstypen.
Metoden describe(stream, description) kaldes, hver gang platformen forsøger at bestemme indholdstypen for en bestemt datastrøm eller at beskrive indholdet. Beskrivelsen er null
, hvis der kun anmodes om sporing.
Ellers skal beskrivelsen forsøge at udfylde indholdsbeskrivelsen med de egenskaber, der er fundet ved at læse strømmen - og kun disse egenskaber. Indholdstypekoden bør bruges til at erklære egenskaber, der har standardværdier, f.eks. erklærer org.eclipse.core.runtime.xml
UTF-8 som standardtegnsættet.
Indholdsbeskrivelsen forventes at udføre sit arbejde så hurtigt som muligt. Jo mindre datastrømmen skal læses, desto bedre. Det forventes desuden, at implementeringen af indholdsbeskrivelsen erklæres i en pakke, der er undtaget fra plugin-aktivering (se Eclipse-AutoStart - manifesttoptekst for bundt). Da alle beskrivelser instantieres, når indholdstyperammen initieres, vil fejl i overholdelse af dette krav forårsage en for tidlig aktivering, hvilket bør undgås. Fremtidige implementeringer af platformen vil muligvis nægte at instantiere beskrivelser, hvis det medfører aktivering af den tilhørende plugin.
Indholdstyper er opbygget hierarkisk. Derved kan nye indholdstyper udnytte attributterne eller funktionerne fra de mere generelle indholdstyper. En indholdstype for XML-data betragtes f.eks. som værende underordnet i forhold til tekstindholdstypen:
<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>
En XML-fil betragtes som en type tekstfil, så eventuelle funktioner, der gælder for sidstnævnte, vil også gælde for førstnævnte.
Bemærk, at XML-indholdstypen tilsidesætter flere indholdstypeattributter, der oprindeligt er defineret i indholdstypen for tekst, f.eks. filtilknytninger og implementering af beskrivelser. Desuden erklærer denne indholdstype en standardværdi for egenskaben charset
. Det betyder, at hvis beskrivelsen under indholdsbeskrivelsen for en datastrøm, der betragtes som tilhørende XML-indholdstypen, ikke udfylder egenskaben charset, angiver platformen den til "UTF-8".
Et andet eksempel: org.eclipse.ant.core.antBuildFile
-indholdstypen (for scripts til Ant-byg) udvider XML-indholdstypen:
<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>
Bemærk, at standardværdien for egenskaben charset overtages. Det er muligt at annullere en egenskab eller beskrivelse, der er overtaget, ved at erklære den om med den tomme streng som værdi.
Nye filtilknytninger kan tilføjes til eksisterende indholdstyper. Ressource-plugin'en tilknytter f.eks. org.eclipse.core.runtime.xml
til ".project"-filer:
<extension point="org.eclipse.core.runtime.contentTypes"> <file-association content-type="org.eclipse.core.runtime.xml" file-names=".project"/> ...
På grund af udvidelsesfunktionerne i Eclipse er en indholdstype, som en plugin er afhængig af, muligvis ikke tilgængelig i en given produktkonfiguration. Det problem kan løses vha. et indholdstypealias. Et indholdstypealias er en pladsholder for en anden foretrukken indholdstype, hvis tilgængelighed ikke er garanteret. Runtime erklærer f.eks. et alias (org.eclipse.core.runtime.properties
)
for den indholdstype for Java-egenskaber, som Java Development Tooling
(org.eclipse.jdt.core.javaProperties
) stiller til rådighed:
<!-- en pladsholder for konfigurationer, hvor JDT's officielle type ikke er tilgængelig -->
<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>
Derved får plugins en pladsholder, de kan referere til, uanset om den foretrukne indholdstype er tilgængelig eller ej. Er den det, undertrykkes indholdstypealiaset fra indholdstypekataloget og eventuelle referencer til den fortolkes som referencer til målindholdstypen. Er den det ikke, benyttes aliaset som en almindelig indholdstype.