lundi 7 septembre 2009

java : template velocity

Voici une manière simple et puissante (boucle possible, conidtion, etc ... ) de générer des mails, ou des fichiers customisés via un système de template et le remplacement "en live" par les valeurs des variables. Voici la librairie apache Velocity :

//1-initialiser velocity
Velocity.init();

//2-initailiser le contexte
VelocityContext context = new VelocityContext();

//3- mettre les donnees dans le contexte
context.put("nom","Enwoo");
context.put("typeAbonnement","Forfait 4 heure");
context.put("dateDuMail",new Date());

//4-choisir un fichier template au format velocity
template = Velocity.getTemplate(templateName);

//5-merger le template
template.merge(context,writer);

//6-ecrire le fichier template
il faut respecter la syntaxe velocity, mais simplment les variable doive avoir un $MaVariable devant


/************************************************/
/* un extrait complet et son fichier template */
/************************************************/
private void genererConfiguration() throws Exception
{
HashMap config = new HashMap();
try {
//1 initialize context
Velocity.init();
} catch (Exception e) {
System.err.println("Erreur a l'initialisation");
}
// retrieve and put data in context
VelocityContext context = new VelocityContext();

String iniFile = "ressources/sidef.ini";
LineNumberReader reader = null;
Pattern pValue = Pattern.compile("=(.)+");
Pattern pKey = Pattern.compile("(.)+=");

try {
reader = new LineNumberReader(new FileReader(iniFile));

String line = null;
String value = null;
String key = null;
Matcher matcherValue = null;
Matcher matcherKey = null;

while((line = reader.readLine()) != null)
{
if(line.length() > 0)
{
System.out.println("lecture de [" + line + "]");
matcherValue = pValue.matcher(line);
matcherKey= pKey.matcher(line);
while(matcherValue.find() && matcherKey.find())
{
key = line.substring(matcherKey.start(),matcherKey.end()-1);
value = line.substring(matcherValue.start()+1,matcherValue.end());
context.put(key,value);
}
}
}
} catch (FileNotFoundException e2) {
System.err.println("Erreur de lectur'e du fichier ini [" + iniFile + "]");
e2.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// choose template
Template template = null;
String templateName = "src/ressources/prod.vm";
try {
template = Velocity.getTemplate(templateName);
} catch (ResourceNotFoundException e) {
System.err.println("Template non trouve [" + templateName + "]");
} catch (ParseErrorException e) {
System.err.println("Template non conforme [" + templateName + "]");
} catch (Exception e) {
System.err.println("Exception innattendue [" + e.getMessage() + "]");
}

// merge template
FileWriter writer = null;
String fileName = "prod.conf";
try
{
File file = new File(fileName);
if(file.exists())
{
file.delete();
}

writer = new FileWriter(fileName);

try {
template.merge(context,writer);
writer.flush();
writer.close();
} catch (ResourceNotFoundException e) {
System.err.println("Erreur lors du merge du template");
e.printStackTrace();
} catch (ParseErrorException e) {
System.err.println("Erreur lors du merge du template");
} catch (MethodInvocationException e) {
System.err.println("Erreur lors du merge du template");
} catch (IOException e) {
System.err.println("Erreur lors du merge du template");
}
}
catch (IOException e1)
{
System.err.println("Erreur IO lors de l'ecriture du fichier");
}
finally
{
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


/************************************************/
/* le fichier template associe email.vm */
/************************************************/

Bonjour $nom,

Votre formule d'abonnement est à compté du $dateDuMail, un abonnement du type $typeAbonnement.

Cordialement votre service Client.

Aucun commentaire:

Enregistrer un commentaire