From e1a71258dcd5a772d4f960d44759b891b7adcf78 Mon Sep 17 00:00:00 2001 From: jprocter Date: Mon, 5 Feb 2007 14:44:17 +0000 Subject: [PATCH] client side machinery for user questionnaire responses --- src/jalview/gui/UserQuestionnaireCheck.java | 128 +++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 src/jalview/gui/UserQuestionnaireCheck.java diff --git a/src/jalview/gui/UserQuestionnaireCheck.java b/src/jalview/gui/UserQuestionnaireCheck.java new file mode 100644 index 0000000..9ce8d01 --- /dev/null +++ b/src/jalview/gui/UserQuestionnaireCheck.java @@ -0,0 +1,128 @@ +package jalview.gui; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; + +import javax.swing.JOptionPane; + +public class UserQuestionnaireCheck implements Runnable { + /** + * Implements the client side machinery for detecting a new questionnaire, + * checking if the user has responded to an existing one, + * and prompting the user for responding to a questionnaire. + * This is intended to work with the perl CGI scripts checkresponder.pl and + * questionnaire.pl + */ + String url; + UserQuestionnaireCheck(String url) { + this.url = url; + } + public void run() { + 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); + } + } + } + } 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) { + // 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); + } + } + } + + } + // 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 + } + } + } + // Update our local property cache + 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; + jalview.bin.Cache.log.info("Prompting user for questionnaire at "+qurl); + int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, + "There is a new Questionnaire available." + + "Would you like to complete it now ?\n", + "Jalview User Survey", + JOptionPane.YES_NO_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if (reply == JOptionPane.YES_OPTION) + { + jalview.bin.Cache.log.debug("Opening "+qurl); + jalview.util.BrowserLauncher.openURL(qurl); + } + } + } catch (Exception e) { + jalview.bin.Cache.log.warn("When trying to access questionnaire URL "+url,e); + } + } + +} -- 1.7.10.2