package com.syzton.sunread.dto.common; /** * Created by jerry on 3/12/15. */ /** * */ import java.util.Iterator; import java.util.List; import org.springframework.data.domain.Sort; import org.springframework.hateoas.Link; import org.springframework.hateoas.ResourceSupport; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; public class PageResource<T> extends ResourceSupport implements org.springframework.data.domain.Page<T> { private final org.springframework.data.domain.Page<T> page; public PageResource(org.springframework.data.domain.Page<T> page, String pageParam, String sizeParam) { super(); this.page = page; if(page.hasPreviousPage()) { String path = createBuilder() .queryParam(pageParam,page.getNumber()-1) .queryParam(sizeParam,page.getSize()) .build() .toUriString(); Link link = new Link(path, Link.REL_PREVIOUS); add(link); } if(page.hasNextPage()) { String path = createBuilder() .queryParam(pageParam,page.getNumber()+1) .queryParam(sizeParam,page.getSize()) .build() .toUriString(); Link link = new Link(path, Link.REL_NEXT); add(link); } Link link = buildPageLink(pageParam,0,sizeParam,page.getSize(),Link.REL_FIRST); add(link); int indexOfLastPage = page.getTotalPages() - 1; link = buildPageLink(pageParam,indexOfLastPage,sizeParam,page.getSize(),Link.REL_LAST); add(link); link = buildPageLink(pageParam,page.getNumber(),sizeParam,page.getSize(),Link.REL_SELF); add(link); } private ServletUriComponentsBuilder createBuilder() { return ServletUriComponentsBuilder.fromCurrentRequestUri(); } private Link buildPageLink(String pageParam,int page,String sizeParam,int size,String rel) { String path = createBuilder() .queryParam(pageParam,page) .queryParam(sizeParam,size) .build() .toUriString(); Link link = new Link(path,rel); return link; } @Override public int getNumber() { return page.getNumber(); } @Override public int getSize() { return page.getSize(); } @Override public int getTotalPages() { return page.getTotalPages(); } @Override public int getNumberOfElements() { return page.getNumberOfElements(); } @Override public long getTotalElements() { return page.getTotalElements(); } @Override public boolean hasPreviousPage() { return page.hasPreviousPage(); } @Override public boolean isFirstPage() { return page.isFirstPage(); } @Override public boolean hasNextPage() { return page.hasNextPage(); } @Override public boolean isLastPage() { return page.isLastPage(); } @Override public Iterator<T> iterator() { return page.iterator(); } @Override public List<T> getContent() { return page.getContent(); } @Override public boolean hasContent() { return page.hasContent(); } @Override public Sort getSort() { return page.getSort(); } }