1
2
3
4
5
6
7
8
9
10
11 package chapter10.calculator;
12
13 import java.util.EmptyStackException;
14
15 import org.xml.sax.Attributes;
16
17 import ch.qos.logback.core.joran.action.Action;
18 import ch.qos.logback.core.joran.spi.InterpretationContext;
19
20
21
22
23
24
25
26
27 public class AddAction extends Action {
28
29 public void begin(InterpretationContext ic, String name, Attributes attributes) {
30 int first = fetchInteger(ic);
31 int second = fetchInteger(ic);
32
33 ic.pushObject(new Integer(first + second));
34 }
35
36
37
38
39
40 int fetchInteger(InterpretationContext ic) {
41 int result = 0;
42
43 try {
44
45 Object o1 = ic.popObject();
46
47 if (o1 instanceof Integer) {
48 result = ((Integer) o1).intValue();
49 } else {
50 String errMsg =
51 "Object [" + o1
52 + "] currently at the top of the stack is not an integer.";
53 ic.addError(errMsg);
54 throw new IllegalArgumentException(errMsg);
55 }
56 } catch (EmptyStackException ese) {
57 ic.addError(("Expecting an integer on the execution stack."));
58 throw ese;
59 }
60 return result;
61 }
62
63 public void end(InterpretationContext ic, String name) {
64
65 }
66 }