1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.wallace.commands;
20
21 import javax.mail.MessagingException;
22
23 import net.sf.wallace.Command;
24 import net.sf.wallace.InvalidStateException;
25 import net.sf.wallace.WallaceSession;
26 import net.sf.wallace.WallaceSessionState;
27
28 /***
29 * A useful base class to aid enforcement of state restrictions.
30 *
31 * @author rnewson
32 */
33 public abstract class AbstractCommand implements Command {
34
35 public final void execute(final WallaceSession wallaceSession) throws InvalidStateException, MessagingException {
36 assertCurrentState(wallaceSession, getAcceptableStates());
37 onExecute(wallaceSession);
38 }
39
40 protected abstract WallaceSessionState[] getAcceptableStates();
41
42 protected abstract void onExecute(final WallaceSession wallaceSession) throws MessagingException;
43
44 private final void assertCurrentState(final WallaceSession wallaceSession, final WallaceSessionState[] acceptableStates)
45 throws InvalidStateException {
46 boolean inBadState = true;
47
48 for (WallaceSessionState acceptableState : acceptableStates) {
49 if (wallaceSession.getState() == acceptableState) {
50 inBadState = false;
51 }
52 }
53
54 if (inBadState) {
55 throw new InvalidStateException(wallaceSession, acceptableStates);
56 }
57 }
58
59 }