Commit b759774e03d10d3f5a172629642ef0ad0e67563f
1 parent
d8ea19a6
Exists in
master
Novo reource para restauração de template e pom.xml com deploy automatizado pelo Maven
Showing
8 changed files
with
251 additions
and
29 deletions
Show diff stats
.tern-project
1 | -{"ide":{},"libs":["ecma5","browser"],"plugins":{"guess-types":{},"angular":{}}} | |
2 | 1 | \ No newline at end of file |
2 | +{ | |
3 | + "libs": [ | |
4 | + "ecma5", | |
5 | + "browser" | |
6 | + ], | |
7 | + "plugins": { | |
8 | + "guess-types": { | |
9 | + | |
10 | + }, | |
11 | + "angular": { | |
12 | + | |
13 | + } | |
14 | + } | |
15 | +} | |
3 | 16 | \ No newline at end of file | ... | ... |
pom.xml
... | ... | @@ -3,24 +3,66 @@ |
3 | 3 | <modelVersion>4.0.0</modelVersion> |
4 | 4 | <groupId>br.gov.ans</groupId> |
5 | 5 | <artifactId>templates-broker</artifactId> |
6 | - <version>1.0</version> | |
6 | + <version>1.2</version> | |
7 | 7 | <packaging>war</packaging> |
8 | 8 | <name>templates-broker</name> |
9 | 9 | <description>Sistema de gerenciamento de templates.</description> |
10 | 10 | |
11 | - <!-- CONFIGURAR VERSÃO DO JAVA PARA 1.8 --> | |
12 | 11 | <build> |
13 | - <plugins> | |
14 | - <plugin> | |
15 | - <groupId>org.apache.maven.plugins</groupId> | |
16 | - <artifactId>maven-compiler-plugin</artifactId> | |
17 | - <version>3.1</version> | |
18 | - <configuration> | |
19 | - <source>1.8</source> | |
20 | - <target>1.8</target> | |
21 | - </configuration> | |
22 | - </plugin> | |
23 | - </plugins> | |
12 | + <plugins> | |
13 | + <plugin> | |
14 | + <groupId>org.wildfly.plugins</groupId> | |
15 | + <artifactId>wildfly-maven-plugin</artifactId> | |
16 | + <version>1.0.2.Final</version> | |
17 | + <configuration> | |
18 | + <timeout>60000</timeout> | |
19 | + <username>${username}</username> | |
20 | + <password>${password}</password> | |
21 | + <hostname>${hostname}</hostname> | |
22 | + <port>${port}</port> | |
23 | + </configuration> | |
24 | + | |
25 | + <executions> | |
26 | + <!-- Remover war implantado --> | |
27 | + <execution> | |
28 | + <id>remover-pacote-impantado</id> | |
29 | + <phase>install</phase> | |
30 | + <goals> | |
31 | + <goal>undeploy</goal> | |
32 | + </goals> | |
33 | + <configuration> | |
34 | + <domain> | |
35 | + <serverGroups> | |
36 | + <server-group>${domain.group}</server-group> | |
37 | + </serverGroups> | |
38 | + </domain> | |
39 | + <ignoreMissingDeployment>true</ignoreMissingDeployment> | |
40 | + <match-pattern>${project.name}.*</match-pattern> | |
41 | + <matchPatternStrategy>fail</matchPatternStrategy> | |
42 | + </configuration> | |
43 | + </execution> | |
44 | + | |
45 | + <!-- Implantar war --> | |
46 | + <execution> | |
47 | + <id>implantar-novo-pacote</id> | |
48 | + <phase>install</phase> | |
49 | + <goals> | |
50 | + <goal>deploy</goal> | |
51 | + </goals> | |
52 | + <configuration> | |
53 | + <runtimeName>${project.name}</runtimeName> | |
54 | + <deployEnabled>true</deployEnabled> | |
55 | + <force>true</force> | |
56 | + <domain> | |
57 | + <server-groups> | |
58 | + <server-group>${domain.group}</server-group> | |
59 | + </server-groups> | |
60 | + </domain> | |
61 | + </configuration> | |
62 | + </execution> | |
63 | + </executions> | |
64 | + </plugin> | |
65 | + </plugins> | |
24 | 66 | </build> |
25 | 67 | |
26 | 68 | <dependencies> | ... | ... |
src/main/java/br/gov/ans/templates/dao/TemplatesDAO.java
... | ... | @@ -48,6 +48,29 @@ public class TemplatesDAO { |
48 | 48 | return query.getResultList(); |
49 | 49 | } |
50 | 50 | |
51 | + @SuppressWarnings("unchecked") | |
52 | + public List<Template> getTemplatesExcluidos(String filtro, Integer pagina, Integer qtdRegistros){ | |
53 | + HashMap<String, Object> parametros = new HashMap<String, Object>(); | |
54 | + StringBuilder sql = new StringBuilder("SELECT t FROM Template t "); | |
55 | + | |
56 | + if(StringUtils.isNotBlank(filtro)){ | |
57 | + sql.append("WHERE upper(t.nome) LIKE upper(:filtro) "); | |
58 | + parametros.put("filtro", "%"+filtro+"%"); | |
59 | + } | |
60 | + | |
61 | + sql.append(AndOrWhere(sql) + " t.dataExclusao is not null "); | |
62 | + | |
63 | + sql.append("order by nome asc "); | |
64 | + | |
65 | + Query query = em.createQuery(sql.toString()); | |
66 | + | |
67 | + setParametrosQuery(query, parametros); | |
68 | + | |
69 | + setPaginacaoQuery(query, pagina, qtdRegistros); | |
70 | + | |
71 | + return query.getResultList(); | |
72 | + } | |
73 | + | |
51 | 74 | public Long countTemplates(String filtro){ |
52 | 75 | HashMap<String, Object> parametros = new HashMap<String, Object>(); |
53 | 76 | StringBuilder sql = new StringBuilder("SELECT count(t) FROM Template t "); |
... | ... | @@ -66,6 +89,24 @@ public class TemplatesDAO { |
66 | 89 | return (Long) query.getSingleResult(); |
67 | 90 | } |
68 | 91 | |
92 | + public Long countTemplatesExcluidos(String filtro){ | |
93 | + HashMap<String, Object> parametros = new HashMap<String, Object>(); | |
94 | + StringBuilder sql = new StringBuilder("SELECT count(t) FROM Template t "); | |
95 | + | |
96 | + if(StringUtils.isNotBlank(filtro)){ | |
97 | + sql.append("WHERE upper(t.nome) LIKE upper(:filtro) "); | |
98 | + parametros.put("filtro", "%"+filtro+"%"); | |
99 | + } | |
100 | + | |
101 | + sql.append(AndOrWhere(sql) + " t.dataExclusao is not null "); | |
102 | + | |
103 | + Query query = em.createQuery(sql.toString()); | |
104 | + | |
105 | + setParametrosQuery(query, parametros); | |
106 | + | |
107 | + return (Long) query.getSingleResult(); | |
108 | + } | |
109 | + | |
69 | 110 | public Template getTemplate(String nome){ |
70 | 111 | HashMap<String, Object> params = new HashMap<String, Object>(); |
71 | 112 | params.put("nome", nome); |
... | ... | @@ -79,6 +120,19 @@ public class TemplatesDAO { |
79 | 120 | return resultado.get(0); |
80 | 121 | } |
81 | 122 | |
123 | + public Template getTemplateExcluido(String nome){ | |
124 | + HashMap<String, Object> params = new HashMap<String, Object>(); | |
125 | + params.put("nome", nome); | |
126 | + | |
127 | + List<Template> resultado = dao.executeNamedQuery("Template.recuperarTemplateExcluidoPeloNome", params); | |
128 | + | |
129 | + if(resultado.size() < 1){ | |
130 | + return null; | |
131 | + } | |
132 | + | |
133 | + return resultado.get(0); | |
134 | + } | |
135 | + | |
82 | 136 | public String AndOrWhere(StringBuilder sql){ |
83 | 137 | if(sql.toString().contains("WHERE")){ |
84 | 138 | return "AND"; | ... | ... |
src/main/java/br/gov/ans/templates/modelo/Template.java
... | ... | @@ -29,7 +29,8 @@ import org.hibernate.annotations.Type; |
29 | 29 | @XmlRootElement |
30 | 30 | @Entity |
31 | 31 | @Table(schema="ANS_GERAL",name="TB_TEMPLATE_DOCUMENTO") |
32 | -@NamedQueries({@NamedQuery(name = "Template.recuperarPeloNome", query = "SELECT t FROM Template t WHERE upper(t.nome) = upper(:nome) AND t.dataExclusao is null")}) | |
32 | +@NamedQueries({@NamedQuery(name = "Template.recuperarPeloNome", query = "SELECT t FROM Template t WHERE upper(t.nome) = upper(:nome) AND t.dataExclusao is null"), | |
33 | + @NamedQuery(name = "Template.recuperarTemplateExcluidoPeloNome", query = "SELECT t FROM Template t WHERE upper(t.nome) = upper(:nome) AND t.dataExclusao is not null")}) | |
33 | 34 | public class Template implements Serializable{ |
34 | 35 | |
35 | 36 | private static final long serialVersionUID = 1L; | ... | ... |
src/main/java/br/gov/ans/templates/rest/TemplateResource.java
... | ... | @@ -81,7 +81,7 @@ public class TemplateResource { |
81 | 81 | * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template. |
82 | 82 | * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template |
83 | 83 | * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template. |
84 | - * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template � restrita. | |
84 | + * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita. | |
85 | 85 | * |
86 | 86 | * @apiSuccessExample {json} Success-Response: |
87 | 87 | * HTTP/1.1 200 OK |
... | ... | @@ -139,7 +139,7 @@ public class TemplateResource { |
139 | 139 | * @apiSuccess (Sucesso - 200) {String} template.exemplo Exemplo de request para preenchimento do template. |
140 | 140 | * @apiSuccess (Sucesso - 200) {String} template.nome Identificador do template. |
141 | 141 | * @apiSuccess (Sucesso - 200) {String} template.responsavel Analista responsável pelo template. |
142 | - * @apiSuccess (Sucesso - 200) {Boolean} template.restrito Flag identificando se a atualização deste template � restrita. | |
142 | + * @apiSuccess (Sucesso - 200) {Boolean} template.restrito Flag identificando se a atualização deste template é restrita. | |
143 | 143 | * |
144 | 144 | * @apiSuccessExample {json} Success-Response: |
145 | 145 | * HTTP/1.1 200 OK |
... | ... | @@ -222,10 +222,10 @@ public class TemplateResource { |
222 | 222 | * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template. |
223 | 223 | * @apiParam (Request Body) {String} nome Identificador do template. |
224 | 224 | * @apiParam (Request Body) {String} responsavel Analista responsável pelo template. |
225 | - * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template � restrita. | |
225 | + * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita. | |
226 | 226 | * |
227 | 227 | * @apiExample Exemplo de requisição: |
228 | - * endpoint: [PUT] http://<host>/templates-broker/service/templates/confirmacao-cadastro | |
228 | + * endpoint: [POST] http://<host>/templates-broker/service/templates/confirmacao-cadastro | |
229 | 229 | * |
230 | 230 | * body: |
231 | 231 | * { |
... | ... | @@ -286,7 +286,7 @@ public class TemplateResource { |
286 | 286 | * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template. |
287 | 287 | * @apiParam (Request Body) {String} nome Identificador do template. |
288 | 288 | * @apiParam (Request Body) {String} responsavel Analista responsável pelo template. |
289 | - * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template � restrita. | |
289 | + * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita. | |
290 | 290 | * |
291 | 291 | * @apiExample Exemplo de requisição: |
292 | 292 | * endpoint: [PUT] http://<host>/templates-broker/service/templates/confirmacao-cadastro |
... | ... | @@ -610,6 +610,118 @@ public class TemplateResource { |
610 | 610 | return Response.ok().entity(entity).build(); |
611 | 611 | } |
612 | 612 | |
613 | + | |
614 | + /** | |
615 | + * @api {delete} /templates/excluidos/:template Recuperar template | |
616 | + * @apiName undeleteTemplate | |
617 | + * @apiGroup Template | |
618 | + * @apiVersion 1.0.0 | |
619 | + * @apiPermission RO_ADMIN_TEMPLATE | |
620 | + * | |
621 | + * @apiDescription Recupera um template excluído. | |
622 | + * | |
623 | + * @apiParam (Path Parameters) {String} template Identificador do template | |
624 | + * | |
625 | + * @apiExample Exemplo de requisição: | |
626 | + * curl -X DELETE http://<host>/templates-broker/service/templates/excluidos/admp-template-novo-usuario | |
627 | + * | |
628 | + * @apiSuccessExample {json} Success-Response: | |
629 | + * HTTP/1.1 200 OK | |
630 | + * | |
631 | + * @apiErrorExample {json} Error-Response: | |
632 | + * HTTP/1.1 500 Internal Server Error | |
633 | + * { | |
634 | + * "error":"Mensagem de erro." | |
635 | + * "code":"código do erro" | |
636 | + * } | |
637 | + */ | |
638 | + @DELETE | |
639 | + @Path("excluidos/{template}") | |
640 | + @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) | |
641 | + public Response undeleteTemplate(@PathParam("template") String nomeTemplate) throws ResourceNotFoundException{ | |
642 | + Template template = getTemplateExcluido(nomeTemplate); | |
643 | + | |
644 | + template.setDataExclusao(null); | |
645 | + | |
646 | + daoTemplate.merge(template); | |
647 | + | |
648 | + return Response.ok().build(); | |
649 | + } | |
650 | + | |
651 | + /** | |
652 | + * @api {get} /templates Listar templates excluídos | |
653 | + * @apiName listTemplatesExcluidos | |
654 | + * @apiGroup Template | |
655 | + * @apiVersion 1.0.0 | |
656 | + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE | |
657 | + * | |
658 | + * @apiDescription Consulta os templates que foram excluídos. | |
659 | + * | |
660 | + * @apiParam (Query Parameters) {String} [filtro] Valor utilizado para filtrar os templates. | |
661 | + * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos | |
662 | + * @apiParam (Query Parameters) {String} [pag = 1] Número da página | |
663 | + * | |
664 | + * @apiExample Exemplo de requisição: | |
665 | + * curl -i http://<host>/templates-broker/service/templates | |
666 | + * | |
667 | + * @apiSuccess (Sucesso - 200) {List} resultado Lista com os templates encontrados. | |
668 | + * @apiSuccess (Sucesso - 200) {Template} resultado.template Objeto representando o template. | |
669 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados. | |
670 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de cadastro do template. | |
671 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de exclusao do template. | |
672 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.descricao Descrição do template. | |
673 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template. | |
674 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template | |
675 | + * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template. | |
676 | + * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita. | |
677 | + * | |
678 | + * @apiSuccessExample {json} Success-Response: | |
679 | + * HTTP/1.1 200 OK | |
680 | + * { | |
681 | + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.", | |
682 | + * "dataCadastro": "2017-03-14T16:57:47.405-03:00", | |
683 | + * "descricao": "Template de confirmação de cadastro.", | |
684 | + * "exemplo": "{"fulano":"André Guimarães"}", | |
685 | + * "nome": "confirmacao-cadastro", | |
686 | + * "responsavel": "andre.guimaraes", | |
687 | + * "restrito": false, | |
688 | + * "dataExclusao":"2017-08-14T16:57:47.405-03:00" | |
689 | + * } | |
690 | + * | |
691 | + * @apiErrorExample {json} Error-Response: | |
692 | + * HTTP/1.1 500 Internal Server Error | |
693 | + * { | |
694 | + * "error":"Mensagem de erro." | |
695 | + * "code":"código do erro" | |
696 | + * } | |
697 | + */ | |
698 | + @GET | |
699 | + @Path("excluidos") | |
700 | + @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) | |
701 | + public Response listTemplatesExcluidos(@QueryParam("filtro") String filtro, @QueryParam("pag") String pagina, @QueryParam("itens") String tamanhoPagina) throws BusinessException, ResourceNotFoundException{ | |
702 | + List<Template> templates = daoTemplate.getTemplatesExcluidos(filtro, pagina == null? null:parseInt(pagina), tamanhoPagina == null? null : parseInt(tamanhoPagina)); | |
703 | + | |
704 | + if(templates.isEmpty()){ | |
705 | + throw new ResourceNotFoundException(messages.getMessage("templates.nao.encontrados.filtro",filtro)); | |
706 | + } | |
707 | + | |
708 | + GenericEntity<List<Template>> entity = new GenericEntity<List<Template>>(templates){}; | |
709 | + | |
710 | + Long totalRegistros = daoTemplate.countTemplatesExcluidos(filtro); | |
711 | + | |
712 | + return Response.ok().entity(entity).header("total_registros", totalRegistros).build(); | |
713 | + } | |
714 | + | |
715 | + public Template getTemplateExcluido(String nomeTemplate) throws ResourceNotFoundException{ | |
716 | + Template template = daoTemplate.getTemplateExcluido(nomeTemplate); | |
717 | + | |
718 | + if(template == null){ | |
719 | + throw new ResourceNotFoundException(messages.getMessage("erro.template.nao.encontrado", nomeTemplate)); | |
720 | + } | |
721 | + | |
722 | + return template; | |
723 | + } | |
724 | + | |
613 | 725 | public void registrarHistoricoVersao(Template template){ |
614 | 726 | Versao versao = new Versao(template); |
615 | 727 | ... | ... |
src/main/java/br/gov/ans/templates/util/TemplatesUtils.java
... | ... | @@ -22,7 +22,7 @@ public class TemplatesUtils { |
22 | 22 | try{ |
23 | 23 | return Integer.parseInt(valor); |
24 | 24 | }catch(Exception e){ |
25 | - throw new BusinessException("O valor '"+valor+"' não pode ser convertido para int."); | |
25 | + throw new BusinessException("O valor '"+valor+"' não pode ser convertido para int."); | |
26 | 26 | } |
27 | 27 | } |
28 | 28 | } | ... | ... |
src/main/webapp/api-docs/api_data.js
... | ... | @@ -434,7 +434,7 @@ define({ "api": [ |
434 | 434 | "type": "String", |
435 | 435 | "optional": false, |
436 | 436 | "field": "restrito", |
437 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
437 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
438 | 438 | } |
439 | 439 | ] |
440 | 440 | } |
... | ... | @@ -604,7 +604,7 @@ define({ "api": [ |
604 | 604 | "type": "String", |
605 | 605 | "optional": false, |
606 | 606 | "field": "restrito", |
607 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
607 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
608 | 608 | } |
609 | 609 | ] |
610 | 610 | } |
... | ... | @@ -803,7 +803,7 @@ define({ "api": [ |
803 | 803 | "type": "Boolean", |
804 | 804 | "optional": false, |
805 | 805 | "field": "template.restrito", |
806 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
806 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
807 | 807 | } |
808 | 808 | ] |
809 | 809 | }, |
... | ... | @@ -1047,7 +1047,7 @@ define({ "api": [ |
1047 | 1047 | "type": "Boolean", |
1048 | 1048 | "optional": false, |
1049 | 1049 | "field": "resultado.template.restrito", |
1050 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
1050 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
1051 | 1051 | } |
1052 | 1052 | ] |
1053 | 1053 | }, | ... | ... |
src/main/webapp/api-docs/api_data.json
... | ... | @@ -434,7 +434,7 @@ |
434 | 434 | "type": "String", |
435 | 435 | "optional": false, |
436 | 436 | "field": "restrito", |
437 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
437 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
438 | 438 | } |
439 | 439 | ] |
440 | 440 | } |
... | ... | @@ -604,7 +604,7 @@ |
604 | 604 | "type": "String", |
605 | 605 | "optional": false, |
606 | 606 | "field": "restrito", |
607 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
607 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
608 | 608 | } |
609 | 609 | ] |
610 | 610 | } |
... | ... | @@ -803,7 +803,7 @@ |
803 | 803 | "type": "Boolean", |
804 | 804 | "optional": false, |
805 | 805 | "field": "template.restrito", |
806 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
806 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
807 | 807 | } |
808 | 808 | ] |
809 | 809 | }, |
... | ... | @@ -1047,7 +1047,7 @@ |
1047 | 1047 | "type": "Boolean", |
1048 | 1048 | "optional": false, |
1049 | 1049 | "field": "resultado.template.restrito", |
1050 | - "description": "<p>Flag identificando se a atualização deste template � restrita.</p>" | |
1050 | + "description": "<p>Flag identificando se a atualização deste template é restrita.</p>" | |
1051 | 1051 | } |
1052 | 1052 | ] |
1053 | 1053 | }, | ... | ... |