es.fdi.reservas.reserva.web.ReservaController.java Source code

Java tutorial

Introduction

Here is the source code for es.fdi.reservas.reserva.web.ReservaController.java

Source

/**
 * This file is part of reservas Maven Webapp.
 *
 * reservas Maven Webapp is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * reservas Maven Webapp is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with reservas Maven Webapp.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.fdi.reservas.reserva.web;

import java.util.List;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import es.fdi.reservas.reserva.business.boundary.ReservaService;
import es.fdi.reservas.reserva.business.entity.Edificio;
import es.fdi.reservas.reserva.business.entity.Espacio;
import es.fdi.reservas.reserva.business.entity.EstadoReserva;
import es.fdi.reservas.reserva.business.entity.Reserva;
import es.fdi.reservas.users.business.entity.User;

@Controller
public class ReservaController {

    private ReservaService reserva_service;

    @Autowired
    public ReservaController(ReservaService rs) {
        reserva_service = rs;
    }

    @RequestMapping({ "/", "", "/mis-reservas" })
    public String misReservas() {
        return "redirect:/mis-reservas/page/1";
    }

    @RequestMapping(value = "/mis-reservas/page/{pageNumber}", method = RequestMethod.GET)
    public String misReservasPaginadas(@PathVariable Integer pageNumber, Model model) {
        User u = reserva_service.getCurrentUser();

        PageRequest pageRequest = new PageRequest(pageNumber - 1, 7,
                new Sort(new Sort.Order(Sort.Direction.ASC, "comienzo")));
        Page<Reserva> currentResults = reserva_service.getReservasUsuario(u.getId(), pageRequest);

        model.addAttribute("currentResults", currentResults);

        int current = currentResults.getNumber() + 1;
        int begin = Math.max(1, current - 5);
        int end = Math.min(begin + 10, currentResults.getTotalPages());

        model.addAttribute("beginIndex", begin);
        model.addAttribute("endIndex", end);
        model.addAttribute("currentIndex", current);
        model.addAttribute("reservasPendientes",
                reserva_service.reservasPendientesUsuario(u.getId(), EstadoReserva.PENDIENTE).size());
        model.addAttribute("User", u);
        model.addAttribute("GruposReservas", reserva_service.getGruposUsuario(u.getId()));
        model.addAttribute("view", "mis-reservas");

        return "index";
    }

    @RequestMapping(value = "/edificios", method = RequestMethod.GET)
    public String edificios(Model model) {

        User user = reserva_service.getCurrentUser();
        model.addAttribute("User", user);
        List<Edificio> edificios = reserva_service.getEdificiosFacultad(user.getFacultad().getId());
        if (edificios.size() > 1) {
            model.addAttribute("Edificios", edificios);
            model.addAttribute("reservasPendientes",
                    reserva_service.reservasPendientesUsuario(user.getId(), EstadoReserva.PENDIENTE).size());
            model.addAttribute("GruposReservas", reserva_service.getGruposUsuario(user.getId()));
            model.addAttribute("view", "edificios");

            return "index";
        } else {
            long idEdificio = edificios.get(0).getId();

            return "redirect:/edificio/" + idEdificio + "/espacios";
        }

    }

    @RequestMapping(value = "/edificio/{idEdificio}/espacios", method = RequestMethod.GET)
    public ModelAndView espacios(@PathVariable("idEdificio") long idEdificio) {
        ModelAndView model = new ModelAndView("index");
        User u = reserva_service.getCurrentUser();
        model.addObject("User", u);
        model.addObject("Edificio", reserva_service.getEdificio(idEdificio));
        model.addObject("TiposEspacio", reserva_service.tiposDeEspacios(idEdificio));
        model.addObject("reservasPendientes",
                reserva_service.reservasPendientesUsuario(u.getId(), EstadoReserva.PENDIENTE).size());
        model.addObject("Espacios", reserva_service.getEspaciosEdificio(idEdificio));
        model.addObject("GruposReservas", reserva_service.getGruposUsuario(u.getId()));
        model.addObject("view", "espacios");

        return model;
    }

    @RequestMapping(value = "/edificio/{idEdificio}/espacio/{idEspacio}", method = RequestMethod.GET)
    public ModelAndView reservarPorEspacio(@PathVariable("idEdificio") long idEdificio,
            @PathVariable("idEspacio") long idEspacio) {
        ModelAndView model = new ModelAndView("index");
        User user = reserva_service.getCurrentUser();
        Espacio e = reserva_service.getEspacio(idEspacio);
        Reserva r = new Reserva();
        r.setEspacio(e);
        model.addObject("User", user);
        model.addObject("Reserva", r);
        model.addObject("IdEspacio", idEspacio);
        model.addObject("reservasPendientes",
                reserva_service.reservasPendientesUsuario(user.getId(), EstadoReserva.PENDIENTE).size());
        model.addObject("GruposReservas", reserva_service.getGruposUsuario(user.getId()));
        model.addObject("view", "reservas-calendario");

        return model;
    }

    @RequestMapping(value = "/reservas-fecha", method = RequestMethod.GET)
    public ModelAndView reservarPorFecha() {
        ModelAndView model = new ModelAndView("index");
        User u = reserva_service.getCurrentUser();
        List<Edificio> edificios = reserva_service.getEdificiosFacultad(u.getFacultad().getId());
        model.addObject("User", u);
        model.addObject("Edificios", edificios);
        model.addObject("reservasPendientes",
                reserva_service.reservasPendientesUsuario(u.getId(), EstadoReserva.PENDIENTE).size());
        model.addObject("GruposReservas", reserva_service.getGruposUsuario(u.getId()));
        model.addObject("view", "reservas-fecha");

        return model;
    }

    //@PreAuthorize("principal.username == 'user'")
    //@PreAuthorize("hasRole('ADMIN')")
    @RequestMapping(value = "/editar/{idReserva}", method = RequestMethod.GET)
    public String editarReservaSimple(@PathVariable("idReserva") long idReserva, Model model) {
        User u = reserva_service.getCurrentUser();
        model.addAttribute("User", u);
        model.addAttribute("Reserva", reserva_service.getReserva(idReserva));
        model.addAttribute("reservasPendientes",
                reserva_service.reservasPendientesUsuario(u.getId(), EstadoReserva.PENDIENTE).size());
        model.addAttribute("GruposReservas", reserva_service.getGruposUsuario(u.getId()));
        model.addAttribute("view", "editarReserva");

        return "index";
    }

    @RequestMapping(value = "/editar/{idReserva}/{recurrenteId}", method = RequestMethod.GET)
    public String editarReservaRecurrente(@PathVariable("idReserva") long idReserva,
            @PathVariable("recurrenteId") String recurrenteId, Model model) {
        User u = reserva_service.getCurrentUser();
        model.addAttribute("User", u);
        String[] w = recurrenteId.split("_");
        Reserva r = reserva_service.getReserva(idReserva);
        //cambiar el comienzo y fin con w[1]
        String[] s = w[1].split("-");
        DateTime currentStart = r.getComienzo();
        DateTime currentEnd = r.getFin();
        Long range = currentEnd.getMillis() - currentStart.getMillis();

        DateTime newStart = currentStart.withDayOfMonth(Integer.valueOf(s[0]))
                .withMonthOfYear(Integer.valueOf(s[1])).withYear(Integer.valueOf(s[2]));

        r.setComienzo(newStart);
        DateTime newEnd = newStart.plus(range);
        r.setFin(newEnd);

        // el newStart y el newEnd pasarlos con el modelo

        model.addAttribute("Reserva", r);
        model.addAttribute("reservasPendientes",
                reserva_service.reservasPendientesUsuario(u.getId(), EstadoReserva.PENDIENTE).size());
        model.addAttribute("GruposReservas", reserva_service.getGruposUsuario(u.getId()));
        model.addAttribute("view", "editarReserva");

        return "index";
    }

}