Commit 0b556559a40d9ff6b6330ff61f98a26ef38c0636

Authored by rodrigo.lima
1 parent 3aa2b209

git-svn-id: https://svn.bento.ifrs.edu.br/default/ASES/ASES%20-%20Web/ASES%20-%2…

…0Web/Fontes/avaliador-web@10512 c2178572-b5ca-4887-91d2-9e3a90c7d55b
src/main/java/br/com/ases/business/AvaliacaoBusiness.java
... ... @@ -16,4 +16,5 @@ public interface AvaliacaoBusiness {
16 16 Nota obterNota(List<SummarizedOccurrence> occurrences,String url);
17 17 Map<OccurrenceKey,Map<String,List<Occurrence>>> retornarCriterios(Map<OccurrenceClassification,List<Occurrence>> resultadoAvaliacao);
18 18 void initEseloProperties(ServletContext servletContext);
  19 + public int[] getErrorCount(boolean isCss,String url);
19 20 }
... ...
src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java
1 1 package br.com.ases.business.impl;
2 2  
3 3 import java.util.ArrayList;
  4 +import java.util.Collection;
4 5 import java.util.Date;
5 6 import java.util.HashMap;
6 7 import java.util.List;
7 8 import java.util.Map;
8 9 import java.util.Map.Entry;
9 10 import java.util.TreeSet;
  11 +import java.util.regex.Matcher;
  12 +import java.util.regex.Pattern;
10 13  
11 14 import javax.servlet.ServletContext;
12 15  
13 16 import br.com.ases.business.AvaliacaoBusiness;
14 17 import br.com.ases.controller.EseloController;
15 18 import br.com.ases.controller.EseloController.Nota;
  19 +import br.com.ases.domain.HtmlValidation;
16 20 import br.com.ases.domain.OccurrenceKey;
17 21 import br.com.ases.infra.EseloProperties;
18 22 import br.com.ases.infra.WebChecker;
... ... @@ -23,13 +27,16 @@ import br.com.checker.emag.SummarizedOccurrence;
23 27  
24 28 import com.google.gson.Gson;
25 29 import com.google.gson.GsonBuilder;
  30 +import com.google.gson.reflect.TypeToken;
