// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.common.ui.pagination.pageloder;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.nebula.widgets.pagination.IPageLoader;
import org.eclipse.nebula.widgets.pagination.PageableController;
import org.eclipse.nebula.widgets.pagination.collections.PageResult;
import org.talend.cwm.indicator.ColumnFilter;
import org.talend.cwm.indicator.DataValidation;
import org.talend.dataquality.indicators.mapdb.AbstractDB;
/**
* created by talend on Aug 14, 2014 Detailled comment
*
*/
public class MapDBPageLoader<T> implements IPageLoader<PageResult<Object[]>> {
private AbstractDB<T> db = null;
private Map<Long, T> indexMap = new HashMap<Long, T>();
private long itemsSize = 0l;
private DataValidation dataValidator;
private ColumnFilter columnFilter;
public MapDBPageLoader(AbstractDB<T> db, DataValidation validator, long size) {
this(db, validator, size, null);
}
public MapDBPageLoader(AbstractDB<T> db, DataValidation validator, long size, ColumnFilter filter) {
this.db = db;
itemsSize = size;
dataValidator = validator;
columnFilter = filter;
}
public MapDBPageLoader(AbstractDB<T> db) {
this(db, null, Long.valueOf(db.size()));
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.nebula.widgets.pagination.IPageLoader#loadPage(org.eclipse.nebula.widgets.pagination.PageableController
* )
*/
@Override
public PageResult<Object[]> loadPage(PageableController controller) {
long totalSize = itemsSize;
long pageSize = controller.getPageSize();
long pageIndex = controller.getPageOffset();
long fromIndex = pageIndex;
long toIndex = pageIndex + pageSize;
if (toIndex > totalSize) {
toIndex = totalSize;
}
if (dataValidator == null) {
return MapDBPageListHelper.createPage(db, indexMap, columnFilter, fromIndex, toIndex, totalSize);
} else {
return MapDBPageListHelper.createPage(db, indexMap, dataValidator, fromIndex, toIndex, totalSize);
}
}
}