From e258e45a4189dcfdbd47339255831e9f69d34ea2 Mon Sep 17 00:00:00 2001 From: Benoit Larroque Date: Mon, 14 Nov 2011 16:12:29 +0100 Subject: [PATCH] Correct timeout issue and display source after validation --- .../webvalidator/OPDSValidatorWebServlet.java | 38 +++++++++++-- war/css/main.css | 10 +++- war/index.html | 56 ++++++++++++------- 3 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/com/feedbooks/opds/webvalidator/OPDSValidatorWebServlet.java b/src/com/feedbooks/opds/webvalidator/OPDSValidatorWebServlet.java index be7b189..6eb9622 100644 --- a/src/com/feedbooks/opds/webvalidator/OPDSValidatorWebServlet.java +++ b/src/com/feedbooks/opds/webvalidator/OPDSValidatorWebServlet.java @@ -1,16 +1,28 @@ package com.feedbooks.opds.webvalidator; +import java.io.BufferedWriter; import java.io.IOException; +import java.io.StringWriter; +import java.net.URL; + import javax.servlet.http.*; + +import org.json.JSONString; + import com.feedbooks.opds.*; +import com.google.appengine.api.urlfetch.HTTPMethod; +import com.google.appengine.api.urlfetch.HTTPRequest; +import com.google.appengine.api.urlfetch.HTTPResponse; +import com.google.appengine.api.urlfetch.URLFetchServiceFactory; +import com.google.appengine.repackaged.org.json.JSONObject; import com.thaiopensource.xml.sax.ErrorHandlerImpl; +import static com.google.appengine.api.urlfetch.FetchOptions.Builder.*; @SuppressWarnings("serial") public class OPDSValidatorWebServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("application/json"); - String uri = req.getParameter("uri"); if (uri != null && !uri.equals("") && uri.startsWith("http")) { Validator v = new Validator(); @@ -20,16 +32,32 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) opds_version = ve; } v.SetOPDSVersion(opds_version); - ErrorHandlerImpl eh = new JSONErrorHandlerImpl(resp - .getOutputStream()); + StringWriter validation_results=new StringWriter(); + ErrorHandlerImpl eh = new JSONErrorHandlerImpl(validation_results); v.SetErrorHandler(eh); - boolean hadErr = v.validate(req.getParameterValues("uri")); + + URL url=new URL(req.getParameter("uri")); + HTTPResponse get =URLFetchServiceFactory.getURLFetchService().fetch(new HTTPRequest(url, HTTPMethod.GET,followRedirects().setDeadline(60.0))); + String source=new String(get.getContent()); + String[] args={source}; + String[] names={url.toString()}; + boolean hadErr = v.validate(args,names); if (hadErr) { resp.setStatus(409); } - eh.close(); + //resp.getOutputStream(); + BufferedWriter w=new BufferedWriter(resp.getWriter()); + w.append("{ \"results\": "); + w.append(validation_results.getBuffer()); + w.append(", \"source\": "); + w.append(JSONObject.quote(source)); + w.append("}"); + + + w.close(); + } else { resp.setStatus(400); } diff --git a/war/css/main.css b/war/css/main.css index 284b045..2f3cbc1 100644 --- a/war/css/main.css +++ b/war/css/main.css @@ -113,4 +113,12 @@ li span.err_type img { .msg { font-weight: bold; line-height: 130%; -} \ No newline at end of file +} + +#source { + background-color:#FFF; + font-family: consolas,courrier,monospace; + padding:15px; + +} + diff --git a/war/index.html b/war/index.html index 41cd364..87bb132 100644 --- a/war/index.html +++ b/war/index.html @@ -1,11 +1,4 @@ - - - - - - - @@ -78,7 +71,8 @@

Unofficial Validator

function validation_successful(errs){ //console.log("success"); res_init(true); - if(errs.length > 0 ){ + + if(errs.results.length > 0 ){ $("#results h3").append(" with warnings"); render_validation_results(errs); @@ -88,6 +82,7 @@

Unofficial Validator

function validation_failed(req){ // console.log("failure"); + res_init(false); if(req.status==409){ var errs=$.parseJSON(req.responseText); @@ -100,32 +95,51 @@

Unofficial Validator

function render_validation_results(errs){ var resu="
    " - for(var i=0;i" - }else if(errs[i].severity=="fatal"){ + }else if(errs.results[i].severity=="fatal"){ txt="\"Fatal" - }if(errs[i].severity=="warning"){ + }if(errs.results[i].severity=="warning"){ txt="\"Warning\"" - }if(errs[i].severity=="info"){ + }if(errs.results[i].severity=="info"){ txt="\"Information\"" } txt=""+txt+"" txt+="" - if(errs[i].line > 0 ){ - txt+="Line "+errs[i].line - if(errs[i].column > 0){txt+=", "} + if(errs.results[i].line > 0 ){ + txt+="" + txt+="Line "+errs.results[i].line + txt+="" + errtab[errs.results[i].line]=errs.results[i].severity; + if(errs.results[i].column > 0){txt+=", "} } - if(errs[i].column > 0){ - txt+="Column "+errs[i].column + if(errs.results[i].column > 0){ + txt+="Column "+errs.results[i].column } - txt+=" \n"+errs[i].message+"" + txt+=" \n"+errs.results[i].message+"" + resu+="
  1. "+txt+"
  2. " + }else{ + resu+="
  3. \"FatalFatal\n"+errs.results[i]+"
  4. " + } + } + resu+="
" - resu+="
  • "+txt+"
  • " + resu+="

    Source

      " + var lines=errs.source.split("\n"); + + for(var i=0;i"+lines[i].replace(/&/g,"&").replace(/>/g,">").replace(/" } - $("#results").append(resu+"
    ") + + + + $("#results").append(resu+"
    ") } function form_submitted(){