001 package sale;
002
003 import users.User;
004
005 /**
006 * Convenience implementation of a Transition that simply changes to another gate. Additionally, some other
007 * useful Transitions are provided.
008 *
009 * @see Transition
010 * @see Gate
011 *
012 * @author Steffen Zschaler
013 * @version 2.0 17/08/1999
014 * @since v2.0
015 */
016 public class GateChangeTransition extends Object implements Transition {
017
018 /**
019 * The target gate.
020 *
021 * @serial
022 */
023 protected Gate m_gTarget;
024
025 /**
026 * Create a new GateChangeTransition.
027 *
028 * @param gTarget the Gate to change to.
029 */
030 public GateChangeTransition(Gate gTarget) {
031 super();
032
033 m_gTarget = gTarget;
034 }
035
036 /**
037 * Perform the Transition. I.e. go to the gate indicated on creation.
038 *
039 * @override Never
040 */
041 public final Gate perform(SaleProcess p, User u) {
042 return m_gTarget;
043 }
044
045 // some convenience constants
046 /**
047 * Transition that will go to the calling process' {@link SaleProcess#getRollbackGate rollback gate}.
048 */
049 public static final Transition CHANGE_TO_ROLLBACK_GATE = new Transition() {
050 public Gate perform(SaleProcess p, User u) {
051 return p.getRollbackGate();
052 }
053 };
054
055 /**
056 * Transition that will go to the calling process' {@link SaleProcess#getCommitGate commit gate}.
057 */
058 public static final Transition CHANGE_TO_COMMIT_GATE = new Transition() {
059 public Gate perform(SaleProcess p, User u) {
060 return p.getCommitGate();
061 }
062 };
063
064 /**
065 * Transition that will go to the calling process' {@link SaleProcess#getQuitGate quit gate}.
066 */
067 public static final Transition CHANGE_TO_QUIT_GATE = new Transition() {
068 public Gate perform(SaleProcess p, User u) {
069 return p.getQuitGate();
070 }
071 };
072
073 /**
074 * Transition that will go to the calling process' {@link SaleProcess#getStopGate stop gate}.
075 */
076 public static final Transition CHANGE_TO_STOP_GATE = new Transition() {
077 public Gate perform(SaleProcess p, User u) {
078 return p.getStopGate();
079 }
080 };
081
082 /**
083 * Transition that will go to the calling process' {@link SaleProcess#getLogGate log gate}.
084 */
085 public static final Transition CHANGE_TO_LOG_GATE = new Transition() {
086 public Gate perform(SaleProcess p, User u) {
087 return p.getLogGate();
088 }
089 };
090 }