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

Method parseToken

code/src/java/plugin/lsttokens/DefineStatLst.java:66–138  ·  view source on GitHub ↗
(LoadContext context, CDOMObject obj, String value)

Source from the content-addressed store, hash-verified

64 }
65
66 @Override
67 public ParseResult parseToken(LoadContext context, CDOMObject obj, String value)
68 {
69 if (obj instanceof Ungranted)
70 {
71 return new ParseResult.Fail(
72 "Cannot use " + getTokenName() + " on an Ungranted object type: " + obj.getClass().getSimpleName());
73 }
74 ParsingSeparator sep = new ParsingSeparator(value, '|');
75 sep.addGroupingPair('[', ']');
76 sep.addGroupingPair('(', ')');
77
78 if (!sep.hasNext())
79 {
80 return new ParseResult.Fail(getTokenName() + " may not be empty");
81 }
82 String firstItem = sep.next();
83
84 DefineStatSubToken subToken;
85 try
86 {
87 subToken = DefineStatSubToken.valueOf(firstItem);
88 }
89 catch (IllegalArgumentException e1)
90 {
91 return new ParseResult.Fail(
92 "Found unexpected sub tag " + firstItem + " in " + getTokenName() + Constants.COLON + value
93 + ". Must be one of " + StringUtils.join(DefineStatSubToken.values(), ", ") + Constants.DOT);
94 }
95
96 if (!sep.hasNext())
97 {
98 return new ParseResult.Fail(getTokenName() + Constants.COLON + subToken + "| must be followed by a stat.");
99 }
100 String statKey = sep.next();
101 CDOMSingleRef<PCStat> stat = context.getReferenceContext().getCDOMReference(PCSTAT_CLASS, statKey);
102
103 Formula f = null;
104 if (subToken == DefineStatSubToken.LOCK || subToken == DefineStatSubToken.MINVALUE
105 || subToken == DefineStatSubToken.MAXVALUE)
106 {
107 if (!sep.hasNext())
108 {
109 return new ParseResult.Fail(
110 getTokenName() + Constants.COLON + subToken + "| must be followed by both a stat and a value.");
111 }
112 String formula = sep.next();
113 f = FormulaFactory.getFormulaFor(formula);
114 if (!f.isValid())
115 {
116 return new ParseResult.Fail("Formula in " + getTokenName() + " was not valid: " + f.toString());
117 }
118 }
119
120 if (sep.hasNext())
121 {
122 return new ParseResult.Fail(
123 getTokenName() + Constants.COLON + value + " has too many pipe separated item.");

Callers

nothing calls this directly

Calls 15

getTokenNameMethod · 0.95
addGroupingPairMethod · 0.95
hasNextMethod · 0.95
nextMethod · 0.95
getFormulaForMethod · 0.95
isValidMethod · 0.95
getSimpleNameMethod · 0.80
joinMethod · 0.80
getCDOMReferenceMethod · 0.80
getReferenceContextMethod · 0.65
toStringMethod · 0.65
addToListMethod · 0.65

Tested by

no test coverage detected