Package com.extjs.gxt.ui.client.widget.grid.filters

Source Code of com.extjs.gxt.ui.client.widget.grid.filters.DateFilter$DateFilterMessages

/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget.grid.filters;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.data.BaseDateFilterConfig;
import com.extjs.gxt.ui.client.data.FilterConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.util.DateWrapper;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.grid.filters.RangeMenu.RangeItem;
import com.extjs.gxt.ui.client.widget.menu.CheckMenuItem;
import com.extjs.gxt.ui.client.widget.menu.DateMenu;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem;

/**
* Date filter type to displays a before, after, and on date picker.
*/
public class DateFilter extends Filter {

  public static class DateFilterMessages extends FilterMessages {
    private String afterText = GXT.MESSAGES.dateFilter_afterText();
    private String beforeText = GXT.MESSAGES.dateFilter_beforeText();
    private String onText = GXT.MESSAGES.dateFilter_onText();

    /**
     * @return the afterText
     */
    public String getAfterText() {
      return afterText;
    }

    /**
     * @return the beforeText
     */
    public String getBeforeText() {
      return beforeText;
    }

    /**
     * @return the onText
     */
    public String getOnText() {
      return onText;
    }

    /**
     * @param afterText the afterText to set
     */
    public void setAfterText(String afterText) {
      this.afterText = afterText;
    }

    /**
     * @param beforeText the beforeText to set
     */
    public void setBeforeText(String beforeText) {
      this.beforeText = beforeText;
    }

    /**
     * @param onText the onText to set
     */
    public void setOnText(String onText) {
      this.onText = onText;
    }
  }

  private CheckMenuItem beforeItem, afterItem, onItem;
  private DateMenu beforeMenu, afterMenu, onMenu;
  private Date maxDate;
  private Listener<MenuEvent> menuListener = new Listener<MenuEvent>() {
    public void handleEvent(MenuEvent be) {
      if (be.getType() == Events.CheckChange) {
        onCheckChange(be);
      } else if (be.getType() == Events.Select) {
        onMenuSelect(be);
      }
    }
  };
  private Date minDate;
  private List<RangeItem> rangeItems = new ArrayList<RangeItem>();

  /**
   * Creates a new date filter.
   *
   * @param dataIndex the date index the filter is mapped to
   */
  public DateFilter(String dataIndex) {
    super(dataIndex);
    rangeItems.add(RangeItem.LESSTHAN);
    rangeItems.add(RangeItem.GREATERTHAN);
    rangeItems.add(RangeItem.EQUAL);

    menu = new Menu();
    beforeItem = new CheckMenuItem();
    beforeItem.addListener(Events.CheckChange, menuListener);

    beforeMenu = new DateMenu();
    beforeMenu.addListener(Events.Select, menuListener);
    beforeItem.setSubMenu(beforeMenu);
    menu.add(beforeItem);

    afterItem = new CheckMenuItem();
    afterItem.addListener(Events.CheckChange, menuListener);
    afterMenu = new DateMenu();
    afterMenu.addListener(Events.Select, menuListener);
    afterItem.setSubMenu(afterMenu);
    menu.add(afterItem);

    menu.add(new SeparatorMenuItem());

    onItem = new CheckMenuItem();
    onItem.addListener(Events.CheckChange, menuListener);
    onMenu = new DateMenu();
    onMenu.addListener(Events.Select, menuListener);
    onItem.setSubMenu(onMenu);
    menu.add(onItem);

    setMessages(new DateFilterMessages());
  }

  /**
   * Returns the max date.
   *
   * @return the max date
   */
  public Date getMaxDate() {
    return maxDate;
  }

  @Override
  public DateFilterMessages getMessages() {
    return (DateFilterMessages) super.getMessages();
  }

  /**
   * Returns the minimum date.
   *
   * @return the minimum date
   */
  public Date getMinDate() {
    return minDate;
  }

  @Override
  public List<FilterConfig> getSerialArgs() {
    List<FilterConfig> configs = new ArrayList<FilterConfig>();
    if (beforeItem != null && beforeItem.isChecked()) {
      FilterConfig c = new BaseDateFilterConfig("date", "before", beforeMenu.getDate());
      configs.add(c);
    }
    if (afterItem != null && afterItem.isChecked()) {
      FilterConfig c = new BaseDateFilterConfig("date", "after", afterMenu.getDate());
      configs.add(c);
    }
    if (onItem != null && onItem.isChecked()) {
      FilterConfig c = new BaseDateFilterConfig("date", "on", onMenu.getDate());
      configs.add(c);
    }
    return configs;
  }

