package br.gov.mj.sislegis.app.rest; import java.io.IOException; import java.util.List; import javax.inject.Inject; import javax.persistence.OptimisticLockException; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; 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.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; import org.jboss.resteasy.annotations.GZIP; import br.gov.mj.sislegis.app.model.Comentario; import br.gov.mj.sislegis.app.model.Usuario; import br.gov.mj.sislegis.app.rest.authentication.UsuarioAutenticadoBean; import br.gov.mj.sislegis.app.service.ComentarioService; @Path("/comentarios") @GZIP public class ComentarioEndpoint { @Inject private ComentarioService comentarioService; @Inject private UsuarioAutenticadoBean controleUsuarioAutenticado; public ComentarioEndpoint() { super(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response create(Comentario entity, @HeaderParam("Authorization") String authorization) { try { Usuario user = controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization); comentarioService.salvarComentario(entity, user); } catch (IllegalAccessException e) { e.printStackTrace(); return Response.status(Response.Status.FORBIDDEN).build(); } catch (IOException e) { e.printStackTrace(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response .created(UriBuilder.fromResource(ComentarioEndpoint.class).path(String.valueOf(entity.getId())).build()) .header("Access-Control-Expose-Headers", "Location").build(); } @DELETE @Path("/{id:[0-9][0-9]*}") public Response deleteById(@PathParam("id") Long id) { comentarioService.deleteById(id); return Response.noContent().build(); } @GET @Path("/{id:[0-9][0-9]*}") @Produces(MediaType.APPLICATION_JSON) public Response findById(@PathParam("id") Long id) { Comentario entity = comentarioService.findById(id); if (entity == null) { return Response.status(Status.NOT_FOUND).build(); } return Response.ok(entity).build(); } @GET @Path("/proposicao/{id:[0-9][0-9]*}") @Produces(MediaType.APPLICATION_JSON) public List<Comentario> findByProposicao(@PathParam("id") Long id) { final List<Comentario> results = comentarioService.findByProposicaoId(id); return results; } @GET @Produces(MediaType.APPLICATION_JSON) public List<Comentario> listAll(@QueryParam("start") Integer startPosition, @QueryParam("max") Integer maxResult) { final List<Comentario> results = comentarioService.listAll(); return results; } @PUT @Path("/{id:[0-9][0-9]*}") @Consumes(MediaType.APPLICATION_JSON) public Response update(Comentario entity, @HeaderParam("Authorization") String authorization) { try { comentarioService.salvarComentario(entity, controleUsuarioAutenticado.carregaUsuarioAutenticado(authorization)); } catch (OptimisticLockException e) { return Response.status(Response.Status.CONFLICT).entity(e.getEntity()).build(); } catch (IllegalAccessException e) { e.printStackTrace(); return Response.status(Response.Status.FORBIDDEN).build(); } catch (IOException e) { e.printStackTrace(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response.noContent().build(); } @GET @Path("/ocultar/{id:[0-9][0-9]*}") public Response ocultar(@PathParam("id") Long id) { try { comentarioService.ocultar(id); } catch (Exception e) { e.printStackTrace(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); } return Response.ok().build(); } }