/* * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program 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 2 * of the License, or (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.gui; import jalview.bin.Cache; import java.awt.Component; import java.io.*; import java.net.*; import javax.swing.*; public class PromptUserConfig implements Runnable { /** * Given a boolean Cache option: * * 1. Prompt the user with the given text if the option is unset, and * set the option accordingly (yes/no==true/false). * * 2. Execute the given Runnables according to the state of the config option. * */ /** * boolean property to set */ String property=null; /** * can the user cancel rather than set the property ? */ boolean allowCancel = false; /** * title of prompt dialog */ String dialogTitle; /** * text in dialog */ String dialogText; /** * runnables for all cases. */ Runnable iftrue=null,iffalse=null,ifundef=null; private Component component; /** * if set, remove the property if the user says no rather than setting it to false. */ private boolean removeifunset; /** * @return the removeifunset */ public boolean isRemoveifunset() { return removeifunset; } /** * @param removeifunset the removeifunset to set */ public void setRemoveifunset(boolean removeifunset) { this.removeifunset = removeifunset; } /** * @param desktop - where the dialog box will be shown * @param property - boolean property in jalview.bin.Cache * @param dialogTitle - title of prompt box * @param dialogText - text of box * @param iftrue - executed if property is true * @param iffalse - executed if property is false * @param ifundef - executed if property was not set after prompting. * @param allowCancel - allow the user to cancel rather than set the property */ public PromptUserConfig(Component desktop, String property, String dialogTitle, String dialogText, Runnable iftrue, Runnable iffalse, Runnable ifundef, boolean allowCancel) { super(); this.component = desktop; this.property = property; this.dialogTitle = dialogTitle; this.dialogText = dialogText; this.iftrue = iftrue; this.iffalse = iffalse; this.ifundef = ifundef; this.allowCancel = allowCancel; } public void run() { if (property==null) { return; } // First - check to see if wee have an old questionnaire/response id pair. String lastq = jalview.bin.Cache.getProperty(property); if (lastq == null) { raiseDialog(); Cache.log.debug("Got user response."); } lastq = jalview.bin.Cache.getProperty(property); String extype = ""; Exception e = null; if (lastq==null) { // execute the ifundef try { if (ifundef!=null) { ifundef.run(); } } catch (Exception ex) { e = ex; extype = "undefined"; } } else if (Boolean.valueOf(lastq).booleanValue()) { // execute the iftrue try { if (iftrue!=null) { iftrue.run(); } } catch (Exception ex) { e = ex; extype = "if true"; } } else { try { if (iffalse!=null) { iffalse.run(); } } catch (Exception ex) { e = ex; extype = "if false"; } } // report any exceptions if (e!=null) { Cache.log.warn("Unexpected exception when executing the "+extype+" runnable for property "+property,e); } } /** * raise the property dialog */ private void raiseDialog() { if (jalview.bin.Cache.log.isDebugEnabled()) { jalview.bin.Cache.log.debug("Prompting user for "+dialogTitle+" for Cache property "+property); } try { int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop, // component, dialogText, dialogTitle, (allowCancel) ? JOptionPane.YES_NO_CANCEL_OPTION : JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); jalview.bin.Cache.log.debug("Got response : "+reply); if (reply == JOptionPane.YES_OPTION) { jalview.bin.Cache.setProperty(property, "true"); } else if (reply == JOptionPane.NO_OPTION) { if (removeifunset) { jalview.bin.Cache.removeProperty(property); } else { jalview.bin.Cache.setProperty(property, "false"); } } else { jalview.bin.Cache.log.debug("User cancelled setting " + property); return; } // verify the property is set for debugging if (jalview.bin.Cache.log.isDebugEnabled()) { jalview.bin.Cache.log.debug("User set property to "+jalview.bin.Cache.getProperty(property)); } } catch (Exception e) { jalview.bin.Cache.log.warn("Unexpected exception when prompting user for yes/no setting for property "+property, e); } } }