From 0b556559a40d9ff6b6330ff61f98a26ef38c0636 Mon Sep 17 00:00:00 2001 From: rodrigo.lima Date: Fri, 6 Nov 2015 02:00:45 +0000 Subject: [PATCH] git-svn-id: https://svn.bento.ifrs.edu.br/default/ASES/ASES%20-%20Web/ASES%20-%20Web/Fontes/avaliador-web@10512 c2178572-b5ca-4887-91d2-9e3a90c7d55b --- src/main/java/br/com/ases/business/AvaliacaoBusiness.java | 1 + src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- src/main/java/br/com/ases/controller/AvaliacaoController.java | 12 +++++++++++- src/main/java/br/com/ases/domain/DetalheAvaliacao.java | 24 ++++++++++++++++++++++++ src/main/java/br/com/ases/domain/HtmlValidation.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp | 26 ++++++++++++++++++++++++-- 6 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 src/main/java/br/com/ases/domain/HtmlValidation.java diff --git a/src/main/java/br/com/ases/business/AvaliacaoBusiness.java b/src/main/java/br/com/ases/business/AvaliacaoBusiness.java index 58d5b65..2d6d838 100644 --- a/src/main/java/br/com/ases/business/AvaliacaoBusiness.java +++ b/src/main/java/br/com/ases/business/AvaliacaoBusiness.java @@ -16,4 +16,5 @@ public interface AvaliacaoBusiness { Nota obterNota(List occurrences,String url); Map>> retornarCriterios(Map> resultadoAvaliacao); void initEseloProperties(ServletContext servletContext); + public int[] getErrorCount(boolean isCss,String url); } diff --git a/src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java b/src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java index 251c981..322ae45 100644 --- a/src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java +++ b/src/main/java/br/com/ases/business/impl/AvaliacaoBusinessImpl.java @@ -1,18 +1,22 @@ package br.com.ases.business.impl; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.servlet.ServletContext; import br.com.ases.business.AvaliacaoBusiness; import br.com.ases.controller.EseloController; import br.com.ases.controller.EseloController.Nota; +import br.com.ases.domain.HtmlValidation; import br.com.ases.domain.OccurrenceKey; import br.com.ases.infra.EseloProperties; import br.com.ases.infra.WebChecker; @@ -23,13 +27,16 @@ import br.com.checker.emag.SummarizedOccurrence; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; @Component public class AvaliacaoBusinessImpl implements AvaliacaoBusiness{ EseloProperties eseloProperties = null; - //private static final String CALCULAR_NOTA_REST = "https://sistemas-treinamento.ifbaiano.edu.br/eselo/calcular-nota"; + + private static String CSS_VALIDATOR_URL = "http://www.css-validator.org/validator?uri=#{url}&warning=0&output=soap12"; + private static String HTML_VALIDATOR_URL = "https://validator.w3.org/nu/?doc=#{url}&out=json"; public Nota obterNota(List occurrences,String url) { Nota nota = null; @@ -165,6 +172,46 @@ public class AvaliacaoBusinessImpl implements AvaliacaoBusiness{ return map; } + public int[] getErrorCount(boolean isCss,String url){ + int errors = 0; + int warnings = 0; + + try{ + if(isCss){ + String content = WebChecker.from(CSS_VALIDATOR_URL.replace("#{url}", url)).withGetRequest().execute().getContent(); + Matcher m = Pattern.compile("(\\d)*",Pattern.MULTILINE).matcher(content); + if(m.find()) + errors = Integer.valueOf(m.group(0).replace("", "").replace("", "")); + + m = Pattern.compile("(\\d)*",Pattern.MULTILINE).matcher(content); + + if(m.find()) + warnings = Integer.valueOf(m.group(0).replace("", "").replace("", "")); + + }else{ + + String content = WebChecker.from(HTML_VALIDATOR_URL.replace("#{url}", url)).withGetRequest().execute().getContent(); + Gson g = new GsonBuilder().create(); + HtmlValidation a = g.fromJson(content, HtmlValidation.class); + int[] errorsWarnings = a.getQtdWarningsErros(); + errors = errorsWarnings[1]; + warnings = errorsWarnings[0]; + + } + }catch(Exception e){ + e.printStackTrace(); + } + + return new int[]{errors,warnings}; + } + + public static void main(String ...arg) { + int[] teste = new AvaliacaoBusinessImpl().getErrorCount(false, "http://www.agritempo.gov.br/agritempo/index.jsp"); + + System.out.println("errors :" +teste[0]); + System.out.println("warnings :" +teste[1]); + } + public static Map> resultadoAvaliacao = new HashMap>(); static { diff --git a/src/main/java/br/com/ases/controller/AvaliacaoController.java b/src/main/java/br/com/ases/controller/AvaliacaoController.java index fe54585..7640293 100644 --- a/src/main/java/br/com/ases/controller/AvaliacaoController.java +++ b/src/main/java/br/com/ases/controller/AvaliacaoController.java @@ -170,6 +170,8 @@ public class AvaliacaoController { if(url.startsWith("www")) url="http://"+url; WebChecker pagina = WebChecker.from(url).withGetRequest().execute(); + int[] errorsWarningsCss = avaliacaoBusiness.getErrorCount(true,url); + int[] errorsWarningsHtml = avaliacaoBusiness.getErrorCount(false,url); Checker checker = from(pagina.getContent(),url); @@ -193,7 +195,7 @@ public class AvaliacaoController { result.include("nota",nota); this.sumarizarResultasNoResponse(checker.checkSumarized(), result); - this.detalheAvaliacao.inicializar(avaliacaoBusiness.retornarCriterios(checker.check())); + this.detalheAvaliacao.inicializar(avaliacaoBusiness.retornarCriterios(checker.check()),errorsWarningsCss,errorsWarningsHtml); VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("resultadoAvaliacao", checker.checkSumarized()); VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("urlAvaliada", url); VRaptorRequestHolder.currentRequest().getServletContext().setAttribute("contentLenght", pagina.getContentLength()); @@ -415,6 +417,14 @@ public class AvaliacaoController { result.include("detalhe",this.detalheAvaliacao.get(rn, type)); result.include("listOcorrencia",listOcorrencias); result.include("isError",type); + if(type){ + result.include("qtdOcorrenciasCss",this.detalheAvaliacao.getErrorsCss()); + result.include("qtdOcorrenciasHtml",this.detalheAvaliacao.getErrorsHtml()); + }else{ + result.include("qtdOcorrenciasCss",this.detalheAvaliacao.getWarningsCss()); + result.include("qtdOcorrenciasHtml",this.detalheAvaliacao.getWarningsHtml()); + } + List ob = (List) VRaptorRequestHolder.currentRequest().getServletContext().getAttribute("resultadoAvaliacao"); String recomendacao = ""; diff --git a/src/main/java/br/com/ases/domain/DetalheAvaliacao.java b/src/main/java/br/com/ases/domain/DetalheAvaliacao.java index 47b6926..cf5ef53 100644 --- a/src/main/java/br/com/ases/domain/DetalheAvaliacao.java +++ b/src/main/java/br/com/ases/domain/DetalheAvaliacao.java @@ -22,6 +22,8 @@ public class DetalheAvaliacao { private CriterioProperties criterioProperties; private Map>> detalhes; + private int[] warningsErrorsCss; + private int[] warningsErrorsHtml; public DetalheAvaliacao(CriterioProperties criterioProperties){ this.criterioProperties = criterioProperties; @@ -31,6 +33,12 @@ public class DetalheAvaliacao { this.detalhes = detalhes; } + public void inicializar(Map>> detalhes,int[] warningsErrorsCss,int[] warningsErrorsHtml) { + this.detalhes = detalhes; + this.warningsErrorsCss = warningsErrorsCss; + this.warningsErrorsHtml= warningsErrorsHtml; + + } public Detalhe get(OccurrenceKey rn) { return new Detalhe(rn.getCode(),this.detalhes.get(rn)); @@ -40,6 +48,22 @@ public class DetalheAvaliacao { return new Detalhe(rn.getCode(),type,this.detalhes.get(rn)); } + public int getErrorsCss(){ + return this.warningsErrorsCss!=null ?this.warningsErrorsCss[0] : 0; + } + + public int getWarningsCss(){ + return this.warningsErrorsCss!=null ?this.warningsErrorsCss[1] : 0; + } + + public int getErrorsHtml(){ + return this.warningsErrorsHtml!=null ?this.warningsErrorsHtml[0] : 0; + } + + public int getWarningsHtml(){ + return this.warningsErrorsHtml!=null ?this.warningsErrorsHtml[1] : 0; + } + public @Getter class Detalhe { diff --git a/src/main/java/br/com/ases/domain/HtmlValidation.java b/src/main/java/br/com/ases/domain/HtmlValidation.java new file mode 100644 index 0000000..a1a8b83 --- /dev/null +++ b/src/main/java/br/com/ases/domain/HtmlValidation.java @@ -0,0 +1,56 @@ +package br.com.ases.domain; + +import java.util.ArrayList; +import java.util.List; + +public class HtmlValidation { + + List messages = new ArrayList(); + + + public List getMessages() { + return messages; + } + + public void setMessages(List messages) { + this.messages = messages; + } + + public int[] getQtdWarningsErros(){ + int warnings=0; + int erros = 0; + for(Message message: this.messages ){ + if(message.isError()) + erros++; + else if (message.isWarning()) + warnings++; + } + + return new int[]{warnings,erros}; + } + + public HtmlValidation(){} + + public class Message{ + + private String type; + + private String subType; + + public String getType() { return type; } + + public void setType(String type) { this.type = type; } + + public String getSubType() { return subType; } + + public void setSubType(String subType) { this.subType = subType; } + + public boolean isWarning(){ return "info".equals(type) && "warning".equals(this.subType); } + + public boolean isError(){ return "error".equals(this.type);} + + } +} + + + diff --git a/src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp b/src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp index 9223083..ee29fd1 100644 --- a/src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp +++ b/src/main/webapp/WEB-INF/jsp/avaliacao/detalhesAvaliacao.jsp @@ -56,7 +56,29 @@ ${criterio.id} ${criterio.descricao} - ${criterio.numeroOcorrencias} + + + + + + + ${qtdOcorrenciasHtml} + + + ${qtdOcorrenciasCss} + + + ${criterio.numeroOcorrencias} + + + + + ${criterio.numeroOcorrencias} + + + + + @@ -143,7 +165,7 @@ - + ${ocorrencia.line} : Serviço de validação de HTML do W3C : ${ocorrencia.tag} -- libgit2 0.21.2