package com.revolsys.ui.html.fields;
import java.sql.Date;
import javax.servlet.http.HttpServletRequest;
import com.revolsys.datatype.DataTypes;
import com.revolsys.record.io.format.xml.XmlWriter;
import com.revolsys.ui.html.form.Form;
import com.revolsys.util.Dates;
import com.revolsys.util.HtmlAttr;
import com.revolsys.util.HtmlElem;
import com.revolsys.util.Property;
public class DateField extends Field {
private String inputValue;
/**
* @param name
* @param required
*/
public DateField(final String name, final boolean required) {
super(name, required);
setDefaultInstructions("Enter/select date in format yyyy-MM-dd");
}
public DateField(final String name, final boolean required, final Object defaultValue) {
super(name, required);
setInitialValue(defaultValue);
setValue(defaultValue);
}
@Override
public void initialize(final Form form, final HttpServletRequest request) {
this.inputValue = request.getParameter(getName());
if (this.inputValue == null) {
setValue(getInitialValue(request));
if (getValue() != null) {
final java.util.Date date = getValue();
this.inputValue = Dates.toSqlDateString(date);
}
}
}
@Override
public boolean isValid() {
boolean valid = true;
if (!super.isValid()) {
valid = false;
} else if (hasValue()) {
if (valid) {
try {
final Date date = new Date(Dates.getDate("yyyy-MM-dd", this.inputValue).getTime());
setValue(date);
} catch (final Throwable e) {
addValidationError("Invalid Date");
valid = false;
}
}
}
return valid;
}
@Override
public void serializeElement(final XmlWriter out) {
out.startTag(HtmlElem.SCRIPT);
out.attribute(HtmlAttr.TYPE, "text/javascript");
out.text("$(function() {$(\"#" + getForm().getName() + " input[name='" + getName()
+ "']\").datepicker(" + "{changeMonth: true,changeYear: true, dateFormat:'" + "yy-mm-dd"
+ "'});});");
out.endTag(HtmlElem.SCRIPT);
out.startTag(HtmlElem.INPUT);
out.attribute(HtmlAttr.NAME, getName());
out.attribute(HtmlAttr.TYPE, "date");
out.attribute(HtmlAttr.CLASS, "form-control input-sm");
if (Property.hasValue(this.inputValue)) {
out.attribute(HtmlAttr.VALUE, this.inputValue);
}
if (isRequired()) {
out.attribute(HtmlAttr.REQUIRED, true);
}
out.endTag(HtmlElem.INPUT);
}
@Override
public void setValue(final Object value) {
super.setValue(value);
if (value != null) {
this.inputValue = DataTypes.toString(value);
} else {
this.inputValue = null;
}
}
}