/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * eHour is sponsored by TE-CON - http://www.te-con.nl/ */ package net.rrm.ehour.ui.admin.config.panel; import net.rrm.ehour.ui.admin.config.MainConfigBackingBean; import net.rrm.ehour.ui.common.component.AjaxFormComponentFeedbackIndicator; import net.rrm.ehour.ui.common.model.DateModel; import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import java.util.Currency; import java.util.Date; import java.util.List; import java.util.Locale; /** * Created on Apr 21, 2009, 4:01:41 PM * * @author Thies Edeling (thies@te-con.nl) */ public class LocaleConfigPanel extends AbstractConfigPanel { private static final long serialVersionUID = 3411339351917181309L; public LocaleConfigPanel(String id, IModel<MainConfigBackingBean> model) { super(id, model); } @SuppressWarnings("serial") @Override protected void addFormComponents(Form<?> configForm) { final DropDownChoice<Locale> localeDropDownChoice; final DropDownChoice<Locale> languageDropDownChoice; final AjaxCheckBox onlyTranslationsBox; final DropDownChoice<Locale> currencyDropDownChoice; final Label dateFormat; final MainConfigBackingBean configBackingBean = getPanelModelObject(); configForm.setOutputMarkupId(true); // currency dropdown currencyDropDownChoice = new DropDownChoice<>("config.currency", new PropertyModel<List<Locale>>(configBackingBean, "availableCurrencies"), new LocaleChoiceRenderer(2)); currencyDropDownChoice.setOutputMarkupId(true); configForm.add(currencyDropDownChoice); // date format example dateFormat = new Label("dateFormat", new DateModel(new Model<>(new Date()), configBackingBean.getLocaleCountry(), DateModel.DATESTYLE_LONG)); dateFormat.setOutputMarkupId(true); configForm.add(dateFormat); // language selection languageDropDownChoice = new DropDownChoice<>("localeLanguage", new PropertyModel<Locale>(configBackingBean, "localeLanguage"), new PropertyModel<List<Locale>>(configBackingBean, "availableLanguages"), new LocaleChoiceRenderer(1)); // locale selection localeDropDownChoice = new DropDownChoice<>("localeCountry", new PropertyModel<Locale>(configBackingBean, "localeCountry"), new PropertyModel<List<Locale>>(configBackingBean, "availableLocales"), new LocaleChoiceRenderer(0)); localeDropDownChoice.setOutputMarkupId(true); localeDropDownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { // update the date format example Locale localeCountry = configBackingBean.getLocaleCountry(); dateFormat.setDefaultModel(new DateModel(new Model<>(new Date()), localeCountry, DateModel.DATESTYLE_LONG)); target.add(dateFormat); if (localeCountry.getCountry() != null) { // refresh currency configBackingBean.setCurrency(localeCountry); target.add(currencyDropDownChoice); // and langugae configBackingBean.setLocaleLanguage(localeCountry); target.add(languageDropDownChoice); } } }); configForm.add(localeDropDownChoice); // behaviour for language selection languageDropDownChoice.setEnabled(!configBackingBean.getConfig().isDontForceLanguage()); languageDropDownChoice.setOutputMarkupId(true); languageDropDownChoice.setRequired(true); languageDropDownChoice.setLabel(new ResourceModel("admin.config.locale.languageLabel")); configForm.add(new AjaxFormComponentFeedbackIndicator("localeLanguageValidationError", localeDropDownChoice)); configForm.add(languageDropDownChoice); // only translations onlyTranslationsBox = new AjaxCheckBox("onlyTranslations", new PropertyModel<Boolean>(configBackingBean, "translationsOnly")) { @Override protected void onUpdate(AjaxRequestTarget target) { target.add(languageDropDownChoice); } }; onlyTranslationsBox.setOutputMarkupId(true); onlyTranslationsBox.setEnabled(!configBackingBean.getConfig().isDontForceLanguage()); configForm.add(onlyTranslationsBox); // don't force locale checkbox configForm.add(new AjaxCheckBox("config.dontForceLanguage") { @Override protected void onUpdate(AjaxRequestTarget target) { languageDropDownChoice.setEnabled(!configBackingBean.getConfig().isDontForceLanguage()); target.add(languageDropDownChoice); onlyTranslationsBox.setEnabled(!configBackingBean.getConfig().isDontForceLanguage()); target.add(onlyTranslationsBox); } }); } /** * Choice for a locale. */ @SuppressWarnings("serial") private static final class LocaleChoiceRenderer extends ChoiceRenderer<Locale> { private static final int COUNTRY = 0; private static final int LANGUAGE = 1; int type; // type == 0 -> country, 1 => language, 2=> currency public LocaleChoiceRenderer(int type) { this.type = type; } /** * @see org.apache.wicket.markup.html.form.IChoiceRenderer#getDisplayValue(Object) */ @Override public Object getDisplayValue(Locale locale) { String display; if (type == COUNTRY) { display = locale.getDisplayCountry(); display += " (" + locale.getDisplayLanguage(); if (!StringUtils.isBlank(locale.getVariant())) { display += ", " + locale.getDisplayVariant(); } display += ")"; } else if (type == LANGUAGE) { display = locale.getDisplayLanguage(); } else { Currency curr = Currency.getInstance(locale); display = locale.getDisplayCountry() + ": " + curr.getSymbol(locale); } return display; } @Override public String getIdValue(Locale locale, int index) { if (type == 0) { return locale.getCountry() + "_" + locale.getLanguage(); } else if (type == 1) { return locale.getLanguage(); } else { return locale.getCountry(); } } } }