Author: rwesten
Date: Wed Nov 28 10:19:42 2012
New Revision: 1414630

URL: http://svn.apache.org/viewvc?rev=1414630&view=rev
Log:
STANBOL-733: Added unit tests for the LanguageConfiguration tool. Also fixed 
some bugs while that process

*

Added:
    
stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java
   (with props)
Modified:
    
stanbol/trunk/enhancer/generic/nlp/src/main/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfiguration.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=1414630&r1=1414629&r2=1414630&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
 Wed Nov 28 10:19:42 2012
@@ -9,6 +9,8 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.collections.map.CompositeMap;
+import org.apache.commons.collections.map.CompositeMap.MapMutator;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.ConfigurationException;
 
@@ -175,25 +177,27 @@ public class LanguageConfiguration {
                         "Langauge '"+lang+"' is both included and excluded 
(config: "
                         + config+")");
                 }
+                if(sepIndex >= 0){
+                    throw new ConfigurationException(property, 
+                        "The excluded Langauge '"+lang+"' MUST NOT define 
parameters (config: "
+                        + config+")");
+                }
                 excludedLanguages.add(lang);
             } else if("*".equals(lang)){
                 allowAll = true;
-                parsedDefaultParameters(line, sepIndex);
+                parsedDefaultParameters(line, sepIndex+1);
             } else if(!lang.isEmpty()){
                 if(excludedLanguages.contains(lang)){
                     throw new ConfigurationException(property, 
                         "Langauge '"+lang+"' is both included and excluded 
(config: "
                         + config+")");
                 }
-                if(sepIndex >= 0){
-                    
-                }
                 configuredLanguages.put(lang,sepIndex >= 0 && sepIndex < 
line.length()-2 ? 
-                        parseParameters(line.substring(sepIndex, 
line.length()).trim()) :
+                        parseParameters(line.substring(sepIndex+1, 
line.length()).trim()) :
                             EMPTY_PARAMS);
             } else { //language tag is empty (line starts with an ';'
                 //this indicates that this is used to configure the default 
parameters
-                parsedDefaultParameters(line, sepIndex);
+                parsedDefaultParameters(line, sepIndex+1);
             }
         }
     }
@@ -282,7 +286,9 @@ public class LanguageConfiguration {
     }
     
     /**
-     * Returns parsed parameters if <code>{@link #isLanguage(String)} == 
true</code>
+     * Returns configured parameters if <code>{@link #isLanguage(String)} == 
true</code>.
+     * The returned map contains {@link #getLanguageParams(String) language 
specific parameters} 
+     * merged with {@link #getDefaultParameters()}
      * @param language the language
      * @return the parameters or <code>null</code> if none or the parsed 
language
      * is not active.
@@ -290,11 +296,10 @@ public class LanguageConfiguration {
     public Map<String,String> getParameters(String language){
         if(isLanguage(language)){
             Map<String,String> params = configuredLanguages.get(language);
-            if((params == null || params.isEmpty()) && //if no or empty 
parameters
-                    !defaultParameters.isEmpty()){ //and there are defaults
+            if(params != null){
+                params = new 
CompositeMap(params,defaultParameters,CONFIGURATION_MERGER);
+            } else {
                 params = defaultParameters;
-            } else if(params == null){ //do not return NULL
-                params = EMPTY_PARAMS;
             }
             return params;
         } else {
@@ -302,6 +307,16 @@ public class LanguageConfiguration {
         }
     }
     /**
+     * Getter for the language specific parameters. This does NOT include
+     * default parameters.
+     * @param language the language
+     * @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);
+    }
+    /**
      * Getter for the default parameters
      * @return the default parameters, an empty map if none.
      */
