/* * @(#)ConfirmationCallback.java 1.16 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.security.auth.callback; /** *

Underlying security services instantiate and pass a * ConfirmationCallback to the handle * method of a CallbackHandler to ask for YES/NO, * OK/CANCEL, YES/NO/CANCEL or other similar confirmations. * * @version 1.16, 12/19/03 * @see javax.security.auth.callback.CallbackHandler */ public class ConfirmationCallback implements Callback, java.io.Serializable { private static final long serialVersionUID = -9095656433782481624L; /** * Unspecified option type. * *

The getOptionType method returns this * value if this ConfirmationCallback was instantiated * with options instead of an optionType. */ public static final int UNSPECIFIED_OPTION = -1; /** * YES/NO confirmation option. * *

An underlying security service specifies this as the * optionType to a ConfirmationCallback * constructor if it requires a confirmation which can be answered * with either YES or NO. */ public static final int YES_NO_OPTION = 0; /** * YES/NO/CANCEL confirmation confirmation option. * *

An underlying security service specifies this as the * optionType to a ConfirmationCallback * constructor if it requires a confirmation which can be answered * with either YES, NO or CANCEL. */ public static final int YES_NO_CANCEL_OPTION = 1; /** * OK/CANCEL confirmation confirmation option. * *

An underlying security service specifies this as the * optionType to a ConfirmationCallback * constructor if it requires a confirmation which can be answered * with either OK or CANCEL. */ public static final int OK_CANCEL_OPTION = 2; /** * YES option. * *

If an optionType was specified to this * ConfirmationCallback, this option may be specified as a * defaultOption or returned as the selected index. */ public static final int YES = 0; /** * NO option. * *

If an optionType was specified to this * ConfirmationCallback, this option may be specified as a * defaultOption or returned as the selected index. */ public static final int NO = 1; /** * CANCEL option. * *

If an optionType was specified to this * ConfirmationCallback, this option may be specified as a * defaultOption or returned as the selected index. */ public static final int CANCEL = 2; /** * OK option. * *

If an optionType was specified to this * ConfirmationCallback, this option may be specified as a * defaultOption or returned as the selected index. */ public static final int OK = 3; /** INFORMATION message type. */ public static final int INFORMATION = 0; /** WARNING message type. */ public static final int WARNING = 1; /** ERROR message type. */ public static final int ERROR = 2; /** * @serial * @since 1.4 */ private String prompt; /** * @serial * @since 1.4 */ private int messageType; /** * @serial * @since 1.4 */ private int optionType = UNSPECIFIED_OPTION; /** * @serial * @since 1.4 */ private int defaultOption; /** * @serial * @since 1.4 */ private String[] options; /** * @serial * @since 1.4 */ private int selection; /** * Construct a ConfirmationCallback with a * message type, an option type and a default option. * *

Underlying security services use this constructor if * they require either a YES/NO, YES/NO/CANCEL or OK/CANCEL * confirmation. * *

* * @param messageType the message type (INFORMATION, * WARNING or ERROR).

* * @param optionType the option type (YES_NO_OPTION, * YES_NO_CANCEL_OPTION or * OK_CANCEL_OPTION).

* * @param defaultOption the default option * from the provided optionType (YES, * NO, CANCEL or * OK). * * @exception IllegalArgumentException if messageType is not either * INFORMATION, WARNING, * or ERROR, if optionType is not either * YES_NO_OPTION, * YES_NO_CANCEL_OPTION, or * OK_CANCEL_OPTION, * or if defaultOption * does not correspond to one of the options in * optionType. */ public ConfirmationCallback(int messageType, int optionType, int defaultOption) { if (messageType < INFORMATION || messageType > ERROR || optionType < YES_NO_OPTION || optionType > OK_CANCEL_OPTION) throw new IllegalArgumentException(); switch (optionType) { case YES_NO_OPTION: if (defaultOption != YES && defaultOption != NO) throw new IllegalArgumentException(); break; case YES_NO_CANCEL_OPTION: if (defaultOption != YES && defaultOption != NO && defaultOption != CANCEL) throw new IllegalArgumentException(); break; case OK_CANCEL_OPTION: if (defaultOption != OK && defaultOption != CANCEL) throw new IllegalArgumentException(); break; } this.messageType = messageType; this.optionType = optionType; this.defaultOption = defaultOption; } /** * Construct a ConfirmationCallback with a * message type, a list of options and a default option. * *

Underlying security services use this constructor if * they require a confirmation different from the available preset * confirmations provided (for example, CONTINUE/ABORT or STOP/GO). * The confirmation options are listed in the options array, * and are displayed by the CallbackHandler implementation * in a manner consistent with the way preset options are displayed. * *

* * @param messageType the message type (INFORMATION, * WARNING or ERROR).

* * @param options the list of confirmation options.

* * @param defaultOption the default option, represented as an index * into the options array. * * @exception IllegalArgumentException if messageType is not either * INFORMATION, WARNING, * or ERROR, if options is null, * if options has a length of 0, * if any element from options is null, * if any element from options * has a length of 0, or if defaultOption * does not lie within the array boundaries of * options. */ public ConfirmationCallback(int messageType, String[] options, int defaultOption) { if (messageType < INFORMATION || messageType > ERROR || options == null || options.length == 0 || defaultOption < 0 || defaultOption >= options.length) throw new IllegalArgumentException(); for (int i = 0; i < options.length; i++) { if (options[i] == null || options[i].length() == 0) throw new IllegalArgumentException(); } this.messageType = messageType; this.options = options; this.defaultOption = defaultOption; } /** * Construct a ConfirmationCallback with a prompt, * message type, an option type and a default option. * *

Underlying security services use this constructor if * they require either a YES/NO, YES/NO/CANCEL or OK/CANCEL * confirmation. * *

* * @param prompt the prompt used to describe the list of options.

* * @param messageType the message type (INFORMATION, * WARNING or ERROR).

* * @param optionType the option type (YES_NO_OPTION, * YES_NO_CANCEL_OPTION or * OK_CANCEL_OPTION).

* * @param defaultOption the default option * from the provided optionType (YES, * NO, CANCEL or * OK). * * @exception IllegalArgumentException if prompt is null, * if prompt has a length of 0, * if messageType is not either * INFORMATION, WARNING, * or ERROR, if optionType is not either * YES_NO_OPTION, * YES_NO_CANCEL_OPTION, or * OK_CANCEL_OPTION, * or if defaultOption * does not correspond to one of the options in * optionType. */ public ConfirmationCallback(String prompt, int messageType, int optionType, int defaultOption) { if (prompt == null || prompt.length() == 0 || messageType < INFORMATION || messageType > ERROR || optionType < YES_NO_OPTION || optionType > OK_CANCEL_OPTION) throw new IllegalArgumentException(); switch (optionType) { case YES_NO_OPTION: if (defaultOption != YES && defaultOption != NO) throw new IllegalArgumentException(); break; case YES_NO_CANCEL_OPTION: if (defaultOption != YES && defaultOption != NO && defaultOption != CANCEL) throw new IllegalArgumentException(); break; case OK_CANCEL_OPTION: if (defaultOption != OK && defaultOption != CANCEL) throw new IllegalArgumentException(); break; } this.prompt = prompt; this.messageType = messageType; this.optionType = optionType; this.defaultOption = defaultOption; } /** * Construct a ConfirmationCallback with a prompt, * message type, a list of options and a default option. * *

Underlying security services use this constructor if * they require a confirmation different from the available preset * confirmations provided (for example, CONTINUE/ABORT or STOP/GO). * The confirmation options are listed in the options array, * and are displayed by the CallbackHandler implementation * in a manner consistent with the way preset options are displayed. * *

* * @param prompt the prompt used to describe the list of options.

* * @param messageType the message type (INFORMATION, * WARNING or ERROR).

* * @param options the list of confirmation options.

* * @param defaultOption the default option, represented as an index * into the options array. * * @exception IllegalArgumentException if prompt is null, * if prompt has a length of 0, * if messageType is not either * INFORMATION, WARNING, * or ERROR, if options is null, * if options has a length of 0, * if any element from options is null, * if any element from options * has a length of 0, or if defaultOption * does not lie within the array boundaries of * options. */ public ConfirmationCallback(String prompt, int messageType, String[] options, int defaultOption) { if (prompt == null || prompt.length() == 0 || messageType < INFORMATION || messageType > ERROR || options == null || options.length == 0 || defaultOption < 0 || defaultOption >= options.length) throw new IllegalArgumentException(); for (int i = 0; i < options.length; i++) { if (options[i] == null || options[i].length() == 0) throw new IllegalArgumentException(); } this.prompt = prompt; this.messageType = messageType; this.options = options; this.defaultOption = defaultOption; } /** * Get the prompt. * *

* * @return the prompt, or null if this ConfirmationCallback * was instantiated without a prompt. */ public String getPrompt() { return prompt; } /** * Get the message type. * *

* * @return the message type (INFORMATION, * WARNING or ERROR). */ public int getMessageType() { return messageType; } /** * Get the option type. * *

If this method returns UNSPECIFIED_OPTION, then this * ConfirmationCallback was instantiated with * options instead of an optionType. * In this case, invoke the getOptions method * to determine which confirmation options to display. * *

* * @return the option type (YES_NO_OPTION, * YES_NO_CANCEL_OPTION or * OK_CANCEL_OPTION), or * UNSPECIFIED_OPTION if this * ConfirmationCallback was instantiated with * options instead of an optionType. */ public int getOptionType() { return optionType; } /** * Get the confirmation options. * *

* * @return the list of confirmation options, or null if this * ConfirmationCallback was instantiated with * an optionType instead of options. */ public String[] getOptions() { return options; } /** * Get the default option. * *

* * @return the default option, represented as * YES, NO, OK or * CANCEL if an optionType * was specified to the constructor of this * ConfirmationCallback. * Otherwise, this method returns the default option as * an index into the * options array specified to the constructor * of this ConfirmationCallback. */ public int getDefaultOption() { return defaultOption; } /** * Set the selected confirmation option. * *

* * @param selection the selection represented as YES, * NO, OK or CANCEL * if an optionType was specified to the constructor * of this ConfirmationCallback. * Otherwise, the selection represents the index into the * options array specified to the constructor * of this ConfirmationCallback. * * @see #getSelectedIndex */ public void setSelectedIndex(int selection) { this.selection = selection; } /** * Get the selected confirmation option. * *

* * @return the selected confirmation option represented as * YES, NO, OK or * CANCEL if an optionType * was specified to the constructor of this * ConfirmationCallback. * Otherwise, this method returns the selected confirmation * option as an index into the * options array specified to the constructor * of this ConfirmationCallback. * * @see #setSelectedIndex */ public int getSelectedIndex() { return selection; } }