From: jprocter Date: Mon, 5 Feb 2007 17:36:21 +0000 (+0000) Subject: simplified and refactored along with cgi-script. X-Git-Tag: Release_2_3~371 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=e5b366e9af81b30196c3c31727fd6b0091502527;p=jalview.git simplified and refactored along with cgi-script. --- diff --git a/src/jalview/gui/UserQuestionnaireCheck.java b/src/jalview/gui/UserQuestionnaireCheck.java index b2b19b9..b9e741a 100644 --- a/src/jalview/gui/UserQuestionnaireCheck.java +++ b/src/jalview/gui/UserQuestionnaireCheck.java @@ -14,98 +14,72 @@ public class UserQuestionnaireCheck implements Runnable { * This is intended to work with the perl CGI scripts checkresponder.pl and * questionnaire.pl */ - String url; + String url=null; UserQuestionnaireCheck(String url) { - this.url = url; + if (url.indexOf("questionnaire.pl")==-1) { + jalview.bin.Cache.log.error("'"+url+"' is an Invalid URL for the checkForQuestionnaire() method.\n" + +"This argument is only for questionnaires derived from jalview's questionnaire.pl cgi interface."); + } else { + this.url = url; + } } - public void run() { + String qid=null,rid=null; + private boolean checkresponse(URL qurl) throws Exception { boolean prompt=false; - try { - if (url.indexOf("checkresponder.pl")==-1) { - throw new Error("Invalid URL for the checkForQuestionnaire() method. The -questionnaire method is for Jalview user questionnaires only."); - } - // extract qid if there is one - else just get the latest - String rid=null,qid=null; - String args=null; - String baseurl=null,surl=null; - int t; - if ((t=url.indexOf("?"))>-1) { - args=url.substring(t+1); - surl=url.substring(0,t); - } - if ((t=url.lastIndexOf('/'))>-1) { - baseurl=url.substring(0,t+1); - } - if (args!=null && (t=args.indexOf("qid="))>-1) { - int e = args.indexOf("&",t+4); - if (e<0) - qid=args.substring(t+4); - else - qid=args.substring(t+4,e); - if (qid!=null && qid.length()==0) - qid=null; - } - - if (qid==null) { - // get a new questionnaire - URL qurl = new URL(url); - BufferedReader br = new BufferedReader(new InputStreamReader(qurl.openStream())); - String qresp=null; - while ((qresp=br.readLine())!=null) { - // check if response is of form we expect. - if (qresp.indexOf(':')>-1) { - rid=null; - qid=qresp.substring(0,qresp.indexOf(':')); - if (qresp.indexOf(':')<(qresp.length()-1)) { - rid = qresp.substring(qresp.indexOf(':')+1); - } - } - } + // see if we have already responsed to this questionnaire or get a new qid/rid pair + BufferedReader br = new BufferedReader(new InputStreamReader(qurl.openStream())); + String qresp; + while ((qresp=br.readLine())!=null) { + if (qresp.indexOf("NOTYET:")==0) { + prompt=true; // not yet responded under that ID } else { - // retrieve an id for an existing questionnaire - // get a new questionnaire - URL qurl = new URL(url); - BufferedReader br = new BufferedReader(new InputStreamReader(qurl.openStream())); - String qresp=null; - while ((qresp=br.readLine())!=null) { + if (qresp.indexOf("RESPONDED:")==-1) { + // may be a qid:rid for the latest questionnaire. // check if response is of form we expect. if (qresp.indexOf(':')>-1) { rid=null; qid=qresp.substring(0,qresp.indexOf(':')); if (qresp.indexOf(':')<(qresp.length()-1)) { rid = qresp.substring(qresp.indexOf(':')+1); + prompt=true; // this is a new qid/rid pair } } + } else { + prompt=false; } - } - // compare the questionnaire id against the id of the last questionnaire - // that the user was prompted with. - if (qid!=null) { - String lastq=jalview.bin.Cache.getProperty("QUESTIONNAIRE"); - if (lastq==null || !lastq.startsWith(qid+":")) { - prompt = true; - } else { - String qrid = lastq.substring(lastq.indexOf(':')+1); // retrieve old rid - if (qrid!=null && !qrid.equals("null")) - rid = qrid; - // see if we have already responsed to this questionnaire. - URL qurl = new URL(url+"?qid="+qid+"&rid="+rid); - BufferedReader br = new BufferedReader(new InputStreamReader(qurl.openStream())); - String qresp; - if (br.ready() && (qresp=br.readLine())!=null && qresp.indexOf("NOTYET")>-1) { - prompt=true; // not yet responded under that ID - } + } + return prompt; + } + public void run() { + if (url==null) + return; + boolean prompt=false; + try { + // First - check to see if wee have an old questionnaire/response id pair. + String lastq=jalview.bin.Cache.getProperty("QUESTIONNAIRE"); + if (lastq==null) { + prompt = checkresponse(new URL(url+(url.indexOf('?')>-1 ? "&" : "?") +"checkresponse=1")); + } else { + String qurl=url+(url.indexOf('?')>-1 ? "&" : "?") +"checkresponse=1"; + // query the server with the old qid/id pair + String qqid = lastq.indexOf(':')>-1 ? lastq.substring(0,lastq.indexOf(':')) : null; + if (qqid!=null && qqid.length()>0) { + qurl+="&qid="+qqid; + qid=qqid; + } + String qrid = lastq.substring(lastq.indexOf(':')+1); // retrieve old rid + if (qrid!=null && !qrid.equals("null")) { + rid=qrid; + qurl+="&rid="+qrid; } + // see if we have already responsed to this questionnaire. + prompt = checkresponse(new URL(qurl)); } - // Update our local property cache + // Update our local property cache with latest qid and rid jalview.bin.Cache.setProperty("QUESTIONNAIRE",qid+":"+rid); if (prompt) { - String qurl = null; - if (baseurl!=null) - qurl = baseurl+"questionnaire.pl?qid="+qid+"&rid="+rid; - else - qurl = url; + String qurl = url+(url.indexOf('?')>-1 ? "&" : "?") + "qid="+qid+"&rid="+rid; jalview.bin.Cache.log.info("Prompting user for questionnaire at "+qurl); int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, "There is a new Questionnaire available." +