- From: Thomas Gambet via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 29 Jul 2009 09:18:26 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2006/unicorn/org/w3c/unicorn/util In directory hutz:/tmp/cvs-serv1802/org/w3c/unicorn/util Added Files: TemplateHelper.java Removed Files: MergeProperties.java Log Message: Internationalized IO errors Refactoring of template related functions in TemplateHelper class --- NEW FILE: TemplateHelper.java --- // $Id: TemplateHelper.java,v 1.1 2009/07/29 09:18:24 tgambet Exp $ // Author: Thomas GAMBET. // (c) COPYRIGHT MIT, ERCIM ant Keio, 2006. // Please first read the full copyright statement in file COPYRIGHT.html package org.w3c.unicorn.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.Properties; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.exception.ParseErrorException; import org.apache.velocity.exception.ResourceNotFoundException; /** * TemplateHelper provides functionalities to merge properties object, to load properties objects * in a velocity context, to get an internationalized template, and to write internationalized templates * to a file. * * @author Thomas GAMBET */ public class TemplateHelper { public static final Log logger = LogFactory.getLog("org.w3c.unicorn.util"); private static VelocityContext context = new VelocityContext(); private static VelocityEngine engine = new VelocityEngine(); static { Properties aProperties = new Properties(); try { aProperties.load(new URL(Property.class.getResource("/"), Property.get("REL_PATH_TO_CONF_FILES") + "velocity.properties").openStream()); aProperties.put(Velocity.FILE_RESOURCE_LOADER_PATH, Property .get("PATH_TO_TEMPLATES")); engine.init(aProperties); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Properties getMergeProperties(File defaultPropFile, File sourcePropFile) { Properties defaultProps = new Properties(); Properties sourceProps = new Properties(); try { defaultProps.load(defaultPropFile.toURL().openStream()); sourceProps.load(sourcePropFile.toURL().openStream()); } catch (IOException e) { logger.error("Merge Properties Error : " + e.getMessage(), e); e.printStackTrace(); } Properties propMerge = new Properties(); Set<Object> keys = defaultProps.keySet(); Iterator<Object> itr = keys.iterator(); String key; while (itr.hasNext()) { key = itr.next().toString(); if (sourceProps.containsKey(key)) propMerge.put(key, sourceProps.get(key)); else propMerge.put(key, defaultProps.get(key)); } return propMerge; } public static void loadInVelocityContext(Properties props, VelocityContext context) { Set<Object> keys = props.keySet(); Iterator<Object> itr = keys.iterator(); String key; while (itr.hasNext()) { key = itr.next().toString(); context.put(key, props.get(key)); } } public static Template getInternationalizedTemplate(String templateName, String langCode, VelocityContext context) { if (langCode != null) { // Error templates have the same language properties file that their coresponding non-error template String langFileName = templateName; if(templateName.length() > 6 && templateName.substring(templateName.length()-6, templateName.length()).equals(".error")) langFileName = templateName.substring(0,templateName.length()-6); logger.error("TOM : " + templateName); // Language file for this template File langFile = new File(Property.get("PATH_TO_LANGUAGE_FILES") + langFileName + "." + langCode + ".properties"); // Default language file File defaultLangFile = new File(Property.get("PATH_TO_LANGUAGE_FILES") + langFileName + "." + Property.get("DEFAULT_LANGUAGE") + ".properties"); // Merge the properties or use default language Properties mergedProps = new Properties(); if (langFile.exists()) mergedProps = TemplateHelper.getMergeProperties(defaultLangFile, langFile); else try { mergedProps.load(defaultLangFile.toURL().openStream()); } catch (IOException e1) { logger.error("IOException : " + e1.getMessage(), e1); e1.printStackTrace(); } // Load in velocity context TemplateHelper.loadInVelocityContext(mergedProps, context); } // Return the template try { Template resultTemplate = engine.getTemplate(templateName + ".vm","UTF-8"); return resultTemplate; } catch (Exception e) { logger.error("Error : " + e.getMessage(), e); e.printStackTrace(); return null; } } public static String generateFileFromTemplate(String templateName, String langCode, String destination, String fileExtension, VelocityContext context) { String destFileName; String tempFileName; String[] split = templateName.split("/"); if (split.length > 0) tempFileName = split[split.length - 1]; else tempFileName = templateName; if (langCode != null) { destFileName = tempFileName + "." + langCode + "." + fileExtension; } else { destFileName = tempFileName + "." + fileExtension; } if ((new File(destination + destFileName)).exists()) return destination + destFileName; if (langCode != null) { File langFile = new File(Property.get("PATH_TO_LANGUAGE_FILES") + templateName + "." + langCode + ".properties"); if (!langFile.exists() && !langCode.equals(Property.get("DEFAULT_LANGUAGE"))) return generateFileFromTemplate (templateName, Property.get("DEFAULT_LANGUAGE"), destination, fileExtension, context); } Template template = getInternationalizedTemplate(templateName, langCode, context); try { OutputStreamWriter fileWriter = new OutputStreamWriter(new FileOutputStream(destination + destFileName), "UTF-8"); template.merge(context, fileWriter); fileWriter.close(); } catch (Exception e) { logger.error("Error : " + e.getMessage(), e); e.printStackTrace(); } return destination + destFileName; } public static String generateFileFromTemplate(String templateName, String langCode, String destination, String fileExtension) { return generateFileFromTemplate(templateName, langCode, destination, fileExtension, context); } } --- MergeProperties.java DELETED ---
Received on Wednesday, 29 July 2009 09:18:43 UTC