PagedListRequest.java

package org.entando.kubernetes.model.web.request;

import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import org.apache.commons.lang3.ArrayUtils;

@Data
public class PagedListRequest {

    public static final int PAGE_SIZE_DEFAULT = 100;
    public static final String SORT_VALUE_DEFAULT = "id";
    public static final String DIRECTION_VALUE_DEFAULT = Filter.ASC_ORDER;

    private String sort;
    private String direction;
    private Integer page;
    private Integer pageSize;
    private Filter[] filters;

    public PagedListRequest() {
        this.direction = DIRECTION_VALUE_DEFAULT;
        this.pageSize = PAGE_SIZE_DEFAULT;
        this.sort = SORT_VALUE_DEFAULT;
        this.page = 1;
    }

    public PagedListRequest(int page, int pageSize, String sort, String direction) {
        this.page = page;
        this.pageSize = pageSize;
        this.sort = sort;
        this.direction = direction;
    }

    public void addFilter(final Filter filter) {
        this.filters = ArrayUtils.add(this.filters, filter);
    }

    public <E> List<E> getSublist(final List<E> master) {
        if (null == master) {
            return new ArrayList<>();
        } else if (0 == this.getPage() || master.isEmpty()) {
            return master;
        } else {
            if (null == pageSize) {
                this.setPageSize(PAGE_SIZE_DEFAULT);
            }
            final int offset = this.getOffset();
            final int size = master.size();
            final int offsetToApply = offset >= size ? size : offset;
            final int limitToApply = offsetToApply + pageSize > size ? size : offsetToApply + pageSize;
            return master.subList(offsetToApply, limitToApply);
        }
    }

    private Integer getOffset() {
        final int p = this.getPage() - 1;
        return null != this.getPage() && this.getPage() != 0 ? this.getPageSize() * p : 0;
    }

}