001 package sale; 002 003 import java.io.Serializable; 004 import java.io.IOException; 005 006 import log.*; 007 import users.*; 008 009 import data.Stock; 010 import data.Catalog; 011 012 /** 013 * A context that allows processes to run and access certain functionality. 014 * 015 * <p>A ProcessContext provides {@link SaleProcess processes} with an environment in which they 016 * can work. Although some of the functionality could be accessed directly at the {@link Shop}, 017 * some can't, and for the rest the usage of ProcessContexts provides an extra level of flexibility. 018 * It is therefore explicitly recommended that your processes access all of the needed functionality 019 * through their context, except in cases where you want to make sure that a special service is 020 * carried out at Shop level.</p> 021 * 022 * <p>The methods comprising the ProcessContext interface fall into three categories:</p> 023 * 024 * <ol> 025 * <li>Display related methods: 026 * <ul> 027 * <li>{@link #setFormSheet}</li> 028 * <li>{@link #popUpFormSheet}</li> 029 * <li>{@link #setMenuSheet}</li> 030 * <li>{@link #hasUseableDisplay}</li> 031 * </ul> 032 * </li> 033 * <li>Data and service related methods: 034 * <ul> 035 * <li>{@link #log}</li> 036 * <li>{@link #getCurrentUser}</li> 037 * <li>{@link #getStock}</li> 038 * <li>{@link #getCatalog}</li> 039 * </ul> 040 * </li> 041 * <li>Process management methods: 042 * <ul> 043 * <li>{@link #processStarted}</li> 044 * <li>{@link #processFinished}</li> 045 * </ul> 046 * These methods will not be called directly, but rather the Framework will call them as 047 * appropriate. 048 * </li> 049 * </ol> 050 * 051 * @author Steffen Zschaler 052 * @version 2.0 27/05/1999 053 * @since v2.0 054 */ 055 public interface ProcessContext extends Serializable { 056 057 // display related methods 058 059 /** 060 * Set a FormSheet for a process. 061 * 062 * <p>The FormSheet will be displayed on the ProcessContext's display for the given process, if there 063 * is one and it is useable. Setting a <code>null</code> FormSheet will remove any FormSheet 064 * currently being displayed.</p> 065 * 066 * @override Always 067 * 068 * @param p the process that wishes to set a FormSheet 069 * @param fs the FormSheet that is to be set. 070 * 071 * @exception InterruptedException if an interrupt occurred while waiting for the FormSheet to be 072 * closed. See {@link Display#setFormSheet Display.setFormSheet} for details. 073 * 074 * @see Display#setFormSheet 075 */ 076 public void setFormSheet(SaleProcess p, FormSheet fs) throws InterruptedException; 077 078 /** 079 * Pop up a FormSheet for a process. 080 * 081 * <p>The FormSheet will be popped up on the ProcessContext's display for the given process, if there 082 * is one and it is useable.</p> 083 * 084 * @override Always 085 * 086 * @param p the process that wishes to pop up a FormSheet 087 * @param fs the FormSheet that is to be set. 088 * 089 * @exception InterruptedException if an interrupt occurred while waiting for the FormSheet to be 090 * closed. See {@link Display#popUpFormSheet Display.popUpFormSheet} for details. 091 * 092 * @see Display#popUpFormSheet 093 */ 094 public void popUpFormSheet(SaleProcess p, FormSheet fs) throws InterruptedException; 095 096 /** 097 * Set a MenuSheet for a process. 098 * 099 * <p>The MenuSheet will be displayed on the ProcessContext's display for the given process, if there 100 * is one and it is useable. Setting a <code>null</code> MenuSheet will remove any MenuSheet 101 * currently being displayed.</p> 102 * 103 * @override Always 104 * 105 * @param p the process that wishes to set a MenuSheet 106 * @param ms the MenuSheet that is to be set. 107 * 108 * @see Display#setMenuSheet 109 */ 110 public void setMenuSheet(SaleProcess p, MenuSheet ms); 111 112 /** 113 * True if the ProcessContext has a useable display for the given process. 114 * 115 * @override Always 116 * 117 * @param p the process whose display is to be checked. 118 * 119 * @see Display#isUseableDisplay 120 */ 121 public boolean hasUseableDisplay(SaleProcess p); 122 123 // data and service related methods 124 125 /** 126 * Put an entry into the ProcessContext's log stream for a process. 127 * 128 * @override Always 129 * 130 * @param p the process that wishes to put data into the log stream. 131 * @param la the information that is to be logged. 132 * 133 * @exception IOException if any problems occurred while writing to the log stream. 134 */ 135 public void log(SaleProcess p, Loggable la) throws IOException; 136 137 /** 138 * Get the user currently associated with the given process. 139 * 140 * @override Always 141 * 142 * @param p the process that wishes to know its current user. 143 * 144 * @return the current user for the given process. 145 */ 146 public User getCurrentUser(SaleProcess p); 147 148 /** 149 * Get a Stock by its name. 150 * 151 * <p>The Stock's name is resolved relative to the ProcessContext, so that the same call can result 152 * in different Stocks in different ProcessContexts.</p> 153 * 154 * @override Always 155 * 156 * @param sName the name of the Stock to be returned. 157 * 158 * @return the Stock that was found for the given name, if any. 159 */ 160 public Stock getStock(String sName); 161 162 /** 163 * Get a Catalog by its name. 164 * 165 * <p>The Catalog's name is resolved relative to the ProcessContext, so that the same call can result 166 * in different Catalogs in different ProcessContexts.</p> 167 * 168 * @override Always 169 * 170 * @param sName the name of the Catalog to be returned. 171 * 172 * @return the Catalog that was found for the given name, if any. 173 */ 174 public Catalog getCatalog(String sName); 175 176 // process management methods 177 178 /** 179 * Notification that a process was started in this ProcessContext. 180 * 181 * <p>This method is usually not called directly, but rather the Framework calls it as appropriate.</p> 182 * 183 * @override Always 184 * 185 * @param p the process that was started. 186 */ 187 public void processStarted(SaleProcess p); 188 189 /** 190 * Notification that a process was finished in this ProcessContext. 191 * 192 * <p>This method is usually not called directly, but rather the Framework calls it as appropriate.</p> 193 * 194 * @override Always 195 * 196 * @param p the process that was finished. 197 */ 198 public void processFinished(SaleProcess p); 199 }