Skip to content

Instantly share code, notes, and snippets.

@DemkaAge
Created March 31, 2014 09:26
Show Gist options
  • Save DemkaAge/9888663 to your computer and use it in GitHub Desktop.
Save DemkaAge/9888663 to your computer and use it in GitHub Desktop.
package ru.brbpm.lecm.shared.filenet.ce.util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* User: dshahovkin
* Date: 19.03.13
* Time: 10:28
* <p/>
* <p/>
* Структура для постраничной передачи данных. <p/>
* Общий подход. Сервис должен реализовывать два метода:
* <ul>
* <li>
* init ( входные данные, количество строк на странице : int) : K extends CePage<T>
* </li>
* <li>
* nextPage ( чекПоинт : byte[]) : K extends CePage<T>
* </li>
* </ul>
* <p/>
* Перебор данных для сервлета/ejb.
* <pre>
* {@code
*
* for (CePage<T> page = <service >.init(...); page.hasNextPage(); page = <service>.nextPage(page.getCheckPoint()))
* {
* List<T> data = page.getData();
* for(T t: data)
* {
* //TODO logic
* }
* }
* }
* </pre>
* <p/>
* GWT клиент должен использовать {@link ru.brbpm.lecm.utils.client.filenet.ce.CeAsyncDataProvider}.
*
* @since 1.0.6
*/
public class CePage<T extends Serializable> implements Serializable {
private static final long serialVersionUID = -6133508129676864300L;
/**
* Одна страница данных.
*/
protected List<T> data;
/**
* ЧекПоинт для восстановления FileNet PageIterator.
*/
protected byte[] checkPoint;
public CePage() {
}
public CePage(List<T> data, byte[] checkPoint) {
this.data = data;
this.checkPoint = checkPoint;
}
public List<T> getData() {
if(data == null)
data = new ArrayList<T>();
return data;
}
public void setData(List<T> data) {
this.data = data;
}
public byte[] getCheckPoint() {
return checkPoint;
}
public void setCheckPoint(byte[] checkPoint) {
this.checkPoint = checkPoint;
}
public boolean hasNextPage() {
return checkPoint != null;
}
@Override
public String toString() {
return "CePage{" +
"data=" + data +
", checkPoint=" + Arrays.toString(checkPoint) +
'}';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment