Java tutorial
/* * 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(); } }