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"));
+
+ }
+
}