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";
|
}
|
|
}
|