com.ewcms.common.query.cache.CacheResult.java Source code

Java tutorial

Introduction

Here is the source code for com.ewcms.common.query.cache.CacheResult.java

Source

/**
 * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
 * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 * http://www.ewcms.com
 */

package com.ewcms.common.query.cache;

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

import org.springframework.util.Assert;

import com.ewcms.common.query.Paginationable;

public class CacheResult implements CacheResultable, Paginationable, Serializable {

    private static final long serialVersionUID = -8968737366176823246L;

    private int row = DEFAULT_ROW;
    private int page = DEFAULT_PAGE;

    private String cacheKey;
    private int count;
    private List<Object> resultList = new ArrayList<Object>();
    private List<Object> extList;
    private boolean modified;

    public CacheResult(String cacheKey, int count, List<Object> extList) {
        this.cacheKey = cacheKey;
        this.count = count;
        this.extList = extList;
        this.modified = true;
    }

    public CacheResult(CacheResult result) {
        cacheKey = result.cacheKey;
        count = result.count;
        resultList = result.resultList;
        extList = result.extList;
        row = result.row;
        page = result.page;
        modified = false;
    }

    public CacheResult(String cacheKey, CacheResult result) {
        this.cacheKey = cacheKey;
        count = result.count;
        resultList = result.resultList;
        extList = result.extList;
        row = result.row;
        page = result.page;
        modified = true;
    }

    @Override
    public CacheResult setRow(int row) {
        Assert.isTrue(row > 0, "row is not <= 0");
        this.row = row;
        return this;
    }

    @Override
    public CacheResult setPage(int page) {
        Assert.isTrue(page >= 0, "page is not < 0");
        this.page = page;
        return this;
    }

    @Override
    public String getCacheKey() {
        return cacheKey;
    }

    @Override
    public int getCount() {
        return count;
    }

    @Override
    public int getPageCount() {
        return (count + row - 1) / row;
    }

    @Override
    public List<Object> getResultList() {

        int fromIndex = getFromIndex();
        if (fromIndex >= count) {
            return Collections.emptyList();
        }
        Assert.isTrue(isLoaded(), "load data incomplete");
        int toIndex = getToIndex();
        return resultList.subList(fromIndex, toIndex);
    }

    private int getFromIndex() {
        return row * page;
    }

    private int getToIndex() {
        int toIndex = row * (page + 1);
        toIndex = toIndex > count ? count : toIndex;
        return toIndex;
    }

    public boolean isLoaded() {

        int fromIndex = getFromIndex();
        if (fromIndex >= count) {
            return true;
        }

        int toIndex = getToIndex();

        return (fromIndex < resultList.size()) && (toIndex <= resultList.size());
    }

    public int getStartPosition() {
        return resultList.size();
    }

    @Override
    public List<Object> getExtList() {
        return extList;
    }

    public void appendResultList(List<Object> list) {
        int space = count - resultList.size();
        if (space <= 0) {
            return;
        }

        modified = true;

        if (space > list.size()) {
            resultList.addAll(list);
        } else {
            resultList.addAll(list.subList(0, space));
        }
    }

    @Override
    public boolean isModified() {
        return modified;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((cacheKey == null) ? 0 : cacheKey.hashCode());
        result = prime * result + count;
        result = prime * result + ((extList == null) ? 0 : extList.hashCode());
        result = prime * result + ((resultList == null) ? 0 : resultList.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CacheResult other = (CacheResult) obj;
        if (cacheKey == null) {
            if (other.cacheKey != null)
                return false;
        } else if (!cacheKey.equals(other.cacheKey))
            return false;
        if (count != other.count)
            return false;
        if (extList == null) {
            if (other.extList != null)
                return false;
        } else if (!extList.equals(other.extList))
            return false;
        if (resultList == null) {
            if (other.resultList != null)
                return false;
        } else {
            if (other.resultList == null)
                return false;
            if (!resultList.equals(other.resultList))
                return false;
        }

        return true;
    }
}