/* * Created on 13-Nov-2006 * Created by Allan Crooks * Copyright (C) 2005, 2006 Aelitis, All Rights Reserved. * * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * AELITIS, SAS au capital de 46,603.30 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. */ package org.gudy.azureus2.pluginsimpl.local.ui; import org.gudy.azureus2.core3.internat.MessageText; import org.gudy.azureus2.plugins.ui.UIInputReceiver; import org.gudy.azureus2.plugins.ui.UIInputValidator; /** * Abstract class to make it easy for class to implement UIInputReceiver classes. * * The common convention is that it has all the necessary set methods needed, and * all settings passed are accessible through protected attributes. * * Checks are made to ensure only certain methods are called at the right time. */ public abstract class AbstractUIInputReceiver implements UIInputReceiver { public AbstractUIInputReceiver() { } private boolean prompted = false; // Helper methods. protected final void assertPrePrompt() { if (prompted) { throw new RuntimeException("cannot invoke after prompt has been called"); } } protected final void assertPostPrompt() { if (!prompted) { throw new RuntimeException("cannot before after prompt has been called"); } } public void setLocalisedMessage(String message) { this.setLocalisedMessages(new String[]{message}); } protected String[] messages = new String[0]; public void setLocalisedMessages(String[] messages) { assertPrePrompt(); this.messages = messages; } protected String title = null; public void setLocalisedTitle(String title) { assertPrePrompt(); this.title = title; } public void setMessage(String message) { this.setLocalisedMessage(this.localise(message)); } public void setMessages(String[] messages) { String[] new_messages = new String[messages.length]; for (int i=0; i<new_messages.length; i++) { new_messages[i] = this.localise(messages[i]); } this.setLocalisedMessages(new_messages); } protected boolean multiline_mode = false; public void setMultiLine(boolean multiline) { assertPrePrompt(); this.multiline_mode = multiline; } protected String preentered_text = null; protected boolean preentered_text_is_old_value = false; public void setPreenteredText(String text, boolean as_suggested) { assertPrePrompt(); this.preentered_text = text; this.preentered_text_is_old_value = !as_suggested; } public void setTitle(String title) { this.setLocalisedTitle(this.localise(title)); } protected UIInputValidator validator = null; public void setInputValidator(UIInputValidator validator) { assertPrePrompt(); this.validator = validator; } private boolean result_recorded = false; public final void prompt() { assertPrePrompt(); this.promptForInput(); if (!result_recorded) { throw new RuntimeException(this.toString() + " did not record a result."); } this.prompted = true; } private boolean result_input_submitted = false; private String result_input = null; /** * Subclasses must override this method to receive input from the user. * * This method must call either recordUserInput or recordUserAbort before * returning. */ protected abstract void promptForInput(); protected final void recordUserInput(String input) { this.result_recorded = true; this.result_input_submitted = true; this.result_input = input; // The subclass should strip the output before it sets // the value here - but just in case they forget, we remember. // // Subclasses should do it that the validator can validate the stripped string. if (!this.maintain_whitespace) { this.result_input = input.trim(); } } protected final void recordUserAbort() { this.result_recorded = true; this.result_input_submitted = false; this.result_input = null; } public boolean hasSubmittedInput() { assertPostPrompt(); return this.result_input_submitted; } public String getSubmittedInput() { assertPostPrompt(); return this.result_input; } protected boolean maintain_whitespace = false; public void maintainWhitespace(boolean keep_whitespace) { this.maintain_whitespace = keep_whitespace; } protected boolean allow_empty_input = true; public void allowEmptyInput(boolean empty_input) { this.allow_empty_input = empty_input; } protected final String localise(String key) { return MessageText.getString(key); } }