b4f.servicios.ReservaService.java Source code

Java tutorial

Introduction

Here is the source code for b4f.servicios.ReservaService.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package b4f.servicios;

import b4f.modelos.Reserva;
import b4f.config.PersistenceManager;
import b4f.modelos.Bici;
import b4f.modelos.Calificacion;
import b4f.modelos.Multa;
import b4f.modelos.Punto;
import b4f.modelos.Rol;
import b4f.modelos.Usuario;
import b4f.seguridad.filtros.Requieres;

import com.google.gson.Gson;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.json.simple.JSONObject;

@Stateless
@Path("/reservas")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class ReservaService {

    @PersistenceContext
    private EntityManager entityManager;

    /**
     * Encargado de iniciar el entity manager despus de la creacin de una
     * nueva instancia
     */
    @PostConstruct
    public void init() {
        try {
            entityManager = PersistenceManager.getInstance().getEntityManagerFactory().createEntityManager();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @GET
    @Requieres(roles = { "ADMINISTRADOR" })
    public Response GET() throws Exception {

        Query q = entityManager.createQuery("select u from Reserva u");
        List<Reserva> rta = q.getResultList();

        return Response.status(200).entity(rta).build();
    }

    @GET
    @Path("{id}")
    @Requieres(roles = { "ADMINISTRADOR" })
    public Response getReserva(@PathParam("id") long id) {

        Reserva rta = entityManager.find(Reserva.class, id);
        JSONObject err = new JSONObject();
        err.put("error", "La reserva con id='" + id + "' no existe");

        return Response.status(rta != null ? 200 : 404).entity(rta != null ? rta : err).build();
    }

    @PUT
    @Path("{id}")
    @Requieres(roles = { "ADMINISTRADOR" })
    public Response PUT(@PathParam("id") long id, Reserva tipo) {

        try {
            entityManager.getTransaction().begin();
            Reserva rta = entityManager.find(Reserva.class, id);
            if (rta == null) {
                throw new Exception("La reserva con id='" + id + "' no existe");
            }
            rta.setAutorizado(tipo.getAutorizado());
            rta.setBici(tipo.getBici());

            rta.setFecha_reserva(tipo.getFecha_reserva());

            rta.setPuntoPrestamo(tipo.getPuntoPrestamo());
            rta.setPuntoRetorno(tipo.getPuntoRetorno());
            rta.setTiempo(tipo.getTiempo());
            rta.setUsuario(tipo.getUsuario());

            entityManager.getTransaction().commit();

            return Response.status(200).entity(rta).build();

        } catch (Exception | Error e) {
            JSONObject err = new JSONObject();
            err.put("error", e.getMessage());
            return Response.status(400).entity(err).build();
        } finally {
            entityManager.clear();
            entityManager.close();
        }
    }

    @DELETE
    @Path("{id}")
    @Requieres(roles = { "ADMINISTRADOR" })
    public Response deleteReserva(@PathParam("id") long id) {
        JSONObject err = null, rta = null;

        try {
            entityManager.getTransaction().begin();
            Reserva tipo = entityManager.find(Reserva.class, id);
            if (tipo == null) {
                throw new Exception("La reservacon id='" + id + "' no existe");
            }
            entityManager.remove(tipo);
            entityManager.getTransaction().commit();

            rta = new JSONObject();
            rta.put("mensaje", "La reserva con id " + tipo.getId() + " fue eliminada correctamente");
        } catch (Exception | Error e) {
            err = new JSONObject();
            err.put("error", e.getMessage());
        } finally {
            entityManager.clear();
            entityManager.close();
        }

        return Response.status(rta != null ? 200 : 400).entity(rta != null ? rta : err).build();
    }

    /**
     * data:
     *  - cedula
     *  - id_punto
     *  - id_tipo_bici (id)
     *  - fecha (milisegundos)
     * @param data
     * @return 
     */
    //    @POST
    //    public Response POST(JSONObject data) {
    //
    //        JSONObject rta = new JSONObject();
    //
    //        try {
    //            entityManager.getTransaction().begin();
    //            
    //            if(!data.containsKey("cedula") || !data.containsKey("id_punto") || !data.containsKey("id_tipo_bici") || !data.containsKey("fecha"))
    //                throw new Exception("Peticion invalida");
    //            
    //            String cedula = data.get("cedula").toString();
    //            long id_punto = Long.parseLong( data.get("id_punto").toString());
    //            long id_tipo_bici = Long.parseLong(data.get("id_tipo_bici").toString());
    //            long fecha = Long.parseLong(data.get("fecha").toString());
    //          
    //            
    //            Reserva reserva = Reserva.crearReserva(entityManager, cedula, id_punto, id_tipo_bici, fecha);
    //            
    //            entityManager.persist(reserva);
    //            entityManager.getTransaction().commit();
    //            entityManager.refresh(reserva);
    //            rta.put("reserva", reserva);
    //            
    //        }  catch (Exception | Error t) {
    //            System.err.println("[ERROR] " + t.getMessage());
    //            rta.put("error", t.getMessage());
    //            if (entityManager.getTransaction().isActive()) {
    //                entityManager.getTransaction().rollback();
    //            }
    //            return Response.status(400).entity(rta).build();
    //        } finally {
    //            entityManager.clear();
    //            entityManager.close();
    //        }
    //
    //        return Response.status(201).entity(rta).build();
    //    }

    // me mandan el id del punto de entrega y retorno y obengo el de usuario
    @POST
    @Path("{id}/calificaciones")
    public Response calificarReserva(@PathParam("id") long id, JSONObject data) {
        JSONObject rta = new JSONObject();

        try {
            entityManager.getTransaction().begin();

            Reserva r = entityManager.find(Reserva.class, id);

            final Subject subject = SecurityUtils.getSubject();
            Object principal = subject.getPrincipal();
            if (!(principal instanceof Usuario)) {
                throw new Exception("Usuario no autenticado");
            }
            Usuario user = (Usuario) principal;

            long id_punto = r.getPuntoPrestamo().getId();
            long id_punto_retorno = r.getPuntoRetorno().getId();
            Double calificacionEntrega = Double.parseDouble(data.get("calificacion_entega").toString());
            Double calificacionRetorno = Double.parseDouble(data.get("retorno").toString());

            Calificacion c = Calificacion.crearCalificacion(entityManager, user.getId(), id_punto, id_punto_retorno,
                    calificacionEntrega, calificacionRetorno);

            entityManager.persist(c);
            entityManager.getTransaction().commit();
            entityManager.refresh(c);
            rta.put("calificacion", c);

        } catch (Exception | Error t) {
            System.err.println("[ERROR] " + t.getMessage());
            rta.put("error", t.getMessage());
            if (entityManager.getTransaction().isActive()) {
                entityManager.getTransaction().rollback();
            }
            return Response.status(400).entity(rta).build();
        } finally {
            entityManager.clear();
            entityManager.close();
        }

        return Response.status(201).entity(rta).build();
    }

}