001 package sale; 002 003 import java.io.Serializable; 004 005 /** 006 * An action that can be associated with a {@link MenuSheetItem MenuSheetItem} or 007 * {@link FormSheet.FormButton FormSheet button}. 008 * 009 * <p>Actions are triggered when there associated control is clicked. They can run in 010 * the context of a {@link Shop}, possibly a {@link SalesPoint}, and also maybe a {@link SaleProcess}.</p> 011 * 012 * @author Steffen Zschaler 013 * @version 2.0 21/05/1999 014 * @since v2.0 015 */ 016 public interface Action extends Serializable { 017 018 /** 019 * Perform the actual action. 020 * 021 * <p>The parameters define the context in which the action is performed:</p> 022 * 023 * <ol> 024 * <li>It will always be performed in the context of the Shop. The Shop can be 025 * retrieved via {@link sale.Shop#getTheShop Shop.getTheShop()}.</li> 026 * <li>If <code>sp != null</code>, <code>sp</code> will define the SalesPoint 027 * that is the context of this action.</li> 028 * <li>If <code>p != null</code>, <code>p</code> will define the SaleProcess 029 * that is the context of this action.</li> 030 * </ol> 031 * 032 * <p>Note, that virtually any combination of the parameters makes sense.</p> 033 * 034 * @override Always 035 * 036 * @param p the SaleProcess context of the action. 037 * @param sp the SalesPoint context of the action. 038 * 039 * @exception Throwable on any error that shall be reported and lead to cancellation of 040 * the action. 041 */ 042 public void doAction(SaleProcess p, SalesPoint sp) throws Throwable; 043 044 }