package net.sourceforge.ganttproject.language; import java.util.Locale; import net.sourceforge.ganttproject.gui.options.model.GP1XOptionConverter; import biz.ganttproject.core.option.DefaultEnumerationOption; public abstract class LanguageOption extends DefaultEnumerationOption<Locale> implements GP1XOptionConverter { public LanguageOption() { this("language", GanttLanguage.getInstance().getAvailableLocales().toArray(new Locale[0])); } private LanguageOption(String id, Locale[] locales) { super(id, locales); } @Override protected String objectToString(Locale locale) { return GanttLanguage.getInstance().formatLanguageAndCountry(locale); } @Override public void commit() { super.commit(); applyLocale(stringToObject(getValue())); } protected abstract void applyLocale(Locale locale); @Override public String getTagName() { return "language"; } @Override public String getAttributeName() { return "selection"; } @Override public void loadValue(String legacyValue) { loadPersistentValue(legacyValue); } @Override public String getPersistentValue() { Locale l = stringToObject(getValue()); if (l == null) { l = GanttLanguage.getInstance().getLocale(); } assert l != null; String result = l.getLanguage(); if (!l.getCountry().isEmpty()) { result += "_" + l.getCountry(); } return result; } @Override public void loadPersistentValue(String value) { String[] lang_country = value.split("_"); Locale l; if (lang_country.length == 2) { l = new Locale(lang_country[0], lang_country[1]); } else { l = new Locale(lang_country[0]); } value = objectToString(l); if (value != null) { resetValue(value, true); applyLocale(l); } } }