Commit 323ae7efab2b92192dbea764ecfcbce2dbc58cf6
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
Showing
8 changed files
with
134 additions
and
69 deletions
Show diff stats
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<Usuario> { |
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
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 | ... | ... |