Commit dc14e6943d0d1034fd177ea0e08ba1e5e1ebf97b

Authored by andre guimaraes
1 parent 3597c7de

Melhorias no tratamento de exceção, novo resource com serviços relacionados ao S…

…IPAR, algumas melhorias em serviços existentes e documentação.
Showing 26 changed files with 781 additions and 222 deletions   Show diff stats
.settings/org.eclipse.wst.common.component
1 <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> 1 <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
2 - <wb-module deploy-name="sei-broker-2.3"> 2 + <wb-module deploy-name="sei-broker-2.2">
3 <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> 3 <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
4 <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> 4 <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
5 <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> 5 <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
src/main/java/br/gov/ans/dao/DAO.java
@@ -53,6 +53,10 @@ public class DAO&lt;T&gt; implements Serializable{ @@ -53,6 +53,10 @@ public class DAO&lt;T&gt; implements Serializable{
53 em.remove(em.merge(t)); 53 em.remove(em.merge(t));
54 } 54 }
55 55
  56 + public T findById(Serializable id){
  57 + return (T)em.find(classe, id);
  58 + }
  59 +
56 @Transactional 60 @Transactional
57 @SuppressWarnings({ "unchecked", "rawtypes" }) 61 @SuppressWarnings({ "unchecked", "rawtypes" })
58 public Long count() { 62 public Long count() {
src/main/java/br/gov/ans/exceptions/ResourceConflictException.java 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +package br.gov.ans.exceptions;
  2 +
  3 +import javax.ejb.ApplicationException;
  4 +
  5 +@ApplicationException
  6 +public class ResourceConflictException extends Exception{
  7 +
  8 + private static final long serialVersionUID = 1L;
  9 +
  10 + private String message;
  11 +
  12 + public ResourceConflictException(String message) {
  13 + this.message = message;
  14 + }
  15 +
  16 + public String getMessage() {
  17 + return message;
  18 + }
  19 +
  20 + public void setMessage(String message) {
  21 + this.message = message;
  22 + }
  23 +}
src/main/java/br/gov/ans/exceptions/handlers/EJBExceptionHandler.java 0 → 100644
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
  1 +package br.gov.ans.exceptions.handlers;
  2 +
  3 +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType;
  4 +
  5 +import javax.ejb.EJBException;
  6 +import javax.inject.Inject;
  7 +import javax.ws.rs.core.Context;
  8 +import javax.ws.rs.core.HttpHeaders;
  9 +import javax.ws.rs.core.Response;
  10 +import javax.ws.rs.core.Response.Status;
  11 +import javax.ws.rs.ext.ExceptionMapper;
  12 +import javax.ws.rs.ext.Provider;
  13 +
  14 +import org.jboss.logging.Logger;
  15 +
  16 +import br.gov.ans.exceptions.ErrorMessage;
  17 +import br.gov.ans.utils.MessageUtils;
  18 +
  19 +@Provider
  20 +public class EJBExceptionHandler implements ExceptionMapper<EJBException>{
  21 +
  22 + @Inject
  23 + private Logger logger;
  24 +
  25 + @Context
  26 + private HttpHeaders headers;
  27 +
  28 + @Inject
  29 + private MessageUtils messages;
  30 +
  31 + public Response toResponse(EJBException ex) {
  32 + logger.error(ex, ex);
  33 +
  34 + return Response.status(Status.INTERNAL_SERVER_ERROR)
  35 + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode())))
  36 + .type(getAcceptType(headers))
  37 + .build();
  38 + }
  39 +
  40 +}
src/main/java/br/gov/ans/exceptions/handlers/PersistenceExceptionHandler.java 0 → 100644
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
  1 +package br.gov.ans.exceptions.handlers;
  2 +
  3 +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType;
  4 +
  5 +import javax.inject.Inject;
  6 +import javax.persistence.PersistenceException;
  7 +import javax.ws.rs.core.Context;
  8 +import javax.ws.rs.core.HttpHeaders;
  9 +import javax.ws.rs.core.Response;
  10 +import javax.ws.rs.core.Response.Status;
  11 +import javax.ws.rs.ext.ExceptionMapper;
  12 +import javax.ws.rs.ext.Provider;
  13 +
  14 +import org.jboss.logging.Logger;
  15 +
  16 +import br.gov.ans.exceptions.ErrorMessage;
  17 +import br.gov.ans.utils.MessageUtils;
  18 +
  19 +@Provider
  20 +public class PersistenceExceptionHandler implements ExceptionMapper<PersistenceException>{
  21 +
  22 + @Inject
  23 + private Logger logger;
  24 +
  25 + @Context
  26 + private HttpHeaders headers;
  27 +
  28 + @Inject
  29 + private MessageUtils messages;
  30 +
  31 + public Response toResponse(PersistenceException ex) {
  32 + logger.error(ex, ex);
  33 +
  34 + return Response.status(Status.INTERNAL_SERVER_ERROR)
  35 + .entity(new ErrorMessage(messages.getMessage("erro.inesperado"),String.valueOf(Status.INTERNAL_SERVER_ERROR.getStatusCode())))
  36 + .type(getAcceptType(headers))
  37 + .build();
  38 + }
  39 +
  40 +}
src/main/java/br/gov/ans/exceptions/handlers/ResourceConflictExceptionHandler.java 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +package br.gov.ans.exceptions.handlers;
  2 +
  3 +import static br.gov.ans.utils.HttpHeadersUtil.getAcceptType;
  4 +
  5 +import javax.inject.Inject;
  6 +import javax.ws.rs.core.Context;
  7 +import javax.ws.rs.core.HttpHeaders;
  8 +import javax.ws.rs.core.Response;
  9 +import javax.ws.rs.core.Response.Status;
  10 +import javax.ws.rs.ext.ExceptionMapper;
  11 +import javax.ws.rs.ext.Provider;
  12 +
  13 +import org.jboss.logging.Logger;
  14 +
  15 +import br.gov.ans.exceptions.ErrorMessage;
  16 +import br.gov.ans.exceptions.ResourceConflictException;
  17 +
  18 +@Provider
  19 +public class ResourceConflictExceptionHandler implements ExceptionMapper<ResourceConflictException>{
  20 +
  21 + @Inject
  22 + private Logger logger;
  23 +
  24 + @Context
  25 + private HttpHeaders headers;
  26 +
  27 + public Response toResponse(ResourceConflictException ex) {
  28 + logger.error(ex, ex);
  29 +
  30 + return Response.status(Status.CONFLICT)
  31 + .entity(new ErrorMessage(ex.getMessage(),String.valueOf(Status.CONFLICT.getStatusCode())))
  32 + .type(getAcceptType(headers))
  33 + .build();
  34 + }
  35 +}
