net.kamhon.ieagle.datagrid.DefaultDatagridModel.java Source code

Java tutorial

Introduction

Here is the source code for net.kamhon.ieagle.datagrid.DefaultDatagridModel.java

Source

/*
 * Copyright 2012 Eng Kam Hon (kamhon@gmail.com)
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.kamhon.ieagle.datagrid;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import net.kamhon.ieagle.util.CollectionUtil;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.springframework.util.Assert;

/**
 * This is the default DatagridModel implementation for Hibernate & Java Collections. For using Datagrid with SQL, you
 * need to use {@link DefaultDatagridModel}
 * 
 * @author kamhon
 * 
 * @param <T>
 * @see SqlDatagridModel
 */
public class DefaultDatagridModel<T> implements DatagridModel<T> {
    protected List<Sorter> sorters = new ArrayList<Sorter>();

    protected String aliasName;

    protected int currentPage = 0;
    protected int pageSize = 25;

    protected long totalRecords = 0;

    protected boolean disableSort;

    protected List<Filter> filters = new ArrayList<Filter>();

    protected List<T> records = new ArrayList<T>(); // to prevent NullPointerException

    protected Locale locale;

    protected Map<String, String> extraMappings = new HashMap<String, String>();

    public DefaultDatagridModel() {
    }

    public DefaultDatagridModel(Locale locale) {
        this.locale = locale;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getTotalPages()
     */
    public int getTotalPages() {
        Assert.isTrue(pageSize > 0, "pageSize can't less or equals to 0");

        return (int) (totalRecords / pageSize);
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setSorterColumnName(int, java.lang.String)
     */
    public void setSorterColumnName(int index, String sortColName) {
        Assert.isTrue(sorters.size() >= index, "sorters.size() must equals or greater than index");

        if (sorters.size() >= index + 1) {
            Sorter sorter = (Sorter) sorters.get(index);
            sorter.setColumn(sortColName);
        } else if (sorters.size() == index) {
            Sorter sorter = new DefaultSorter();
            sorter.setColumn(sortColName);
            sorters.add(index, sorter);
        }
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setSorterDirection(int, java.lang.String)
     */
    public void setSorterDirection(int index, String direction) {
        Assert.isTrue(sorters.size() >= index, "sorters.size() must equals or greater than index");

        if (sorters.size() >= index + 1) {
            Sorter sorter = sorters.get(index);
            sorter.setDirection(direction);
        } else if (sorters.size() == index) {
            Sorter sorter = new DefaultSorter();
            sorter.setDirection(direction);
            sorters.add(index, sorter);
        }
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getRecordOffset()
     */
    public int getRecordOffset() {
        int offSet = (currentPage - 1) * pageSize;
        if (offSet < 0) {
            return 0;
        } else {
            return offSet;
        }
    }

    @Override
    public void setLocale(Locale locale) {
        this.locale = locale;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getRecordsInArray(java.lang.String[])
     */
    public Object[][] getRecordsInArray(String[] propertiesNames) {
        // if not pagination, the pageSize is -1
        if (pageSize > -1 && records.size() > pageSize) {
            int offSet = getRecordOffset();
            int toIndex = offSet + pageSize;
            if (toIndex > totalRecords) {
                toIndex = (int) totalRecords;
            }
            return CollectionUtil.to2DArrayForStruts(locale, records.subList(offSet, toIndex), propertiesNames,
                    true);
        } else {
            return CollectionUtil.to2DArrayForStruts(locale, records, propertiesNames, true);
        }
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#convertRecordsToStringList(java.lang.String)
     */
    public List<String> convertRecordsToStringList(String propertyName) {
        Object[][] array = getRecordsInArray(new String[] { propertyName });

        List<String> result = new ArrayList<String>();
        for (Object[] obj : array) {
            result.add(obj[0].toString());
        }
        return result;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#sortRecords()
     */
    @SuppressWarnings("unchecked")
    public void sortRecords() {
        if (CollectionUtil.isEmpty(records)) {
            return;
        }

        if (CollectionUtil.isEmpty(sorters)) {
            return;
        }

        List<BeanComparator> sortColumns = new ArrayList<BeanComparator>();
        for (Sorter sorter : sorters) {
            if (sorter.getDirection().equalsIgnoreCase(Sorter.ASC)) {
                sortColumns.add(new BeanComparator(sorter.getColumn()));
            } else {
                sortColumns.add(
                        new BeanComparator(sorter.getColumn(), new ReverseComparator(new ComparableComparator())));
            }
        }
        ComparatorChain sort = new ComparatorChain(sortColumns);
        Collections.sort(records, sort);
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getTotalRecords()
     */
    public long getTotalRecords() {
        return totalRecords;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setTotalRecords(long)
     */
    public void setTotalRecords(long totalRecords) {
        this.totalRecords = totalRecords;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getRecords()
     */
    public List<T> getRecords() {
        return records;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setRecords(java.util.List)
     */
    public void setRecords(List<T> records) {
        this.records = records;
        if (CollectionUtil.isNotEmpty(records))
            this.totalRecords = records.size();
    }

    public void setAliasName(String aliasName) {
        this.aliasName = aliasName;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getSorters()
     */
    public List<Sorter> getSorters() {
        return sorters;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setSorters(java.util.List)
     */
    public void setSorters(List<Sorter> sorters) {
        this.sorters = sorters;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getCurrentPage()
     */
    public int getCurrentPage() {
        return currentPage;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setCurrentPage(int)
     */
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getPageSize()
     */
    public int getPageSize() {
        return pageSize;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setPageSize(int)
     */
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#getFilters()
     */
    public List<Filter> getFilters() {
        return filters;
    }

    /* (non-Javadoc)
     * @see net.kamhon.ieagle.datagrid.DatagridModel#setFilters(java.util.List)
     */
    public void setFilters(List<Filter> filters) {
        this.filters = filters;
    }

    public void processBeforeQuery() {
        // does nothing
    }

    public void disableSort(boolean disable) {
        this.disableSort = disable;
    }

    public boolean isDisableSort() {
        return disableSort;
    }

    @Override
    public void addExtraMapping(String fieldName, String mapTo) {
        extraMappings.put(fieldName, mapTo);
    }

    @Override
    public String getExtraMapping(String fieldName) {
        return extraMappings.get(fieldName);
    }
}