The Class PreFactTester is responsible for testing FACT values on an object.
| 36 | * The Class {@code PreFactTester} is responsible for testing FACT values on an object. |
| 37 | */ |
| 38 | public 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 | } |
nothing calls this directly
no outgoing calls
no test coverage detected