2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
3 * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
25 public class UserQuestionnaireCheck implements Runnable
28 * Implements the client side machinery for detecting a new questionnaire,
29 * checking if the user has responded to an existing one, and prompting the
30 * user for responding to a questionnaire. This is intended to work with the
31 * perl CGI scripts checkresponder.pl and questionnaire.pl
35 UserQuestionnaireCheck(String url)
37 if (url.indexOf("questionnaire.pl") == -1)
42 + "' is an Invalid URL for the checkForQuestionnaire() method.\n"
43 + "This argument is only for questionnaires derived from jalview's questionnaire.pl cgi interface.");
51 String qid = null, rid = null;
53 private boolean checkresponse(URL qurl) throws Exception
55 jalview.bin.Cache.log.debug("Checking Response for : " + qurl);
56 boolean prompt = false;
57 // see if we have already responsed to this questionnaire or get a new
59 BufferedReader br = new BufferedReader(new InputStreamReader(
62 while ((qresp = br.readLine()) != null)
64 if (qresp.indexOf("NOTYET:") == 0)
66 prompt = true; // not yet responded under that ID
70 if (qresp.indexOf("QUESTIONNAIRE:") == 0)
72 // QUESTIONNAIRE:qid:rid for the latest questionnaire.
73 int p = qresp.indexOf(':', 14);
77 qid = qresp.substring(14, p);
78 if (p < (qresp.length() - 1))
80 rid = qresp.substring(p + 1);
81 prompt = true; // this is a new qid/rid pair
96 boolean prompt = false;
99 // First - check to see if wee have an old questionnaire/response id pair.
100 String lastq = jalview.bin.Cache.getProperty("QUESTIONNAIRE");
103 prompt = checkresponse(new URL(url
104 + (url.indexOf('?') > -1 ? "&" : "?") + "checkresponse=1"));
108 String qurl = url + (url.indexOf('?') > -1 ? "&" : "?")
110 // query the server with the old qid/id pair
111 String qqid = lastq.indexOf(':') > -1 ? lastq.substring(0,
112 lastq.indexOf(':')) : null;
113 if (qqid != null && qqid != "null" && qqid.length() > 0)
115 qurl += "&qid=" + qqid;
117 String qrid = lastq.substring(lastq.indexOf(':') + 1); // retrieve
119 if (qrid != null && !qrid.equals("null"))
122 qurl += "&rid=" + qrid;
125 // see if we have already responsed to this questionnaire.
126 prompt = checkresponse(new URL(qurl));
128 if (qid != null && rid != null)
130 // Update our local property cache with latest qid and rid
131 jalview.bin.Cache.setProperty("QUESTIONNAIRE", qid + ":" + rid);
135 String qurl = url + (url.indexOf('?') > -1 ? "&" : "?") + "qid="
136 + qid + "&rid=" + rid;
137 jalview.bin.Cache.log.info("Prompting user for questionnaire at "
139 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
140 "There is a new Questionnaire available."
141 + "Would you like to complete it now ?\n",
142 "Jalview User Survey", JOptionPane.YES_NO_OPTION,
143 JOptionPane.QUESTION_MESSAGE);
145 if (reply == JOptionPane.YES_OPTION)
147 jalview.bin.Cache.log.debug("Opening " + qurl);
148 jalview.util.BrowserLauncher.openURL(qurl);
151 } catch (Exception e)
153 jalview.bin.Cache.log.warn("When trying to access questionnaire URL "