You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/12/22 18:23:02 UTC

svn commit: r1425313 - in /stanbol/trunk/enhancer/generic/nlp/src: main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java

Author: rwesten
Date: Sat Dec 22 17:23:01 2012
New Revision: 1425313

URL: http://svn.apache.org/viewvc?rev=1425313&view=rev
Log:
STANBOL-STANBOL-861: The language config utility now supports country specific languages

Modified:
    stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java
    stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java

Modified: stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java?rev=1425313&r1=1425312&r2=1425313&view=diff
==============================================================================
--- stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java (original)
+++ stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.java Sat Dec 22 17:23:01 2012
@@ -169,7 +169,7 @@ public class LanguageConfiguration {
             String line = value.toString().trim();
             int sepIndex = line.indexOf(';');
             String lang = sepIndex < 0 ? line : line.substring(0, sepIndex).trim();
-            lang = lang.toLowerCase();
+            //lang = lang.toLowerCase(); //country codes are upper case
             if(lang.length() > 0 && lang.charAt(0) == '!'){ //exclude
                 lang = lang.substring(1);
                 if(configuredLanguages.containsKey(lang)){
@@ -252,15 +252,37 @@ public class LanguageConfiguration {
         return params.isEmpty() ? EMPTY_PARAMS : Collections.unmodifiableMap(params);
     }
 
+    private class LangState{
+        
+        protected final boolean state;
+        protected final String lang;
+        protected LangState(boolean state, String lang){
+            this.state = state;
+            this.lang = lang;
+        }
+    }
+    
+    private LangState getLanguageState(String language){
+        int countrySepPos = language == null ? -1 : language.indexOf('-');
+        boolean excluded = excludedLanguages.contains(language);
+        boolean included = configuredLanguages.containsKey(language);
+        if(countrySepPos >= 2 && !excluded && ! included){
+            //search without language specific part
+            String baseLang = language.substring(0, countrySepPos);
+            return new LangState(allowAll ? !excludedLanguages.contains(baseLang) :
+                configuredLanguages.containsKey(baseLang), baseLang);
+        } else {
+            return new LangState(allowAll ? !excluded : included,language);
+        }
+    }
+    
     /**
      * Checks if the parsed language is included in the configuration
      * @param language the language
      * @return the state
      */
     public boolean isLanguage(String language){
-        return allowAll ? 
-            (!excludedLanguages.contains(language)) : 
-                configuredLanguages.containsKey(language);
+        return getLanguageState(language).state;
     }
     /**
      * The explicitly configured languages
@@ -293,9 +315,10 @@ public class LanguageConfiguration {
      * @return the parameters or <code>null</code> if none or the parsed language
      * is not active.
      */
-    public Map<String,String> getParameters(String language){
-        if(isLanguage(language)){
-            Map<String,String> params = configuredLanguages.get(language);
+    public Map<String,String> getParameters(String parsedLang){
+        LangState ls = getLanguageState(parsedLang);
+        if(ls.state){
+            Map<String,String> params = configuredLanguages.get(ls.lang);
             if(params != null){
                 params = new CompositeMap(params,defaultParameters,CONFIGURATION_MERGER);
             } else {
@@ -313,8 +336,9 @@ public class LanguageConfiguration {
      * @return the language specific parameters or <code>null</code> if no
      * parameters are configured.
      */
-    public Map<String,String> getLanguageParams(String language){
-        return configuredLanguages.get(language);
+    public Map<String,String> getLanguageParams(String parsedLang){
+        LangState ls = getLanguageState(parsedLang);
+        return ls.state ? configuredLanguages.get(ls.lang) : null;
     }
     /**
      * Getter for the default parameters
@@ -346,6 +370,14 @@ public class LanguageConfiguration {
      */
     public String getParameter(String language, String paramName) {
         Map<String,String> params = getParameters(language);
+        int countrySepPos = language == null ? -1 : language.indexOf('-');
+        //we need to fallback to the language specific config if
+        // * there is a country code
+        // * no country specific params OR
+        // * param not present in country specific config
+        if(countrySepPos >= 2 && (params == null || !params.containsKey(paramName))) {
+            params = getParameters(language.substring(0,countrySepPos));
+        }
         return params == null ? null : params.get(paramName);
     }
     

Modified: stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java
URL: http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java?rev=1425313&r1=1425312&r2=1425313&view=diff
==============================================================================
--- stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java (original)
+++ stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java Sat Dec 22 17:23:01 2012
@@ -41,6 +41,7 @@ public class LanguageConfigurationTest {
         config.put("test", "*,!de");
         LanguageConfiguration lc = new LanguageConfiguration("test", null);
         lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage(null));
         Assert.assertFalse(lc.isLanguage("de"));
         Assert.assertTrue(lc.isLanguage("en"));
         Assert.assertTrue(lc.isLanguage("jp"));
@@ -148,4 +149,31 @@ public class LanguageConfigurationTest {
         Assert.assertEquals("overridden", lc.getParameter("es", "param"));
         
     }
+    @Test
+    public void testCountrySpecificConfigurations() throws ConfigurationException {
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", ";param=default,de-AT;param1=test1,de;param2=test2");
+        lc.setConfiguration(config);
+        //test no wildcard
+        Assert.assertFalse(lc.isLanguage("en"));
+        Assert.assertTrue(lc.isLanguage("de"));
+        Assert.assertTrue(lc.isLanguage("de-AT"));
+        Assert.assertTrue(lc.isLanguage("de-CH"));
+        //test defaults
+        Assert.assertEquals("default", lc.getParameter("de", "param"));
+        Assert.assertEquals("default", lc.getParameter("de-AT", "param"));
+        Assert.assertEquals("default", lc.getParameter("de-CH", "param"));
+        //test specific
+        Assert.assertEquals("test2", lc.getParameter("de", "param2"));
+        Assert.assertEquals("test2", lc.getParameter("de-CH", "param2"));
+        Assert.assertEquals("test2",lc.getParameter("de-AT", "param2")); //fallback from de-AT to de
+
+        //test Country specificspecific
+        Assert.assertEquals("test1", lc.getParameter("de-AT", "param1"));
+        Assert.assertNull(lc.getParameter("de", "param1"));
+        Assert.assertNull(lc.getParameter("de-CH", "param1"));
+        
+    }
+    
 }