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