es.fdi.reservas.reserva.business.boundary.ReservaService.java Source code

Java tutorial

Introduction

Here is the source code for es.fdi.reservas.reserva.business.boundary.ReservaService.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.business.boundary;

 import java.util.ArrayList;
 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.PageImpl;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import es.fdi.reservas.fileupload.business.control.AttachmentRepository;
 import es.fdi.reservas.fileupload.business.entity.Attachment;
 import es.fdi.reservas.reserva.business.control.ReservaRepository;
 import es.fdi.reservas.reserva.business.entity.*;
 import es.fdi.reservas.users.business.boundary.UserService;
 import es.fdi.reservas.users.business.entity.User;
 import es.fdi.reservas.reserva.web.ReservaDTO;

 import es.fdi.reservas.reserva.web.*;

 @Service
 public class ReservaService {

     private ReservaRepository reserva_repository;
     private FacultadService facultad_service;
     private EdificioService edificio_service;
     private EspacioService espacio_service;
     private GrupoReservaService grupo_service;
     private UserService user_service;

     private AttachmentRepository attachment_repository;

     @Autowired
     public ReservaService(ReservaRepository rr, FacultadService fs, EdificioService es, EspacioService ess,
             GrupoReservaService grs, UserService us, AttachmentRepository ar) {

         reserva_repository = rr;
         facultad_service = fs;
         edificio_service = es;
         espacio_service = ess;
         grupo_service = grs;
         user_service = us;
         attachment_repository = ar;
     }

     public List<Reserva> getAllReservasConflictivas(Long idEspacio, DateTime start, DateTime end) {
         List<Reserva> resRecurrentes = new ArrayList<Reserva>();
         List<Reserva> resConflictivas = new ArrayList<Reserva>();
         List<Reserva> resAux = new ArrayList<Reserva>();

         resConflictivas = reserva_repository.reservasConflictivas(idEspacio, start, end);

         resRecurrentes = reserva_repository.reservasRecurrentes(idEspacio, start, end);

         for (Reserva r : resRecurrentes) {
             resAux.addAll(r.getInstanciasEvento());
         }
         resConflictivas.addAll(resAux);

         return resConflictivas;
     }

     public List<Reserva> getReservasUsuario(Long idUsuario) {
         return reserva_repository.findByUserId(idUsuario);
     }

     public Reserva compruebaAutorizacion(Reserva reserva) {
         Espacio esp = espacio_service.getEspacio(reserva.getEspacio().getId());

         if (esp.getTipoAutorizacion().toString() == "Necesaria")
             //Autorizacion Obligatoria
             reserva.setEstadoReserva(EstadoReserva.PENDIENTE);
         else if ((esp.getTipoAutorizacion().toString() == "Por horas")
                 && (reserva.getComienzo().plusHours(esp.getHorasAutorizacion()).isBefore(reserva.getFin())))
             //horaComienzo + horasAutorizacion > horaFin
             reserva.setEstadoReserva(EstadoReserva.PENDIENTE);
         else
             reserva.setEstadoReserva(EstadoReserva.CONFIRMADA);
         return reserva;
     }

     public Reserva agregarReserva(Reserva reserva) {
         List<Reserva> reservas = new ArrayList<Reserva>();
         Long idEspacio = reserva.getEspacio().getId();
         DateTime start, end;
         // si la reserva es recurrente
         if (!reserva.getReglasRecurrencia().isEmpty()) {
             //calcula el startRecurrencia y el endRecurrencia
             reserva.rangoRecurrencias();
             start = reserva.getStartRecurrencia();
             end = reserva.getEndRecurrencia();
         }
         // si la reserva es simple
         else {
             start = reserva.getComienzo();
             end = reserva.getFin();
         }

         reservas = getAllReservasConflictivas(idEspacio, start, end);

         for (Reserva r : reservas) {
             if (r.solapa(reserva)) {
                 throw new ReservaSolapadaException(
                         String.format("La reserva que ests intentando realizar solapa con la reserva del %s",
                                 r.getComienzo().toString("dd/MM/yyyy") + " de " + r.getComienzo().toString("HH:mm")
                                         + " a " + r.getFin().toString("HH:mm")));
             }
         }

         Reserva nuevaReserva = new Reserva(reserva.getAsunto(), reserva.getComienzo(), reserva.getFin(),
                 reserva.getUser(), reserva.getEspacio(), reserva.getGrupoReserva(), reserva.getStartRecurrencia(),
                 reserva.getEndRecurrencia(), reserva.getReservaColor(), reserva.getRecurrenteId());

         nuevaReserva = compruebaAutorizacion(nuevaReserva);

         nuevaReserva.setReglasRecurrencia(reserva.getReglasRecurrencia());
         nuevaReserva = reserva_repository.save(nuevaReserva);

         return nuevaReserva;
     }

     public List<Reserva> getReservas() {
         return reserva_repository.findAll();
     }

     public List<Reserva> getReservasFacultad(Long idFacultad) {
         return reserva_repository.findByFacultadId(idFacultad);
     }

     public Page<Reserva> getReservasFacultad(Long id, Pageable pageable) {
         return reserva_repository.findByFacultadId(id, pageable);
     }

     public Iterable<Edificio> getEdificios() {
         return edificio_service.getEdificios();
     }

     // todas las reservas de un espacio
     public List<Reserva> getReservasEspacio(long idEspacio) {
         return reserva_repository.reservasEspacio(idEspacio);
     }
     // todos los espacios de un edificio 

     public List<Espacio> getEspaciosEdificio(long idEdificio) {
         return espacio_service.getEspaciosEdificio(idEdificio);
     }

     public Espacio getEspacio(long idEspacio) {
         return espacio_service.getEspacio(idEspacio);
     }

     public List<Espacio> getTiposEspacio(long idEdificio, TipoEspacio idTipoEspacio) {
         return espacio_service.getTiposEspacio(idEdificio, idTipoEspacio);
     }

     public Reserva getReserva(long idReserva) {
         return reserva_repository.findOne(idReserva);
     }

     public Iterable<Facultad> getFacultades() {
         return facultad_service.getFacultades();
     }

     public Iterable<Espacio> getEspacios() {
         return espacio_service.getEspacios();
     }

     public List<Edificio> getEdificiosFacultad(long idFacultad) {
         return edificio_service.getEdificiosFacultad(idFacultad);
     }

     public Reserva editarReservaSimple(ReservaDTO reservaActualizada) {
         Reserva reserva = new Reserva();
         reserva.setComienzo(reservaActualizada.getStart());
         reserva.setFin(reservaActualizada.getEnd());
         reserva.setReglasRecurrencia(reservaActualizada.getReglasRecurrencia());

         String recurrenteID = reservaActualizada.getRecurrenteId();
         if (recurrenteID != null) {
             String[] w = recurrenteID.split("_");
             Long idR = Long.valueOf(w[0]);
             reservaActualizada.setId(idR);
         }

         Long idEspacio = reservaActualizada.getIdEspacio();
         DateTime start = reservaActualizada.getStart();
         DateTime end = reservaActualizada.getEnd();

         List<Reserva> reservas = getAllReservasConflictivas(idEspacio, start, end);
         for (Reserva r : reservas) {
             if (r.solapa(reserva) && !reservaActualizada.getId().equals(r.getId())) {
                 throw new ReservaSolapadaException(
                         String.format("La reserva que ests intentando realizar solapa con la reserva %s",
                                 r.getComienzo().toString("dd/MM/yyyy HH:mm") + "-" + r.getFin().toString("HH:mm")));
             }
         }

         Reserva r = reserva_repository.findOne(reservaActualizada.getId());
         r.setComienzo(reservaActualizada.getStart());
         r.setFin(reservaActualizada.getEnd());
         r.setAsunto(reservaActualizada.getTitle());
         r.setEspacio(getEspacio(reservaActualizada.getIdEspacio()));
         r.setReservaColor(reservaActualizada.getColor());
         r.setGrupoReserva(grupo_service.getGrupoReserva(reservaActualizada.getIdGrupo()));
         if (reservaActualizada.getEstado() != null) {
             r.setEstadoReserva(EstadoReserva.fromEstadoReserva(reservaActualizada.getEstado()));
         }
         if (reservaActualizada.getIdUsuario() != null) {
             r.setUser(user_service.getUser(reservaActualizada.getIdUsuario()));
         }

         return reserva_repository.save(r);
     }

     public void eliminarReserva(long idReserva) {
         reserva_repository.delete(idReserva);
     }

     public Page<Reserva> getReservasUsuario(Long idUsuario, Pageable pageRequest) {
         return reserva_repository.findByUserId(idUsuario, pageRequest);
     }

     public Page<Reserva> getReservasEspacio(Long espacio, Pageable pageRequest) {
         return reserva_repository.findByEspacioId(espacio, pageRequest);
     }

     public void desactivarEdificio(long idEdificio) {
         edificio_service.desactivarEdificio(idEdificio);
     }

     public Edificio editarEdificioDeleted(Long idEdificio) {
         Edificio e = getEdificio(idEdificio);
         e.setDeleted(true);

         return edificio_service.save(e);
     }

     public Page<Edificio> getEdificiosPaginados(PageRequest pageRequest) {
         return edificio_service.getEdificiosPaginados(pageRequest);
     }

     public Page<Reserva> getReservasUsuarioFacultad(String idUsuario, Long idFacultad, Pageable pageRequest) {
         return reserva_repository.findByUserIdAndFacultadId(idUsuario, idFacultad, pageRequest);
     }

     public Page<Reserva> getReservasEspacioFacultad(String espacio, Long idFacultad, Pageable pageRequest) {
         return reserva_repository.findByEspacioIdAndFacultadId(espacio, idFacultad, pageRequest);
     }

     public Edificio editarEdificio(EdificioDTO edificio) {
         Edificio e = getEdificio(edificio.getId());
         e.setNombreEdificio(edificio.getNombreEdificio());
         e.setDireccion(edificio.getDireccion());

         return edificio_service.save(e);
     }

     public void eliminarFacultad(Long idFacultad) {
         facultad_service.eliminarFacultad(idFacultad);
     }

     public Facultad getFacultad(long idFacultad) {
         return facultad_service.getFacultad(idFacultad);
     }

     public Page<Facultad> getFacultadesPaginadas(PageRequest pageRequest) {
         return facultad_service.getFacultadesPaginadas(pageRequest);
     }

     public Page<Reserva> getTodasReservasPaginadas(PageRequest pageRequest) {
         return reserva_repository.findAll(pageRequest);
     }

     public Facultad eliminarFacultad(FacultadDTO facultad) {
         Facultad f = getFacultad(facultad.getId());
         f.setDeleted(true);

         return facultad_service.save(f);
     }

     public Page<Reserva> getReservasPaginadasUser(PageRequest pageRequest, Long idUsuario) {
         List<Reserva> lista = reserva_repository.findByUserId(idUsuario);
         Page<Reserva> pagina = new PageImpl<Reserva>(lista, pageRequest, 5);
         return pagina;
     }

     public Page<Reserva> getReservasPaginadas(PageRequest pageRequest, Long sala) {
         List<Reserva> lista = reserva_repository.findByEspacioId(sala);
         Page<Reserva> pagina = new PageImpl<Reserva>(lista, pageRequest, 5);
         return pagina;
     }

     public Facultad editarFacultad(FacultadDTO facultad) {
         Facultad f = getFacultad(facultad.getId());
         f.setNombreFacultad(facultad.getNombreFacultad());
         f.setWebFacultad(facultad.getWebFacultad());

         return facultad_service.save(f);
     }

     public Facultad editarFacultadDeleted(Long idFacultad) {
         Facultad f = getFacultad(idFacultad);
         f.setDeleted(true);
         return facultad_service.save(f);
     }

     public List<Espacio> getEspaciosPorTagName(String tag) {
         return espacio_service.getEspaciosPorTagName(tag);
     }

     public void eliminarEspacio(long idEspacio) {
         espacio_service.eliminarEspacio(idEspacio);
     }

     public Edificio editarEdificio(Edificio edificio) {
         Edificio e = edificio_service.findEdificio(edificio.getId());
         e.setNombreEdificio(edificio.getNombreEdificio());
         e.setFacultad(edificio.getFacultad());
         return edificio_service.save(e);
     }

     public void eliminarFacultad(long idFacultad) {
         facultad_service.eliminarFacultad(idFacultad);

     }

     public Page<Espacio> getEspaciosPaginados(PageRequest pageRequest) {
         return espacio_service.getEspaciosPaginados(pageRequest);
     }

     public Espacio editarEspacioDeleted(Long idEspacio) {
         Espacio e = getEspacio(idEspacio);
         e.setDeleted(true);
         return espacio_service.save(e);
     }

     public Facultad editarFacultad(Facultad facultad) {
         Facultad f = facultad_service.getFacultadPorId(facultad.getId());
         f.setNombreFacultad(facultad.getNombreFacultad());
         return facultad_service.save(f);
     }

     public Espacio editarEspacio(EspacioDTO espacio) {
         Espacio e = getEspacio(espacio.getId());
         e.setNombreEspacio(espacio.getNombreEspacio());
         //      e.setCapacidad(espacio.getCapacidad());
         //      e.setMicrofono(espacio.isMicrofono());
         //      e.setProyector(espacio.isProyector());
         //      e.setTipoEspacio(TipoEspacio.fromTipoEspacio(espacio.getTipoEspacio()));

         return espacio_service.save(e);
     }

     public List<Facultad> getFacultadesPorTagName(String tagName) {
         return facultad_service.getFacultadesPorTagName(tagName);
     }

     public Facultad addNewFacultad(Facultad facultad) {
         Facultad newFacultad = new Facultad(facultad.getNombreFacultad(), facultad.getWebFacultad());
         newFacultad = facultad_service.save(newFacultad);

         if (newFacultad != null) {
             System.out.println("Facultad aadida correctamente");

         }

         return newFacultad;
     }

     public Espacio addNewEspacio(Espacio espacio) {
         //      Espacio newEspacio = new Espacio(espacio.getNombreEspacio(),espacio.getEdificio(),
         //                                     true, true,espacio.getTipoEspacio(), 
         //      TipoEspacio.fromTipoEspacio(espacio.getTipoEspacio()), edificio_repository.findOne(espacio.getIdEdificio()));
         //      newEspacio = espacio_repository.save(newEspacio);

         return null;
     }

     public List<TipoEspacio> tiposDeEspacios(long idEdificio) {
         return espacio_service.tiposDeEspacios(idEdificio);
     }

     public Edificio addNewEdificio(EdificioDTO edificio) {

         //      Edificio newEdificio = new Edificio(edificio.getNombre_edificio(), facultad_repository.findOne(edificio.getIdFacultad()));
         //      newEdificio = edificio_repository.save(newEdificio);
         //      
         return null;

     }

     public List<Edificio> getEdificiosEliminados() {
         return edificio_service.getEdificiosEliminados();
     }

     public List<Facultad> getFacultadesEliminadas() {
         return facultad_service.getFacultadesEliminadas();
     }

     public List<Espacio> getEspaciosEliminados() {
         return espacio_service.getEspaciosEliminados();
     }

     public Edificio restaurarEdificio(Long idEdificio) {
         Edificio e = getEdificio(idEdificio);
         e.setDeleted(false);

         return edificio_service.save(e);
     }

     public Facultad restaurarFacultad(Long idFacultad) {
         Facultad e = getFacultad(idFacultad);
         e.setDeleted(false);

         return facultad_service.save(e);
     }

     public Espacio restaurarEspacio(Long idEspacio) {
         Espacio e = getEspacio(idEspacio);
         e.setDeleted(false);

         return espacio_service.save(e);
     }

     public Edificio getEdificio(long idEdificio) {
         return edificio_service.getEdificio(idEdificio);
     }

public List<Reserva> getReservasEspacioDeMaana(long idEspacio) {
   return reserva_repository.reservasEspacioDeMaana(idEspacio);
}

     public List<Reserva> getReservasEspacioDeTarde(long idEspacio) {
         return reserva_repository.reservasEspacioDeTarde(idEspacio);
     }

     public void editarReglasRecurrencia(ReservaDTO rf) {
         Reserva r = reserva_repository.findOne(rf.getId());
         List<String> s = rf.getReglasRecurrencia();
         int i = 0;
         while (i < s.size()) {
             String[] w = s.get(i).split(":");
             if (r.getRegla(w[0]) != -1) {
                 r.addValorRegla(w[0], w[1]);
             } else {
                 r.addReglaRecurrente(s.get(i));
             }

             i++;
         }
         if (r.rangoRecurrencias().size() > 1) {
             reserva_repository.save(r);
         } else {
             // si queda un solo evento lo transformo a un evento simple
             r.setReglasRecurrencia(new ArrayList<String>());
             r.setStartRecurrencia(null);
             r.setEndRecurrencia(null);
             reserva_repository.save(r);
         }
     }

     public List<Reserva> getReservasGrupo(long idGrupo, long idUsuario) {
         return reserva_repository.reservasGrupoUsuario(idGrupo, idUsuario);
     }

     //   public List<Espacio> getEspaciosPorFacultad(String nombreFacultad) {
     //      return espacio_repository.getEspacioPorFacultad(nombreFacultad);
     //      //return null;
     //   }

     public List<Reserva> reservasPendientesUsuario(Long idUsuario, EstadoReserva estado) {
         return reserva_repository.reservasPendientesUsuario(idUsuario, estado);
     }

     public void eliminarExdate(ReservaDTO rf) {
         Reserva r = reserva_repository.findOne(rf.getId());
         List<String> s = r.getReglasRecurrencia();
         String[] w = s.get(1).split(":");
         String[] st = w[1].split(";");
         List<String> aux = new ArrayList<>();
         int i = 0;
         if (st.length == 1) {
             s.remove(1);
         } else {// si tiene ms de un EXDATE
             while (i < st.length - 1) {
                 aux.add(st[i]);
                 i++;
             }
             String q = "EXDATE:" + String.join(";", aux);
             r.removeValorRegla(w[0], q);
         }

         reserva_repository.save(r);

     }

     public void addAttachment(Attachment attachment) {
         attachment_repository.save(attachment);

     }

     public List<Reserva> misReservasCalendario(Long idUsuario) {
         return reserva_repository.misReservasCalendario(idUsuario);
     }

     public List<GrupoReserva> getGruposUsuario(Long idUsuario) {
         return grupo_service.getGruposUsuario(idUsuario);
     }

     public User getCurrentUser() {
         return user_service.getCurrentUser();
     }

     ////////////////JAVIER////////////////////////////
     public Page<Reserva> findByFacultadId(long facultadid, Pageable pageable) {
         return reserva_repository.findByFacultadId(facultadid, pageable);
     }

     public Page<Reserva> findByUserIdAndFacultadId(String userid, long facultadid, Pageable pageable) {
         return reserva_repository.findByUserIdAndFacultadId(userid, facultadid, pageable);
     }

     public Page<Reserva> findByEspacioIdAndFacultadId(String espacioid, long facultadid, Pageable pageable) {
         return reserva_repository.findByEspacioIdAndFacultadId(espacioid, facultadid, pageable);
     }

     public Page<Reserva> findByEstadoReservaAndFacultadId(EstadoReserva estado, long facultadid,
             Pageable pageable) {
         return reserva_repository.findByEstadoReservaAndFacultadId(estado, facultadid, pageable);
     }
 }