Package com.sencha.gxt.widget.core.client.grid.filters

Source Code of com.sencha.gxt.widget.core.client.grid.filters.ListFilter

/**
* Sencha GXT 3.1.0-beta - Sencha for GWT
* Copyright(c) 2007-2014, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.widget.core.client.grid.filters;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.data.shared.loader.FilterConfig;
import com.sencha.gxt.data.shared.loader.FilterConfigBean;
import com.sencha.gxt.widget.core.client.event.CheckChangeEvent;
import com.sencha.gxt.widget.core.client.menu.CheckMenuItem;

/**
* Filters using the items in a {@link ListStore}. See {@link Filter} for more
* information.
*
* @param <M> the model type
* @param <V> the {@link ListStore} type
*/
public class ListFilter<M, V> extends Filter<M, V> {

  private ListMenu<M, V> listMenu;
  private ListStore<V> store;

  /**
   * Creates a list filter for the specified value provider, matching the items
   * in the specified list store. See {@link Filter#Filter(ValueProvider)} for
   * more information.
   *
   * @param valueProvider the value provider
   * @param store contains the items to match
   */
  public ListFilter(ValueProvider<? super M, V> valueProvider, ListStore<V> store) {
    super(valueProvider);

    this.store = store;
    listMenu = new ListMenu<M, V>(this, store);
    menu = listMenu;
  }

  @Override
  public List<FilterConfig> getFilterConfig() {
    FilterConfigBean config = new FilterConfigBean();
    config.setType("list");
    config.setValue(convertValueToString());
    return Collections.<FilterConfig>singletonList(config);
  }

  /**
   * Returns the list store.
   *
   * @return the list store
   */
  public ListStore<V> getStore() {
    return store;
  }

  @Override
  public Object getValue() {
    List<V> values = new ArrayList<V>();
    for (V m : listMenu.getSelected()) {
      values.add(m);
    }
    return values;
  }

  @Override
  public boolean isActivatable() {
    return getValue() != null && ((List<?>) getValue()).size() > 0;
  }

  @SuppressWarnings("unchecked")
  protected String convertValueToString() {
    StringBuffer sb = new StringBuffer();
    List<V> temp = (List<V>) getValue();
    for (int i = 0; i < temp.size(); i++) {
      sb.append((i == 0 ? "" : "::") + temp.get(i));
    }
    return sb.toString();
  }

  @Override
  protected Class<V> getType() {
    return null;
  }

  protected void onCheckChange(CheckChangeEvent<CheckMenuItem> event) {
    setActive(isActivatable(), false);
    fireUpdate();
  }

  @Override
  protected boolean validateModel(M model) {
    Object value = getValueProvider().getValue(model);
    List<?> values = (List<?>) getValue();
    return values.size() == 0 || values.contains(value);
  }

}
TOP

Related Classes of com.sencha.gxt.widget.core.client.grid.filters.ListFilter

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.