org.lareferencia.backend.rest.PageResource.java Source code

Java tutorial

Introduction

Here is the source code for org.lareferencia.backend.rest.PageResource.java

Source

/*******************************************************************************
 * Copyright (c) 2013 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors:
 *     Lautaro Matas (lmatas@gmail.com) - Desarrollo e implementacin
 *     Emiliano Marmonti(emarmonti@gmail.com) - Coordinacin del componente III
 * 
 * Este software fue desarrollado en el marco de la consultora "Desarrollo e implementacin de las soluciones - Prueba piloto del Componente III -Desarrollador para las herramientas de back-end" del proyecto Estrategia Regional y Marco de Interoperabilidad y Gestin para una Red Federada Latinoamericana de Repositorios Institucionales de Documentacin Cientfica? financiado por Banco Interamericano de Desarrollo (BID) y ejecutado por la Cooperacin Latino Americana de Redes Avanzadas, CLARA.
 ******************************************************************************/
package org.lareferencia.backend.rest;

/**
 * 
 */

import java.util.Iterator;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
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 Page<T> {

    private final Page<T> page;

    public PageResource(Page<T> page, String pageParam, String sizeParam) {
        super();
        this.page = page;
        if (page.hasPrevious()) {
            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.hasNext()) {
            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.hasPrevious();
    }

    @Override
    public boolean isFirstPage() {
        return page.isFirst();
    }

    @Override
    public boolean hasNextPage() {
        return page.hasNext();
    }

    @Override
    public boolean isLastPage() {
        return page.isLast();
    }

    @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();
    }

    @Override
    public boolean hasNext() {
        // TODO Auto-generated method stub
        return page.hasNext();
    }

    @Override
    public boolean hasPrevious() {
        // TODO Auto-generated method stub
        return page.hasPrevious();
    }

    @Override
    public boolean isFirst() {
        // TODO Auto-generated method stub
        return page.isFirst();
    }

    @Override
    public boolean isLast() {
        // TODO Auto-generated method stub
        return page.isLast();
    }

    @Override
    public Pageable nextPageable() {
        // TODO Auto-generated method stub
        return page.nextPageable();
    }

    @Override
    public Pageable previousPageable() {
        // TODO Auto-generated method stub
        return page.previousPageable();
    }

}