Parse the pre req list @param kind The kind of the prerequisite (less the "PRE" prefix) @param formula The body of the prerequisite. @param invertResult Whether the prerequisite should invert the result. @param overrideQualify if set true, this prerequisite will be enforced in spite
(String kind, String formula, boolean invertResult, boolean overrideQualify)
| 52 | * @throws PersistenceLayerException |
| 53 | */ |
| 54 | @Override |
| 55 | public Prerequisite parse(String kind, String formula, boolean invertResult, boolean overrideQualify) |
| 56 | throws PersistenceLayerException |
| 57 | { |
| 58 | Prerequisite prereq = super.parse(kind, formula, invertResult, overrideQualify); |
| 59 | |
| 60 | StringTokenizer tok = new StringTokenizer(formula, ","); |
| 61 | Prerequisite maxPrereq = new Prerequisite(); |
| 62 | Prerequisite minPrereq = new Prerequisite(); |
| 63 | boolean hasMin = false; |
| 64 | boolean hasMax = false; |
| 65 | while (tok.hasMoreTokens()) |
| 66 | { |
| 67 | String value = tok.nextToken(); |
| 68 | String[] vals = value.split("="); |
| 69 | if (vals.length != 2) |
| 70 | { |
| 71 | throw new PersistenceLayerException("PRELEVEL must be either 'MIN=x', 'MAX=y' or " |
| 72 | + "'MIN=x,MAX=y' where 'x' and 'y' are integers. '" + formula + "' is not valid. "); |
| 73 | } |
| 74 | String token = vals[0]; |
| 75 | String hdVal = vals[1]; |
| 76 | try |
| 77 | { |
| 78 | Integer.parseInt(hdVal); |
| 79 | } |
| 80 | catch (NumberFormatException nfe) |
| 81 | { |
| 82 | throw new PersistenceLayerException( |
| 83 | "PRELEVEL must be either 'MIN=x', 'MAX=y' or " + "'MIN=x,MAX=y' where 'x' and 'y' are integers. '" |
| 84 | + formula + "' is not valid: " + hdVal + " is not an integer", nfe); |
| 85 | } |
| 86 | if (token.equals("MIN")) |
| 87 | { |
| 88 | minPrereq.setKind("level"); |
| 89 | minPrereq.setOperator(PrerequisiteOperator.GTEQ); |
| 90 | minPrereq.setOperand(hdVal); |
| 91 | |
| 92 | hasMin = true; |
| 93 | |
| 94 | } |
| 95 | if (token.equals("MAX")) |
| 96 | { |
| 97 | maxPrereq.setKind("level"); |
| 98 | maxPrereq.setOperator(PrerequisiteOperator.LTEQ); |
| 99 | maxPrereq.setOperand(hdVal); |
| 100 | hasMax = true; |
| 101 | } |
| 102 | } |
| 103 | if (hasMin && hasMax) |
| 104 | { |
| 105 | prereq.setKind(null); // PREMULT |
| 106 | prereq.setOperand("2"); |
| 107 | prereq.addPrerequisite(minPrereq); |
| 108 | prereq.addPrerequisite(maxPrereq); |
| 109 | } |
| 110 | else if (hasMin) |
| 111 | { |
nothing calls this directly
no test coverage detected