/* * 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.examples.dates; 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.examples.WicketExamplePage; import org.apache.wicket.extensions.yui.calendar.DatePicker; import org.apache.wicket.extensions.yui.calendar.DateTimeField; import org.apache.wicket.extensions.yui.calendar.TimeField; 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 DatesPage extends WicketExamplePage { /** * Choice for a locale. */ private final class LocaleChoiceRenderer extends ChoiceRenderer<Locale> { /** * Constructor. */ public LocaleChoiceRenderer() { } @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> { /** * Construct. * * @param id * component id */ public LocaleDropDownChoice(String id) { super(id); // sort locales on strings of selected locale setChoices(new IModel<List<Locale>>() { @Override public List<Locale> getObject() { 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<>(DatesPage.this, "selectedLocale")); add(new FormComponentUpdatingBehavior()); } } private static final Locale LOCALE_EN = new Locale("en"); private static final List<Locale> LOCALES; static { LOCALES = Arrays.asList(Locale.getAvailableLocales()); } /** the backing object for DateTextField demo */ private final Date date = new Date(); /** the backing object for DateTimeField demo */ private final Date date2 = new Date(); /** the backing object for TimeField demo */ private final Date time = new Date(); private Locale selectedLocale = LOCALE_EN; /** * Constructor */ public DatesPage() { selectedLocale = Session.get().getLocale(); Form<?> localeForm = new Form<>("localeForm"); localeForm.add(new LocaleDropDownChoice("localeSelect")); localeForm.add(new Link<Void>("localeUSLink") { @Override public void onClick() { selectedLocale = LOCALE_EN; } }); add(localeForm); DateTextField dateTextField = new DateTextField("dateTextField", new PropertyModel<>( this, "date"), new StyleDateConverter("S-", true)) { @Override public Locale getLocale() { return selectedLocale; } }; Form<?> form = new Form<Void>("form") { @Override protected void onSubmit() { info("set date to " + date); } }; add(form); form.add(dateTextField); DatePicker datePicker = new DatePicker() { @Override protected String getAdditionalJavaScript() { return "${calendar}.cfg.setProperty(\"navigator\",true,false); ${calendar}.render();"; } }; datePicker.setShowOnFieldClick(true); datePicker.setAutoHide(true); dateTextField.add(datePicker); add(new FeedbackPanel("feedback")); Form<?> form2 = new Form<Void>("form2") { @Override protected void onSubmit() { info("set date2 to " + date2); } }; add(form2); form2.add(new DateTimeField("dateTimeField", new PropertyModel<>(this, "date2"))); Form<?> form3 = new Form<Void>("form3") { @Override protected void onSubmit() { info("set time to " + time); } }; add(form3); form3.add(new TimeField("timeField", new PropertyModel<>(this, "time"))); } /** * @return the selected locale */ public final Locale getSelectedLocale() { return selectedLocale; } /** * @param selectedLocale */ public final void setSelectedLocale(Locale selectedLocale) { this.selectedLocale = selectedLocale; } }