package br.gov.mj.sislegis.app.rest; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; 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.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.ResponseBuilder; import javax.ws.rs.core.UriBuilder; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import br.gov.mj.sislegis.app.enumerated.ElaboracaoNormativaNorma; import br.gov.mj.sislegis.app.enumerated.ElaboracaoNormativaObjeto; import br.gov.mj.sislegis.app.enumerated.ElaboracaoNormativaSituacao; import br.gov.mj.sislegis.app.enumerated.ElaboracaoNormativaSubTipo; import br.gov.mj.sislegis.app.enumerated.ElaboracaoNormativaTipo; import br.gov.mj.sislegis.app.json.ComboJSON; import br.gov.mj.sislegis.app.model.ElaboracaoNormativa; import br.gov.mj.sislegis.app.service.ElaboracaoNormativaService; import br.gov.mj.sislegis.app.service.Service; /** * */ @Path("/elaboracaonormativa") public class ElaboracaoNormativaEndpoint { @Inject private Service<ElaboracaoNormativa> service; @Inject private ElaboracaoNormativaService elaboracaoNormativaService; @POST @Consumes(MediaType.APPLICATION_JSON) public Response create(ElaboracaoNormativa entity) { elaboracaoNormativaService.salvar(entity); return Response.created( UriBuilder.fromResource(ElaboracaoNormativaEndpoint.class) .path(String.valueOf(entity.getId())).build()).build(); } @DELETE @Path("/{id:[0-9][0-9]*}") public Response deleteById(@PathParam("id") Long id) { service.deleteById(id); return Response.noContent().build(); } @GET @Path("/{id:[0-9][0-9]*}") @Produces(MediaType.APPLICATION_JSON) public Response findById(@PathParam("id") Long id) { ElaboracaoNormativa elaboracaoNormativa = elaboracaoNormativaService.buscaElaboracaoNormativaPorId(id); return Response.ok(elaboracaoNormativa).build(); } @GET @Produces(MediaType.APPLICATION_JSON) public List<ElaboracaoNormativa> listAll( @QueryParam("start") Integer startPosition, @QueryParam("max") Integer maxResult) { return elaboracaoNormativaService.listarTodos(); } @GET @Path("/searchElaboracaoNormativa") @Produces(MediaType.APPLICATION_JSON) public List<ElaboracaoNormativa> searchElaboracaoNormativa( @QueryParam("numero") String numero, @QueryParam("ano") String ano, @QueryParam("listaOrigensSelecionadosDropdown") String listaOrigensSelecionadosDropdown, @QueryParam("listaCoAutoresSelecionadosDropdown") String listaCoAutoresSelecionadosDropdown, @QueryParam("listaTagsSelecionadosDropdown") String listaTagsSelecionadosDropdown, @QueryParam("ementa") String ementa, @QueryParam("statusSidof") Long statusSidof, @QueryParam("objeto") String objeto, @QueryParam("distribuicao") Long distribuicao, @QueryParam("parecerista") Long parecerista, @QueryParam("tipo") String tipo, @QueryParam("subTipo") String subTipo, @QueryParam("elaboracaoNormativaNorma") String elaboracaoNormativaNorma, @QueryParam("elaboracaoNormativaSituacao") String elaboracaoNormativaSituacao, @QueryParam("nup") String nup) { Map<String, Object> mapaCampos = populaMapaCampos(ano, numero, listaOrigensSelecionadosDropdown, listaCoAutoresSelecionadosDropdown, listaTagsSelecionadosDropdown, ementa, statusSidof, objeto, distribuicao, parecerista, tipo, subTipo, elaboracaoNormativaNorma, elaboracaoNormativaSituacao, nup); List<ElaboracaoNormativa> result = elaboracaoNormativaService.buscaPorParametros(mapaCampos); return result; } @GET @Path("/exportarDadosParaExcel/{ano}/{numero}/{listaOrigensSelecionadosDropdown}/{listaCoAutoresSelecionadosDropdown}" + "/{listaTagsSelecionadosDropdown}/{ementa}/{statusSidof}/{objeto}/{distribuicao}/{parecerista}/{tipo}" + "/{subTipo}/{elaboracaoNormativaNorma}/{elaboracaoNormativaSituacao}/{nup}") @Produces(MediaType.APPLICATION_JSON) public Response exportarDadosParaExcel(@PathParam("ano") String ano, @PathParam("numero") String numero, @PathParam("listaOrigensSelecionadosDropdown") String listaOrigensSelecionadosDropdown, @PathParam("listaCoAutoresSelecionadosDropdown") String listaCoAutoresSelecionadosDropdown, @PathParam("listaTagsSelecionadosDropdown") String listaTagsSelecionadosDropdown, @PathParam("ementa") String ementa, @PathParam("statusSidof") Long statusSidof, @PathParam("objeto") String objeto, @PathParam("distribuicao") Long distribuicao, @PathParam("parecerista") Long parecerista, @PathParam("tipo") String tipo, @PathParam("subTipo") String subTipo, @PathParam("elaboracaoNormativaNorma") String elaboracaoNormativaNorma, @PathParam("elaboracaoNormativaSituacao") String elaboracaoNormativaSituacao, @PathParam("nup") String nup){ Map<String, Object> mapaCampos = populaMapaCampos(checkStringNull(ano), checkStringNull(numero), checkStringNull(listaOrigensSelecionadosDropdown), checkStringNull(listaCoAutoresSelecionadosDropdown), checkStringNull(listaTagsSelecionadosDropdown), checkStringNull(ementa), statusSidof, checkStringNull(objeto), distribuicao, parecerista, checkStringNull(tipo), checkStringNull(subTipo), checkStringNull(elaboracaoNormativaNorma), checkStringNull(elaboracaoNormativaSituacao), checkStringNull(nup)); List<ElaboracaoNormativa> result = elaboracaoNormativaService.buscaPorParametros(mapaCampos); ResponseBuilder response =null; OutputStream fileOut = null; try { String filename = "elaboracaoNormativa.xls"; HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("ElaboracaoNormativa"); HSSFFont font = workbook.createFont(); font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); font.setFontName(HSSFFont.FONT_ARIAL); HSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); HSSFRow rowhead = sheet.createRow((short) 0); rowhead.createCell(0).setCellValue("Tipo"); rowhead.createCell(1).setCellValue("Ementa"); rowhead.createCell(2).setCellValue("Identificação"); rowhead.createCell(3).setCellValue("Origem"); rowhead.createCell(4).setCellValue("Situação"); rowhead.createCell(5).setCellValue("Tipo Norma"); rowhead.createCell(6).setCellValue("Status sidof"); rowhead.createCell(7).setCellValue("Data inclusão sidof"); rowhead.createCell(8).setCellValue("Data assinatura sidof"); rowhead.createCell(9).setCellValue("NUP"); rowhead.createCell(10).setCellValue("Equipe"); rowhead.createCell(11).setCellValue("Ano"); rowhead.createCell(12).setCellValue("Número"); rowhead.createCell(13).setCellValue("Situação"); rowhead.createCell(14).setCellValue("Ementa manifestação"); rowhead.createCell(15).setCellValue("Data nota SAL"); rowhead.createCell(16).setCellValue("Número norma"); rowhead.createCell(17).setCellValue("Ano norma"); rowhead.setRowStyle(style); int i=1; for(ElaboracaoNormativa elaboracaoNormativa:result){ HSSFRow row = sheet.createRow((short) i); row.createCell(0).setCellValue(elaboracaoNormativa.getValueTipoSubTipo()); row.createCell(1).setCellValue(elaboracaoNormativa.getEmenta()); row.createCell(2).setCellValue(elaboracaoNormativa.getValueIdentificacao()); row.createCell(3).setCellValue(elaboracaoNormativa.getOrigemDescricao()); row.createCell(4).setCellValue(elaboracaoNormativa.getSituacaoDescricao()); row.createCell(5).setCellValue(elaboracaoNormativa.getTipoNormaDescricao()); row.createCell(6).setCellValue(elaboracaoNormativa.getStatusSidofDescricao()); row.createCell(7).setCellValue(elaboracaoNormativa.getDataInclusaoSIDOFFormatada()); row.createCell(8).setCellValue(elaboracaoNormativa.getDataAssinaturaSIDOFFormatada()); row.createCell(9).setCellValue(elaboracaoNormativa.getNup()); row.createCell(10).setCellValue(elaboracaoNormativa.getEquipeDescricao()); row.createCell(11).setCellValue(elaboracaoNormativa.getAno()); row.createCell(12).setCellValue(elaboracaoNormativa.getNumero()); row.createCell(13).setCellValue(elaboracaoNormativa.getSituacaoDescricao()); row.createCell(14).setCellValue(elaboracaoNormativa.getEmentaManifestacao()); row.createCell(15).setCellValue(elaboracaoNormativa.getDataMinifestacaoFormatada()); row.createCell(16).setCellValue(elaboracaoNormativa.getNormaGeradaNumero()); row.createCell(17).setCellValue(checkObjectNull(elaboracaoNormativa.getNormaGeradaAno())); i++; } fileOut = new FileOutputStream(filename); workbook.write(fileOut); fileOut.close(); response = Response.ok((Object) new File(filename)); response.header("Content-Disposition", "attachment; filename="+filename); response.header("Content-Type","application/vnd.ms-excel"); } catch (Exception ex) { System.out.println(ex); } return response.build(); } private String checkStringNull(String var){ return var.equals("null")?"":var; } private String checkObjectNull(Object obj){ return Objects.isNull(obj)?"":obj.toString(); } private Map<String, Object> populaMapaCampos(String ano, String numero, String listaOrigensSelecionadosDropdown, String listaCoAutoresSelecionadosDropdown, String listaTagsSelecionadosDropdown, String ementa, Long statusSidof, String objeto, Long distribuicao, Long parecerista, String tipo, String subTipo, String elaboracaoNormativaNorma, String elaboracaoNormativaSituacao, String nup) { Map<String, Object> mapaCampos = new HashMap<String, Object>(); mapaCampos.put("numero", numero); mapaCampos.put("ano", ano); mapaCampos.put("listaOrigensSelecionadosDropdown", listaOrigensSelecionadosDropdown); mapaCampos.put("listaCoAutoresSelecionadosDropdown", listaCoAutoresSelecionadosDropdown); mapaCampos.put("listaTagsSelecionadosDropdown", listaTagsSelecionadosDropdown); mapaCampos.put("ementa", ementa); mapaCampos.put("statusSidof", statusSidof); mapaCampos.put("identificacao", objeto); mapaCampos.put("distribuicao", distribuicao); mapaCampos.put("parecerista", parecerista); mapaCampos.put("tipo", tipo); mapaCampos.put("subTipo", subTipo); mapaCampos.put("elaboracaoNormativaNorma", elaboracaoNormativaNorma); mapaCampos.put("elaboracaoNormativaSituacao", elaboracaoNormativaSituacao); mapaCampos.put("nup", nup); return mapaCampos; } @GET @Path("/tipos") @Produces(MediaType.APPLICATION_JSON) public List<ComboJSON<ElaboracaoNormativaTipo>> tipos() { List<ComboJSON<ElaboracaoNormativaTipo>> lista = new ArrayList<ComboJSON<ElaboracaoNormativaTipo>>(); for(ElaboracaoNormativaTipo elaboracaoNormativaTipo:ElaboracaoNormativaTipo.values()){ lista.add(new ComboJSON<ElaboracaoNormativaTipo>(elaboracaoNormativaTipo.name(), elaboracaoNormativaTipo.getValue())); } return lista; } @GET @Path("/subTipos") @Produces(MediaType.APPLICATION_JSON) public List<ComboJSON<ElaboracaoNormativaSubTipo>> subTipos() { List<ComboJSON<ElaboracaoNormativaSubTipo>> lista = new ArrayList<ComboJSON<ElaboracaoNormativaSubTipo>>(); for(ElaboracaoNormativaSubTipo elaboracaoNormativaSubTipo:ElaboracaoNormativaSubTipo.values()){ lista.add(new ComboJSON<ElaboracaoNormativaSubTipo>(elaboracaoNormativaSubTipo.name(), elaboracaoNormativaSubTipo.getValue())); } return lista; } @GET @Path("/identificacoes") @Produces(MediaType.APPLICATION_JSON) public List<ComboJSON<ElaboracaoNormativaObjeto>> identificacoes() { List<ComboJSON<ElaboracaoNormativaObjeto>> lista = new ArrayList<ComboJSON<ElaboracaoNormativaObjeto>>(); for(ElaboracaoNormativaObjeto elaboracaoNormativaIdentificacao:ElaboracaoNormativaObjeto.values()){ lista.add(new ComboJSON<ElaboracaoNormativaObjeto>(elaboracaoNormativaIdentificacao.name(), elaboracaoNormativaIdentificacao.getValue())); } return lista; } @GET @Path("/normas") @Produces(MediaType.APPLICATION_JSON) public List<ComboJSON<ElaboracaoNormativaNorma>> normas() { List<ComboJSON<ElaboracaoNormativaNorma>> lista = new ArrayList<ComboJSON<ElaboracaoNormativaNorma>>(); for(ElaboracaoNormativaNorma elaboracaoNormativaNorma:ElaboracaoNormativaNorma.values()){ lista.add(new ComboJSON<ElaboracaoNormativaNorma>(elaboracaoNormativaNorma.name(), elaboracaoNormativaNorma.getValue())); } return lista; } @GET @Path("/situacoes") @Produces(MediaType.APPLICATION_JSON) public List<ComboJSON<ElaboracaoNormativaSituacao>> situacoes() { List<ComboJSON<ElaboracaoNormativaSituacao>> lista = new ArrayList<ComboJSON<ElaboracaoNormativaSituacao>>(); for(ElaboracaoNormativaSituacao elaboracaoNormativaSituacao:ElaboracaoNormativaSituacao.values()){ lista.add(new ComboJSON<ElaboracaoNormativaSituacao>(elaboracaoNormativaSituacao.name(), elaboracaoNormativaSituacao.getValue())); } return lista; } @PUT @Path("/{id:[0-9][0-9]*}") @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response update(ElaboracaoNormativa entity) { try { elaboracaoNormativaService.salvar(entity); } catch (OptimisticLockException e) { return Response.status(Response.Status.CONFLICT) .entity(e.getEntity()).build(); } return Response.noContent().build(); } @GET @Path("/buscarPorSufixo") @Produces(MediaType.APPLICATION_JSON) public List<ElaboracaoNormativa> buscarPorSufixo(@QueryParam("sufixo")String sufixo) { return elaboracaoNormativaService.buscarPorSufixo(sufixo); } }