src/main/java/br/gov/ans/integracao/sei/client/SeiPortTypeProxy.java
@@ -336,25 +336,17 @@ public class SeiPortTypeProxy implements br.gov.ans.integracao.sei.client.SeiPor @@ -336,25 +336,17 @@ public class SeiPortTypeProxy implements br.gov.ans.integracao.sei.client.SeiPor
336 identificacaoServico, idUnidade, idArquivoExtensao); 336 identificacaoServico, idUnidade, idArquivoExtensao);
337 } 337 }
338 338
339 - public java.lang.String enviarProcesso(java.lang.String siglaSistema,  
340 - java.lang.String identificacaoServico, java.lang.String idUnidade,  
341 - java.lang.String protocoloProcedimento,  
342 - java.lang.String[] unidadesDestino,  
343 - java.lang.String sinManterAbertoUnidade,  
344 - java.lang.String sinRemoverAnotacao,  
345 - java.lang.String sinEnviarEmailNotificacao,  
346 - java.lang.String dataRetornoProgramado,  
347 - java.lang.String diasRetornoProgramado,  
348 - java.lang.String sinDiasUteisRetornoProgramado, 339 + public java.lang.String enviarProcesso(java.lang.String siglaSistema, java.lang.String identificacaoServico,
  340 + java.lang.String idUnidade, java.lang.String protocoloProcedimento, java.lang.String[] unidadesDestino,
  341 + java.lang.String sinManterAbertoUnidade, java.lang.String sinRemoverAnotacao,
  342 + java.lang.String sinEnviarEmailNotificacao, java.lang.String dataRetornoProgramado,
  343 + java.lang.String diasRetornoProgramado, java.lang.String sinDiasUteisRetornoProgramado,
349 java.lang.String sinReabrir) throws java.rmi.RemoteException { 344 java.lang.String sinReabrir) throws java.rmi.RemoteException {
350 if (seiPortType == null) 345 if (seiPortType == null)
351 _initSeiPortTypeProxy(); 346 _initSeiPortTypeProxy();
352 - return seiPortType.enviarProcesso(siglaSistema, identificacaoServico,  
353 - idUnidade, protocoloProcedimento, unidadesDestino,  
354 - sinManterAbertoUnidade, sinRemoverAnotacao,  
355 - sinEnviarEmailNotificacao, dataRetornoProgramado,  
356 - diasRetornoProgramado, sinDiasUteisRetornoProgramado,  
357 - sinReabrir); 347 + return seiPortType.enviarProcesso(siglaSistema, identificacaoServico, idUnidade, protocoloProcedimento,
  348 + unidadesDestino, sinManterAbertoUnidade, sinRemoverAnotacao, sinEnviarEmailNotificacao,
  349 + dataRetornoProgramado, diasRetornoProgramado, sinDiasUteisRetornoProgramado, sinReabrir);
358 } 350 }
359 351
360 public br.gov.ans.integracao.sei.client.Usuario[] listarUsuarios( 352 public br.gov.ans.integracao.sei.client.Usuario[] listarUsuarios(
src/main/java/br/gov/ans/integracao/sei/dao/DocumentoSiparDAO.java
@@ -1,33 +0,0 @@ @@ -1,33 +0,0 @@
1 -package br.gov.ans.integracao.sei.dao;  
2 -  
3 -import java.util.HashMap;  
4 -import java.util.List;  
5 -import java.util.Map;  
6 -  
7 -import javax.inject.Inject;  
8 -  
9 -import br.gov.ans.dao.DAO;  
10 -import br.gov.ans.integracao.sei.modelo.DocumentoSipar;  
11 -  
12 -public class DocumentoSiparDAO {  
13 -  
14 - @SuppressWarnings("cdi-ambiguous-dependency")  
15 - @Inject  
16 - private DAO<DocumentoSipar> dao;  
17 -  
18 - public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){  
19 -  
20 - Map<String, Object> params = new HashMap<String, Object>();  
21 - params.put("numeroDocumento", numeroDocumento);  
22 - params.put("anoDocumento", anoDocumento);  
23 - params.put("digitoDocumento", digitoDocumento);  
24 -  
25 - List<DocumentoSipar> resultado = dao.executeNamedQuery("documentoPorNumeroAnoDigito", params);  
26 -  
27 - if(resultado.isEmpty()){  
28 - return null;  
29 - }  
30 -  
31 - return resultado.get(0);  
32 - }  
33 -}  
src/main/java/br/gov/ans/integracao/sei/dao/SiparDAO.java 0 → 100644
@@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
  1 +package br.gov.ans.integracao.sei.dao;
  2 +
  3 +import java.util.HashMap;
  4 +import java.util.List;
  5 +import java.util.Map;
  6 +
  7 +import javax.ejb.Stateless;
  8 +import javax.inject.Inject;
  9 +
  10 +import br.gov.ans.dao.DAO;
  11 +import br.gov.ans.integracao.sipar.dao.ControleMigracao;
  12 +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId;
  13 +import br.gov.ans.integracao.sipar.dao.DocumentoSipar;
  14 +
  15 +@Stateless
  16 +public class SiparDAO {
  17 +
  18 + @SuppressWarnings("cdi-ambiguous-dependency")
  19 + @Inject
  20 + private DAO<DocumentoSipar> daoDocumento;
  21 +
  22 + @Inject
  23 + private DAO<ControleMigracao> daoMigracao;
  24 +
  25 + public DocumentoSipar getDocumento(String numeroDocumento, String anoDocumento, String digitoDocumento){
  26 +
  27 + Map<String, Object> params = new HashMap<String, Object>();
  28 + params.put("numeroDocumento", numeroDocumento);
  29 + params.put("anoDocumento", anoDocumento);
  30 + params.put("digitoDocumento", digitoDocumento);
  31 +
  32 + List<DocumentoSipar> resultado = daoDocumento.executeNamedQuery("documentoPorNumeroAnoDigito", params);
  33 +
  34 + if(resultado.isEmpty()){
  35 + return null;
  36 + }
  37 +
  38 + return resultado.get(0);
  39 + }
  40 +
  41 + public ControleMigracao buscaProcessoImportado(ControleMigracaoId id){
  42 + return daoMigracao.findById(id);
  43 + }
  44 +
  45 + public void merge(ControleMigracao controleMigracao){
  46 + daoMigracao.merge(controleMigracao);
  47 + }
  48 +
  49 +}
src/main/java/br/gov/ans/integracao/sei/modelo/DocumentoSipar.java
@@ -1,130 +0,0 @@ @@ -1,130 +0,0 @@
1 -package br.gov.ans.integracao.sei.modelo;  
2 -  
3 -import java.util.Date;  
4 -  
5 -import javax.persistence.Entity;  
6 -import javax.persistence.EntityResult;  
7 -import javax.persistence.FieldResult;  
8 -import javax.persistence.Id;  
9 -import javax.persistence.NamedNativeQuery;  
10 -import javax.persistence.SqlResultSetMapping;  
11 -  
12 -@Entity  
13 -@SqlResultSetMapping(name="DocumentoSiparMapping", entities={  
14 - @EntityResult(entityClass = DocumentoSipar.class,  
15 - fields = {  
16 - @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"),  
17 - @FieldResult(name = "operadora", column = "CO_OPERADORA"),  
18 - @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"),  
19 - @FieldResult(name = "registro", column = "DT_REGISTRO"),  
20 - @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"),  
21 - @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"),  
22 - @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"),  
23 - @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"),  
24 - @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"),  
25 - @FieldResult(name = "assunto", column = "CO_ASSUNTO")  
26 - })  
27 -})  
28 -@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping",  
29 -query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, "  
30 - + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO "  
31 - + "FROM DBPSIPAR.TB_DOCUMENTO TB "  
32 - + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO "  
33 - + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO "  
34 - + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento "  
35 - + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento "  
36 - + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento")  
37 -public class DocumentoSipar {  
38 - @Id  
39 - private String digito;  
40 - private String operadora;  
41 - private Date emissao;  
42 - private Date registro;  
43 - private String tipo;  
44 - private String resumo;  
45 - private Long orgaoPosse;  
46 - private Long orgaoOrigem;  
47 - private Long orgaoRegistro;  
48 - private Long assunto;  
49 -  
50 - public String getDigito() {  
51 - return digito;  
52 - }  
53 -  
54 - public void setDigito(String digito) {  
55 - this.digito = digito;  
56 - }  
57 -  
58 - public Long getAssunto() {  
59 - return assunto;  
60 - }  
61 -  
62 - public void setAssunto(Long assunto) {  
63 - this.assunto = assunto;  
64 - }  
65 -  
66 - public String getOperadora() {  
67 - return operadora;  
68 - }  
69 -  
70 - public void setOperadora(String operadora) {  
71 - this.operadora = operadora;  
72 - }  
73 -  
74 - public Date getEmissao() {  
75 - return emissao;  
76 - }  
77 -  
78 - public void setEmissao(Date emissao) {  
79 - this.emissao = emissao;  
80 - }  
81 -  
82 - public String getTipo() {  
83 - return tipo;  
84 - }  
85 -  
86 - public void setTipo(String tipo) {  
87 - this.tipo = tipo;  
88 - }  
89 -  
90 - public String getResumo() {  
91 - return resumo;  
92 - }  
93 -  
94 - public void setResumo(String resumo) {  
95 - this.resumo = resumo;  
96 - }  
97 -  
98 - public Long getOrgaoPosse() {  
99 - return orgaoPosse;  
100 - }  
101 -  
102 - public void setOrgaoPosse(Long orgaoPosse) {  
103 - this.orgaoPosse = orgaoPosse;  
104 - }  
105 -  
106 - public Long getOrgaoOrigem() {  
107 - return orgaoOrigem;  
108 - }  
109 -  
110 - public void setOrgaoOrigem(Long orgaoOrigem) {  
111 - this.orgaoOrigem = orgaoOrigem;  
112 - }  
113 -  
114 - public Long getOrgaoRegistro() {  
115 - return orgaoRegistro;  
116 - }  
117 -  
118 - public void setOrgaoRegistro(Long orgaoRegistro) {  
119 - this.orgaoRegistro = orgaoRegistro;  
120 - }  
121 -  
122 - public Date getRegistro() {  
123 - return registro;  
124 - }  
125 -  
126 - public void setRegistro(Date registro) {  
127 - this.registro = registro;  
128 - }  
129 -  
130 -}  
src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaDocumento.java
@@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo;
3 import javax.xml.bind.annotation.XmlRootElement; 3 import javax.xml.bind.annotation.XmlRootElement;
4 4
5 import br.gov.ans.integracao.sei.client.RetornoConsultaDocumento; 5 import br.gov.ans.integracao.sei.client.RetornoConsultaDocumento;
  6 +import br.gov.ans.integracao.sipar.dao.DocumentoSipar;
6 7
7 @XmlRootElement 8 @XmlRootElement
8 public class ResultadoConsultaDocumento { 9 public class ResultadoConsultaDocumento {
src/main/java/br/gov/ans/integracao/sei/modelo/ResultadoConsultaProcesso.java
@@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo; @@ -3,6 +3,7 @@ package br.gov.ans.integracao.sei.modelo;
3 import javax.xml.bind.annotation.XmlRootElement; 3 import javax.xml.bind.annotation.XmlRootElement;
4 4
5 import br.gov.ans.integracao.sei.client.RetornoConsultaProcedimento; 5 import br.gov.ans.integracao.sei.client.RetornoConsultaProcedimento;
  6 +import br.gov.ans.integracao.sipar.dao.DocumentoSipar;
6 7
7 @XmlRootElement 8 @XmlRootElement
8 public class ResultadoConsultaProcesso { 9 public class ResultadoConsultaProcesso {
src/main/java/br/gov/ans/integracao/sei/modelo/Tipo.java
@@ -8,8 +8,8 @@ import javax.persistence.SqlResultSetMapping; @@ -8,8 +8,8 @@ import javax.persistence.SqlResultSetMapping;
8 import javax.xml.bind.annotation.XmlRootElement; 8 import javax.xml.bind.annotation.XmlRootElement;
9 9
10 @Entity 10 @Entity
11 -@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = {  
12 - @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) }) 11 +//@SqlResultSetMapping(name = "TipoMapping", entities = { @EntityResult(entityClass = Tipo.class, fields = {
  12 +// @FieldResult(name = "codigo", column = "tipoCodigo"), @FieldResult(name = "nome", column = "tipoNome") }) })
13 @XmlRootElement 13 @XmlRootElement
14 public class Tipo { 14 public class Tipo {
15 @Id 15 @Id
src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java
@@ -47,10 +47,9 @@ import br.gov.ans.integracao.sei.client.RetornoGeracaoProcedimento; @@ -47,10 +47,9 @@ import br.gov.ans.integracao.sei.client.RetornoGeracaoProcedimento;
47 import br.gov.ans.integracao.sei.client.SeiPortTypeProxy; 47 import br.gov.ans.integracao.sei.client.SeiPortTypeProxy;
48 import br.gov.ans.integracao.sei.client.TipoProcedimento; 48 import br.gov.ans.integracao.sei.client.TipoProcedimento;
49 import br.gov.ans.integracao.sei.dao.DocumentoDAO; 49 import br.gov.ans.integracao.sei.dao.DocumentoDAO;
50 -import br.gov.ans.integracao.sei.dao.DocumentoSiparDAO; 50 +import br.gov.ans.integracao.sei.dao.SiparDAO;
51 import br.gov.ans.integracao.sei.dao.ProcessoDAO; 51 import br.gov.ans.integracao.sei.dao.ProcessoDAO;
52 import br.gov.ans.integracao.sei.modelo.DocumentoResumido; 52 import br.gov.ans.integracao.sei.modelo.DocumentoResumido;
53 -import br.gov.ans.integracao.sei.modelo.DocumentoSipar;  
54 import br.gov.ans.integracao.sei.modelo.EnvioDeProcesso; 53 import br.gov.ans.integracao.sei.modelo.EnvioDeProcesso;
55 import br.gov.ans.integracao.sei.modelo.Motivo; 54 import br.gov.ans.integracao.sei.modelo.Motivo;
56 import br.gov.ans.integracao.sei.modelo.NovoAndamento; 55 import br.gov.ans.integracao.sei.modelo.NovoAndamento;
@@ -63,6 +62,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido; @@ -63,6 +62,7 @@ import br.gov.ans.integracao.sei.modelo.ProcessoResumido;
63 import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso; 62 import br.gov.ans.integracao.sei.modelo.ResultadoConsultaProcesso;
64 import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso; 63 import br.gov.ans.integracao.sei.modelo.SobrestamentoProcesso;
65 import br.gov.ans.integracao.sei.utils.Constantes; 64 import br.gov.ans.integracao.sei.utils.Constantes;
  65 +import br.gov.ans.integracao.sipar.dao.DocumentoSipar;
66 import br.gov.ans.utils.MessageUtils; 66 import br.gov.ans.utils.MessageUtils;
67 67
68 68
@@ -70,7 +70,7 @@ import br.gov.ans.utils.MessageUtils; @@ -70,7 +70,7 @@ import br.gov.ans.utils.MessageUtils;
70 public class ProcessoResource { 70 public class ProcessoResource {
71 71
72 @Inject 72 @Inject
73 - private DocumentoSiparDAO documentoSiparDAO; 73 + private SiparDAO documentoSiparDAO;
74 74
75 @Inject 75 @Inject
76 private ProcessoDAO processoDAO; 76 private ProcessoDAO processoDAO;
src/main/java/br/gov/ans/integracao/sei/rest/SiparResource.java 0 → 100644
@@ -0,0 +1,233 @@ @@ -0,0 +1,233 @@
  1 +package br.gov.ans.integracao.sei.rest;
  2 +
  3 +import java.net.URI;
  4 +import java.util.Date;
  5 +
  6 +import javax.inject.Inject;
  7 +import javax.ws.rs.Consumes;
  8 +import javax.ws.rs.DELETE;
  9 +import javax.ws.rs.POST;
  10 +import javax.ws.rs.Path;
  11 +import javax.ws.rs.PathParam;
  12 +import javax.ws.rs.core.Context;
  13 +import javax.ws.rs.core.MediaType;
  14 +import javax.ws.rs.core.Response;
  15 +import javax.ws.rs.core.Response.Status;
  16 +import javax.ws.rs.core.UriBuilder;
  17 +import javax.ws.rs.core.UriInfo;
  18 +
  19 +import org.jboss.logging.Logger;
  20 +
  21 +import br.gov.ans.exceptions.BusinessException;
  22 +import br.gov.ans.exceptions.ResourceConflictException;
  23 +import br.gov.ans.exceptions.ResourceNotFoundException;
  24 +import br.gov.ans.integracao.sei.dao.SiparDAO;
  25 +import br.gov.ans.integracao.sipar.dao.ControleMigracao;
  26 +import br.gov.ans.integracao.sipar.dao.ControleMigracaoId;
  27 +import br.gov.ans.utils.MessageUtils;
  28 +
  29 +@Path("/sipar")
  30 +public class SiparResource {
  31 +
  32 + @Inject
  33 + private SiparDAO dao;
  34 +
  35 + @Inject
  36 + private MessageUtils messages;
  37 +
  38 + @Inject
  39 + private Logger logger;
  40 +
  41 + @Context
  42 + private UriInfo uriInfo;
  43 +
  44 + private static int TRUE = 1;
  45 + private static int FALSE = 0;
  46 +
  47 + /**
  48 + * @api {put} /sipar/importados Importar Processo SIPAR
  49 + * @apiName importarProcesso
  50 + * @apiGroup SIPAR
  51 + * @apiVersion 2.0.0
  52 + *
  53 + * @apiDescription Marca um processo físico (SIPAR) como importado para um processo eletrônico (SEI).
  54 + *
  55 + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111
  56 + *
  57 + * @apiExample {curl} Exemplo de requisição:
  58 + * curl -i http://<host>/sei-broker/service/sipar/importados
  59 + *
  60 + * @apiSuccessExample {json} Success-Response:
  61 + * HTTP/1.1 204 No Content
  62 + *
  63 + * @apiErrorExample {json} Error-Response:
  64 + * HTTP/1.1 500 Internal Server Error
  65 + * {
  66 + * "error":"Mensagem de erro."
  67 + * "code":"código do erro"
  68 + * }
  69 + *
  70 + *
  71 + * @apiErrorExample {json} Error-Response:
  72 + * HTTP/1.1 400 Bad Request
  73 + * {
  74 + * "error":"Mensagem de erro."
  75 + * "code":"código do erro"
  76 + * }
  77 + *
  78 + *
  79 + * @apiErrorExample {json} Error-Response:
  80 + * HTTP/1.1 409 Conflict
  81 + * {
  82 + * "error":"Mensagem de erro."
  83 + * "code":"código do erro"
  84 + * }
  85 + */
  86 + @POST
  87 + @Path("/importados")
  88 + @Consumes({MediaType.TEXT_PLAIN})
  89 + public Response importarProcesso(String processo) throws Exception{
  90 + String numero, ano, digito;
  91 +
  92 + try{
  93 + numero = extraiNumero(processo);
  94 + ano = extraiAno(processo);
  95 + digito = extraiDigitoVerificador(processo);
  96 + }catch(Exception ex){
  97 + logger.error(messages.getMessage("erro.numero.sipar"), ex);
  98 + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo));
  99 + }
  100 +
  101 + isProcessoSipar(numero, ano, digito);
  102 +
  103 + if(isProcessoImportado(numero, ano)){
  104 + throw new ResourceConflictException(messages.getMessage("erro.processo.sipar.importado",processo));
  105 + }
  106 +
  107 + importarProcesso(numero, ano);
  108 +
  109 + return Response.created(getResourcePath(processo)).build();
  110 +
  111 + }
  112 +
  113 + /**
  114 + * @api {put} /processos-fisicos/{processo}/desmigracao 2.Desmigra Processo
  115 + * @apiName desmigra
  116 + * @apiGroup SIPAR
  117 + * @apiVersion 1.0.0
  118 + *
  119 + * @apiDescription Desmigra um processo iniciado no SIPAR e transferido para o SEI, permitindo novamente a anexação e tramitação no SIPAR.
  120 + *
  121 + * @apiParam (Path Parameter) {String} processo Número do processo físico existente no SIPAR contendo 17 dígitos e iniciado com 33902. Ex. 33902111111111111
  122 + *
  123 + * @apiExample {curl} Exemplo de requisição:
  124 + * curl -i http://<host>/sipar-broker/service/processos-fisicos/33902111111111111/desmigracao
  125 + *
  126 + * @apiSuccessExample {json} Success-Response:
  127 + * HTTP/1.1 204 No Content
  128 + *
  129 + * @apiErrorExample {json} Error-Response:
  130 + * HTTP/1.1 500 Internal Server Error
  131 + * {
  132 + * "error":"Mensagem de erro."
  133 + * "code":"código do erro"
  134 + * }
  135 + *
  136 + *
  137 + * @apiErrorExample {json} Error-Response:
  138 + * HTTP/1.1 400 Bad Request
  139 + * {
  140 + * "error":"Mensagem de erro."
  141 + * "code":"código do erro"
  142 + * }
  143 + *
  144 + *
  145 + * @apiErrorExample {json} Error-Response:
  146 + * HTTP/1.1 409 Conflict
  147 + * {
  148 + * "error":"Mensagem de erro."
  149 + * "code":"código do erro"
  150 + * }
  151 + */
  152 + @DELETE
  153 + @Path("/importados/{processo:\\d+}")
  154 + public Response cancelarImportacaoProcesso(@PathParam("processo") String processo) throws Exception{
  155 + String numero, ano, digito;
  156 +
  157 + try{
  158 + numero = extraiNumero(processo);
  159 + ano = extraiAno(processo);
  160 + digito = extraiDigitoVerificador(processo);
  161 + }catch(Exception ex){
  162 + logger.error(messages.getMessage("erro.numero.sipar"), ex);
  163 + throw new BusinessException(messages.getMessage("erro.numero.sipar",processo));
  164 + }
  165 +
  166 + if(!isProcessoImportado(numero, ano)){
  167 + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.importado",processo));
  168 + }
  169 +
  170 + cancelarImportacaoProcesso(numero, ano);
  171 +
  172 + return Response.noContent().build();
  173 +
  174 + }
  175 +
  176 + private void importarProcesso(String numeroDocumento, String anoDocumento){
  177 + ControleMigracao controle = new ControleMigracao();
  178 + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento));
  179 + controle.setMigrado(TRUE);
  180 + controle.setDataUltimaAlteracao(new Date());
  181 +
  182 + dao.merge(controle);
  183 + }
  184 +
  185 + private void cancelarImportacaoProcesso(String numeroDocumento, String anoDocumento){
  186 + ControleMigracao controle = new ControleMigracao();
  187 + controle.setId(getControleMigracaoID(numeroDocumento, anoDocumento));
  188 + controle.setMigrado(FALSE);
  189 + controle.setDataUltimaAlteracao(new Date());
  190 +
  191 + dao.merge(controle);
  192 + }
  193 +
  194 + private ControleMigracaoId getControleMigracaoID(String numeroDocumento, String anoDocumento){
  195 + return new ControleMigracaoId(numeroDocumento, anoDocumento);
  196 + }
  197 +
  198 + private String extraiNumero(String processo) {
  199 + return processo.substring(0,(processo.length() - 6));
  200 + }
  201 +
  202 + private String extraiAno(String processo) {
  203 + return processo.substring((processo.length() - 6), (processo.length() - 2));
  204 + }
  205 +
  206 + private String extraiDigitoVerificador(String processo) {
  207 + return processo.substring((processo.length() - 2), processo.length());
  208 + }
  209 +
  210 + public boolean isProcessoImportado(String numeroDocumento, String anoDocumento){
  211 + ControleMigracao processoMigrado = dao.buscaProcessoImportado(getControleMigracaoID(numeroDocumento, anoDocumento));
  212 +
  213 + if(processoMigrado != null && processoMigrado.isProcessoMigrado()){
  214 + return true;
  215 + }
  216 +
  217 + return false;
  218 + }
  219 +
  220 + public void isProcessoSipar(String numeroDocumento, String anoDocumento, String digitoDocumento) throws ResourceNotFoundException{
  221 + if(dao.getDocumento(numeroDocumento, anoDocumento, digitoDocumento) == null){
  222 + throw new ResourceNotFoundException(messages.getMessage("erro.processo.nao.pertence.sipar"));
  223 + }
  224 + }
  225 +
  226 + public URI getResourcePath(String resourceId){
  227 + UriBuilder builder = uriInfo.getAbsolutePathBuilder();
  228 +
  229 + builder.path(resourceId);
  230 +
  231 + return builder.build();
  232 + }
  233 +}
src/main/java/br/gov/ans/integracao/sei/rest/TipoConferenciaResource.java
@@ -14,6 +14,7 @@ import br.gov.ans.integracao.sei.client.TipoConferencia; @@ -14,6 +14,7 @@ import br.gov.ans.integracao.sei.client.TipoConferencia;
14 import br.gov.ans.integracao.sei.modelo.Operacao; 14 import br.gov.ans.integracao.sei.modelo.Operacao;
15 import br.gov.ans.integracao.sei.utils.Constantes; 15 import br.gov.ans.integracao.sei.utils.Constantes;
16 16
  17 +@Path("/")
17 public class TipoConferenciaResource { 18 public class TipoConferenciaResource {
18 19
19 @Inject 20 @Inject
src/main/java/br/gov/ans/integracao/sei/rest/UsuarioResource.java
@@ -10,10 +10,10 @@ import java.util.List; @@ -10,10 +10,10 @@ import java.util.List;
10 10
11 import javax.inject.Inject; 11 import javax.inject.Inject;
12 import javax.ws.rs.Consumes; 12 import javax.ws.rs.Consumes;
  13 +import javax.ws.rs.DELETE;
13 import javax.ws.rs.GET; 14 import javax.ws.rs.GET;
14 import javax.ws.rs.NotFoundException; 15 import javax.ws.rs.NotFoundException;
15 import javax.ws.rs.POST; 16 import javax.ws.rs.POST;
16 -import javax.ws.rs.PUT;  
17 import javax.ws.rs.Path; 17 import javax.ws.rs.Path;
18 import javax.ws.rs.PathParam; 18 import javax.ws.rs.PathParam;
19 import javax.ws.rs.Produces; 19 import javax.ws.rs.Produces;
@@ -49,7 +49,9 @@ public class UsuarioResource { @@ -49,7 +49,9 @@ public class UsuarioResource {
49 * @apiName listarUsuarios 49 * @apiName listarUsuarios
50 * @apiGroup Usuario 50 * @apiGroup Usuario
51 * @apiVersion 2.0.0 51 * @apiVersion 2.0.0
52 - * 52 + *
  53 + * @apiPermission RO_SEI_BROKER
  54 + *
53 * @apiDescription Este método realiza uma consulta aos usuários cadastrados que possuem o perfil "Básico". 55 * @apiDescription Este método realiza uma consulta aos usuários cadastrados que possuem o perfil "Básico".
54 * 56 *
55 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. 57 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI.
@@ -81,7 +83,9 @@ public class UsuarioResource { @@ -81,7 +83,9 @@ public class UsuarioResource {
81 * @apiName buscarUsuario 83 * @apiName buscarUsuario
82 * @apiGroup Usuario 84 * @apiGroup Usuario
83 * @apiVersion 2.0.0 85 * @apiVersion 2.0.0
84 - * 86 + *
  87 + * @apiPermission RO_SEI_BROKER
  88 + *
85 * @apiDescription Este método realiza a uma busca pelo login do usuário. 89 * @apiDescription Este método realiza a uma busca pelo login do usuário.
86 * 90 *
87 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. 91 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI.
@@ -111,7 +115,9 @@ public class UsuarioResource { @@ -111,7 +115,9 @@ public class UsuarioResource {
111 * @apiName atribuirProcesso 115 * @apiName atribuirProcesso
112 * @apiGroup Usuario 116 * @apiGroup Usuario
113 * @apiVersion 2.0.0 117 * @apiVersion 2.0.0
114 - * 118 + *
  119 + * @apiPermission RO_SEI_BROKER
  120 + *
115 * @apiDescription Este método atribui o processo a um usuário. 121 * @apiDescription Este método atribui o processo a um usuário.
116 * 122 *
117 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI 123 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI
@@ -155,7 +161,9 @@ public class UsuarioResource { @@ -155,7 +161,9 @@ public class UsuarioResource {
155 * @apiName incluirUsuario 161 * @apiName incluirUsuario
156 * @apiGroup Usuario 162 * @apiGroup Usuario
157 * @apiVersion 2.0.0 163 * @apiVersion 2.0.0
158 - * 164 + *
  165 + * @apiPermission RO_SEI_BROKER_ADM
  166 + *
159 * @apiDescription Este método realiza a inclusão de novos usuários ou alterarações nos usuários existentes. 167 * @apiDescription Este método realiza a inclusão de novos usuários ou alterarações nos usuários existentes.
160 * 168 *
161 * @apiParam (Request Body) {String} codigo Código que deseja atribuir ao usuário 169 * @apiParam (Request Body) {String} codigo Código que deseja atribuir ao usuário
@@ -191,11 +199,13 @@ public class UsuarioResource { @@ -191,11 +199,13 @@ public class UsuarioResource {
191 199
192 200
193 /** 201 /**
194 - * @api {post} /usuarios/excluir Excluir usuário 202 + * @api {delete} /usuarios/:login Excluir usuário
195 * @apiName excluirUsuario 203 * @apiName excluirUsuario
196 * @apiGroup Usuario 204 * @apiGroup Usuario
197 * @apiVersion 2.0.0 205 * @apiVersion 2.0.0
198 - * 206 + *
  207 + * @apiPermission RO_SEI_BROKER_ADM
  208 + *
199 * @apiDescription Este método realiza a exclusão de usuários. 209 * @apiDescription Este método realiza a exclusão de usuários.
200 * 210 *
201 * @apiParam {String} codigo Código que deseja atribuir ao usuário 211 * @apiParam {String} codigo Código que deseja atribuir ao usuário
@@ -203,7 +213,7 @@ public class UsuarioResource { @@ -203,7 +213,7 @@ public class UsuarioResource {
203 * @apiParam {String} login Login que será atribuído ao usuário 213 * @apiParam {String} login Login que será atribuído ao usuário
204 * 214 *
205 * @apiExample Exemplo de requisição: 215 * @apiExample Exemplo de requisição:
206 - * endpoint: http://<host>/sei-broker/service/usuarios/excluir 216 + * endpoint: [DELETE] http://<host>/sei-broker/service/usuarios/andre.guimaraes
207 * 217 *
208 * body: 218 * body:
209 * { 219 * {
@@ -221,21 +231,23 @@ public class UsuarioResource { @@ -221,21 +231,23 @@ public class UsuarioResource {
221 * "code":"código do erro" 231 * "code":"código do erro"
222 * } 232 * }
223 */ 233 */
224 - @POST  
225 - @Path("/usuarios/excluir") 234 + @DELETE
  235 + @Path("/usuarios/{login}")
226 @Consumes({MediaType.APPLICATION_JSON}) 236 @Consumes({MediaType.APPLICATION_JSON})
227 @Produces(MediaType.APPLICATION_JSON) 237 @Produces(MediaType.APPLICATION_JSON)
228 - public Boolean excluirUsuario(Usuario usuario) throws Exception{ 238 + public Boolean excluirUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{
229 return manterUsuario(Acao.EXCLUIR, usuario); 239 return manterUsuario(Acao.EXCLUIR, usuario);
230 } 240 }
231 241
232 242
233 /** 243 /**
234 - * @api {put} /usuarios/desativar Desativar usuário 244 + * @api {delete} /usuarios/ativos Desativar usuário
235 * @apiName desativarUsuario 245 * @apiName desativarUsuario
236 * @apiGroup Usuario 246 * @apiGroup Usuario
237 * @apiVersion 2.0.0 247 * @apiVersion 2.0.0
238 - * 248 + *
  249 + * @apiPermission RO_SEI_BROKER_ADM
  250 + *
239 * @apiDescription Este método desativa usuários. 251 * @apiDescription Este método desativa usuários.
240 * 252 *
241 * @apiParam {String} codigo Código que deseja atribuir ao usuário 253 * @apiParam {String} codigo Código que deseja atribuir ao usuário
@@ -243,7 +255,7 @@ public class UsuarioResource { @@ -243,7 +255,7 @@ public class UsuarioResource {
243 * @apiParam {String} login Login que será atribuído ao usuário 255 * @apiParam {String} login Login que será atribuído ao usuário
244 * 256 *
245 * @apiExample Exemplo de requisição: 257 * @apiExample Exemplo de requisição:
246 - * endpoint: http://<host>/sei-broker/service/usuarios/desativar 258 + * endpoint: [DELETE] http://<host>/sei-broker/service/usuarios/ativos/andre.guimaraes
247 * 259 *
248 * body: 260 * body:
249 * { 261 * {
@@ -261,21 +273,23 @@ public class UsuarioResource { @@ -261,21 +273,23 @@ public class UsuarioResource {
261 * "code":"código do erro" 273 * "code":"código do erro"
262 * } 274 * }
263 */ 275 */
264 - @PUT  
265 - @Path("/usuarios/desativar") 276 + @DELETE
  277 + @Path("/usuarios/ativos/{login}")
266 @Consumes({MediaType.APPLICATION_JSON}) 278 @Consumes({MediaType.APPLICATION_JSON})
267 @Produces(MediaType.APPLICATION_JSON) 279 @Produces(MediaType.APPLICATION_JSON)
268 - public Boolean desativarUsuario(Usuario usuario) throws Exception{ 280 + public Boolean desativarUsuario(@PathParam("login") String login,Usuario usuario) throws Exception{
269 return manterUsuario(Acao.DESATIVAR, usuario); 281 return manterUsuario(Acao.DESATIVAR, usuario);
270 } 282 }
271 283
272 284
273 /** 285 /**
274 - * @api {put} /usuarios/ativar Ativar usuário 286 + * @api {post} /usuarios/ativos Ativar usuário
275 * @apiName ativarUsuario 287 * @apiName ativarUsuario
276 * @apiGroup Usuario 288 * @apiGroup Usuario
277 * @apiVersion 2.0.0 289 * @apiVersion 2.0.0
278 - * 290 + *
  291 + * @apiPermission RO_SEI_BROKER_ADM
  292 + *
279 * @apiDescription Este método reativa usuários. 293 * @apiDescription Este método reativa usuários.
280 * 294 *
281 * @apiParam {String} codigo Código que deseja atribuir ao usuário 295 * @apiParam {String} codigo Código que deseja atribuir ao usuário
@@ -283,7 +297,7 @@ public class UsuarioResource { @@ -283,7 +297,7 @@ public class UsuarioResource {
283 * @apiParam {String} login Login que será atribuído ao usuário 297 * @apiParam {String} login Login que será atribuído ao usuário
284 * 298 *
285 * @apiExample Exemplo de requisição: 299 * @apiExample Exemplo de requisição:
286 - * endpoint: http://<host>/sei-broker/service/usuarios/ativar 300 + * endpoint: http://<host>/sei-broker/service/usuarios/ativos
287 * 301 *
288 * body: 302 * body:
289 * { 303 * {
@@ -301,8 +315,8 @@ public class UsuarioResource { @@ -301,8 +315,8 @@ public class UsuarioResource {
301 * "code":"código do erro" 315 * "code":"código do erro"
302 * } 316 * }
303 */ 317 */
304 - @PUT  
305 - @Path("/usuarios/ativar") 318 + @POST
  319 + @Path("/usuarios/ativos")
306 @Consumes({MediaType.APPLICATION_JSON}) 320 @Consumes({MediaType.APPLICATION_JSON})
307 @Produces(MediaType.APPLICATION_JSON) 321 @Produces(MediaType.APPLICATION_JSON)
308 public Boolean ativarUsuario(Usuario usuario) throws Exception{ 322 public Boolean ativarUsuario(Usuario usuario) throws Exception{
src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracao.java 0 → 100644
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
  1 +package br.gov.ans.integracao.sipar.dao;
  2 +
  3 +import java.io.Serializable;
  4 +import java.util.Date;
  5 +
  6 +import javax.persistence.Column;
  7 +import javax.persistence.EmbeddedId;
  8 +import javax.persistence.Entity;
  9 +import javax.persistence.Table;
  10 +import javax.persistence.Temporal;
  11 +import javax.persistence.TemporalType;
  12 +
  13 +@Entity
  14 +@Table(schema="DBPSIPAR", name="TB_CONTROLE_MIGRACAO_SIPAR_SEI")
  15 +public class ControleMigracao implements Serializable {
  16 +
  17 + private static final long serialVersionUID = 1L;
  18 +
  19 + @EmbeddedId
  20 + private ControleMigracaoId id;
  21 +
  22 + @Temporal(TemporalType.TIMESTAMP)
  23 + @Column(name = "DT_ULTIMA_ALTERACAO_CONTROLE")
  24 + private Date dataUltimaAlteracao;
  25 +
  26 + @Column(name="LG_DOCUMENTO_MIGRACAO_SEI")
  27 + private Integer migrado;
  28 +
  29 + public ControleMigracaoId getId() {
  30 + return id;
  31 + }
  32 +
  33 + public void setId(ControleMigracaoId id) {
  34 + this.id = id;
  35 + }
  36 +
  37 + public Date getDataUltimaAlteracao() {
  38 + return dataUltimaAlteracao;
  39 + }
  40 +
  41 + public void setDataUltimaAlteracao(Date dataUltimaAlteracao) {
  42 + this.dataUltimaAlteracao = dataUltimaAlteracao;
  43 + }
  44 +
  45 + public Integer getMigrado() {
  46 + return migrado;
  47 + }
  48 +
  49 + public void setMigrado(Integer migrado) {
  50 + this.migrado = migrado;
  51 + }
  52 +
  53 + public boolean isProcessoMigrado() {
  54 + return this.migrado == 1 ? true : false;
  55 + }
  56 +}
src/main/java/br/gov/ans/integracao/sipar/dao/ControleMigracaoId.java 0 → 100644
@@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
  1 +package br.gov.ans.integracao.sipar.dao;
  2 +
  3 +import java.io.Serializable;
  4 +
  5 +import javax.persistence.Column;
  6 +import javax.persistence.Embeddable;
  7 +
  8 +@Embeddable
  9 +public class ControleMigracaoId implements Serializable {
  10 +
  11 + private static final long serialVersionUID = 1L;
  12 +
  13 + @Column(name = "CD_SEQ_DOCUMENTO")
  14 + private String numero;
  15 +
  16 + @Column(name = "NR_ANO_DOCUMENTO")
  17 + private String ano;
  18 +
  19 + public ControleMigracaoId() {
  20 + }
  21 +
  22 + public ControleMigracaoId(String numero, String ano) {
  23 + this.numero = numero;
  24 + this.ano = ano;
  25 + }
  26 +
  27 + public String getNumero() {
  28 + return numero;
  29 + }
  30 +
  31 + public void setNumero(String numero) {
  32 + this.numero = numero;
  33 + }
  34 +
  35 + public String getAno() {
  36 + return ano;
  37 + }
  38 +
  39 + public void setAno(String ano) {
  40 + this.ano = ano;
  41 + }
  42 +
  43 + @Override
  44 + public boolean equals(Object obj) {
  45 + if (obj instanceof ControleMigracao) {
  46 + ControleMigracao controleMigracao = (ControleMigracao) obj;
  47 + return (this.numero != null && this.numero.equals(controleMigracao.getId().getNumero()) &&
  48 + this.ano != null && this.ano.equals(controleMigracao.getId().getAno()));
  49 + }
  50 + return false;
  51 + }
  52 +
  53 + @Override
  54 + public int hashCode() {
  55 + final int numeroPrimo = 31;
  56 + int resultado = 1;
  57 + resultado = (numeroPrimo * resultado) + ((this.numero == null) ? 0 : this.numero.hashCode());
  58 + resultado = (numeroPrimo * resultado) + ((this.ano == null) ? 0 : this.ano.hashCode());
  59 + return resultado;
  60 + }
  61 +}
src/main/java/br/gov/ans/integracao/sipar/dao/DocumentoSipar.java 0 → 100644
@@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
  1 +package br.gov.ans.integracao.sipar.dao;
  2 +
  3 +import java.util.Date;
  4 +
  5 +import javax.persistence.Entity;
  6 +import javax.persistence.EntityResult;
  7 +import javax.persistence.FieldResult;
  8 +import javax.persistence.Id;
  9 +import javax.persistence.NamedNativeQuery;
  10 +import javax.persistence.SqlResultSetMapping;
  11 +
  12 +@Entity
  13 +@SqlResultSetMapping(name="DocumentoSiparMapping", entities={
  14 + @EntityResult(entityClass = DocumentoSipar.class,
  15 + fields = {
  16 + @FieldResult(name = "digito", column = "NU_DIGITO_DOCUMENTO"),
  17 + @FieldResult(name = "operadora", column = "CO_OPERADORA"),
  18 + @FieldResult(name = "emissao", column = "DT_EMISSAO_DOCUMENTO"),
  19 + @FieldResult(name = "registro", column = "DT_REGISTRO"),
  20 + @FieldResult(name = "tipo", column = "CO_TIPO_DOCUMENTO"),
  21 + @FieldResult(name = "resumo", column = "DS_RESUMO_DOCUMENTO"),
  22 + @FieldResult(name = "orgaoPosse", column = "CO_ORGAO_POSSE"),
  23 + @FieldResult(name = "orgaoOrigem", column = "CO_ORGAO_ORIGEM"),
  24 + @FieldResult(name = "orgaoRegistro", column = "CO_ORGAO_REGISTRO"),
  25 + @FieldResult(name = "assunto", column = "CO_ASSUNTO")
  26 + })
  27 +})
  28 +@NamedNativeQuery(name = "documentoPorNumeroAnoDigito", resultSetMapping = "DocumentoSiparMapping",
  29 +query = "SELECT TB.NU_DIGITO_DOCUMENTO, TB.CO_OPERADORA, TB.DT_EMISSAO_DOCUMENTO, TB.DT_REGISTRO, TB.CO_TIPO_DOCUMENTO, "
  30 + + "TB.DS_RESUMO_DOCUMENTO, TB.CO_ORGAO_POSSE, TB.CO_ORGAO_ORIGEM, TB.CO_ORGAO_REGISTRO, RL.CO_ASSUNTO "
  31 + + "FROM DBPSIPAR.TB_DOCUMENTO TB "
  32 + + "LEFT JOIN DBPSIPAR.RL_ASSUNTO_DOCUMENTO RL ON RL.CO_DOCUMENTO = TB.CO_SEQ_DOCUMENTO "
  33 + + "AND RL.NU_ANO_DOCUMENTO = TB.NU_ANO_DOCUMENTO "
  34 + + "WHERE TB.CO_SEQ_DOCUMENTO = :numeroDocumento "
  35 + + "AND TB.NU_ANO_DOCUMENTO = :anoDocumento "
  36 + + "AND TB.NU_DIGITO_DOCUMENTO = :digitoDocumento")
  37 +public class DocumentoSipar {
  38 + @Id
  39 + private String digito;
  40 + private String operadora;
  41 + private Date emissao;
  42 + private Date registro;
  43 + private String tipo;
  44 + private String resumo;
  45 + private Long orgaoPosse;
  46 + private Long orgaoOrigem;
  47 + private Long orgaoRegistro;
  48 + private Long assunto;
  49 +
  50 + public String getDigito() {
  51 + return digito;
  52 + }
  53 +
  54 + public void setDigito(String digito) {
  55 + this.digito = digito;
  56 + }
  57 +
  58 + public Long getAssunto() {
  59 + return assunto;
  60 + }
  61 +
  62 + public void setAssunto(Long assunto) {
  63 + this.assunto = assunto;
  64 + }
  65 +
  66 + public String getOperadora() {
  67 + return operadora;
  68 + }
  69 +
  70 + public void setOperadora(String operadora) {
  71 + this.operadora = operadora;
  72 + }
  73 +
  74 + public Date getEmissao() {
  75 + return emissao;
  76 + }
  77 +
  78 + public void setEmissao(Date emissao) {
  79 + this.emissao = emissao;
  80 + }
  81 +
  82 + public String getTipo() {
  83 + return tipo;
  84 + }
  85 +
  86 + public void setTipo(String tipo) {
  87 + this.tipo = tipo;
  88 + }
  89 +
  90 + public String getResumo() {
  91 + return resumo;
  92 + }
  93 +
  94 + public void setResumo(String resumo) {
  95 + this.resumo = resumo;
  96 + }
  97 +
  98 + public Long getOrgaoPosse() {
  99 + return orgaoPosse;
  100 + }
  101 +
  102 + public void setOrgaoPosse(Long orgaoPosse) {
  103 + this.orgaoPosse = orgaoPosse;
  104 + }
  105 +
  106 + public Long getOrgaoOrigem() {
  107 + return orgaoOrigem;
  108 + }
  109 +
  110 + public void setOrgaoOrigem(Long orgaoOrigem) {
  111 + this.orgaoOrigem = orgaoOrigem;
  112 + }
  113 +
  114 + public Long getOrgaoRegistro() {
  115 + return orgaoRegistro;
  116 + }
  117 +
  118 + public void setOrgaoRegistro(Long orgaoRegistro) {
  119 + this.orgaoRegistro = orgaoRegistro;
  120 + }
  121 +
  122 + public Date getRegistro() {
  123 + return registro;
  124 + }
  125 +
  126 + public void setRegistro(Date registro) {
  127 + this.registro = registro;
  128 + }
  129 +
  130 +}
src/main/resources/META-INF/persistence.xml
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 7
8 <jta-data-source>jdbc/sei-broker</jta-data-source> 8 <jta-data-source>jdbc/sei-broker</jta-data-source>
9 9
10 - <class>br.gov.ans.integracao.sei.modelo.DocumentoSipar</class> 10 + <class>br.gov.ans.integracao.sipar.dao.DocumentoSipar</class>
11 <class>br.gov.ans.integracao.sei.modelo.InclusaoDocumento</class> 11 <class>br.gov.ans.integracao.sei.modelo.InclusaoDocumento</class>
12 <class>br.gov.ans.modelo.LogIntegracaoSistemica</class> 12 <class>br.gov.ans.modelo.LogIntegracaoSistemica</class>
13 13
src/main/resources/messages.properties
@@ -32,9 +32,12 @@ erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a c @@ -32,9 +32,12 @@ erro.persistir.confirmacao.inclusao.documento = Ocorreu um erro ao persistir a c
32 erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64. 32 erro.processar.conteudo.json = Erro ao processar o conteudo JSON, verifique a formação do JSON e se o envio foi realizado em Base64.
33 erro.processo.anexado.nao.infomado = Número do processo a anexar não informado. 33 erro.processo.anexado.nao.infomado = Número do processo a anexar não informado.
34 erro.processo.incluir.bloco = Não foi possivel incluir o processo no bloco. 34 erro.processo.incluir.bloco = Não foi possivel incluir o processo no bloco.
  35 +erro.processo.nao.importado = O processo {0} não foi encontrado nos registros de importação.
35 erro.processo.nao.pertence.sei = O processo {0} não pertence ao SEI. 36 erro.processo.nao.pertence.sei = O processo {0} não pertence ao SEI.
  37 +erro.processo.nao.pertence.sipar = O processo {0} não pertence ao SIPAR.
36 erro.processo.relacionado.nao.infomado = É necessário informar o número do processo relacionado. 38 erro.processo.relacionado.nao.infomado = É necessário informar o número do processo relacionado.
37 erro.processo.sem.documentos = Nenhum documento anexado ao processo {0}. 39 erro.processo.sem.documentos = Nenhum documento anexado ao processo {0}.
  40 +erro.processo.sipar.importado = O processo {0} já foi importado para o SEI.
38 erro.registrar.exclusao.documento = Erro ao registrar a exclusão do documento {0}. 41 erro.registrar.exclusao.documento = Erro ao registrar a exclusão do documento {0}.
39 erro.registro.inclusao = Ocorreu um erro ao persistir o registro de inclusão. 42 erro.registro.inclusao = Ocorreu um erro ao persistir o registro de inclusão.
40 erro.relacionar.processo = Ocorreu um erro ao relacionar os processos. 43 erro.relacionar.processo = Ocorreu um erro ao relacionar os processos.
src/test/java/br/gov/ans/integracao/sei/testes/Base64Decoder.java
@@ -5,7 +5,7 @@ import org.apache.commons.codec.binary.Base64; @@ -5,7 +5,7 @@ import org.apache.commons.codec.binary.Base64;
5 5
6 public class Base64Decoder { 6 public class Base64Decoder {
7 public static void main(String[] args) { 7 public static void main(String[] args) {
8 - String base64 = "eyJudW1lcm9Qcm9jZXNzbyI6IjMzOTEwMDAwMTIzMjAxNzkzIiwKInJhemFvU29jaWFsIjoiQU1JTCBBU1NJU1TKTkNJQSBNyURJQ0EgSU5URVJOQUNJT05BTCBTLkEuIiwKImNucGpPcGVyYWRvcmEiOiIyOTMwOTEyNzAwMDE3OSIsCiJudW1lcm9SZWdpc3Ryb0FucyI6IjMyNjMwNSIsCiJkYXRhUHJvdG9jb2xvIjoiMDEvMDIvMjAxNyIsCiJtZXNJbmljaW9BcGxpY2FjYW8iOiIwNS8yMDE3IiwKImFub0luaWNpb0FwbGljYWNhbyI6IjA0LzIwMTgifQo="; 8 + String base64 = "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg==";
9 9
10 System.out.println(new String(Base64.decodeBase64(base64))); 10 System.out.println(new String(Base64.decodeBase64(base64)));
11 } 11 }
src/test/java/br/gov/ans/integracao/sei/testes/Base64Encoder.java
1 package br.gov.ans.integracao.sei.testes; 1 package br.gov.ans.integracao.sei.testes;
2 2
  3 +import java.io.File;
  4 +import java.io.FileInputStream;
  5 +import java.io.IOException;
  6 +
3 import org.apache.commons.codec.binary.Base64; 7 import org.apache.commons.codec.binary.Base64;
4 8
5 public class Base64Encoder { 9 public class Base64Encoder {
6 10
7 - public static void main(String[] args) {  
8 - String string = "{\"conteudo\":\"tentativa 1 &#x000D; tentativa 2 &#13; tentativa 3 \\r tentativa 4 \\n fim! \"}";  
9 - System.out.println(string);  
10 - System.out.println(Base64.encodeBase64String(string.getBytes())); 11 + public static void main(String[] args) throws IOException {
  12 + String string = "{\"content\":\"tentativa 1 &#x000D; tentativa 2 &#13; tentativa 3 \\r tentativa 4 \\n fim! <br> teste da tag \"}";
  13 +
  14 +// System.out.println(string);
  15 +
  16 +// System.out.println(Base64.encodeBase64String(string.getBytes()));
  17 + Base64Encoder encoder = new Base64Encoder();
  18 +
  19 + System.out.println(encoder.getBase64("0693609.pdf"));
  20 + System.out.println(encoder.getMD5("0693609.pdf"));
  21 + System.out.println(Base64.encodeBase64String("{\"regAns\":\"363022\",\"razaoSocial\":\"BRADESCO SAUDE E ASSISTENCIA S.A\",\"emailCadop\":\"teste@teste.com\",\"nuCnpj\":\"0000000000\",\"noCargoRepr\":\"Diretor\",\"noRepresentante\":\"André Guimarães\",\"anoInicio\":\"2016\",\"anoFinal\":\"2017\",\"numeroDocumento\":\"00000000\"}".getBytes()));
  22 + }
  23 +
  24 + public String getBase64(String arquivo){
  25 + ClassLoader classLoader = getClass().getClassLoader();
  26 +
  27 + File file = new File(classLoader.getResource(arquivo).getFile());
  28 +
  29 + byte[] bytes = new byte[(int) file.length()];
  30 +
  31 + try {
  32 + FileInputStream fileInputStream = new FileInputStream(file);
  33 + fileInputStream.read(bytes);
  34 + } catch (Exception e) {
  35 + e.printStackTrace();
  36 + }
  37 +
  38 + return Base64.encodeBase64String(bytes);
11 } 39 }
12 40
  41 + public String getMD5(String arquivo) throws IOException{
  42 + ClassLoader classLoader = getClass().getClassLoader();
  43 + FileInputStream fis = new FileInputStream(new File(classLoader.getResource(arquivo).getFile()));
  44 + String md5 = org.apache.commons.codec.digest.DigestUtils.md5Hex(fis);
  45 + fis.close();
  46 +
  47 + return md5;
  48 + }
13 } 49 }
  50 +
src/test/java/br/gov/ans/integracao/sei/testes/FunctionalTest.java
@@ -6,8 +6,8 @@ import com.jayway.restassured.RestAssured; @@ -6,8 +6,8 @@ import com.jayway.restassured.RestAssured;
6 6
7 public class FunctionalTest { 7 public class FunctionalTest {
8 8
9 - protected final String USUARIO = "desenv_integracao_sei";  
10 - protected final String SENHA = "integra_sei_2016"; 9 + protected final String USUARIO = "andre.guimaraes";
  10 + protected final String SENHA = "Merda de senha!";
11 protected static final Boolean DESENVOLVIMENTO = false; 11 protected static final Boolean DESENVOLVIMENTO = false;
12 12
13 @BeforeClass 13 @BeforeClass
src/test/java/br/gov/ans/integracao/sei/testes/SeiBrokerTest.java
@@ -105,12 +105,12 @@ public class SeiBrokerTest extends FunctionalTest{ @@ -105,12 +105,12 @@ public class SeiBrokerTest extends FunctionalTest{
105 105
106 @Test 106 @Test
107 public void AG_consultarDocumentosPorInteressadosTest(){ 107 public void AG_consultarDocumentosPorInteressadosTest(){
108 - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/documentos").then().statusCode(200); 108 + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/interessados/363022/documentos").then().statusCode(200);
109 } 109 }
110 110
111 @Test 111 @Test
112 - public void AH_consultarProcessosPorInteressadosTest(){  
113 - given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/363022/processos").then().statusCode(200); 112 + public void AH_consultarProcessos(){
  113 + given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/processos").then().statusCode(200);
114 } 114 }
115 115
116 @Test 116 @Test
@@ -143,7 +143,7 @@ public class SeiBrokerTest extends FunctionalTest{ @@ -143,7 +143,7 @@ public class SeiBrokerTest extends FunctionalTest{
143 given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/unidades/cotec/codigo").then().statusCode(200); 143 given().auth().basic(USUARIO, SENHA).accept("application/json").when().get("/unidades/cotec/codigo").then().statusCode(200);
144 } 144 }
145 145
146 - @Test 146 +// @Test
147 public void AP_cancelarDocumentoTest(){ 147 public void AP_cancelarDocumentoTest(){
148 given() 148 given()
149 .auth() 149 .auth()
@@ -381,7 +381,7 @@ public class SeiBrokerTest extends FunctionalTest{ @@ -381,7 +381,7 @@ public class SeiBrokerTest extends FunctionalTest{
381 response.then().statusCode(200); 381 response.then().statusCode(200);
382 } 382 }
383 383
384 -// @Test 384 +//// @Test
385 // public void BL_incluirDocumentoPorArquivoTest() { 385 // public void BL_incluirDocumentoPorArquivoTest() {
386 // Response response = given() 386 // Response response = given()
387 // .auth() 387 // .auth()
@@ -561,8 +561,10 @@ public class SeiBrokerTest extends FunctionalTest{ @@ -561,8 +561,10 @@ public class SeiBrokerTest extends FunctionalTest{
561 i.setNome("BRADESCO SAUDE E ASSISTENCIA S.A"); 561 i.setNome("BRADESCO SAUDE E ASSISTENCIA S.A");
562 i.setSigla("363022"); 562 i.setSigla("363022");
563 documento.setInteressados(new Interessado[]{i}); 563 documento.setInteressados(new Interessado[]{i});
564 -  
565 - documento.setConteudo(Base64.encodeBase64String("<BR><BR>Tendo em vista que o processo foi criado indevidamente pelo sistema de integração do ressarcimento ao SUS, considera-se encerrado o processo eletrônico, sendo vedada qualquer juntada de novos documentos eletrônicos por meio do SEI.<BR>".getBytes())); 564 +
  565 + documento.setConteudo("PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PlRFU1RFVEVTVEU8L2JvZHk+PC9odG1sPg==");
  566 +
  567 +// documento.setConteudo(Base64.encodeBase64String("<BR><BR>Tendo em vista que o processo foi criado indevidamente pelo sistema de integração do ressarcimento ao SUS, considera-se encerrado o processo eletrônico, sendo vedada qualquer juntada de novos documentos eletrônicos por meio do SEI.<BR>".getBytes()));
566 568
567 return documento; 569 return documento;
568 } 570 }