Package ar.com.AmberSoft.iEvenTask.client.utils

Source Code of ar.com.AmberSoft.iEvenTask.client.utils.Grid

package ar.com.AmberSoft.iEvenTask.client.utils;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import ar.com.AmberSoft.iEvenTask.client.Context;
import ar.com.AmberSoft.iEvenTask.client.PermissionsConst;
import ar.com.AmberSoft.iEvenTask.client.Seleccionable;

import com.extjs.gxt.ui.client.core.El;
import com.extjs.gxt.ui.client.data.BaseFilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadConfig;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.filters.Filter;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;

@SuppressWarnings({"rawtypes","unchecked"})
public class Grid extends com.extjs.gxt.ui.client.widget.grid.Grid {

  public static final String SELECT_ALL = "Seleccionar Todos";
  public static final String DELETE = "Elminar";
  public static final String MODIFY = "Modificar";
  public static final String DIVIDIR = "Dividir";

  /**
   * Ventana actual con la que trabaja la grilla
   */
  //private Window window;
  private Seleccionable seleccionable;
  /**
   * Filtros que se utilizaran en la grilla
   */
  private final GridFilters filters = new GridFilters();

  /**
   * Menu contextual que aparece al presionar el boton derecho del mouse sobre
   * la grilla
   */
  private Menu contextMenu;

  /**
   * Lista con los modelData que muestra la grilla
   */
  private Collection list;

  /**
   * Item del menu por default cuya funcionalidad es eliminar un elemento de
   * la grilla
   */
  private MenuItem itemDelete;

  /**
   * Item del menu por default cuya funcionalidad es modificar un elemento de
   * la grilla
   */
  private MenuItem itemModify;
 
  /**
   * Item del menu por default cuya funcionalidad es dividir una tarea
   */
  private MenuItem itemDividir;


  /**
   * Barra de herramientas que se muestra debajo de la grilla
   */
  private PagingToolBar toolBar;

  public PagingToolBar getToolBar() {
    return toolBar;
  }

  public Collection getList() {
    return list;
  }

  public void setList(Collection list) {
    this.list = list;
  }

  /**
   * Busca en la lista de datos que muestra la grilla actualmente un modelData
   * a partir del valor que pueda contener un campo en particular Retorna el
   * primero modelData que coincide con la busqueda
   *
   * @param field
   * @param value
   * @return
   */
  public Map search(String field, Object value) {
    Iterator it = list.iterator();
    while (it.hasNext()) {
      Map actual = (Map) it.next();
      if (actual.get(field).equals(value)) {
        return actual;
      }
    }
    return null;
  }
 
  /**
   * Busca en la lista de datos que muestra la grilla actualmente un modelData
   * a partir del valor que pueda contener un campo en particular Retorna el
   * primero modelData que coincide con la busqueda
   *
   * @param field
   * @param value
   * @return
   */
  public ModelData searchModel(String field, Object value) {
    Iterator it = getStore().getModels().iterator();
    while (it.hasNext()) {
      ModelData actual = (ModelData) it.next();
      if (actual.get(field).equals(value)) {
        return actual;
      }
    }
    return null;
  }

  public Grid(Seleccionable seleccionable, String serviceName, List<ColumnConfig> configs, final Integer pageSize, Map params) {
    // Se invoca al constructor padre para que se inicialice todo
    // convenientemente
    super(new ListStore(new Loader(serviceName, null, params)), new ColumnModel(configs));
    initialize(seleccionable, pageSize);
   
  }

  public Grid(Seleccionable seleccionable, String serviceName, List<ColumnConfig> configs, final Integer pageSize) {
    // Se invoca al constructor padre para que se inicialice todo
    // convenientemente
    super(new ListStore(new Loader(serviceName, null)), new ColumnModel(configs));
    initialize(seleccionable, pageSize);

  }

  public void initialize(Seleccionable seleccionable, final Integer pageSize) {
   
    this.view = new GridView();
   
    this.seleccionable = seleccionable;

    // Se obtiene el loader para indicarle cual es la grilla con la que
    // trabaja y que el orden de las columnas se establece de forma remota
    final Loader loader = (Loader) this.getStore().getLoader();
    loader.setGrid(this);
    loader.setRemoteSort(Boolean.TRUE);

    // Se establece que los filtros se trabajaran de forma remota
    filters.setLocal(Boolean.FALSE);
    this.addPlugin(filters);

    // Establecemos una barra de herramientas y la relacionamos con el
    // loader actual
    toolBar = new PagingToolBar(pageSize);
    toolBar.bind(loader);

    setStateId("pagingGridExample");
    setStateful(Boolean.TRUE);

    // Se agrega un listener necesario para recargar la informacion de la
    // grilla cuando se introduce algun filtro
    addListener(Events.Attach, new Listener<GridEvent>() {
      public void handleEvent(GridEvent be) {
        PagingLoadConfig config = new BaseFilterPagingLoadConfig();
        config.setOffset(0);
        config.setLimit(pageSize);
        loader.load(config);
      }
    });

    // Habilitamos para que se muestre una mascara mientras se esta cargando
    // la grilla
    setLoadMask(Boolean.TRUE);
  }
 
