001 package sale.stdforms;
002
003 import sale.SaleProcess;
004 import sale.ProcessErrorCodes;
005
006 import java.io.Serializable;
007
008 /**
009 * <i>Abstract</i> super class of all strategies that are used with FormSheets.
010 *
011 * <p>Strategies are usually used to parameterize certain responses to user actions in standard FormSheets.
012 * Good examples are the parameterized responses to the buttons in a {@link data.stdforms.TwoTableFormSheet}.
013 * </p>
014 *
015 * <p>This <i>abstract</i> base class knows only about error handling. It uses
016 * {@link ErrorHandler error handling strategies} so that subclasses can easily be adapted to behave
017 * differently in case of an error.</p>
018 *
019 * @author Steffen Zschaler
020 * @version 2.0 18/08/1999
021 * @since v2.0
022 */
023 public abstract class FormSheetStrategy extends Object implements ProcessErrorCodes, Serializable {
024
025 /**
026 * Interface that defines a error handling strategy for a {@link FormSheetStrategy}.
027 *
028 * @author Steffen Zschaler
029 * @version 2.0 18/08/1999
030 * @since v2.0
031 */
032 public static interface ErrorHandler extends Serializable, ProcessErrorCodes {
033 /**
034 * Handle an error.
035 *
036 * @param p the process in which the error occurred.
037 * @param nErrorCode an int value describing the error.
038 *
039 * @override Always
040 */
041 public void error(SaleProcess p, int nErrorCode);
042 }
043
044 /**
045 * The default error handler. This will pass the error on to the process'
046 * {@link sale.SaleProcess#error(int)} method.
047 */
048 public static final ErrorHandler DEFAULT_ERROR_HANDLER = new ErrorHandler() {
049 /**
050 * ID for serialization.
051 */
052 private static final long serialVersionUID = -6791233095212221336L;
053
054 public void error(SaleProcess p, int nErrorCode) {
055 p.error(nErrorCode);
056 }
057 };
058
059 /**
060 * An alternative error handler that will pop up a modeless {@link MsgForm} in the process.
061 */
062 public static final ErrorHandler MSG_POPUP_ERROR_HANDLER = new ErrorHandler() {
063 /**
064 * ID for serialization.
065 */
066 private static final long serialVersionUID = -4954693744686937233L;
067
068 public void error(SaleProcess p, int nErrorCode) {
069 MsgForm mfs = new MsgForm("Error", p.getErrorMsg(nErrorCode), false);
070
071 try {
072 p.getContext().popUpFormSheet(p, mfs);
073 }
074 catch (InterruptedException ie) {}
075 }
076 };
077
078 /**
079 * The current error handler. Defaults to the {@link #DEFAULT_ERROR_HANDLER}.
080 *
081 * @serial
082 */
083 protected ErrorHandler m_ehErrHandler = DEFAULT_ERROR_HANDLER;
084
085 /**
086 * Set the current error handler.
087 *
088 * @param ehErrHandler the new error handler.
089 *
090 * @override Never
091 */
092 public void setErrorHandler(ErrorHandler ehErrHandler) {
093 if (ehErrHandler != null) {
094 m_ehErrHandler = ehErrHandler;
095 } else {
096 m_ehErrHandler = DEFAULT_ERROR_HANDLER;
097 }
098 }
099
100 /**
101 * Handle an error.
102 *
103 * <p>This is delegated to the error handler.</p>
104 *
105 * @param p the process in which the error occurred.
106 * @param nErrorCode an int describing the error.
107 *
108 * @override Never
109 */
110 public void error(SaleProcess p, int nErrorCode) {
111 m_ehErrHandler.error(p, nErrorCode);
112 }
113 }