Ce tutorial permet de créer un XML component avec un modèle XML. Il permettra de générer une classe Java UserBean à partir d'un mapping hibernate XML. Le template utilisé dans ce tutorial attend un paramètre doc de type XML (le mapping hibernate).
Vous pouvez trouver l'exemple ci dessous dans le catalogue usecases-catalog/Components/Model/XMLToJavaClass.akgncpt.xml.
A partir du mapping hibernate XML :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="net.sourceforge.akrogen.bean.UserBean" table="T_USER" > <id name="id" type="java.lang.Integer" column="USR_ID_N" > <generator class="identity" /> </id> <property name="name" type="java.lang.String" column="USR_NAME_C" not-null="true" length="100" /> <property name="lastName" type="java.lang.String" column="USR_LASTNAME_C" not-null="true" length="100" /> <property name="birthday" type="java.util.Date" column="USR_BIRTHDAY_D" length="23" /> </class> </hibernate-mapping>
On souhaite générer la classe Java :
package net.sourceforge.akrogen.bean; public class UserBean { private java.lang.Integer id; private java.lang.String name; private java.lang.String lastName; private java.util.Date birthday; public java.lang.Integer getId() { return this.id; } public void setId (java.lang.Integer id) { this.id = id; } public java.lang.String getName() { return this.name; } public void setName (java.lang.String name) { this.name = name; } public java.lang.String getLastName() { return this.lastName; } public void setLastName (java.lang.String lastName) { this.lastName = lastName; } public java.util.Date getBirthday() { return this.birthday; } public void setBirthday (java.util.Date birthday) { this.birthday = birthday; } }
A partir du Wizard page :
Les étapes de ce tutorial sont :
Voici le template freemarker qui permet de générer la classe java UserBean :
<#assign classElement = doc["hibernate-mapping"].class /> package ${packageName}; public class ${className} { <#list classElement.id as item> private ${item.@type} ${item.@name}; </#list> <#list classElement.property as item> private ${item.@type} ${item.@name}; </#list> <#list classElement.id as item> public ${item.@type} get${item.@name?cap_first}() { return this.${item.@name}; } public void set${item.@name?cap_first} (${item.@type} ${item.@name}) { this.${item.@name} = ${item.@name}; } </#list> <#list classElement.property as item> public ${item.@type} get${item.@name?cap_first}() { return this.${item.@name}; } public void set${item.@name?cap_first} (${item.@type} ${item.@name}) { this.${item.@name} = ${item.@name}; } </#list> }
Le template attend trois paramètres :
Voici le XML component que nous allons utiliser :
<?xml version="1.0" encoding="UTF-8"?> <component> <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> <input> <page title="XML context/Freemarker" > <description>Transform XML context to Java Class.</description> <box flex="1" id="" orient="vertical" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <hbox> <label value="Package :" /> <textbox id="packageName" flex="1" /> <button type="package" target="packageName" label="Browse..." /> </hbox> <hbox> <label value="Class name :" /> <textbox id="className" flex="1" /> </hbox> <hbox> <label value="Output Base dir :" /> <textbox id="outputBaseDir" flex="1" /> <button type="folder" target="outputBaseDir" label="Browse..." /> </hbox> <hbox> <label value="Output File name :" /> <textbox id="outputFileName" flex="1" /> </hbox> <hbox> <button type="preview" label="Preview..." /> </hbox> </box> </page> </input> <output> <file> <template uri="/ftl/Xml/XMLToJavaClass.ftl" /> </file> </output> </component>
Créer le fichier XML component XMLToJavaClass.akgncpt.xml dans le répertoire Components/Model/ du catalogue MyAkrogenCatalog.
Voici les explications de ce XML component :
L'élement model d'un component permet de définir les modèles à utiliser dans le template (useIntoOutput="true"). (il peut est aussi utilisé pour gérér les Wizard page dynamiques XUL.
Dans notre cas, le modèle est un fichier de type XML type="xml" (mapping hibernate) qui doit etre passé au template sous la clé key="doc".
omitDocumentType="true" permet d'ommettre le type de document (DTD, Schéma) lié au fichier XML lors du chargement du document XML. Ceci permet d'utiliser un fichier XML dans Akrogen sans avoir la DTD,... et sans charger celle-ci sur Internet (ce qui optimise le temps de la génération de code).
Lélement input/page permet de décrire le Wizard page eclipse :
Rafraichissez la vue catalogue. XMLToJavaClass doit apparaître dans le catalogue.
Double cliquer sur le component XMLToJavaClass pour ouvrir le Wizard page. Le Wizard page suivant s'ouvre avant celui du XML component, car il requiert un fichier XML (mapping Hibernate) :
Sélectionner le fichier XML mapping hibernate et cliquer sur le bouton Next pour ouvrir le Wizard page XML component.
Remplissez les champs du Wizard page :
Cliquez sur le bouton Finish. La classe Userbean se génère dans le répertoire src.
La saisie des champs Output base dir et Output file name peut devenir pénible dans le cas d'utilisation de la génération d'une classe JAVA. En effet dans ce tutorial, il faut saisir :
Le tutorial suivant vous explique comment remédier à ce problème à l'aide de scripts.