X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FUserQuestionnaireCheck.java;h=8c8c283d261c3c48450a37574306f898c4975c42;hb=a8f483d04205bb8273ee311c12968b7e86d205fa;hp=b9e741a56cacbb1802de310c589aa803fdbf5275;hpb=e5b366e9af81b30196c3c31727fd6b0091502527;p=jalview.git diff --git a/src/jalview/gui/UserQuestionnaireCheck.java b/src/jalview/gui/UserQuestionnaireCheck.java index b9e741a..8c8c283 100644 --- a/src/jalview/gui/UserQuestionnaireCheck.java +++ b/src/jalview/gui/UserQuestionnaireCheck.java @@ -1,102 +1,160 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) + * 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=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."); - } else { - 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."); } - String qid=null,rid=null; - private boolean checkresponse(URL qurl) throws Exception { - 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("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; - } + 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 } + } } - 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 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, - "There is a new Questionnaire available." + - "Would you like to complete it now ?\n", - "Jalview User Survey", - JOptionPane.YES_NO_OPTION, - JOptionPane.QUESTION_MESSAGE); + return prompt; + } - 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); + 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); } + } }