From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/wicket/Html5DateField.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 156 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/Html5DateField.java b/src/main/java/com/gitblit/wicket/Html5DateField.java new file mode 100644 index 0000000..927ee46 --- /dev/null +++ b/src/main/java/com/gitblit/wicket/Html5DateField.java @@ -0,0 +1,156 @@ +package com.gitblit.wicket; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import org.apache.wicket.Session; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider; +import org.apache.wicket.model.IModel; +import org.apache.wicket.util.convert.IConverter; +import org.apache.wicket.util.convert.converters.DateConverter; + +public class Html5DateField extends TextField<Date> implements ITextFormatProvider { + + private static final long serialVersionUID = 1L; + + private static final String DEFAULT_PATTERN = "MM/dd/yyyy"; + + private String datePattern = null; + + private IConverter converter = null; + + /** + * Creates a new Html5DateField, without a specified pattern. This is the same as calling + * <code>new Html5DateField(id, Date.class)</code> + * + * @param id + * The id of the date field + */ + public Html5DateField(String id) + { + this(id, null, defaultDatePattern()); + } + + /** + * Creates a new Html5DateField, without a specified pattern. This is the same as calling + * <code>new Html5DateField(id, object, Date.class)</code> + * + * @param id + * The id of the date field + * @param model + * The model + */ + public Html5DateField(String id, IModel<Date> model) + { + this(id, model, defaultDatePattern()); + } + + /** + * Creates a new Html5DateField bound with a specific <code>SimpleDateFormat</code> pattern. + * + * @param id + * The id of the date field + * @param datePattern + * A <code>SimpleDateFormat</code> pattern + * + */ + public Html5DateField(String id, String datePattern) + { + this(id, null, datePattern); + } + + /** + * Creates a new DateTextField bound with a specific <code>SimpleDateFormat</code> pattern. + * + * @param id + * The id of the date field + * @param model + * The model + * @param datePattern + * A <code>SimpleDateFormat</code> pattern + */ + public Html5DateField(String id, IModel<Date> model, String datePattern) + { + super(id, model, Date.class); + this.datePattern = datePattern; + converter = new DateConverter() + { + private static final long serialVersionUID = 1L; + + /** + * @see org.apache.wicket.util.convert.converters.DateConverter#getDateFormat(java.util.Locale) + */ + @Override + public DateFormat getDateFormat(Locale locale) + { + if (locale == null) + { + locale = Locale.getDefault(); + } + return new SimpleDateFormat(Html5DateField.this.datePattern, locale); + } + }; + } + + /** + * Returns the default converter if created without pattern; otherwise it returns a + * pattern-specific converter. + * + * @param type + * The type for which the converter should work + * + * @return A pattern-specific converter + */ + @Override + public IConverter getConverter(Class<?> type) + { + if (converter == null) + { + return super.getConverter(type); + } + else + { + return converter; + } + } + + /** + * Returns the date pattern. + * + * @see org.apache.wicket.markup.html.form.AbstractTextComponent.ITextFormatProvider#getTextFormat() + */ + public String getTextFormat() + { + return datePattern; + } + + /** + * Try to get datePattern from user session locale. If it is not possible, it will return + * {@link #DEFAULT_PATTERN} + * + * @return date pattern + */ + private static String defaultDatePattern() + { + Locale locale = Session.get().getLocale(); + if (locale != null) + { + DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT, locale); + if (format instanceof SimpleDateFormat) + { + return ((SimpleDateFormat)format).toPattern(); + } + } + return DEFAULT_PATTERN; + } + + @Override + protected String getInputType() + { + return "date"; + } + +} \ No newline at end of file -- Gitblit v1.9.1