MCPcopy Create free account
hub / github.com/PCGen/pcgen / PreFactSetTester

Class PreFactSetTester

code/src/java/plugin/pretokens/test/PreFactSetTester.java:38–120  ·  view source on GitHub ↗

The Class PreFactTester is responsible for testing FACT values on an object.

Source from the content-addressed store, hash-verified

36 * The Class {@code PreFactTester} is responsible for testing FACT values on an object.
37 */
38public class PreFactSetTester extends AbstractPrerequisiteTest implements PrerequisiteTest
39{
40
41 @Override
42 public int passes(final Prerequisite prereq, final PlayerCharacter aPC, CDOMObject source)
43 throws PrerequisiteException
44 {
45
46 final int number;
47 try
48 {
49 number = Integer.parseInt(prereq.getOperand());
50 }
51 catch (NumberFormatException exceptn)
52 {
53 throw new PrerequisiteException(
54 LanguageBundle.getFormattedString("PreFactSet.error", prereq.toString()), exceptn); //$NON-NLS-1$
55 }
56
57 String location = prereq.getCategoryName();
58 String[] locationElements = location.split("\\.");
59 Iterable<Reducible> objModel = (Iterable<Reducible>) OutputDB.getIterable(aPC.getCharID(), locationElements);
60 if (objModel == null)
61 {
62 throw new PrerequisiteException("Output System does not have model for: " + location);
63 }
64
65 String test = prereq.getKey();
66 String[] factinfo = test.split("=");
67 String factid = factinfo[0];
68 String factval = factinfo[1];
69 FactSetKey<?> fk = FactSetKey.valueOf(factid);
70
71 int runningTotal = getRunningTotal(prereq, number, objModel, factval, fk);
72 return countedTotal(prereq, runningTotal);
73 }
74
75 private static <T> int getRunningTotal(final Prerequisite prereq, final int number, Iterable<Reducible> objModel,
76 String factval, FactSetKey<T> fk)
77 {
78 T targetVal = fk.getFormatManager().convert(factval);
79 int runningTotal = 0;
80 CDO: for (Reducible r : objModel)
81 {
82 List<Indirect<T>> sets = r.getCDOMObject().getSetFor(fk);
83 for (Indirect<T> indirect : sets)
84 {
85 if (indirect.get().equals(targetVal))
86 {
87 runningTotal++;
88 continue CDO;
89 }
90 }
91 }
92
93 runningTotal = prereq.getOperator().compare(runningTotal, number);
94 return runningTotal;
95 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected