Package com.wiquery.plugins.jqgrid.component

Source Code of com.wiquery.plugins.jqgrid.component.GridDataPanel

/**
*
*/
package com.wiquery.plugins.jqgrid.component;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RefreshingView;
import org.apache.wicket.markup.repeater.data.IDataProvider;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.http.WebRequestCycle;

import com.wiquery.plugins.jqgrid.model.ICellPopulator;
import com.wiquery.plugins.jqgrid.model.SortInfo;
import com.wiquery.plugins.jqgrid.model.SortOrder;

/**
* @author Ernesto Reinaldo
*/
public class GridDataPanel<E extends Serializable> extends Panel {

  private static final long serialVersionUID = 1L;

  private int currentPage = 0;
 
  private int totalPages = 1 ;
 
  private int pageSize = 10 ;
 
  private int records = 10 ;
 
  private int start = 0;
 
  private RefreshingView<E>  rows;

  private List<ICellPopulator<E>> populators;
 
  private SortInfo sortInfo;
   
  private IDataProvider<E> dataProvider;
 
  private List<IModel<ICellPopulator<E>>> COLUMNS = new ArrayList<IModel<ICellPopulator<E>>>();
 
  private List<IModel<E>> rowModels;
  /**
   * @param id
   */
  public GridDataPanel(String id, List<ICellPopulator<E>> populators, IDataProvider<E> dataProvider) {       
    super(id)
    this.rowModels = new ArrayList<IModel<E>>();
    this.populators = populators;
    this.dataProvider = dataProvider;
    int columns = populators.size();
    for(int i=0; i < columns;i++) {
      COLUMNS.add(Model.of(populators.get(i)));
    }
    add(new Label("currentPage", new AbstractReadOnlyModel<String>(){
      private static final long serialVersionUID = 1L;

      @Override
      public String getObject() {
        return Integer.toString(getCurrentPage());
      }
    }).setRenderBodyOnly(true));
   
    add(new Label("totalPages", new AbstractReadOnlyModel<String>(){
      private static final long serialVersionUID = 1L;

      @Override
      public String getObject() {
        return Integer.toString(getTotalPages());
      }
    }).setRenderBodyOnly(true));
   
    add(new Label("records", new AbstractReadOnlyModel<String>(){
      private static final long serialVersionUID = 1L;

      @Override
      public String getObject() {
        return Integer.toString(getRecords());
      }
    }).setRenderBodyOnly(true));
   
    rows = new RefreshingView<E>("rows") {
     
      private static final long serialVersionUID = 1L;

      @Override
      protected Iterator<IModel<E>> getItemModels() {
        List<IModel<E>> temp = new ArrayList<IModel<E>>();
        Iterator<? extends E> it = GridDataPanel.this.getRows(start, pageSize,  GridDataPanel.this.sortInfo);
        while(it.hasNext()) {
          IModel<E> model = GridDataPanel.this.dataProvider.model(it.next());
          rowModels.add(model);
          temp.add(model);
        }
        return temp.iterator();
      }
     
      @Override
      protected Item<E> newItem(String id, int index, IModel<E> model) {
        Item<E> item = super.newItem(id, index, model);
        item.add(new AttributeModifier("id", Model.of("row"+index)));
        return item;
      }
     
      @Override
      protected void populateItem(final Item<E> item) { 
       
        RefreshingView<ICellPopulator<E>> cells = new RefreshingView<ICellPopulator<E>>("cells") {
         
          private static final long serialVersionUID = 1L;

          @Override
          protected Iterator<IModel<ICellPopulator<E>>> getItemModels() {                       
            return COLUMNS.iterator();
          }
         
          @Override
          protected void populateItem(Item<ICellPopulator<E>> cellItem) {
            ICellPopulator<E> cellPopulator = cellItem.getModel().getObject();
            cellPopulator.populateItem(cellItem, "cell", item.getIndex(), cellItem.getIndex(), item.getModel());
          }
        };
        item.add(cells);
      }
     
    };       
    add(rows);
  }

  private Iterator<? extends E> getRows(int start, int rows, SortInfo sortInfo) {
    if(this.dataProvider instanceof ISortStateLocator) {
      ISortStateLocator locator = (ISortStateLocator)dataProvider;
      ISortState sortState = locator.getSortState();
      if(sortState != null && sortInfo != null && sortInfo.getSortOrder() != null) {
        if(sortInfo.getSortOrder().equals(SortOrder.asc))
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.ASCENDING);
        else if(sortInfo.getSortOrder().equals(SortOrder.desc))
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.DESCENDING);
        else
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.ASCENDING);
        locator.setSortState(sortState);
      }     
    }
    return this.dataProvider.iterator(start, rows);
  }
 
  private int totalRecords(SortInfo sortInfo) {
    if(this.dataProvider instanceof ISortStateLocator) {
      ISortStateLocator locator = (ISortStateLocator)dataProvider;
      ISortState sortState = locator.getSortState();
      if(sortState != null && sortInfo != null) {
        if(SortOrder.asc.equals(sortInfo.getSortOrder()))
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.ASCENDING);
        else if(SortOrder.desc.equals(sortInfo.getSortOrder()))
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.DESCENDING);
        else
          sortState.setPropertySortOrder(sortInfo.getProperty(), ISortState.ASCENDING);
        locator.setSortState(sortState);
      }
    }
    return this.dataProvider.size();
  }
 
  /**
   * Give a chance to configure the provider.
   *
   * @param dataProvider
   */
  protected void configureSort() {
    SortOrder sortOrder = getSortOrder();
    String propertyPath = getSortColumn();
    if(propertyPath != null) {
      this.sortInfo = new SortInfo(propertyPath, sortOrder);
    } else {
      this.sortInfo = null;
    }
  }
 
  private SortOrder getSortOrder() {
    try {
      return SortOrder.valueOf(WebRequestCycle.get().getRequest().getParameter("sord"));
    } catch (Exception e) {
      return SortOrder.asc;
    }
  }
 
  private String getSortColumn() {
    try {
      return WebRequestCycle.get().getRequest().getParameter("sidx");
    } catch (Exception e) {
      return null;
    }
  }
 
  private int readCurrentPage() {
    try {
      return Integer.parseInt(WebRequestCycle.get().getRequest().getParameter("page"));
    } catch (Exception e) {
      return 1;
    }
  }
 
  private int readNumberOfRows() {
    try {
      return Integer.parseInt(WebRequestCycle.get().getRequest().getParameter("rows"));
    } catch (Exception e) {
      return 10;
    }
  }
 
  @Override
  protected void onBeforeRender() {
    configureSort();
    rowModels.clear();
    int rows = readNumberOfRows();
    int page = readCurrentPage();
    int records = totalRecords(this.sortInfo);
    int start = rows*(page-1);
    long totalPages = (records/rows)+1;
    setCurrentPage(page);
    setTotalPages((int)totalPages);
    setPageSize(rows);
    setStart(start);
        setRecords( records );
    super.onBeforeRender();   
  }

  public void setCurrentPage(int currentPage) {
    this.currentPage = currentPage;
  }

  public int getTotalPages() {
    return totalPages;
  }

  public void setTotalPages(int totalPages) {
    this.totalPages = totalPages;
  }

  public int getPageSize() {
    return pageSize;
  }

  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }

  public int getRecords() {
    return records;
  }

  public void setRecords(int records) {
    this.records = records;
  }

  public int getStart() {
    return start;
  }

  public void setStart(int start) {
    this.start = start;
  }

  public List<ICellPopulator<E>> getPopulators() {
    return populators;
  }

  public void setPopulators(List<ICellPopulator<E>> populators) {
    this.populators = populators;
  }

  public int getCurrentPage() {
    return currentPage;
  }

  public List<IModel<E>> getRowModels() {
    return rowModels;
  }
 
}
TOP

Related Classes of com.wiquery.plugins.jqgrid.component.GridDataPanel

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.