1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sf.magicproject.test;
20
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.util.HashMap;
24 import java.util.List;
25
26 import net.sf.magicproject.clickable.ability.Ability;
27 import net.sf.magicproject.clickable.targetable.Targetable;
28 import net.sf.magicproject.clickable.targetable.card.MCard;
29 import net.sf.magicproject.event.MEventListener;
30 import net.sf.magicproject.expression.Expression;
31
32 /***
33 * @author <a href="mailto:fabdouglas@users.sourceforge.net">Fabrice Daugan </a>
34 * @since 0.54
35 */
36 public abstract class BinaryTest extends TestBoolean {
37
38 /***
39 * Create an instance of Or by reading a file. Offset's file must pointing on
40 * the first byte of this test <br>
41 * <ul>
42 * Structure of InputStream : Data[size]
43 * <li>left expression [...]</li>
44 * <li>right expression [...]</li>
45 * </ul>
46 *
47 * @param inputFile
48 * is the file containing this event
49 * @throws IOException
50 * if error occurred during the reading process from the specified
51 * input stream
52 */
53 protected BinaryTest(InputStream inputFile) throws IOException {
54 super(inputFile);
55 leftTest = TestFactory.readNextTest(inputFile);
56 rightTest = TestFactory.readNextTest(inputFile);
57 }
58
59 /***
60 * Creates a new instance of Or specifying all attributes of this class. All
61 * parameters are copied, not cloned. So this new object shares the card and
62 * the specified codes
63 *
64 * @param leftTest
65 * the left boolean expression
66 * @param rightTest
67 * the right boolean expression
68 */
69 protected BinaryTest(Test leftTest, Test rightTest) {
70 super();
71 this.leftTest = leftTest;
72 this.rightTest = rightTest;
73 }
74
75 @Override
76 public abstract boolean test(Ability ability, Targetable tested);
77
78 /***
79 * Left test of this test
80 */
81 protected Test leftTest;
82
83 /***
84 * Right test of this test
85 */
86 protected Test rightTest;
87
88 /***
89 * Return this test where values depending on values of this action have been
90 * replaced.
91 *
92 * @param values
93 * are referecable values.
94 * @return a parsed test.
95 * @since 0.85
96 */
97 public abstract Test getConstraintTest(HashMap<String, Expression> values);
98
99 @Override
100 public void extractTriggeredEvents(List<MEventListener> res, MCard source,
101 Test globalTest) {
102 leftTest.extractTriggeredEvents(res, source, globalTest);
103 rightTest.extractTriggeredEvents(res, source, globalTest);
104 }
105
106 @Override
107 public abstract boolean testPreemption(Ability ability, Targetable tested);
108 }