X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FUserQuestionnaireCheck.java;h=46f5b0004a0601fe1747e27b0d56ecb02523ebd8;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=b2b19b986ec1c88d3a278ebf137d075d691f2344;hpb=048137e4ef1a2252d884afdd6ac8a12f0385eb16;p=jalview.git diff --git a/src/jalview/gui/UserQuestionnaireCheck.java b/src/jalview/gui/UserQuestionnaireCheck.java index b2b19b9..46f5b00 100644 --- a/src/jalview/gui/UserQuestionnaireCheck.java +++ b/src/jalview/gui/UserQuestionnaireCheck.java @@ -1,128 +1,165 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.gui; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.URL; +import jalview.util.MessageManager; -import javax.swing.JOptionPane; +import java.io.*; +import java.net.*; -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; +import javax.swing.*; + +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 = null; + + UserQuestionnaireCheck(String 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."); } - 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); - } - } - } + else + { + this.url = url; + } + } + String qid = null, rid = null; + + private boolean checkresponse(URL qurl) throws Exception + { + jalview.bin.Cache.log.debug("Checking Response for : " + qurl); + boolean prompt = false; + // 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 + { + if (qresp.indexOf("QUESTIONNAIRE:") == 0) + { + // QUESTIONNAIRE:qid:rid for the latest questionnaire. + int p = qresp.indexOf(':', 14); + if (p > -1) + { + rid = null; + qid = qresp.substring(14, p); + if (p < (qresp.length() - 1)) + { + rid = qresp.substring(p + 1); + prompt = true; // this is a new qid/rid pair } - // 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", + } + } + } + } + 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 != "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)); + } + if (qid != null && rid != null) + { + // Update our local property cache with latest qid and rid + jalview.bin.Cache.setProperty("QUESTIONNAIRE", qid + ":" + rid); + } + if (prompt) + { + 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, MessageManager + .getString("label.jalview_new_questionnaire"), + MessageManager + .getString("label.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); + 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); } + } }