blob: 927ee46ee2811a8bfc28ca240e15a4defd26d1b8 [file] [log] [blame]
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";
}
}