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 public void error(SaleProcess p, int nErrorCode) { 050 p.error(nErrorCode); 051 } 052 }; 053 054 /** 055 * An alternative error handler that will pop up a modeless {@link MsgForm} in the process. 056 */ 057 public static final ErrorHandler MSG_POPUP_ERROR_HANDLER = new ErrorHandler() { 058 public void error(SaleProcess p, int nErrorCode) { 059 MsgForm mfs = new MsgForm("Error", p.getErrorMsg(nErrorCode), false); 060 061 try { 062 p.getContext().popUpFormSheet(p, mfs); 063 } 064 catch (InterruptedException ie) {} 065 } 066 }; 067 068 /** 069 * The current error handler. Defaults to the {@link #DEFAULT_ERROR_HANDLER}. 070 * 071 * @serial 072 */ 073 protected ErrorHandler m_ehErrHandler = DEFAULT_ERROR_HANDLER; 074 075 /** 076 * Set the current error handler. 077 * 078 * @param ehErrHandler the new error handler. 079 * 080 * @override Never 081 */ 082 public void setErrorHandler(ErrorHandler ehErrHandler) { 083 if (ehErrHandler != null) { 084 m_ehErrHandler = ehErrHandler; 085 } else { 086 m_ehErrHandler = DEFAULT_ERROR_HANDLER; 087 } 088 } 089 090 /** 091 * Handle an error. 092 * 093 * <p>This is delegated to the error handler.</p> 094 * 095 * @param p the process in which the error occurred. 096 * @param nErrorCode an int describing the error. 097 * 098 * @override Never 099 */ 100 public void error(SaleProcess p, int nErrorCode) { 101 m_ehErrHandler.error(p, nErrorCode); 102 } 103 }