From: <mot...@us...> - 2009-10-18 21:04:34
|
Revision: 10768 http://pcgen.svn.sourceforge.net/pcgen/?rev=10768&view=rev Author: motorviper Date: 2009-10-18 21:04:20 +0000 (Sun, 18 Oct 2009) Log Message: ----------- Tracker 2881114: First check in so others can see the proposed code. Issue#: 2881114 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractToken.java Trunk/pcgen/code/src/java/pcgen/util/Logging.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java Trunk/pcgen/code/src/java/plugin/lsttokens/race/HandsToken.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractNonEmptyToken.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractTokenWithSeparator.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMParserToken.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMPrimaryParserToken.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ComplexParseResult.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ErrorParsingWrapper.java Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ParseResult.java Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractNonEmptyToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractNonEmptyToken.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractNonEmptyToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import pcgen.rules.context.LoadContext; + +/** + * Does initial parsing of a token which should not be empty. + */ +public abstract class AbstractNonEmptyToken<T> extends AbstractToken implements CDOMPrimaryParserToken<T> +{ + /* + * Temporary class while switching to new parsing paradigm. + */ + public boolean parse(LoadContext context, T obj, String value) + { + return ErrorParsingWrapper.parseToken(this, context, obj, value); + } + + /** + * Checks to make sure the value is non-empty before continuing parsing. + */ + public ParseResult parseToken(LoadContext context, T obj, String value) + { + ParseResult pr = checkNonEmpty(value); + if (pr.passed()) + { + pr = parseNonEmptyToken(context, obj, value); + } + return pr; + } + + /** + * Must be overridden to continue parsing. + */ + protected abstract ParseResult parseNonEmptyToken(LoadContext context, T obj, String value); +} Modified: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractToken.java 2009-10-18 20:49:03 UTC (rev 10767) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -63,47 +63,73 @@ return null; } - protected boolean hasIllegalSeparator(char separator, String value) + /** + * Checks a string to see if any separators are used correctly. + * @param separator The separator that is used in the string. + * @param value The string to check. + * @return A parse result of success if the string uses separators correctly. + */ + protected ParseResult checkForIllegalSeparator(char separator, String value) { if (value.charAt(0) == separator) { - Logging.addParseMessage(Logging.LST_ERROR, getTokenName() + return new ParseResult.Fail(getTokenName() + " arguments may not start with " + separator + " : " + value); - return true; } if (value.charAt(value.length() - 1) == separator) { - Logging.addParseMessage(Logging.LST_ERROR, getTokenName() + return new ParseResult.Fail(getTokenName() + " arguments may not end with " + separator + " : " + value); - return true; } if (value.indexOf(String.valueOf(new char[]{separator, separator})) != -1) { - Logging.addParseMessage(Logging.LST_ERROR, getTokenName() + return new ParseResult.Fail(getTokenName() + " arguments uses double separator " + separator + separator + " : " + value); - return true; } - return false; + return ParseResult.SUCCESS; } - protected boolean isEmpty(String value) + protected boolean hasIllegalSeparator(char separator, String value) { + ParseResult pr = checkForIllegalSeparator(separator, value); + if (pr.passed()) + { + pr.addMessagesToLog(); + } + return !pr.passed(); + } + + /** + * Checks that a string is non-empty. + * @param value The string to check. + * @return A parse result of success if the string in non-empty. + */ + protected ParseResult checkNonEmpty(String value) + { if (value == null) { - Logging.addParseMessage(Logging.LST_ERROR, getTokenName() + return new ParseResult.Fail(getTokenName() + " may not have null argument"); - return true; } if (value.length() == 0) { - Logging.addParseMessage(Logging.LST_ERROR, getTokenName() + return new ParseResult.Fail(getTokenName() + " may not have empty argument"); - return true; } - return false; + return ParseResult.SUCCESS; } + protected boolean isEmpty(String value) + { + ParseResult pr = checkNonEmpty(value); + if (pr.passed()) + { + pr.addMessagesToLog(); + } + return !pr.passed(); + } + /** Return the token name */ protected abstract String getTokenName(); Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractTokenWithSeparator.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractTokenWithSeparator.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/AbstractTokenWithSeparator.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import pcgen.rules.context.LoadContext; + +/** + * Does initial parsing of a token which should not be empty and is expected to have separators. + */ +public abstract class AbstractTokenWithSeparator<T> extends AbstractNonEmptyToken<T> +{ + /** + * Checks to make sure the value has valid separators before continuing parsing. + */ + @Override + protected ParseResult parseNonEmptyToken(LoadContext context, T obj, String value) + { + ParseResult pr = checkForIllegalSeparator(separator(), value); + if (pr.passed()) + { + pr = parseTokenWithSeparator(context, obj, value); + } + return pr; + } + + /** + * Override this if the standard separator for the token is not a '|'. + * @return + */ + protected char separator() + { + return '|'; + } + + /** + * Must be overridden to continue parsing. + */ + protected abstract ParseResult parseTokenWithSeparator(LoadContext context, T obj, String value); +} Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMParserToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMParserToken.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMParserToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import pcgen.persistence.lst.LstToken; +import pcgen.rules.context.LoadContext; + +/** + * This interface will eventually replace CDOMToken<T>. + * @author Mark + */ +public interface CDOMParserToken<T> extends LstToken +{ + public ParseResult parseToken(LoadContext context, T obj, String value); + + public Class<T> getTokenClass(); +} Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMPrimaryParserToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMPrimaryParserToken.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/CDOMPrimaryParserToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import pcgen.rules.context.LoadContext; + +/** + * This interface will eventually replace CDOMPrimaryToken<T>. + * @author Mark + */ +public interface CDOMPrimaryParserToken<T> extends CDOMParserToken<T> +{ + public String[] unparse(LoadContext context, T obj); +} Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ComplexParseResult.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ComplexParseResult.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ComplexParseResult.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import java.util.LinkedList; +import java.util.logging.Level; + +import pcgen.util.Logging; + +/** + * Class that implements ParseResult for providing more complicated feedback. + */ +public class ComplexParseResult implements ParseResult +{ + private LinkedList<QueuedMessage> _queuedMessages = + new LinkedList<QueuedMessage>(); + + public ComplexParseResult() + { + } + + public ComplexParseResult(String error) + { + addErrorMessage(error); + } + + public ComplexParseResult(ComplexParseResult toCopy) + { + addMessages(toCopy); + } + + public void addErrorMessage(String msg) + { + addParseMessage(Logging.ERROR, msg); + } + + public void addWarningMessage(String msg) + { + addParseMessage(Logging.WARNING, msg); + } + + protected void addParseMessage(Level lvl, String msg) + { + _queuedMessages.add(new QueuedMessage(lvl, msg)); + } + + public void addMessages(ComplexParseResult pr) + { + for (QueuedMessage msg : pr._queuedMessages) + { + _queuedMessages.add(msg); + } + } + + public void printMessages() + { + for (QueuedMessage msg : _queuedMessages) + { + Logging.log(msg.level, msg.message, msg.stackTrace); + } + } + + public void addMessagesToLog() + { + for (QueuedMessage msg : _queuedMessages) + { + Logging.addParseMessage(msg.level, msg.message, msg.stackTrace); + } + } + + public boolean passed() + { + for (QueuedMessage msg : _queuedMessages) + { + if (msg.level == Logging.ERROR + || msg.level == Logging.LST_ERROR) + { + return false; + } + } + return true; + } +} \ No newline at end of file Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ErrorParsingWrapper.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ErrorParsingWrapper.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ErrorParsingWrapper.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import pcgen.persistence.PersistenceLayerException; +import pcgen.rules.context.LoadContext; + +/** + * Temporary class to simplify the transition to using ParseResult/CDOMParseToken<T>. + * See plugin.lsttokens.race.HandsToken and pcgen.rules.persistence.token.AbstractNonEmptyToken for use. + * @author Mark + */ +public abstract class ErrorParsingWrapper<T> implements CDOMPrimaryParserToken<T> +{ + static public <T> boolean parseToken(CDOMPrimaryParserToken<T> token, LoadContext context, T obj, String value) + { + ParseResult pr = token.parseToken(context, obj, value); + if (!pr.passed()) + { + pr.addMessagesToLog(); + } + return pr.passed(); + } + + public boolean parse(LoadContext context, T obj, String value) + throws PersistenceLayerException + { + return parseToken(this, context, obj, value); + } +} Added: Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ParseResult.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ParseResult.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/rules/persistence/token/ParseResult.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2009 Mark Jeffries <mot...@us...> + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ +package pcgen.rules.persistence.token; + +import java.util.logging.Level; + +import pcgen.util.Logging; + +/** + * Interface to provide feedback on parsing operations. + * @author Mark + */ +public interface ParseResult +{ + /** + * State of the parse operation. + * @return True if the parse was successful. + */ + public boolean passed(); + + /** + * Log any messages associated with the operation. + */ + public void printMessages(); + + /* + * Temporary method for aiding conversion to use of ParseResult. + * See pcgen.rules.persistence.token.ErrorParsingWrapper for use. + */ + public void addMessagesToLog(); + + /** + * Object to be returned from parsing operations that succeeded with no messages. + */ + public static Pass SUCCESS = new Pass(); + + /** + * Class representing a message from the parser. + */ + public static class QueuedMessage + { + public final Level level; + public final String message; + public final StackTraceElement[] stackTrace; + + public QueuedMessage(Level lvl, String msg) + { + level = lvl; + message = msg; + stackTrace = Thread.currentThread().getStackTrace(); + } + } + + /** + * This is the class of the SUCCESS object. + * Under normal use it should only be used for constructing this object. + */ + public class Pass implements ParseResult + { + public boolean passed() + { + return true; + } + + public void addMessagesToLog() + { + } + + public void printMessages() + { + } + } + + /** + * Simple class to handle feedback from parse operations that fail. + */ + public class Fail implements ParseResult + { + private final QueuedMessage _error; + + public Fail(String error) + { + _error = new QueuedMessage(Logging.ERROR, error); + } + + public boolean passed() + { + return false; + } + + public void addMessagesToLog() + { + Logging.addParseMessage(_error.level, _error.message, + _error.stackTrace); + } + + public void printMessages() + { + Logging.log(_error.level, _error.message, _error.stackTrace); + } + } +} Modified: Trunk/pcgen/code/src/java/pcgen/util/Logging.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/util/Logging.java 2009-10-18 20:49:03 UTC (rev 10767) +++ Trunk/pcgen/code/src/java/pcgen/util/Logging.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -345,6 +345,24 @@ } /** + * Log a message with a stack trace, if logging is enabled at the + * supplied level of detail. + * This is mainly for use with the pcgen.rules.persistence.token.ParseResult class. + * + * @param lvl The detail level of the message + * @param msg String message + * @param stackTrace The stack trace + */ + public static void log(Level lvl, String msg, StackTraceElement[] stackTrace) + { + Logger l = getLogger(); + if (l.isLoggable(lvl)) + { + l.log(lvl, msg, stackTrace); + } + } + + /** * Print error message with a stack trace if PCGen is * debugging. * @@ -501,6 +519,15 @@ queuedMessages.add(new QueuedMessage(lvl, msg)); } + /* + * Temporary method for use with ParseResult conversion. + * See pcgen.rules.persistence.token.ParseResult for use. + */ + public static void addParseMessage(Level lvl, String msg, StackTraceElement[] stack) + { + queuedMessages.add(new QueuedMessage(lvl, msg, stack)); + } + private static int queuedMessageMark = -1; public static void markParseMessages() @@ -549,5 +576,16 @@ message = msg; stackTrace = Thread.currentThread().getStackTrace(); } + + /* + * Temporary constructor for use with ParseResult conversion. + * See addParseMessage above. + */ + public QueuedMessage(Level lvl, String msg, StackTraceElement[] stack) + { + level = lvl; + message = msg; + stackTrace = stack; + } } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java 2009-10-18 20:49:03 UTC (rev 10767) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/ChooseLangautoToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -39,13 +39,14 @@ import pcgen.core.Race; import pcgen.rules.context.LoadContext; import pcgen.rules.persistence.TokenUtilities; -import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.AbstractTokenWithSeparator; +import pcgen.rules.persistence.token.CDOMPrimaryParserToken; import pcgen.rules.persistence.token.CDOMSecondaryToken; import pcgen.rules.persistence.token.DeferredToken; -import pcgen.util.Logging; +import pcgen.rules.persistence.token.ParseResult; -public class ChooseLangautoToken extends AbstractToken implements - CDOMSecondaryToken<Race>, PersistentChoiceActor<Language>, +public class ChooseLangautoToken extends AbstractTokenWithSeparator<Race> implements + CDOMPrimaryParserToken<Race>, CDOMSecondaryToken<Race>, PersistentChoiceActor<Language>, DeferredToken<Race> { @@ -67,12 +68,9 @@ return "LANGAUTO"; } - public boolean parse(LoadContext context, Race race, String value) + @Override + public ParseResult parseTokenWithSeparator(LoadContext context, Race race, String value) { - if (isEmpty(value) || hasIllegalSeparator('|', value)) - { - return false; - } List<CDOMReference<Language>> refs = new ArrayList<CDOMReference<Language>>(); StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); @@ -84,10 +82,9 @@ LANGUAGE_CLASS, tokText); if (lang == null) { - Logging.errorPrint(" Error was encountered while parsing " + return new ParseResult.Fail(" Error was encountered while parsing " + getFullName() + ": " + value + " had an invalid reference: " + tokText); - return false; } refs.add(lang); } @@ -96,9 +93,8 @@ new ReferenceChoiceSet<Language>(refs); if (!rcs.getGroupingState().isValid()) { - Logging.errorPrint("Non-sensical " + getFullName() + return new ParseResult.Fail("Non-sensical " + getFullName() + ": Contains ANY and a specific reference: " + value); - return false; } ChoiceSet<Language> cs = new ChoiceSet<Language>(getTokenName(), rcs); cs.setTitle("Pick a Language"); @@ -106,7 +102,7 @@ new PersistentTransitionChoice<Language>(cs, FormulaFactory.ONE); context.getObjectContext().put(race, ObjectKey.CHOOSE_LANGAUTO, tc); tc.setChoiceActor(this); - return true; + return ParseResult.SUCCESS; } public String[] unparse(LoadContext context, Race race) Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java 2009-10-18 20:49:03 UTC (rev 10767) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/CrToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -22,15 +22,16 @@ import pcgen.cdom.enumeration.ObjectKey; import pcgen.core.Race; import pcgen.rules.context.LoadContext; -import pcgen.rules.persistence.token.AbstractToken; +import pcgen.rules.persistence.token.AbstractNonEmptyToken; +import pcgen.rules.persistence.token.CDOMPrimaryParserToken; import pcgen.rules.persistence.token.CDOMPrimaryToken; import pcgen.rules.persistence.token.DeferredToken; -import pcgen.util.Logging; +import pcgen.rules.persistence.token.ParseResult; /** * Class deals with CR Token */ -public class CrToken extends AbstractToken implements CDOMPrimaryToken<Race>, +public class CrToken extends AbstractNonEmptyToken<Race> implements CDOMPrimaryParserToken<Race>, CDOMPrimaryToken<Race>, DeferredToken<Race> { @@ -43,32 +44,20 @@ return "CR"; } - /** - * Parse the CR token - * - * @param context - * @param race - * @param value - * @return true if the parse was successful, else false - */ - public boolean parse(LoadContext context, Race race, String value) + @Override + public ParseResult parseNonEmptyToken(LoadContext context, Race race, String value) { - if (isEmpty(value)) - { - return false; - } try { ChallengeRating cr = new ChallengeRating(value); context.getObjectContext() .put(race, ObjectKey.CHALLENGE_RATING, cr); - return true; + return ParseResult.SUCCESS; } catch (IllegalArgumentException e) { - Logging.errorPrint(getTokenName() + " encountered error: " + return new ParseResult.Fail(getTokenName() + " encountered error: " + e.getLocalizedMessage()); - return false; } } Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/race/HandsToken.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/race/HandsToken.java 2009-10-18 20:49:03 UTC (rev 10767) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/race/HandsToken.java 2009-10-18 21:04:20 UTC (rev 10768) @@ -20,13 +20,15 @@ import pcgen.cdom.enumeration.IntegerKey; import pcgen.core.Race; import pcgen.rules.context.LoadContext; +import pcgen.rules.persistence.token.CDOMPrimaryParserToken; import pcgen.rules.persistence.token.CDOMPrimaryToken; -import pcgen.util.Logging; +import pcgen.rules.persistence.token.ErrorParsingWrapper; +import pcgen.rules.persistence.token.ParseResult; /** * Class deals with HANDS Token */ -public class HandsToken implements CDOMPrimaryToken<Race> +public class HandsToken extends ErrorParsingWrapper<Race> implements CDOMPrimaryParserToken<Race>, CDOMPrimaryToken<Race> { public String getTokenName() @@ -34,25 +36,23 @@ return "HANDS"; } - public boolean parse(LoadContext context, Race race, String value) + public ParseResult parseToken(LoadContext context, Race race, String value) { try { Integer in = Integer.valueOf(value); if (in.intValue() < 0) { - Logging.errorPrint(getTokenName() + " must be an integer >= 0"); - return false; + return new ParseResult.Fail(getTokenName() + " must be an integer >= 0"); } context.getObjectContext().put(race, IntegerKey.CREATURE_HANDS, in); - return true; + return ParseResult.SUCCESS; } catch (NumberFormatException nfe) { - Logging.errorPrint(getTokenName() + return new ParseResult.Fail(getTokenName() + " expected an integer. Tag must be of the form: " + getTokenName() + ":<int>"); - return false; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |