* 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." +