@Override protected ParseResult parseNonEmptyToken(LoadContext context, CDOMObject obj, String value) { String shieldProf; Prerequisite prereq = null; // Do not initialize, null is significant! boolean isPre = false; if (value.indexOf("[") == -1) { // Supported version of PRExxx using |. Needs to be at the front of the // Parsing code because many objects expect the pre to have been determined // Ahead of time. Until deprecated code is removed, it will have to stay // like this. shieldProf = value; StringTokenizer tok = new StringTokenizer(shieldProf, Constants.PIPE); while (tok.hasMoreTokens()) { String token = tok.nextToken(); if (PreParserFactory.isPreReqString(token)) { if (isPre) { String errorText = "Invalid " + getTokenName() + ": " + value + " PRExxx must be at the END of the Token"; Logging.errorPrint(errorText); return new ParseResult.Fail(errorText, context); } prereq = getPrerequisite(token); if (prereq == null) { return new ParseResult.Fail( "Error generating Prerequisite " + prereq + " in " + getFullName(), context); } int preStart = value.indexOf(token) - 1; shieldProf = value.substring(0, preStart); isPre = true; } } } else { return new ParseResult.Fail( "Use of [] for Prerequisites has been removed. " + "Please use | based standard", context); } ParseResult pr = checkForIllegalSeparator('|', shieldProf); if (!pr.passed()) { return pr; } boolean foundAny = false; boolean foundOther = false; StringTokenizer tok = new StringTokenizer(shieldProf, Constants.PIPE); List<CDOMReference<ShieldProf>> shieldProfs = new ArrayList<CDOMReference<ShieldProf>>(); List<CDOMReference<Equipment>> equipTypes = new ArrayList<CDOMReference<Equipment>>(); while (tok.hasMoreTokens()) { String aProf = tok.nextToken(); if (Constants.LST_PERCENT_LIST.equals(aProf)) { foundOther = true; ChooseSelectionActor<ShieldProf> cra; if (prereq == null) { cra = this; } else { ConditionalSelectionActor<ShieldProf> cca = new ConditionalSelectionActor<ShieldProf>(this); cca.addPrerequisite(prereq); cra = cca; } context.obj.addToList(obj, ListKey.NEW_CHOOSE_ACTOR, cra); } else if (Constants.LST_ALL.equalsIgnoreCase(aProf)) { foundAny = true; shieldProfs.add(context.ref.getCDOMAllReference(SHIELDPROF_CLASS)); } else if (aProf.startsWith("SHIELDTYPE.") || aProf.startsWith("SHIELDTYPE=")) { foundOther = true; CDOMReference<Equipment> ref = TokenUtilities.getTypeReference( context, EQUIPMENT_CLASS, "SHIELD." + aProf.substring(11)); if (ref == null) { return ParseResult.INTERNAL_ERROR; } equipTypes.add(ref); } else { foundOther = true; shieldProfs.add(context.ref.getCDOMReference(SHIELDPROF_CLASS, aProf)); } } if (foundAny && foundOther) { return new ParseResult.Fail( "Non-sensical " + getFullName() + ": Contains ANY and a specific reference: " + value, context); } if (!shieldProfs.isEmpty() || !equipTypes.isEmpty()) { ShieldProfProvider pp = new ShieldProfProvider(shieldProfs, equipTypes); if (prereq != null) { pp.addPrerequisite(prereq); } context.obj.addToList(obj, ListKey.AUTO_SHIELDPROF, pp); } return ParseResult.SUCCESS; }