r1830 - in trunk: ant-i18n-task/src/license nuiton-i18n/src/main/java/org/nuiton/util nuiton-i18n/src/main/java/org/nuiton/util/converter nuiton-i18n/src/main/resources/META-INF/services
Author: tchemit Date: 2010-11-29 21:10:23 +0100 (Mon, 29 Nov 2010) New Revision: 1830 Url: http://nuiton.org/repositories/revision/i18n/1830 Log: Evolution #1120: Move LocaleConverter to the nuiton-utils correct pakcage (org.nuiton.util.converter) Added: trunk/nuiton-i18n/src/main/java/org/nuiton/util/converter/ trunk/nuiton-i18n/src/main/java/org/nuiton/util/converter/LocaleConverter.java Modified: trunk/ant-i18n-task/src/license/THIRD-PARTY.properties trunk/nuiton-i18n/src/main/java/org/nuiton/util/LocaleConverter.java trunk/nuiton-i18n/src/main/resources/META-INF/services/org.apache.commons.beanutils.Converter Modified: trunk/ant-i18n-task/src/license/THIRD-PARTY.properties =================================================================== --- trunk/ant-i18n-task/src/license/THIRD-PARTY.properties 2010-11-22 13:38:42 UTC (rev 1829) +++ trunk/ant-i18n-task/src/license/THIRD-PARTY.properties 2010-11-29 20:10:23 UTC (rev 1830) @@ -1,6 +1,7 @@ # Generated by org.nuiton.license.plugin.AddThirdPartyMojo #------------------------------------------------------------------------------- # Already used licenses in project : +# - =The Apache Software License, Version 2.0 # - BSD License # - Common Public License Version 1.0 # - Lesser General Public License (LGPL) v 3.0 @@ -9,6 +10,6 @@ # Please fill the missing licenses for dependencies : # # -#Thu Nov 11 15:08:04 CET 2010 -org.apache.ant--ant--1.8.0==The Apache Software License, Version 2.0 -org.apache.ant--ant-launcher--1.8.0=The Apache Software License, Version 2.0 +#Mon Nov 22 14:38:26 CET 2010 +org.apache.ant--ant--1.8.0--jar=\=The Apache Software License, Version 2.0 +org.apache.ant--ant-launcher--1.8.0--jar=The Apache Software License, Version 2.0 Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/util/LocaleConverter.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/util/LocaleConverter.java 2010-11-22 13:38:42 UTC (rev 1829) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/util/LocaleConverter.java 2010-11-29 20:10:23 UTC (rev 1830) @@ -41,7 +41,9 @@ * classe pour convertir une chaine en un objet {@link Locale}. * * @author tchemit <chemit@codelutin.com> + * @deprecated since 2.0.1, use the {@link org.nuiton.util.converter.LocaleConverter} instead */ +@Deprecated public class LocaleConverter implements Converter { private static final Pattern FULL_SCOPE_PATTERN = Copied: trunk/nuiton-i18n/src/main/java/org/nuiton/util/converter/LocaleConverter.java (from rev 1829, trunk/nuiton-i18n/src/main/java/org/nuiton/util/LocaleConverter.java) =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/util/converter/LocaleConverter.java (rev 0) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/util/converter/LocaleConverter.java 2010-11-29 20:10:23 UTC (rev 1830) @@ -0,0 +1,148 @@ +/* + * #%L + * I18n :: Api + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2010 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package org.nuiton.util.converter; + +import org.apache.commons.beanutils.ConversionException; +import org.apache.commons.beanutils.Converter; +import org.apache.commons.logging.Log; +import org.nuiton.i18n.CountryEnum; +import org.nuiton.i18n.LanguageEnum; + +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.apache.commons.logging.LogFactory.getLog; + +/** + * classe pour convertir une chaine en un objet {@link Locale}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.0.1 + */ +public class LocaleConverter implements Converter { + + private static final Pattern FULL_SCOPE_PATTERN = + Pattern.compile("([a-zA-Z]{2})_([a-zA-Z]{2})"); + + private static final Pattern MEDIUM_SCOPE_PATTERN = + Pattern.compile("([a-zA-Z]{2})"); + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static Log log = getLog(LocaleConverter.class); + + @Override + public Object convert(Class aClass, Object value) { + if (value == null) { + throw new ConversionException("can not convert null value in " + + this + " convertor"); + } + if (isEnabled(aClass)) { + Object result; + if (isEnabled(value.getClass())) { + result = value; + return result; + } + if (value instanceof String) { + result = valueOf(((String) value).trim()); + return result; + } + } + throw new ConversionException( + "could not find a convertor for type " + aClass.getName() + + " and value : " + value); + } + + public Locale valueOf(String value) { + try { + Locale result = convertFullScope(value); + + if (result == null) { + result = convertMediumScope(value); + } + + if (result == null) { + throw new ConversionException("could not convert locale " + + value); + } + + return result; + } catch (Exception e) { + throw new ConversionException("could not convert locale " + value + + " for reason " + e.getMessage()); + } + } + + private Locale convertFullScope(String value) { + Matcher m = FULL_SCOPE_PATTERN.matcher(value); + if (m.matches()) { + // found a full scope pattern (language + country) + LanguageEnum language = + LanguageEnum.valueOf(m.group(1).toLowerCase()); + CountryEnum country = CountryEnum.valueOf(m.group(2).toUpperCase()); + if (language == null || country == null) { + // not safe + throw new ConversionException("could not convert locale " + + value); + } + return new Locale(language.name(), country.name()); + } + return null; + } + + private Locale convertMediumScope(String value) { + Matcher m = MEDIUM_SCOPE_PATTERN.matcher(value); + if (m.matches()) { + // found a medium scope pattern (only language) + LanguageEnum language = + LanguageEnum.valueOf(m.group(1).toLowerCase()); + + if (language == null) { + // not safe + throw new ConversionException("could not convert locale " + + value); + } + return new Locale(language.name()); + } + return null; + } + + + public LocaleConverter() { + if (log.isDebugEnabled()) { + log.debug(this); + } + } + + protected boolean isEnabled(Class<?> aClass) { + return Locale.class.equals(aClass); + } + + public Class<?> getType() { + return Locale.class; + } + +} Modified: trunk/nuiton-i18n/src/main/resources/META-INF/services/org.apache.commons.beanutils.Converter =================================================================== --- trunk/nuiton-i18n/src/main/resources/META-INF/services/org.apache.commons.beanutils.Converter 2010-11-22 13:38:42 UTC (rev 1829) +++ trunk/nuiton-i18n/src/main/resources/META-INF/services/org.apache.commons.beanutils.Converter 2010-11-29 20:10:23 UTC (rev 1830) @@ -1 +1 @@ -org.nuiton.util.LocaleConverter \ No newline at end of file +org.nuiton.util.converter.LocaleConverter \ No newline at end of file
participants (1)
-
tchemit@users.nuiton.org