/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.wicket.extensions.yui.calendar; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Locale; import org.apache.wicket.Session; import org.apache.wicket.datetime.StyleDateConverter; import org.apache.wicket.datetime.markup.html.form.DateTextField; import org.apache.wicket.markup.html.WebPage; 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.markup.html.form.FormComponentUpdatingBehavior; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; /** * Demonstrates components from the wicket-date project and a bunch of locale fiddling. */ public class DatesPage1 extends WebPage { private static final long serialVersionUID = 1L; /** * Choice for a locale. */ private final class LocaleChoiceRenderer extends ChoiceRenderer<Locale> { private static final long serialVersionUID = 1L; /** * Constructor. */ public LocaleChoiceRenderer() { } /** * @see org.apache.wicket.markup.html.form.IChoiceRenderer#getDisplayValue(Object) */ @Override public Object getDisplayValue(Locale locale) { String enName = locale.getDisplayName(LOCALE_EN); String localizedName = locale.getDisplayName(selectedLocale); return localizedName + (!enName.equals(localizedName) ? (" (" + enName + ")") : ""); } } /** * Dropdown with Locales. */ private final class LocaleDropDownChoice extends DropDownChoice<Locale> { private static final long serialVersionUID = 1L; /** * Construct. * * @param id * component id */ public LocaleDropDownChoice(String id) { super(id); // sort locales on strings of selected locale setChoices(new IModel<List<Locale>>() { private static final long serialVersionUID = 1L; @Override public List<Locale> getObject() { getSelectedLocale(); List<Locale> locales = new ArrayList<>(LOCALES); Collections.sort(locales, new Comparator<Locale>() { @Override public int compare(Locale o1, Locale o2) { return o1.getDisplayName(selectedLocale).compareTo( o2.getDisplayName(selectedLocale)); } }); return locales; } }); setChoiceRenderer(new LocaleChoiceRenderer()); setDefaultModel(new PropertyModel<>(DatesPage1.this, "selectedLocale")); add(new FormComponentUpdatingBehavior()); } @Override public String getModelValue() { return super.getModelValue(); } } private static final Locale LOCALE_EN = new Locale("en"); private static final List<Locale> LOCALES; static { LOCALES = Arrays.asList(Locale.CANADA, Locale.CANADA_FRENCH, Locale.CHINA, Locale.ENGLISH, Locale.FRANCE, Locale.FRENCH, Locale.GERMAN, Locale.GERMANY, Locale.ITALIAN, Locale.ITALY, Locale.JAPAN, Locale.JAPANESE, Locale.KOREA, Locale.KOREAN, Locale.PRC, Locale.SIMPLIFIED_CHINESE, Locale.TAIWAN, Locale.TRADITIONAL_CHINESE, Locale.UK, Locale.US); } private final Date date = new Date(); private Locale selectedLocale = LOCALE_EN; /** * Constructor */ public DatesPage1() { selectedLocale = Session.get().getLocale(); Form<?> localeForm = new Form<>("localeForm"); localeForm.add(new LocaleDropDownChoice("localeSelect")); localeForm.add(new Link<Void>("localeUSLink") { private static final long serialVersionUID = 1L; @Override public void onClick() { selectedLocale = LOCALE_EN; } }); add(localeForm); DateTextField dateTextField = new DateTextField("dateTextField", new PropertyModel<Date>( this, "date"), new StyleDateConverter("S-", true)) { private static final long serialVersionUID = 1L; @Override public Locale getLocale() { return selectedLocale; } }; Form<?> form = new Form<Void>("form") { private static final long serialVersionUID = 1L; @Override protected void onSubmit() { info("set date to " + date); } }; add(form); form.add(dateTextField); dateTextField.add(new DatePicker()); add(new FeedbackPanel("feedback")); } /** * @return the selected locale */ public final Locale getSelectedLocale() { return selectedLocale; } /** * @param selectedLocale */ public final void setSelectedLocale(Locale selectedLocale) { this.selectedLocale = selectedLocale; } }