package pt.utl.ist.propreaders; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Locale; import pt.linkare.ant.InvalidPropertySpecException; import pt.linkare.ant.MenuMessage; import pt.linkare.ant.propreaders.AbstractPropertyReader; import pt.utl.ist.fenix.tools.util.i18n.Language; public class LanguagePropertyReader extends AbstractPropertyReader{ public LanguagePropertyReader() { super(); } public String readProperty() throws InvalidPropertySpecException, UnsupportedEncodingException { return getLangString(); } public String getLangString() throws InvalidPropertySpecException, UnsupportedEncodingException { MenuMessage menuOptionsLang=new MenuMessage(); menuOptionsLang.setMessage(buildDefaultMessage(false)); List[] optionsAndValuesLang=null; if(getProperty().getMetaData("langs")!=null) { optionsAndValuesLang=buildLangOptions(getProperty().getMetaData("langs")); } else optionsAndValuesLang=buildLangOptions(); menuOptionsLang.setOptions(optionsAndValuesLang[0]); menuOptionsLang.setOptionValues(optionsAndValuesLang[1]); if(getProperty().getPropertyDefaultValue()!=null) return getInput().readMenuOptionOrDefault(menuOptionsLang, getProperty().getPropertyDefaultValue()); else return getInput().readMenuOption(menuOptionsLang); } @SuppressWarnings("unchecked") private List[] buildLangOptions(String metaData) throws InvalidPropertySpecException { List langs=parseOptions(metaData); List[] optionsValuesRetVal=(List[])new List[]{new ArrayList(langs.size()),new ArrayList(langs.size())}; List locales=new ArrayList(langs.size()); for(String lang:langs) { locales.add(new Locale(lang)); } for(Locale locale:locales) { optionsValuesRetVal[0].add(locale.getDisplayLanguage()); optionsValuesRetVal[1].add(locale.getLanguage()); } return optionsValuesRetVal; } @SuppressWarnings("unchecked") private List[] buildLangOptions() { Language[] languageEnum=Language.values(); List[] optionsValuesRetVal=(List[])new List[]{new ArrayList(languageEnum.length),new ArrayList(languageEnum.length)}; HashSet languagesDone=new HashSet(); optionsValuesRetVal[0]=new ArrayList(); optionsValuesRetVal[1]=new ArrayList(languageEnum.length); for(Language lang:languageEnum) { if(!languagesDone.contains(lang.name())) { optionsValuesRetVal[0].add(lang.name()); optionsValuesRetVal[1].add(lang.name()); languagesDone.add(lang.name()); } } return optionsValuesRetVal; } }