001 package data.stdforms.twotableformsheet;
002
003 import sale.*;
004
005 import data.*;
006 import data.stdforms.*;
007
008 import users.*;
009
010 /**
011 * MoveStrategy for a StoringStock source and a DataBasket destination.
012 *
013 * @author Steffen Zschaler
014 * @version 2.0 20/08/1999
015 * @since v2.0
016 */
017 public class SSDBStrategy extends MoveStrategy {
018
019 /**
020 * ID for serialization.
021 */
022 private static final long serialVersionUID = -1429141524910184809L;
023
024 /**
025 * Get the sub-process that will move items from the source to the destination.
026 *
027 * @param p the process into which the sub-process wil be embedded.
028 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
029 * @param ssSource the source StoringStock.
030 * @param dbDest the destination DataBasket.
031 * @param si the StockItem that is selected in the source.
032 * @param ttfs the FormSheet that triggers the process.
033 *
034 * @override Never
035 */
036 public Transition getMoveToDestProcess(SaleProcess p, SalesPoint sp, StoringStock ssSource,
037 DataBasket dbDest, StockItem si, TwoTableFormSheet ttfs) {
038 return new GateChangeTransition(getCheckMoveToDestGate(p, sp, ssSource, dbDest, si, ttfs));
039 }
040
041 /**
042 * Get the first gate of the sub-process that will move items from the source to the destination.
043 *
044 * <p>This Gate will check whether the move is allowable, and if so, will trigger a Transition that
045 * performs it.</p>
046 *
047 * @param p the process into which the sub-process wil be embedded.
048 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
049 * @param ssSource the source StoringStock.
050 * @param dbDest the destination DataBasket.
051 * @param si the StockItem that is selected in the source.
052 * @param ttfs the FormSheet that triggers the process.
053 *
054 * @override Never Instead, override {@link #checkMoveToDest} and/or {@link #moveToDest}.
055 */
056 protected Gate getCheckMoveToDestGate(SaleProcess p, final SalesPoint sp, final StoringStock ssSource,
057 final DataBasket dbDest, final StockItem si, final TwoTableFormSheet ttfs) {
058 return new Gate() {
059 private static final long serialVersionUID = 7348605151333460158L;
060
061 public Transition getNextTransition(SaleProcess p, User u) throws InterruptedException {
062 int nCheckReturn = checkMoveToDest(p, sp, ssSource, dbDest, si);
063
064 if (nCheckReturn == 0) {
065 return new Transition() {
066 private static final long serialVersionUID = -8216095893818632122L;
067
068 public Gate perform(SaleProcess p, User u) {
069 moveToDest(p, sp, ssSource, dbDest, si);
070
071 return ttfs.getGate();
072 }
073 };
074 } else {
075 error(p, nCheckReturn);
076
077 return new GateChangeTransition(ttfs.getGate());
078 }
079 }
080 };
081 }
082
083 /**
084 * Check whether the indicated move is allowable. If so, return 0, otherwise return a non-zero error value
085 * that can be passed on to {@link sale.stdforms.FormSheetStrategy#error}. You can assume that you are at a {@link Gate}.
086 *
087 * @param p the process into which the sub-process wil be embedded.
088 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
089 * @param ssSource the source StoringStock.
090 * @param dbDest the destination DataBasket.
091 * @param si the StockItem that is selected in the source.
092 *
093 * @override Sometimes The default implementation returns 0.
094 */
095 protected int checkMoveToDest(SaleProcess p, SalesPoint sp, StoringStock ssSource, DataBasket dbDest,
096 StockItem si) throws InterruptedException {
097 return 0;
098 }
099
100 /**
101 * Move the indicated item from the source Stock. You can assume that you are
102 * in a {@link Transition}.
103 *
104 * @param p the process into which the sub-process wil be embedded.
105 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
106 * @param ssSource the source StoringStock.
107 * @param dbDest the destination DataBasket.
108 * @param si the StockItem that is selected in the source.
109 *
110 * @override Sometimes
111 */
112 protected void moveToDest(SaleProcess p, SalesPoint sp, StoringStock ssSource, DataBasket dbDest,
113 StockItem si) {
114 try {
115 ssSource.remove(si, dbDest);
116 }
117 catch (data.events.VetoException ve) {
118 error(p, REMOVE_VETO_EXCEPTION);
119 }
120 }
121
122 /**
123 * Get the sub-process that will move items from the destination to the source.
124 *
125 * @param p the process into which the sub-process wil be embedded.
126 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
127 * @param ssSource the source StoringStock.
128 * @param dbDest the destination DataBasket.
129 * @param dbe the DataBasketEntry that is selected in the destination.
130 * @param ttfs the FormSheet that triggers the process.
131 *
132 * @override Never
133 */
134 public Transition getMoveToSourceProcess(SaleProcess p, SalesPoint sp, StoringStock ssSource,
135 DataBasket dbDest, DataBasketEntry dbe, TwoTableFormSheet ttfs) {
136 return new GateChangeTransition(getCheckMoveToSourceGate(p, sp, ssSource, dbDest, dbe, ttfs));
137 }
138
139 /**
140 * Get the first gate of the sub-process that will move items from the destination to the source.
141 *
142 * <p>This Gate will check whether the move is allowable, and if so, will trigger a Transition that
143 * performs it.</p>
144 *
145 * @param p the process into which the sub-process wil be embedded.
146 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
147 * @param ssSource the source StoringStock.
148 * @param dbDest the destination DataBasket.
149 * @param dbe the DataBasketEntry that is selected in the destination.
150 * @param ttfs the FormSheet that triggers the process.
151 *
152 * @override Never Instead, override {@link #checkMoveToSource} and/or {@link #moveToSource}.
153 */
154 protected Gate getCheckMoveToSourceGate(SaleProcess p, final SalesPoint sp, final StoringStock ssSource,
155 final DataBasket dbDest, final DataBasketEntry dbe, final TwoTableFormSheet ttfs) {
156 return new Gate() {
157 private static final long serialVersionUID = 6394230841278696015L;
158
159 public Transition getNextTransition(SaleProcess p, User u) throws InterruptedException {
160 int nCheckReturn = checkMoveToSource(p, sp, ssSource, dbDest, dbe);
161
162 if (nCheckReturn == 0) {
163 return new Transition() {
164 private static final long serialVersionUID = -3757626301453716968L;
165
166 public Gate perform(SaleProcess p, User u) {
167 moveToSource(p, sp, ssSource, dbDest, dbe);
168
169 return ttfs.getGate();
170 }
171 };
172 } else {
173 error(p, nCheckReturn);
174
175 return new GateChangeTransition(ttfs.getGate());
176 }
177 }
178 };
179 }
180
181 /**
182 * Check whether the indicated move is allowable. If so, return 0, otherwise return a non-zero error value
183 * that can be passed on to {@link sale.stdforms.FormSheetStrategy#error}. You can assume that you are at a {@link Gate}.
184 *
185 * @param p the process into which the sub-process wil be embedded.
186 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
187 * @param ssSource the source StoringStock.
188 * @param dbDest the destination DataBasket.
189 * @param dbe the DataBasketEntry that is selected in the destination.
190 *
191 * @override Sometimes The default implementation returns 0.
192 */
193 protected int checkMoveToSource(SaleProcess p, SalesPoint sp, StoringStock ssSource, DataBasket dbDest,
194 DataBasketEntry dbe) throws InterruptedException {
195 return 0;
196 }
197
198 /**
199 * Move the indicated item into the source Stock. You can assume that you are
200 * in a {@link Transition}.
201 *
202 * @param p the process into which the sub-process wil be embedded.
203 * @param sp the SalesPoint, if any, at which the FormSheet is being displayed.
204 * @param ssSource the source StoringStock.
205 * @param dbDest the destination DataBasket.
206 * @param dbe the DataBasketEntry that is selected in the destination.
207 *
208 * @override Sometimes
209 */
210 protected void moveToSource(SaleProcess p, SalesPoint sp, StoringStock ssSource, DataBasket dbDest,
211 DataBasketEntry dbe) {
212 ssSource.add((StockItem)dbe.getValue(), dbDest);
213 }
214 }