Le plug-in d'exécution de la plate-forme définit l'infrastructure permettant de définir et de détecter les types de contenu pour les flux de données (pour une présentation de la structure de contenu, reportez-vous à la section Types de contenu). La possibilité d'indiquer différents encodages (jeu de caractères) pour différents types de contenu constitue un aspect important du système de type de contenu. Au-delà de cette possibilité, l'API de ressources permet de définir des jeux de caractères par défaut pour les projets, les dossiers et les fichiers. Ces jeux de caractères par défaut sont consultés si le contenu du fichier proprement dit ne définit pas un encodage en particulier dans son flux de données.
Vous avez découvert dans la section Types de contenu qu'il est possible de définir des encodages de fichier par défaut pour les types de contenu. Un contrôle plus affiné est possible grâce à l'API de ressources.
IContainer définit le protocole permettant de définir le jeu de caractères par défaut pour un projet ou un dossier particulier. Cela permet aux plug-ins (et donc à l'utilisateur) de bénéficier d'une liberté accrue pour déterminer un jeu de caractères approprié pour un ensemble de fichiers lorsque les jeux de caractères par défaut du type de contenu ne sont pas appropriés.
IFile définit l'API permettant de définir le jeu de caractères par défaut pour un fichier déterminé. Si aucun encodage n'est spécifié dans le contenu du fichier, c'est ce jeu de caractères qui est utilisé. Le jeu de caractères par défaut du fichier prévaut sur tout autre jeu de caractères par défaut spécifié dans le dossier, le projet ou le type de contenu du fichier.
Ces deux fonctions sont disponibles pour l'utilisateur dans la page de propriétés d'une ressource.
IFile définit également l'API permettant d'interroger le jeu de caractères d'un fichier. Un indicateur booléen spécifie si seul le jeu de caractères défini explicitement pour le fichier doit être renvoyé, ou si un jeu de caractère implicite doit être renvoyé. Par exemple :
String charset = myFile.getCharset(false);
renvoie la valeur null si aucun jeu de caractères n'a été défini explicitement dans myFile. Cependant,
String charset = myFile.getCharset(true);
recherche d'abord un jeu de caractères défini explicitement dans le fichier. Si aucun jeu de caractères n'est détecté, le contenu du fichier est vérifié à la recherche d'une description du jeu de caractères. Si aucune description du jeu de caractères n'est détectée, les dossiers et les projets contenant le fichier sont vérifiés à la recherche d'un jeu de caractères par défaut. Si aucun jeu de caractères par défaut n'est détecté, le jeu de caractères par défaut défini pour le type de contenu est examiné. Enfin, en l'absence de toute autre désignation d'un jeu de caractères par défaut, c'est le jeu de caractères par défaut de la plate-forme qui est renvoyé. La méthode d'accompagnement getCharset() revient à utiliser getCharset(true).
Pour les fichiers de l'espace de travail, IFile fournit une API pour obtenir la description du contenu du fichier :
Fichier IFile = ...; Description IContentDescription = file.getDescription();
Cette API doit être utilisée même lorsque les clients sont uniquement intéressés par la détermination du type de contenu ; le type de contenu peut être facilement obtenu à partir de la description du contenu. Il est possible de détecter le type de contenu ou de décrire des fichiers dans l'espace de travail en obtenant les contenus et le nom et en utilisant l'API décrite dans Utilisation des types de contenu, mais cela n'est pas recommandé. La détermination du type de contenu à l'aide de IFile.getContentDescription() prend en compte les natures du projet et les paramètres spécifiques au projet. Si vous accédez directement au gestionnaire de types de contenus, vous ignorez ceci. Mais il y a plus important, car la lecture du contenu des fichiers à partir du disque est très coûteuse. Le plug-in Ressources maintient un cache des descriptions des contenus pour les fichiers dans l'espace de travail. Celui-ci permet de réduire le coût de la description de contenu à un niveau acceptable.