package plugin.lsttokens.pcclass.level; import java.util.StringTokenizer; import pcgen.cdom.base.Constants; import pcgen.cdom.enumeration.ObjectKey; import pcgen.cdom.inst.PCClassLevel; import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.token.AbstractTokenWithSeparator; import pcgen.rules.persistence.token.CDOMPrimaryToken; import pcgen.rules.persistence.token.ComplexParseResult; import pcgen.rules.persistence.token.ParseResult; /** * Class deals with DONOTADD Token */ public class DonotaddToken extends AbstractTokenWithSeparator<PCClassLevel> implements CDOMPrimaryToken<PCClassLevel> { @Override public String getTokenName() { return "DONOTADD"; } @Override protected char separator() { return '|'; } @Override protected ParseResult parseTokenWithSeparator(LoadContext context, PCClassLevel po, String value) { StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); while (tok.hasMoreTokens()) { String tokText = tok.nextToken(); if ("HITDIE".equals(tokText)) { context.getObjectContext().put(po, ObjectKey.DONTADD_HITDIE, Boolean.TRUE); } else if ("SKILLPOINTS".equals(tokText)) { context.getObjectContext().put(po, ObjectKey.DONTADD_SKILLPOINTS, Boolean.TRUE); } else { ComplexParseResult pr = new ComplexParseResult(); pr.addErrorMessage(getTokenName() + " encountered an invalid 'Do Not Add' type: " + value); pr.addErrorMessage(" Legal values are: HITDIE, SKILLPOINTS"); return pr; } } return ParseResult.SUCCESS; } @Override public String[] unparse(LoadContext context, PCClassLevel po) { Boolean increaseHitDice = context.getObjectContext().getObject(po, ObjectKey.DONTADD_HITDIE); Boolean increaseSkills = context.getObjectContext().getObject(po, ObjectKey.DONTADD_SKILLPOINTS); if ((increaseHitDice == null) && (increaseSkills == null)) { return null; } StringBuilder sb = new StringBuilder(); if (increaseHitDice != null) { sb.append("HITDIE"); } if (increaseSkills != null) { if (increaseHitDice != null) { sb.append(Constants.PIPE); } sb.append("SKILLPOINTS"); } return new String[] { sb.toString() }; } @Override public Class<PCClassLevel> getTokenClass() { return PCClassLevel.class; } }