Commit b759774e03d10d3f5a172629642ef0ad0e67563f

Authored by andre guimaraes
1 parent d8ea19a6
Exists in master

Novo reource para restauração de template e pom.xml com deploy automatizado pelo Maven

.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({ &quot;api&quot;: [
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({ &quot;api&quot;: [
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({ &quot;api&quot;: [
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({ &quot;api&quot;: [
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 },
... ...