package net.rrm.ehour.ui.common.panel.datepicker;
import net.rrm.ehour.ui.common.component.AjaxFormComponentFeedbackIndicator;
import net.rrm.ehour.ui.common.component.ValidatingFormComponentAjaxBehavior;
import net.rrm.ehour.ui.common.panel.AbstractBasePanel;
import net.rrm.ehour.ui.common.validator.ConditionalRequiredValidator;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;
import java.util.Date;
public class DatePickerPanel extends AbstractBasePanel<Date> {
private static final long serialVersionUID = -7769909552498244968L;
private LocalizedDatePicker datePicker;
public DatePickerPanel(String id, IModel<Date> dateModel, IModel<Boolean> infiniteModel) {
super(id, dateModel);
addDates(getPanelModel(), infiniteModel);
}
@SuppressWarnings("serial")
private void addDates(IModel<Date> dateModel, IModel<Boolean> infiniteModel) {
final WebMarkupContainer updateTarget = new WebMarkupContainer("updateTarget");
addOrReplace(updateTarget);
updateTarget.setOutputMarkupId(true);
datePicker = new LocalizedDatePicker("date", dateModel);
updateTarget.add(datePicker);
datePicker.add(new ConditionalRequiredValidator<Date>(infiniteModel));
datePicker.add(new ValidatingFormComponentAjaxBehavior());
datePicker.setVisible(!infiniteModel.getObject());
updateTarget.add(new AjaxFormComponentFeedbackIndicator("dateValidationError", datePicker));
// infinite date toggle
AjaxCheckBox infiniteDate = new AjaxCheckBox("infiniteDate", infiniteModel) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
String input = this.getInput();
boolean visible = StringUtils.isNotBlank(input) && "on".equalsIgnoreCase(input);
datePicker.getFeedbackMessages().clear();
datePicker.setVisible(!visible);
target.add(updateTarget);
}
};
updateTarget.add(infiniteDate);
}
public FormComponent<Date> getDateInputFormComponent() {
return datePicker;
}
}