  /**
   * Agrega un nuevo filtro
   *
   * @param filter
   */
  public void addFilter(Filter filter) {
    filters.addFilter(filter);
  }

  /**
   * Agrega un nuevo item al menu contextual
   *
   * @param text
   * @param enabled
   * @param listener
   * @return
   */
  public MenuItem addContextMenuItem(String text, Boolean enabled,
      SelectionListener<MenuEvent> listener) {
    initializeContextMenu();
    MenuItem item = new MenuItem();
    item.setText(text);
    item.addSelectionListener(listener);
    item.setEnabled(enabled);
    contextMenu.add(item);
    return item;
  }

  /**
   * Si el menu contextual no fue generado entonces lo crea
   */
  private void initializeContextMenu() {
    if (contextMenu == null) {
      contextMenu = new Menu();
      this.setContextMenu(contextMenu);
    }
  }

  /**
   * Establece un menu contextual por defecto Se le pasa la ventana actual por
   * parametro para poder establecer el estado y otras cuestiones
   */
  public void defaultContextMenu() {
    addMenuItemSelectAll();
    itemDelete = addContextMenuItem(DELETE, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
          @Override
          public void componentSelected(MenuEvent ce) {
            seleccionable.onDelete();
          }
        });
  }
  /**
   * Este metodo es igual al anterior, con la unica diferencia que se agrega el item "modificar"
   */
  public void defaultContextMenuTask() {
    addMenuItemSelectAll();
    itemDelete = addContextMenuItem(DELETE, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
      @Override
      public void componentSelected(MenuEvent ce) {
        seleccionable.onDelete();
      }
    });
    itemModify = addContextMenuItem(MODIFY, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
      @Override
      public void componentSelected(MenuEvent ce) {
        seleccionable.onModify();
      }
    });
    itemDividir = addContextMenuItem(DIVIDIR, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
      @Override
      public void componentSelected(MenuEvent ce) {
        seleccionable.onDividir();
      }
    });
  }
  /**
   * Este metodo es igual al anterior, pero este es para objetivos, con la unica diferencia que se agrega el item "modificar"
   */
  public void defaultContextMenuObjective() {
    addMenuItemSelectAll();
    itemDelete = addContextMenuItem(DELETE, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
      @Override
      public void componentSelected(MenuEvent ce) {
        seleccionable.onDelete();
      }
    });
    itemModify = addContextMenuItem(MODIFY, Boolean.FALSE,
        new SelectionListener<MenuEvent>() {
      @Override
      public void componentSelected(MenuEvent ce) {
        seleccionable.onModify();
      }
    });
  }

  /**
   * Agrega al menu contextual un item que permite seleccionar todos los elementos
   * de la grilla
   * @param window
   */
  private void addMenuItemSelectAll() {
    addContextMenuItem(SELECT_ALL, Boolean.TRUE,
        new SelectionListener<MenuEvent>() {
          @Override
          public void componentSelected(MenuEvent ce) {
            getSelectionModel().selectAll();
            //FIXME: Ver como solucionar este tema, ya que aparentemente es necesario setear el estado
            //seleccionable.setWindowState(State.UNKNOW_STATE);
          }
        });
  }
 
  /**
   * Accion que realizar� por defecto al seleccionar un registro de la grilla
   */
  public void defaultActionOnSelectItem(){
    // Acciones a realizar cuando selecciona algun registro de la grilla
    getSelectionModel().addListener(Events.SelectionChange,
        new Listener() {
          @Override
          public void handleEvent(BaseEvent be) {
            List seleccionados = getSelectionModel().getSelection();
            itemDelete.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty())));
            seleccionable.onSelect(seleccionados);
          }
        });   
  }
 
  /**
   * Accion que realizar� por defecto al seleccionar un registro de la grilla de Tareas
   */
  public void defaultActionOnSelectItemTask(){
    // Acciones a realizar cuando selecciona algun registro de la grilla
    getSelectionModel().addListener(Events.SelectionChange,
        new Listener() {
      @Override
      public void handleEvent(BaseEvent be) {
        List seleccionados = getSelectionModel().getSelection();
        itemDelete.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty())));
        itemModify.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty()) && (seleccionados.size()==1)));
        itemDividir.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty()) && (seleccionados.size()==1)));
        seleccionable.onSelect(seleccionados);
      }
    });   
  }
  /**
   * Accion que realizar� por defecto al seleccionar un registro de la grilla de Objetivos
   */
  public void defaultActionOnSelectItemObjective(){
    // Acciones a realizar cuando selecciona algun registro de la grilla
    getSelectionModel().addListener(Events.SelectionChange,
        new Listener() {
      @Override
      public void handleEvent(BaseEvent be) {
        List seleccionados = getSelectionModel().getSelection();
        if (Context.getInstance().isAvaiable(PermissionsConst.OBJETIVOS)){
          itemDelete.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty())));
          itemModify.setEnabled(((seleccionados!=null) && (!seleccionados.isEmpty()) && (seleccionados.size()==1)));
        }
        seleccionable.onSelect(seleccionados);
      }
    });   
  }

  @Override
  public El mask(String message) {
    return super.mask("Cargando...");
  }
 
 
}
TOP

Related Classes of ar.com.AmberSoft.iEvenTask.client.utils.Grid

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.