Commit 323ae7efab2b92192dbea764ecfcbce2dbc58cf6

Authored by vitor.pacheco
1 parent 3f274884
Exists in master

Codificação #2723: Geração da Imagem do Selo

git-svn-id: https://svn.bento.ifrs.edu.br/default/ASES/e-selo@9589 c2178572-b5ca-4887-91d2-9e3a90c7d55b
Desenvolvimento/Codificacao/e-Selo/WebContent/static/img/modelo_selo_broze.png 0 → 100644

22 KB

Desenvolvimento/Codificacao/e-Selo/WebContent/static/img/modelo_selo_ouro.png 0 → 100644

22 KB

Desenvolvimento/Codificacao/e-Selo/WebContent/static/img/modelo_selo_prata.png 0 → 100644

22 KB

Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/component/Util.java
1 1 package br.com.eselo.component;
2 2  
  3 +import java.text.Normalizer;
  4 +import java.text.Normalizer.Form;
3 5 import java.text.ParseException;
  6 +import java.util.Locale;
  7 +import java.util.regex.Pattern;
4 8  
5 9 import javax.swing.text.MaskFormatter;
6 10  
7 11 public class Util {
8 12  
  13 + private static final Pattern NONLATIN = Pattern.compile("[^\\w-]");
  14 + private static final Pattern WHITESPACE = Pattern.compile("[\\s]");
  15 +
9 16 public static String format(String mascara, Object valor) {
10 17 MaskFormatter mask;
11   -
  18 +
12 19 try {
13 20 mask = new MaskFormatter(mascara);
14 21 mask.setValueContainsLiteralCharacters(false);
... ... @@ -17,5 +24,12 @@ public class Util {
17 24 throw new RuntimeException(e);
18 25 }
19 26 }
20   -
  27 +
  28 + public static String toSlug(String input) {
  29 + String nowhitespace = WHITESPACE.matcher(input).replaceAll("-");
  30 + String normalized = Normalizer.normalize(nowhitespace, Form.NFD);
  31 + String slug = NONLATIN.matcher(normalized).replaceAll("_");
  32 + return slug.toLowerCase(Locale.ENGLISH);
  33 + }
  34 +
21 35 }
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/controller/AvaliacaoController.java
... ... @@ -21,8 +21,10 @@ import br.com.caelum.vraptor.Validator;
21 21 import br.com.caelum.vraptor.view.Results;
22 22 import br.com.eselo.component.LeitorXML;
23 23 import br.com.eselo.component.UsuarioWeb;
  24 +import br.com.eselo.component.Util;
24 25 import br.com.eselo.dao.ParametroAvaliacaoDAO;
25 26 import br.com.eselo.dao.UrlDAO;
  27 +import br.com.eselo.dao.UsuarioDAO;
26 28 import br.com.eselo.integracao.CriterioAvaliado;
27 29 import br.com.eselo.integracao.RecomendacaoAvaliada;
28 30 import br.com.eselo.integracao.RelatorioAvaliacao;
... ... @@ -37,54 +39,55 @@ public class AvaliacaoController {
37 39  
38 40 private final Result result;
39 41 private final UrlDAO daoUrl;
  42 + private final UsuarioDAO daoUsuario;
40 43 private final ParametroAvaliacaoDAO paramDao;
41 44 private final HttpServletRequest request;
42 45  
43   - public AvaliacaoController(Result _result, UrlDAO _daoUrl, ParametroAvaliacaoDAO _paramDao,
  46 + public AvaliacaoController(Result _result, UsuarioDAO _daoUsuario, UrlDAO _daoUrl, ParametroAvaliacaoDAO _paramDao,
44 47 UsuarioWeb _usuarioWeb,Validator _validator, HttpServletRequest _request) {
  48 + daoUsuario = _daoUsuario;
45 49 daoUrl = _daoUrl;
46 50 result = _result;
47 51 paramDao = _paramDao;
48 52 request = _request;
49 53 }
50 54  
51   - public void form() {
52   -
53   - }
  55 + public void form() {}
54 56  
55 57 @Get("/avaliar/{url}")
56 58 public ResultadoAvaliacao resultado(String url) {
57   -
58 59 String xml;
59   - //Obtendo um xml de teste
60   - if(url.equals("www.teste.com.br")){
  60 + // Obtendo um xml de teste
  61 + if (url.equals("www.teste.com.br")) {
61 62 xml = RelatorioAvaliacao.TESTEXML;
62   - }else{
  63 + } else {
63 64 xml = new RelatorioAvaliacao().toString();
64 65 }
65   -
66   - //Receber o xml
67   - RelatorioAvaliacao relatorioAvaliacao = new LeitorXML().lerAvaliacaoXML(xml);
68 66  
69   - //Avaliar
70   - String mensagem ="Avaliação realizada com sucesso. [Nota "+avaliar(relatorioAvaliacao)+"]";
  67 + // Receber o xml
  68 + RelatorioAvaliacao relatorioAvaliacao = new LeitorXML()
  69 + .lerAvaliacaoXML(xml);
  70 +
  71 + // Avaliar
  72 + String mensagem = "Avaliação realizada com sucesso. [Nota "
  73 + + avaliar(relatorioAvaliacao) + "]";
71 74 result.include("mensagem", mensagem);
72   - //result.include("nomeUrl", relatorioAvaliacao.getUrl());
73   - //result.include("dataAval", relatorioAvaliacao.getDate());
  75 + // result.include("nomeUrl", relatorioAvaliacao.getUrl());
  76 + // result.include("dataAval", relatorioAvaliacao.getDate());
74 77  
75   - //teste
76   - result.include("recomendacoesList", relatorioAvaliacao.getRecomendacoes());
  78 + // teste
  79 + result.include("recomendacoesList",
  80 + relatorioAvaliacao.getRecomendacoes());
77 81 result.include("dataAval", new Date().toString());
78 82 result.include("nomeUrl", url);
79 83  
80 84 return new ResultadoAvaliacao();
81 85 }
82 86  
83   - private Double avaliar(RelatorioAvaliacao relatorioAvaliacao){
84   -
  87 + private Double avaliar(RelatorioAvaliacao relatorioAvaliacao) {
85 88 List<Recomendacao> recomendacoesValidas;
86 89 List<RecomendacaoAvaliada> recomendacoesAvaliadas;
87   - double somaPesosRecomendacoes=0.0;
  90 + double somaPesosRecomendacoes = 0.0;
88 91  
89 92 /*Nota da Avaliação = (somatório da Nota Teste / somatório do peso)
90 93 Nota da Avaliação = 2,025 + 2,3 / 3 + 4
... ... @@ -107,27 +110,34 @@ public class AvaliacaoController {
107 110 recomendacoesValidas = parametroAvaliacao.getRecomendacoes();
108 111  
109 112 //Lendo e Comparando os resultados com o Parametro de Avaliacao
110   - for(RecomendacaoAvaliada recomendacaoAvaliada: recomendacoesAvaliadas){
111   - for (Recomendacao recomendacao: recomendacoesValidas){
112   - if(recomendacaoAvaliada.getIdRecomendacao().equals(recomendacao.getNumeroRecomendacao())){
113   - for(CriterioAvaliado criterioAvaliado: recomendacaoAvaliada.getCriterios()){
114   - for(Criterio criterio: recomendacao.getCriterios()){
115   - if(criterioAvaliado.getIdCriterio().equals(criterio.getNumeroCriterio())){
116   - somatorioNotaTeste = (criterio.getResultadoTeste(criterioAvaliado))+somatorioNotaTeste;
117   - somatorioPesosCriterios = criterio.getPeso() + somatorioPesosCriterios;
  113 + for (RecomendacaoAvaliada recomendacaoAvaliada : recomendacoesAvaliadas) {
  114 + for (Recomendacao recomendacao : recomendacoesValidas) {
  115 + if (recomendacaoAvaliada.getIdRecomendacao().equals(
  116 + recomendacao.getNumeroRecomendacao())) {
  117 + for (CriterioAvaliado criterioAvaliado : recomendacaoAvaliada
  118 + .getCriterios()) {
  119 + for (Criterio criterio : recomendacao.getCriterios()) {
  120 + if (criterioAvaliado.getIdCriterio().equals(
  121 + criterio.getNumeroCriterio())) {
  122 + somatorioNotaTeste = (criterio
  123 + .getResultadoTeste(criterioAvaliado))
  124 + + somatorioNotaTeste;
  125 + somatorioPesosCriterios = criterio.getPeso()
  126 + + somatorioPesosCriterios;
118 127 break;
119 128 }
120 129 }
121 130 }
122   - somaPesosRecomendacoes = somaPesosRecomendacoes + recomendacao.getPeso();
123   - somatorioNotaRecomendacoes=((somatorioNotaTeste / somatorioPesosCriterios) * recomendacao.getPeso()) + somatorioNotaRecomendacoes;
  131 + somaPesosRecomendacoes = somaPesosRecomendacoes
  132 + + recomendacao.getPeso();
  133 + somatorioNotaRecomendacoes = ((somatorioNotaTeste / somatorioPesosCriterios) * recomendacao
  134 + .getPeso()) + somatorioNotaRecomendacoes;
124 135 somatorioNotaTeste = 0.0;
125 136 somatorioPesosCriterios = 0.0;
126 137 break;
127 138 }
128 139 }
129 140 }
130   -
131 141  
132 142 /*Calculo da Conformidade Acessibilidade
133 143 Conformidade Acessibilidade = somatório das notas das recomendações (NR) / somatório dos pesos das recomendações (PR)
... ... @@ -139,6 +149,8 @@ public class AvaliacaoController {
139 149  
140 150 conformidadeAcessibilidade = (double) new Double(conformidadeAcessibilidade * 100).intValue()/100;
141 151  
  152 + gerarSelo(relatorioAvaliacao.getUrl(), conformidadeAcessibilidade);
  153 +
142 154 return conformidadeAcessibilidade;
143 155 }
144 156  
... ... @@ -146,46 +158,51 @@ public class AvaliacaoController {
146 158 * Função REST que executa uma avaliação e devolve seu resultado no formato JSON
147 159 * @param relatorioAvaliacao
148 160 */
  161 + @SuppressWarnings("deprecation")
149 162 @Post("/calcular-nota")
150 163 public void calcularNota(RelatorioAvaliacao relatorioAvaliacao) {
151 164 ResultadoAvaliacao resultadoAvaliacao = new ResultadoAvaliacao();
152 165 String observacao = "Foi impossivel realizar a avaliação.";
153   -
154   - if (relatorioAvaliacao.getRecomendacoes().size() > 0 && relatorioAvaliacao.getDate() != null && relatorioAvaliacao.getUrl() != null) {
155   -
156   - Url url = daoUrl.getStringUrl(relatorioAvaliacao.getUrl());
157   -
158   - if(url==null){
159   - url = new Url();
160   - url.setUrl(relatorioAvaliacao.getUrl());
161   - daoUrl.save(url);
162   - }
  166 + String fullContextPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
  167 +
  168 + if (relatorioAvaliacao.getRecomendacoes().size() > 0
  169 + && relatorioAvaliacao.getDate() != null
  170 + && relatorioAvaliacao.getUrl() != null) {
  171 + Url url = daoUrl.getStringUrl(relatorioAvaliacao.getUrl());
  172 +
  173 + if (url == null) {
  174 + url = new Url();
  175 + url.setUrl(relatorioAvaliacao.getUrl());
  176 + url.setUsuario(daoUsuario.getById((long) 1));
  177 + daoUrl.save(url);
  178 + }
  179 +
  180 + resultadoAvaliacao.setPath(fullContextPath + "/static/img/" + Util.toSlug(url.getUrl()) + "/selo.png");
163 181  
164   - resultadoAvaliacao.setUrl(url.getUrl());
165   - resultadoAvaliacao.setDataSolicitacao(relatorioAvaliacao.getDate());
166   -
167   - double nota = avaliar(relatorioAvaliacao);
168   - if(nota>0){
169   - resultadoAvaliacao.setNota(nota);
170   - observacao="Avaliação realizada com sucesso!";
171   - } else {
172   - resultadoAvaliacao.setNota(null);
173   - }
174   -
  182 + resultadoAvaliacao.setUrl(url.getUrl());
  183 + resultadoAvaliacao.setDataSolicitacao(relatorioAvaliacao.getDate());
  184 +
  185 + double nota = avaliar(relatorioAvaliacao);
  186 + if (nota > 0) {
  187 + resultadoAvaliacao.setNota(nota);
  188 + observacao = "Avaliação realizada com sucesso!";
175 189 } else {
176 190 resultadoAvaliacao.setNota(null);
177   - resultadoAvaliacao.setUrl(relatorioAvaliacao.getUrl());
178   - resultadoAvaliacao.setDataSolicitacao(relatorioAvaliacao.getDate());
179 191 }
  192 + } else {
  193 + resultadoAvaliacao.setNota(null);
  194 + resultadoAvaliacao.setUrl(relatorioAvaliacao.getUrl());
  195 + resultadoAvaliacao.setDataSolicitacao(relatorioAvaliacao.getDate());
  196 + }
180 197  
181   - resultadoAvaliacao.setDataResultado(new Date());
182   - resultadoAvaliacao.setObservacoes(observacao);
183   -
184   - result.use(Results.json()).withoutRoot().from(resultadoAvaliacao).serialize();
  198 + resultadoAvaliacao.setDataResultado(new Date());
  199 + resultadoAvaliacao.setObservacoes(observacao);
  200 +
  201 + result.use(Results.json()).withoutRoot().from(resultadoAvaliacao)
  202 + .serialize();
185 203 }
186 204  
187   - @Get("/avaliacoes/selo.png")
188   - public File selo() {
  205 + public void gerarSelo(String url, double nota) {
189 206 BufferedImage img = null;
190 207 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
191 208 @SuppressWarnings("deprecation")
... ... @@ -193,24 +210,39 @@ public class AvaliacaoController {
193 210 Date dataAtual = new Date(System.currentTimeMillis());
194 211 String dataFormatada = sdf.format(dataAtual);
195 212  
  213 + String tipoSelo = null;
  214 + if (nota >= 0 && nota < 60) {
  215 + tipoSelo = "bronze";
  216 + } else if (nota >= 60 && nota < 90) {
  217 + tipoSelo = "prata";
  218 + } else {
  219 + tipoSelo = "ouro";
  220 + }
  221 +
196 222 try {
197   - img = ImageIO.read(new File(caminhoSelo + File.separator + "selo.png"));
  223 + img = ImageIO.read(new File(caminhoSelo + File.separator
  224 + + "modelo_selo_" + tipoSelo + ".png"));
198 225 } catch (IOException ex) {
199 226 ex.printStackTrace();
200 227 }
201   -
  228 +
202 229 Graphics g = img.getGraphics();
203 230 g.setColor(new Color(153, 204, 0));
204 231 g.setFont(new Font("Arial", Font.PLAIN | Font.LAYOUT_LEFT_TO_RIGHT, 12));
205   - g.drawString("Auditado em: " + dataFormatada, 8, 160);
  232 + g.drawString("Auditado em: " + dataFormatada + " (" + tipoSelo + ")", 8, 120);
  233 +
  234 + File pastaURL = new File(caminhoSelo + File.separator + Util.toSlug(url));
  235 +
  236 + if (!pastaURL.exists()) {
  237 + pastaURL.mkdirs();
  238 + }
206 239  
207 240 try {
208   - ImageIO.write(img, "PNG", new File(caminhoSelo + File.separator + "selo_auditado.png"));
  241 + ImageIO.write(img, "PNG", new File(caminhoSelo + File.separator + Util.toSlug(url) + File.separator
  242 + + "selo.png"));
209 243 } catch (IOException ex) {
210 244 ex.printStackTrace();
211 245 }
212   -
213   - return new File(caminhoSelo + File.separator + "selo_auditado.png");
214 246 }
215 247  
216 248 }
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/dao/UsuarioDAO.java
... ... @@ -52,6 +52,16 @@ public class UsuarioDAO extends GenericDAO&lt;Usuario&gt; {
52 52  
53 53 return grupoDao.listAll();
54 54 }
  55 +
  56 + public Usuario getById(Long id) {
  57 + Usuario _usuario = (Usuario) getSession()
  58 + .createCriteria(getPersistentClass())
  59 + .add(Restrictions.eq("id", id)).uniqueResult();
  60 + if (_usuario != null) {
  61 + return _usuario;
  62 + }
  63 + return null;
  64 + }
55 65  
56 66 public Usuario getByCpf(Usuario usuario) {
57 67 Usuario _usuario = (Usuario) getSession()
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/integracao/RelatorioAvaliacao.java
... ... @@ -20,7 +20,6 @@ public class RelatorioAvaliacao {
20 20 this.recomendacoes = new ArrayList<RecomendacaoAvaliada>();
21 21 }
22 22  
23   -
24 23 public String getUrl() {
25 24 return url;
26 25 }
... ...
Desenvolvimento/Codificacao/e-Selo/src/main/java/br/com/eselo/integracao/ResultadoAvaliacao.java
... ... @@ -14,6 +14,7 @@ public class ResultadoAvaliacao {
14 14 private Date dataResultado;
15 15 private Double nota;
16 16 private String observacoes;
  17 + private String path;
17 18  
18 19 public String getUrl() {
19 20 return url;
... ... @@ -55,6 +56,14 @@ public class ResultadoAvaliacao {
55 56 this.observacoes = observacoes;
56 57 }
57 58  
  59 + public String getPath() {
  60 + return path;
  61 + }
  62 +
  63 + public void setPath(String path) {
  64 + this.path = path;
  65 + }
  66 +
58 67 @Override
59 68 public String toString() {
60 69 XStream xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyReplacer("__", "_")));
... ... @@ -66,6 +75,7 @@ public class ResultadoAvaliacao {
66 75 xstream.aliasField("data_resultado", ResultadoAvaliacao.class, "dataResultado");
67 76 xstream.aliasField("nota", ResultadoAvaliacao.class, "nota");
68 77 xstream.aliasField("observacoes", ResultadoAvaliacao.class, "observacoes");
  78 + xstream.aliasField("path", ResultadoAvaliacao.class, "path");
69 79  
70 80 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+xstream.toXML(this);
71 81  
... ...