2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
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
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
24 import java.io.BufferedReader;
25 import java.io.InputStreamReader;
28 import javax.swing.JOptionPane;
30 import jalview.bin.Cache;
31 import jalview.bin.Console;
32 import jalview.util.MessageManager;
34 public class UserQuestionnaireCheck implements Runnable
37 * Implements the client side machinery for detecting a new questionnaire,
38 * checking if the user has responded to an existing one, and prompting the
39 * user for responding to a questionnaire. This is intended to work with the
40 * perl CGI scripts checkresponder.pl and questionnaire.pl
44 UserQuestionnaireCheck(String url)
46 if (url.indexOf("questionnaire.pl") == -1)
48 Console.error("'" + url
49 + "' is an Invalid URL for the checkForQuestionnaire() method.\n"
50 + "This argument is only for questionnaires derived from jalview's questionnaire.pl cgi interface.");
58 String qid = null, rid = null;
60 private boolean checkresponse(URL qurl) throws Exception
62 Console.debug("Checking Response for : " + qurl);
63 boolean prompt = false;
64 // see if we have already responsed to this questionnaire or get a new
66 BufferedReader br = new BufferedReader(
67 new InputStreamReader(qurl.openStream()));
69 while ((qresp = br.readLine()) != null)
71 if (qresp.indexOf("NOTYET:") == 0)
73 prompt = true; // not yet responded under that ID
77 if (qresp.indexOf("QUESTIONNAIRE:") == 0)
79 // QUESTIONNAIRE:qid:rid for the latest questionnaire.
80 int p = qresp.indexOf(':', 14);
84 qid = qresp.substring(14, p);
85 if (p < (qresp.length() - 1))
87 rid = qresp.substring(p + 1);
88 prompt = true; // this is a new qid/rid pair
103 boolean prompt = false;
106 // First - check to see if wee have an old questionnaire/response id pair.
107 String lastq = Cache.getProperty("QUESTIONNAIRE");
110 prompt = checkresponse(new URL(url
111 + (url.indexOf('?') > -1 ? "&" : "?") + "checkresponse=1"));
115 String qurl = url + (url.indexOf('?') > -1 ? "&" : "?")
117 // query the server with the old qid/id pair
118 String qqid = lastq.indexOf(':') > -1
119 ? lastq.substring(0, lastq.indexOf(':'))
121 if (qqid != null && qqid != "null" && qqid.length() > 0)
123 qurl += "&qid=" + qqid;
125 String qrid = lastq.substring(lastq.indexOf(':') + 1); // retrieve
127 if (qrid != null && !qrid.equals("null"))
130 qurl += "&rid=" + qrid;
133 // see if we have already responsed to this questionnaire.
134 prompt = checkresponse(new URL(qurl));
136 if (qid != null && rid != null)
138 // Update our local property cache with latest qid and rid
139 Cache.setProperty("QUESTIONNAIRE", qid + ":" + rid);
143 String qurl = url + (url.indexOf('?') > -1 ? "&" : "?") + "qid="
144 + qid + "&rid=" + rid;
145 Console.info("Prompting user for questionnaire at " + qurl);
146 int reply = JvOptionPane.showInternalConfirmDialog(Desktop.getDesktopPane(),
147 MessageManager.getString("label.jalview_new_questionnaire"),
148 MessageManager.getString("label.jalview_user_survey"),
149 JvOptionPane.YES_NO_OPTION, JvOptionPane.QUESTION_MESSAGE);
151 if (reply == JvOptionPane.YES_OPTION)
153 Console.debug("Opening " + qurl);
154 jalview.util.BrowserLauncher.openURL(qurl);
157 } catch (Exception e)
159 Console.warn("When trying to access questionnaire URL " + url, e);