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

Method parse

code/src/java/plugin/pretokens/parser/PreLevelParser.java:54–124  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

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 {

Callers

nothing calls this directly

Calls 12

setKindMethod · 0.95
setOperatorMethod · 0.95
setOperandMethod · 0.95
addPrerequisiteMethod · 0.95
getOperatorMethod · 0.95
hasMoreTokensMethod · 0.80
nextTokenMethod · 0.80
parseIntMethod · 0.80
invertMethod · 0.80
parseMethod · 0.65
equalsMethod · 0.65
splitMethod · 0.45

Tested by

no test coverage detected