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
24 import net.sf.magicproject.clickable.ability.Ability;
25 import net.sf.magicproject.clickable.targetable.card.MCard;
26 import net.sf.magicproject.tools.MToolKit;
27
28 /***
29 * Database property/value test.
30 *
31 * @author <a href="mailto:fabdouglas@users.sourceforge.net">Fabrice Daugan </a>
32 * @since 0.94
33 */
34 class Database extends TestCard {
35
36 /***
37 * Create an instance of this class by reading a file. Offset's file must
38 * pointing on the first byte of this test <br>
39 * <ul>
40 * Structure of InputStream : Data[size]
41 * <li>property name [String]</li>
42 * <li>property value [String]</li>
43 * </ul>
44 *
45 * @param inputFile
46 * is the file containing this event
47 * @throws IOException
48 * if error occurred during the reading process from the specified
49 * input stream
50 */
51 Database(InputStream inputFile) throws IOException {
52 super(inputFile);
53 propertyName = MToolKit.readString(inputFile).intern();
54 propertyValue = MToolKit.readString(inputFile).intern();
55 }
56
57 /***
58 * Return the result of test beetwen left and right op applied on the
59 * specified card.
60 *
61 * @param ability
62 * is the ability owning this test. The card component of this
63 * ability should correspond to the card owning this test too.
64 * @param tested
65 * the tested card
66 * @return true if the specified card matches with the test to do
67 */
68 @Override
69 protected boolean testCard(Ability ability, MCard tested) {
70 final String propertyValue = on.getCard(ability, tested).getDatabase()
71 .getProperty(propertyName);
72 return propertyValue != null
73 && this.propertyValue.equalsIgnoreCase(propertyValue);
74 }
75
76 /***
77 * The property name.
78 */
79 private final String propertyName;
80
81 /***
82 * The property value.
83 */
84 private final String propertyValue;
85 }