  @Override
  public Object getValue() {
    return getSerialArgs();
  }

  @Override
  public boolean isActivatable() {
    if (beforeItem != null && beforeItem.isChecked()) {
      return true;
    }
    if (afterItem != null && afterItem.isChecked()) {
      return true;
    }
    if (onItem != null && onItem.isChecked()) {
      return true;
    }
    return false;
  }

  /**
   * Sets the max date as passed to the date picker.
   *
   * @param maxDate the max date
   */
  public void setMaxDate(Date maxDate) {
    this.maxDate = maxDate;
  }

  @Override
  public void setMessages(FilterMessages messages) {
    super.setMessages(messages);
    if (onItem != null) {
      onItem.setText(getMessages().getOnText());
    }
    if (afterItem != null) {
      afterItem.setText(getMessages().getAfterText());
    }
    if (beforeItem != null) {
      beforeItem.setText(getMessages().getBeforeText());
    }
  }

  /**
   * Set's the minimum date as passed to the date picker.
   *
   * @param minDate the minimum date
   */
  public void setMinDate(Date minDate) {
    this.minDate = minDate;
  }

  @SuppressWarnings({"unchecked", "rawtypes"})
  @Override
  public void setValue(Object value) {
    List<FilterConfig> values = (List) value;
    for (FilterConfig config : values) {
      String comp = config.getComparison();
      if ("before".equals(comp)) {
        beforeItem.setChecked(true);
        beforeMenu.setDate((Date) config.getValue());
      } else if ("after".equals(comp)) {
        afterItem.setChecked(true);
        afterMenu.setDate((Date) config.getValue());
      } else if ("on".equals(comp)) {
        onItem.setChecked(true);
        onMenu.setDate((Date) config.getValue());
      }
    }
  }

  @Override
  public boolean validateModel(ModelData model) {
    Date d = getModelValue(model);

    long time = d == null ? 0l : new DateWrapper(d).clearTime().getTime();
    if (beforeItem.isChecked() && beforeMenu.getDate() != null) {
      long pvalue = new DateWrapper(beforeMenu.getDate()).clearTime().getTime();
      if (d == null || pvalue <= time) {
        return false;
      }
    }
    if (afterItem.isChecked() && afterMenu.getDate() != null) {
      long pvalue = new DateWrapper(afterMenu.getDate()).clearTime().getTime();
      if (d == null || pvalue >= time) {
        return false;
      }
    }
    if (onItem.isChecked() && onMenu.getDate() != null) {
      long pvalue = new DateWrapper(onMenu.getDate()).resetTime().getTime();
      if (d == null || pvalue != (d == null ? 0l : new DateWrapper(d).resetTime().getTime())) {
        return false;
      }
    }
    return true;
  }

  protected void onCheckChange(MenuEvent be) {
    updateMenuState(be.getItem(), be.isChecked());
    fireUpdate();
  }

  protected void onMenuSelect(MenuEvent be) {
    DateMenu menu = (DateMenu) be.getMenu();
    if (menu == beforeMenu) {
      updateMenuState(beforeItem, true);
    } else if (menu == afterMenu) {
      updateMenuState(afterItem, true);
    } else if (menu == onMenu) {
      updateMenuState(onItem, true);
    }
    menu.hide(true);
    fireUpdate();
  }

  protected void updateMenuState(Component item, boolean isChecked) {

    if (item == onItem) {
      onItem.setChecked(isChecked, true);
      if (isChecked) {
        beforeItem.setChecked(false, true);
        afterItem.setChecked(false, true);
      }
    } else if (item == afterItem) {
      afterItem.setChecked(isChecked, true);
      if (isChecked) {
        beforeItem.setChecked(beforeMenu.getDate() != null && beforeMenu.getDate().after(afterMenu.getDate()), true);
        onItem.setChecked(false, true);
      }
    } else if (item == beforeItem) {
      beforeItem.setChecked(isChecked, true);
      if (isChecked) {
        onItem.setChecked(false, true);
        afterItem.setChecked(afterMenu.getDate() != null && afterMenu.getDate().before(beforeMenu.getDate()), true);
      }
    }

  }

}
TOP

Related Classes of com.extjs.gxt.ui.client.widget.grid.filters.DateFilter$DateFilterMessages

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.