26 31  
27 32  
28 33 @Component
29 34 public class AvaliacaoBusinessImpl implements AvaliacaoBusiness{
30 35 EseloProperties eseloProperties = null;
31 36  
32   - //private static final String CALCULAR_NOTA_REST = "https://sistemas-treinamento.ifbaiano.edu.br/eselo/calcular-nota";
  37 +
  38 + private static String CSS_VALIDATOR_URL = "http://www.css-validator.org/validator?uri=#{url}&warning=0&output=soap12";
  39 + private static String HTML_VALIDATOR_URL = "https://validator.w3.org/nu/?doc=#{url}&out=json";
33 40  
34 41 public Nota obterNota(List<SummarizedOccurrence> occurrences,String url) {
35 42 Nota nota = null;
... ... @@ -165,6 +172,46 @@ public class AvaliacaoBusinessImpl implements AvaliacaoBusiness{
165 172 return map;
166 173 }
167 174  
  175 + public int[] getErrorCount(boolean isCss,String url){
  176 + int errors = 0;
  177 + int warnings = 0;
  178 +
  179 + try{
  180 + if(isCss){
  181 + String content = WebChecker.from(CSS_VALIDATOR_URL.replace("#{url}", url)).withGetRequest().execute().getContent();
  182 + Matcher m = Pattern.compile("<m:errorcount>(\\d)*</m:errorcount>",Pattern.MULTILINE).matcher(content);
  183 + if(m.find())
  184 + errors = Integer.valueOf(m.group(0).replace("<m:errorcount>", "").replace("</m:errorcount>", ""));
  185 +
  186 + m = Pattern.compile("<m:warningcount>(\\d)*</m:warningcount>",Pattern.MULTILINE).matcher(content);
  187 +
  188 + if(m.find())
  189 + warnings = Integer.valueOf(m.group(0).replace("<m:warningcount>", "").replace("</m:warningcount>", ""));
  190 +
  191 + }else{
  192 +
  193 + String content = WebChecker.from(HTML_VALIDATOR_URL.replace("#{url}", url)).withGetRequest().execute().getContent();
  194 + Gson g = new GsonBuilder().create();
  195 + HtmlValidation a = g.fromJson(content, HtmlValidation.class);
  196 + int[] errorsWarnings = a.getQtdWarningsErros();
  197 + errors = errorsWarnings[1];
  198 + warnings = errorsWarnings[0];
  199 +
  200 + }
  201 + }catch(Exception e){
  202 + e.printStackTrace();
  203 + }
  204 +
  205 + return new int[]{errors,warnings};
  206 + }
  207 +
  208 + public static void main(String ...arg) {
  209 + int[] teste = new AvaliacaoBusinessImpl().getErrorCount(false, "http://www.agritempo.gov.br/agritempo/index.jsp");
  210 +
  211 + System.out.println("errors :" +teste[0]);
  212 + System.out.println("warnings :" +teste[1]);
  213 + }
  214 +
168 215 public static Map<OccurrenceClassification,List<Occurrence>> resultadoAvaliacao = new HashMap<OccurrenceClassification, List<Occurrence>>();
169 216  
170 217 static {
... ...
src/main/java/br/com/ases/controller/AvaliacaoController.java
... ... @@ -170,6 +170,8 @@ public class AvaliacaoController {
170 170 if(url.startsWith("www")) url="http://"+url;
171 171  
172 172 WebChecker pagina = WebChecker.from(url).withGetRequest().execute();
  173 + int[] errorsWarningsCss = avaliacaoBusiness.getErrorCount(true,url);
  174 + int[] errorsWarningsHtml = avaliacaoBusiness.getErrorCount(false,url);
173 175  
174 176 Checker checker = from(pagina.getContent(),url);
175 177  
... ... @@ -193,7 +195,7 @@ public class AvaliacaoController {
193 195 result.include("nota",nota);
194 196 this.sumarizarResultasNoResponse(checker.checkSumarized(), result);
195 197  
196   - this.detalheAvaliacao.inicializar(avaliacaoBusiness.retornarCriterios(checker.check()));
  198 + this.detalheAvaliacao.inicializar(avaliacaoBusiness.retornarCriterios(checker.check()),errorsWarningsCss,errorsWarningsHtml);
197 199 VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("resultadoAvaliacao", checker.checkSumarized());
198 200 VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("urlAvaliada", url);
199 201 VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("contentLenght", pagina.getContentLength());
... ... @@ -415,6 +417,14 @@ public class AvaliacaoController {
415 417 result.include("detalhe",this.detalheAvaliacao.get(rn, type));
416 418 result.include("listOcorrencia",listOcorrencias);
417 419 result.include("isError",type);
  420 + if(type){
  421 + result.include("qtdOcorrenciasCss",this.detalheAvaliacao.getErrorsCss());
  422 + result.include("qtdOcorrenciasHtml",this.detalheAvaliacao.getErrorsHtml());
  423 + }else{
  424 + result.include("qtdOcorrenciasCss",this.detalheAvaliacao.getWarningsCss());
  425 + result.include("qtdOcorrenciasHtml",this.detalheAvaliacao.getWarningsHtml());
  426 + }
  427 +
418 428  
419 429 List<SummarizedOccurrence> ob = (List<SummarizedOccurrence>) VRaptorRequestHolder.currentRequest().getServletContext().getAttribute("resultadoAvaliacao");
420 430 String recomendacao = "";
... ...
src/main/java/br/com/ases/domain/DetalheAvaliacao.java
... ... @@ -22,6 +22,8 @@ public class DetalheAvaliacao {
22 22  
23 23 private CriterioProperties criterioProperties;
24 24 private Map<OccurrenceKey,Map<String,List<Occurrence>>> detalhes;
  25 + private int[] warningsErrorsCss;
  26 + private int[] warningsErrorsHtml;
25 27  
26 28 public DetalheAvaliacao(CriterioProperties criterioProperties){
27 29 this.criterioProperties = criterioProperties;
... ... @@ -31,6 +33,12 @@ public class DetalheAvaliacao {
31 33 this.detalhes = detalhes;
32 34 }
33 35  
  36 + public void inicializar(Map<OccurrenceKey,Map<String,List<Occurrence>>> detalhes,int[] warningsErrorsCss,int[] warningsErrorsHtml) {
  37 + this.detalhes = detalhes;
  38 + this.warningsErrorsCss = warningsErrorsCss;
  39 + this.warningsErrorsHtml= warningsErrorsHtml;
  40 +
  41 + }
34 42  
35 43 public Detalhe get(OccurrenceKey rn) {
36 44 return new Detalhe(rn.getCode(),this.detalhes.get(rn));
... ... @@ -40,6 +48,22 @@ public class DetalheAvaliacao {
40 48 return new Detalhe(rn.getCode(),type,this.detalhes.get(rn));
41 49 }
42 50  
  51 + public int getErrorsCss(){
  52 + return this.warningsErrorsCss!=null ?this.warningsErrorsCss[0] : 0;
  53 + }
  54 +
  55 + public int getWarningsCss(){
  56 + return this.warningsErrorsCss!=null ?this.warningsErrorsCss[1] : 0;
  57 + }
  58 +
  59 + public int getErrorsHtml(){
  60 + return this.warningsErrorsHtml!=null ?this.warningsErrorsHtml[0] : 0;
  61 + }
  62 +
  63 + public int getWarningsHtml(){
  64 + return this.warningsErrorsHtml!=null ?this.warningsErrorsHtml[1] : 0;
  65 + }
  66 +
43 67  
44 68 public @Getter class Detalhe {
45 69  
... ...
src/main/java/br/com/ases/domain/HtmlValidation.java 0 → 100644
... ... @@ -0,0 +1,56 @@
  1 +package br.com.ases.domain;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.List;
  5 +
  6 +public class HtmlValidation {
  7 +
  8 + List<Message> messages = new ArrayList<HtmlValidation.Message>();
  9 +
  10 +
  11 + public List<Message> getMessages() {
  12 + return messages;
  13 + }
  14 +
  15 + public void setMessages(List<Message> messages) {
  16 + this.messages = messages;
  17 + }
  18 +
  19 + public int[] getQtdWarningsErros(){
  20 + int warnings=0;
  21 + int erros = 0;
  22 + for(Message message: this.messages ){
  23 + if(message.isError())
  24 + erros++;
  25 + else if (message.isWarning())
  26 + warnings++;
  27 + }
  28 +
  29 + return new int[]{warnings,erros};
  30 + }
  31 +
  32 + public HtmlValidation(){}
  33 +
  34 + public class Message{
  35 +
  36 + private String type;
  37 +
  38 + private String subType;
  39 +
  40 + public String getType() { return type; }
  41 +
  42 + public void setType(String type) { this.type = type; }
  43 +
  44 + public String getSubType() { return subType; }
  45 +
  46 + public void setSubType(String subType) { this.subType = subType; }
  47 +
  48 + public boolean isWarning(){ return "info".equals(type) && "warning".equals(this.subType); }
  49 +
  50 + public boolean isError(){ return "error".equals(this.type);}
  51 +
  52 + }
  53 +}
  54 +
  55 +
  56 +
... ...
src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp
... ... @@ -56,7 +56,29 @@
56 56 <td class="celula" width="2%"> ${criterio.id} </td>
57 57 <td class="celula" width="60%" align="left">${criterio.descricao}</td>
58 58  
59   - <td class="celula">${criterio.numeroOcorrencias}</td>
  59 + <td class="celula">
  60 +
  61 + <c:choose>
  62 + <c:when test="${rn == '1.1'}">
  63 + <c:choose>
  64 + <c:when test="${criterio.id == 1 }">
  65 + ${qtdOcorrenciasHtml}
  66 + </c:when>
  67 + <c:when test="${criterio.id == 2 }">
  68 + ${qtdOcorrenciasCss}
  69 + </c:when>
  70 + <c:otherwise>
  71 + ${criterio.numeroOcorrencias}
  72 + </c:otherwise>
  73 + </c:choose>
  74 + </c:when>
  75 + <c:otherwise>
  76 + ${criterio.numeroOcorrencias}
  77 + </c:otherwise>
  78 + </c:choose>
  79 +
  80 +
  81 + </td>
60 82 <td class="celula">
61 83  
62 84  
... ... @@ -143,7 +165,7 @@
143 165 </a>
144 166 </c:when>
145 167 <c:when test="${ocorrencia.htmlEvaluation }">
146   - <a name="${ocorrencia.criterio}.${ocorrencia.posLineOccurrence}" href="https://validator.w3.org/nu/?doc=http%3A%2F%2F${ocorrencia.tag}" target="_blank">
  168 + <a name="${ocorrencia.criterio}.${ocorrencia.posLineOccurrence}" href="https://validator.w3.org/nu/?doc=${ocorrencia.tag}" target="_blank">
147 169 ${ocorrencia.line} : Serviço de validação de HTML do W3C : ${ocorrencia.tag}
148 170 </a>
149 171 </c:when>
... ...