package pl.edu.icm.saos.persistence.search.result; import java.io.Serializable; import java.util.List; import com.google.common.collect.Lists; /** * A class for storing search result. * @author lukdumi * */ public class SearchResult<T> implements Serializable { //private Logger log = LoggerFactory.getLogger(SearchResult.class); private static final long serialVersionUID = 1L; private List<T> resultRecords = Lists.newArrayList(); private int limitOfRecords = 0; private int firstRecordPosition = 0; private Long allRecordsCount = null; private boolean moreRecordsExist = false; /** * @deprecated use {@link #SearchResult(java.util.List, Long, int, int)} * */ @Deprecated public SearchResult(List<T> resultRecords) { this.resultRecords = resultRecords; } public SearchResult(List<T> resultRecords, Long allRecordsCount, int first, int limit) { this.resultRecords = resultRecords; setAllRecordsCount(allRecordsCount); setFirstRecordPosition(first); setLimitOfRecords(limit); if (resultRecords.size() > limit) { // one can get one record more to see if there are more records setMoreRecordsExist(true); resultRecords.remove(resultRecords.size()-1); } if (allRecordsCount != null && allRecordsCount > resultRecords.size()) { setMoreRecordsExist(true); } } //******************** GETTERS ******************** /** * Number of records on the current page * @return */ public int getPageRecordsCount() { return resultRecords.size(); } /** * Position of the first record (counting from 1) among all records that matched the query * @return */ public int getFirstRecordPosition() { return firstRecordPosition; } /** * Number of all records. Can be null. * @return */ public Long getAllRecordsCount() { return allRecordsCount; } public List<T> getResultRecords() { return resultRecords; } /** * Limit of records set in request */ public int getLimitOfRecords() { return limitOfRecords; } /** * True if more records than {{@link #getLimitOfRecords()} exist in the data source */ public boolean isMoreRecordsExist() { return moreRecordsExist; } //******************** HELPER ******************** public void addResultRecord(T resultRecord) { this.resultRecords.add(resultRecord); } public void removeResultRecord(T resultRecord) { this.resultRecords.remove(resultRecord); } public void addResultRecords(List<T> resultRecords) { this.resultRecords.addAll(resultRecords); } //******************** SETTERS ******************** public void setFirstRecordPosition(int firstRecordPosition) { this.firstRecordPosition = firstRecordPosition; } public void setAllRecordsCount(Long allRecordsCount) { this.allRecordsCount = allRecordsCount; } public void setResultRecords(List<T> resultRecords) { this.resultRecords = resultRecords; } public void setLimitOfRecords(int limitOfRecords) { this.limitOfRecords = limitOfRecords; } public void setMoreRecordsExist(boolean moreRecordsExist) { this.moreRecordsExist = moreRecordsExist; } }