Model

Un modèle définit un fichier, class, répertoire... à sélectionner par l'utilisateur qui peut être de type :

  • xml : le modèle à sélectionner est un fichier XML.
  • class : le modèle à sélectionner est une classe JAVA.
  • properties : le modèle à sélectionner est un fichier de propriétés.
  • folder : le modèle à sélectionner est un répertoire.

Un modèle est requis dans le cas :

Le modèle est constitué d'élements model qui permettent de définir les fichiers requis (pour le template ou le XUL dynamique) et oblige ainsi l'utilisateur à sélectionner les fichiers requis.

Attributs de model

Nom attributDescriptionObligatoire ?
typexml: dans le cas ou un document XML doit être chargé.
class: dans le cas ou une classe JAVA doit être chargé.
properties: dans le cas ou un fichier de propriétés doit être chargé.
folder: dans le cas ou un répertoire java.io.File doit être chargé.
Oui
keyClé utilisé dans le template ou dans le XUL dynamique.Oui
useIntoOutputtrue si le fichier est utilisé dans le template.Non
useIntoInputtrue si le fichier est utilisé dans le XUL dynamique.Non
omitDocumentTypetrue si la DTD/Schéma XML doit être ignorés lors du chargement d'un fichier XML (type=xml).Non
pathrenseigne le chemin d'un fichier ou d'un répertoire (folder) à utiliser dans le modèle pour éviter de sélectionner un fichier dans le cas où le fichier/folder est toujous le même (voir section path pour plus d'informations).Non

Type

xml

Un modèle de type xml permet d'utiliser un fichier xml avec un moteur de template (Freemarker, XSL,..).

Voici un exemple de défintion d'un modèle de type xml utilisé dans le template avec la clé doc :

<models>
  <!-- This component requires selection of XML File which is used into 
       Template context (Output) -->
  <model type="xml" key="doc" useIntoOutput="true" omitDocumentType="true" />
</models>

Voici un exemple de template Freemarker qui utilise ce modèle de type xml enregistré avec la clé doc :

<#assign classElement = doc["hibernate-mapping"].class />  

<#list classElement.property as item>
        private ${item.@type} ${item.@name};    
</#list>

properties

Un modèle de type properties permet d'utiliser un fichier properties avec un moteur de template (Freemarker, XSL,..).

Voici un exemple de défintion d'un modèle de type properties utilisé dans le template avec la clé prop :

<models>
  <!-- This component requires selection of properties File which is used into 
       Template context (Output) -->
  <model type="properties" key="prop" useIntoOutput="true" />
</models>

Voici un exemple de template Freemarker qui utilise ce modèle de type properties enregistré avec la clé prop :

<#assign properties = prop.properties />

<#list properties?keys as key>
  key : ${key} value : ${properties[key]}
</#list>

class

Voici un exemple de défintion d'un modèle de type class JAVA utilisé dans le template avec la clé pojo :

<models>
  <!-- This component requires selection of Java class which is used into 
       Template context (Output) -->
  <model type="class" key="pojo" useIntoOutput="true" />
</models>

Voici un exemple de template Freemarker qui utilise le modèle de type class JAVA enregistré avec la clé pojo :

<#list pojo.fields as f>
    <property
        name="${f.elementName}"
        type="${f.typeSignature?substring(1)}"
        column="${f.elementName}"
    />
</#list>

folder

Le modèle de type folder permet d'utiliser un répertoire de type java.io.File dan le modèle. Ce type de modèle peut être utile lorsque vous voulez naviguer dans un répertoire et générer un XUL dynamique en fonction des fichiers/répertoires du folder spécifié.

Voici un exemple de défintion d'un modèle de type folder utilisé dans le template avec la clé dir :

<models>
  <model type="folder" key="dir" useIntoInput="true" />
</models>

Voici un exemple de template Freemarker avec une syntaxe square bracket qui utilise le modèle de type folder enregistré avec la clé dir :

...
[#list dir.listFiles() as f]
  <treeitem checked="true" >
<treerow>
  [#assign isDirectory = f.isDirectory() /]
  [#if isDirectory]
  <treecell label="DIRECTORY : ${f.name}" />
  [#else]
  <treecell label="FILE : ${f.name}" />
  [/#if]
</treerow>
</treeitem>
[/#list]             
...

Path

Lorsque le fichier xml, properties,... ou le répertoire folder à utiliser dans un modèle du XML component est connu quelque soit le projet, il est intéréssant de renseigner l'attribut path de l'élement model. Le path renseigné permettra d'éviter de sélectionner le fichier model à chaque ouverture du XML component.

Par exemple dans un projet J2EE, le fichier web.xml existe toujours, et est souvent stocké dans le répertoire web/WEB-INF du projet. Si vous avez un XML component qui requiert ce fichier en tant que modèle, il peut être intéressant de renseigner l'attribut path comme ceci :

<models>
  ...
  <model type="xml" key="webxml" useIntoOutput="true" omitDocumentType="true" 
         path="project:/web/WEB-INF/web.xml" />
  ...
</models>

Comme vous avez pu le remarquer, path commence par project:/, ce qui signifie que le répertoire racine est le projet Eclipse auquel le catalogue est associé. project:/ n'est pas obligatoire, vous pouvez renseigner path comme ceci :

<models>
  ...
  <model type="xml" key="webxml" useIntoOutput="true" omitDocumentType="true" 
         path="web/WEB-INF/web.xml" />
  ...
</models>

path peut commencer par :

  • project:/ qui permet de lier un fichier/folder de votre projet Eclipse.
  • catalogue:/ qui permet de lier un fichier/folder dans le répertoire catalogue auquel est associé le projet Eclipse.
      path="catalogue:/myDataFile.xml"

    fait référence au fichier myDataFile.xml stocké dans le répertoire de base du catalogue.

  • file:/ qui permet de lier un fichier/folder provenant d'un répertoire de votre disque.
      path="file:/C:/myDataFile.xml"

    fait référence au fichier myDataFile.xml stocké dans le répertoire C:/.

Vous pouvez utiliser les patterns :

  • /*/ qui signifie n'importe quel répertoire. Si plusieurs fichiers sont retrouvés par le pattern, le premier fichier sera utilisé.
  • /**/ qui signifie n'importe quel liste de répertoires dans votre path. Si plusieurs fichiers sont retrouvés par le pattern, le premier fichier sera utilisé.

Par exemple, vous pouvez renseigner le path comme ceci :

  path="web/*/struts-config.xml"