package org.activityinfo.ui.client.component.filter;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.HasValue;
import org.activityinfo.i18n.shared.I18N;
import org.activityinfo.legacy.shared.command.Filter;
import org.activityinfo.ui.client.component.filter.FilterToolBar.ApplyFilterEvent;
import org.activityinfo.ui.client.component.filter.FilterToolBar.ApplyFilterHandler;
import org.activityinfo.ui.client.component.filter.FilterToolBar.RemoveFilterEvent;
import org.activityinfo.ui.client.component.filter.FilterToolBar.RemoveFilterHandler;
import org.activityinfo.ui.client.style.legacy.icon.IconImageBundle;
import java.util.Date;
/**
* UI Component for selecting a range of dates to be used with a
* {@link org.activityinfo.legacy.shared.command.Filter}
*
* @author Alex Bertram
*/
public class DateRangePanel extends ContentPanel implements HasValue<Filter>, FilterPanel {
private DateField datefieldMinDate;
private DateField datefieldMaxDate;
private FilterToolBar filterToolBar;
public DateRangePanel() {
super();
initializeComponent();
createFilterToolbar();
createFromDateField();
createToDateField();
}
private void createFilterToolbar() {
filterToolBar = new FilterToolBar();
filterToolBar.addApplyFilterHandler(new ApplyFilterHandler() {
@Override
public void onApplyFilter(ApplyFilterEvent deleteEvent) {
applyFilter();
}
});
filterToolBar.addRemoveFilterHandler(new RemoveFilterHandler() {
@Override
public void onRemoveFilter(RemoveFilterEvent deleteEvent) {
removeFilter();
}
});
filterToolBar.setApplyFilterEnabled(true);
setTopComponent(filterToolBar);
}
protected void applyFilter() {
Filter value = getValue();
ValueChangeEvent.fire(this, value);
filterToolBar.setRemoveFilterEnabled(value.isDateRestricted());
}
protected void removeFilter() {
datefieldMinDate.setValue(null);
datefieldMaxDate.setValue(null);
filterToolBar.setRemoveFilterEnabled(false);
ValueChangeEvent.fire(this, getValue());
}
private void createToDateField() {
add(new LabelField(I18N.CONSTANTS.toDate()));
datefieldMaxDate = new DateField();
add(datefieldMaxDate);
}
private void createFromDateField() {
add(new LabelField(I18N.CONSTANTS.fromDate()));
datefieldMinDate = new DateField();
add(datefieldMinDate);
}
private void initializeComponent() {
setHeadingText(I18N.CONSTANTS.filterByDate());
setIcon(IconImageBundle.ICONS.filter());
}
/**
* Updates the given filter with the user's choice.
*
* @param filter the filter to update
*/
public void updateFilter(Filter filter) {
}
@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Filter> handler) {
return addHandler(handler, ValueChangeEvent.getType());
}
@Override
public Filter getValue() {
Filter filter = new Filter();
filter.setMinDate(datefieldMinDate.getValue());
filter.setMaxDate(datefieldMaxDate.getValue());
return filter;
}
@Override
public void setValue(Filter value) {
setValue(value, false);
}
@Override
public void setValue(Filter value, boolean fireEvents) {
datefieldMinDate.setValue(value.getMinDate());
datefieldMaxDate.setValue(value.getMaxDate());
filterToolBar.setRemoveFilterEnabled(value.isDateRestricted());
if (fireEvents) {
ValueChangeEvent.fire(this, getValue());
}
}
public Date getMinDate() {
return datefieldMinDate.getValue();
}
public Date getMaxDate() {
return datefieldMaxDate.getValue();
}
public void setMinDate(Date date) {
datefieldMinDate.setValue(date);
}
public void setMaxDate(Date date) {
datefieldMaxDate.setValue(date);
}
@Override
public void applyBaseFilter(Filter filter) {
}
}