@@ -322,7 +337,8 @@ public class LanguageConfiguration {
     }
     /**
      * Returns the value of the parameter for the language (if present and the
-     * langage is active)
+     * langage is active). This merges language specific parameters with
+     * default parameters.
      * @param language the language
      * @param paramName the name of the param
      * @return the param or <code>null</code> if not present OR the language
@@ -333,5 +349,28 @@ public class LanguageConfiguration {
         return params == null ? null : params.get(paramName);
     }
     
+    MapMutator CONFIGURATION_MERGER = new MapMutator() {
+        
+        @Override
+        @SuppressWarnings("rawtypes")
+        public void resolveCollision(CompositeMap composite, Map existing, Map 
added, Collection intersect) {
+            //nothing to do as we want the value of the first map
+        }
+        
+        @Override
+        @SuppressWarnings({"rawtypes", "unchecked"})
+        public void putAll(CompositeMap map, Map[] composited, Map mapToAdd) {
+            //add to the first
+            composited[0].putAll(mapToAdd);
+        }
+        
+        @Override
+        @SuppressWarnings({"rawtypes", "unchecked"})
+        public Object put(CompositeMap map, Map[] composited, Object key, 
Object value) {
+            Object prevResult = map.get(key);
+            Object result = composited[0].put(key,value);
+            return result == null ? prevResult : result;
+        }
+    };
     
 }

Added: 
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=1414630&view=auto
==============================================================================
--- 
stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java
 (added)
+++ 
stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java
 Wed Nov 28 10:19:42 2012
@@ -0,0 +1,151 @@
+package org.apache.stanbol.enhancer.nlp.utils;
+
+import java.util.Arrays;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.osgi.service.cm.ConfigurationException;
+
+public class LanguageConfigurationTest {
+
+    
+    @Test
+    public void testExplicitLanguages() throws ConfigurationException{
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", "de,en");
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage("de"));
+        Assert.assertTrue(lc.isLanguage("en"));
+        Assert.assertFalse(lc.isLanguage("jp"));
+        config.put("test2", new String[]{"ru","fi"});
+        lc = new LanguageConfiguration("test2", null);
+        lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage("ru"));
+        Assert.assertTrue(lc.isLanguage("fi"));
+        Assert.assertFalse(lc.isLanguage("jp"));
+        config.put("test3", Arrays.asList("zh","jp"));
+        lc = new LanguageConfiguration("test3", null);
+        lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage("zh"));
+        Assert.assertTrue(lc.isLanguage("jp"));
+        Assert.assertFalse(lc.isLanguage("de"));
+    }
+    @Test
+    public void testExclusions() throws ConfigurationException{
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", "*,!de");
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        lc.setConfiguration(config);
+        Assert.assertFalse(lc.isLanguage("de"));
+        Assert.assertTrue(lc.isLanguage("en"));
+        Assert.assertTrue(lc.isLanguage("jp"));
+        config.put("test2", new String[]{"!ru","!fi","*"});
+        lc = new LanguageConfiguration("test2", null);
+        lc.setConfiguration(config);
+        Assert.assertFalse(lc.isLanguage("ru"));
+        Assert.assertFalse(lc.isLanguage("fi"));
+        Assert.assertTrue(lc.isLanguage("jp"));
+        config.put("test3", Arrays.asList("!zh","*","!jp"));
+        lc = new LanguageConfiguration("test3", null);
+        lc.setConfiguration(config);
+        Assert.assertFalse(lc.isLanguage("zh"));
+        Assert.assertFalse(lc.isLanguage("jp"));
+        Assert.assertTrue(lc.isLanguage("de"));
+    }
+    
+    @Test
+    public void testLanguageParameter() throws ConfigurationException{
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", "*,de;param1=test");
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage("de"));
+        Assert.assertTrue(lc.isLanguage("en"));
+        Assert.assertEquals("test", lc.getParameter("de", "param1"));
+        Assert.assertNull(lc.getParameter("en", "param1"));
+        Assert.assertNull(lc.getParameter("de", "noParam"));
+        Map<String,String> params = lc.getParameters("de");
+        Assert.assertNotNull(params);
+        Assert.assertEquals(1, params.size());
+        Assert.assertEquals("test", params.get("param1"));
+
+        lc = new LanguageConfiguration("test2", null);
+        config.put("test2", new 
String[]{"*","!ru","fi;param1=test1;param2=test2;param3=test3"});
+        lc.setConfiguration(config);
+        Assert.assertTrue(lc.isLanguage("fi"));
+        Assert.assertTrue(lc.isLanguage("en"));
+        Assert.assertFalse(lc.isLanguage("ru"));
+        Assert.assertEquals("test1", lc.getParameter("fi", "param1"));
+        Assert.assertEquals("test2", lc.getParameter("fi", "param2"));
+        Assert.assertEquals("test3", lc.getParameter("fi", "param3"));
+        params = lc.getParameters("fi");
+        Assert.assertNotNull(params);
+        Assert.assertEquals(3, params.size());
+        Assert.assertEquals("test1", params.get("param1"));
+        Assert.assertEquals("test2", params.get("param2"));
+        Assert.assertEquals("test3", params.get("param3"));
+    }
+    @Test(expected=ConfigurationException.class)
+    public void testParamsOnExcludedLanguage() throws ConfigurationException {
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", "*,!de;param=notAllowed");
+        lc.setConfiguration(config);
+    }
+    @Test(expected=ConfigurationException.class)
+    public void testParamsIncludedAndExcludedLanguage() throws 
ConfigurationException {
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", "de,ru,!de");
+        lc.setConfiguration(config);
+    }
+    @Test
+    public void testDefaultParametersOnWildcard() throws 
ConfigurationException {
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", 
"*;param=default,de;param1=test1,!ru,es;param=overridden");
+        lc.setConfiguration(config);
+        //test defaults
+        Assert.assertEquals("default", lc.getParameter("en", "param"));
+        //test merging with specific
+        Assert.assertEquals("default", lc.getParameter("de", "param"));
+        Assert.assertEquals("test1", lc.getParameter("de", "param1"));
+        Map<String,String> params = lc.getParameters("de");
+        Assert.assertNotNull(params);
+        Assert.assertEquals(2, params.size());
+        Assert.assertEquals("default", params.get("param"));
+        Assert.assertEquals("test1", params.get("param1"));
+        //test overriding
+        Assert.assertEquals("overridden", lc.getParameter("es", "param"));
+        //test that ru is excluded
+        Assert.assertFalse(lc.isLanguage("ru"));
+        Assert.assertNull(lc.getParameters("ru"));
+    }
+    @Test
+    public void testDefaultParametersWithoutWildcard() throws 
ConfigurationException {
+        LanguageConfiguration lc = new LanguageConfiguration("test", null);
+        Dictionary<String,Object> config = new Hashtable<String,Object>();
+        config.put("test", 
";param=default,de;param1=test1,ru,es;param=overridden");
+        lc.setConfiguration(config);
+        //test no wildcard
+        Assert.assertFalse(lc.isLanguage("en"));
+        //test defaults
+        Assert.assertEquals("default", lc.getParameter("ru", "param"));
+        //test merging with specific
+        Assert.assertEquals("default", lc.getParameter("de", "param"));
+        Assert.assertEquals("test1", lc.getParameter("de", "param1"));
+        Map<String,String> params = lc.getParameters("de");
+        Assert.assertNotNull(params);
+        Assert.assertEquals(2, params.size());
+        Assert.assertEquals("default", params.get("param"));
+        Assert.assertEquals("test1", params.get("param1"));
+        //test overriding
+        Assert.assertEquals("overridden", lc.getParameter("es", "param"));
+        
+    }
+}

Propchange: 
stanbol/trunk/enhancer/generic/nlp/src/test/java/org/apache/stanbol/enhancer/nlp/utils/LanguageConfigurationTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to