From: <th...@us...> - 2007-05-27 01:50:20
|
Revision: 3041 http://svn.sourceforge.net/pcgen/?rev=3041&view=rev Author: thpr Date: 2007-05-26 18:50:21 -0700 (Sat, 26 May 2007) Log Message: ----------- Third Part of [ 1690306 ] Token Cleanup (CHOOSE) Issue#: 1690306 Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java Trunk/pcgen/code/src/java/plugin/lsttokens/ChooseLst.java Added Paths: ----------- Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLoader.java Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLstToken.java Added: Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLoader.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLoader.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLoader.java 2007-05-27 01:50:21 UTC (rev 3041) @@ -0,0 +1,70 @@ +/* + * ChooseLoader.java + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library 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 library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on February 17, 2007 + * + * $Id: AddLoader.java 2077 2007-01-27 16:45:58Z thpr $ + */ +package pcgen.persistence.lst; + +import java.util.Map; + +import pcgen.core.PObject; +import pcgen.persistence.PersistenceLayerException; +import pcgen.util.Logging; + +public final class ChooseLoader +{ + private ChooseLoader() + { + // Utility Class, no construction needed + } + + /** + * This method is static so it can be used by the ADD Token. + * + * @param target + * @param lstLine + * @param source + * @throws PersistenceLayerException + */ + public static boolean parseToken(PObject target, String key, String value, + int level) + { + Map<String, LstToken> tokenMap = + TokenStore.inst().getTokenMap(ChooseLstToken.class); + ChooseLstToken token = (ChooseLstToken) tokenMap.get(key); + if (token != null) + { + LstUtils.deprecationCheck(token, target, value); + if (!token.parse(target, value)) + { + Logging + .errorPrint("Error parsing CHOOSE: " + key + ":" + value); + return false; + } + return true; + } + else + { + Logging + .errorPrint("Error parsing CHOOSE, invalid SubToken: " + key); + return false; + } + } +} Added: Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLstToken.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLstToken.java (rev 0) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/ChooseLstToken.java 2007-05-27 01:50:21 UTC (rev 3041) @@ -0,0 +1,38 @@ +/* + * ChooseLstToken + * Copyright 2007 (C) Thomas Parker <th...@us...> + * + * This library 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 library 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Created on February 23, 2007 + * + * Current Ver: $Revision: 197 $ + * Last Editor: $Author: nuance $ + * Last Edited: $Date: 2006-03-14 17:59:43 -0500 (Tue, 14 Mar 2006) $ + * + */ +package pcgen.persistence.lst; + +import pcgen.core.PObject; + +/** + * <code>ChooseLstToken</code> + * + * @author Thomas Parker <th...@us...> + */ +public interface ChooseLstToken extends LstToken +{ + public abstract boolean parse(PObject po, String value); +} Modified: Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2007-05-27 01:49:36 UTC (rev 3040) +++ Trunk/pcgen/code/src/java/pcgen/persistence/lst/TokenStore.java 2007-05-27 01:50:21 UTC (rev 3041) @@ -117,6 +117,7 @@ tokenTypeList.add(SponsorLstToken.class); //subtokens + tokenTypeList.add(ChooseLstToken.class); tokenTypeList.add(AutoLstToken.class); tokenTypeList.add(AddLstToken.class); tokenTypeList.add(RemoveLstToken.class); Modified: Trunk/pcgen/code/src/java/plugin/lsttokens/ChooseLst.java =================================================================== --- Trunk/pcgen/code/src/java/plugin/lsttokens/ChooseLst.java 2007-05-27 01:49:36 UTC (rev 3040) +++ Trunk/pcgen/code/src/java/plugin/lsttokens/ChooseLst.java 2007-05-27 01:50:21 UTC (rev 3041) @@ -4,12 +4,15 @@ */ package plugin.lsttokens; +import pcgen.core.Constants; import pcgen.core.PObject; +import pcgen.persistence.lst.ChooseLoader; import pcgen.persistence.lst.GlobalLstToken; +import pcgen.util.Logging; /** * @author djones4 - * + * */ public class ChooseLst implements GlobalLstToken { @@ -23,9 +26,82 @@ { if (!value.startsWith("CHOOSE:LANGAUTO")) { - obj.setChoiceString(value); + String key; + String val = value; + int activeLoc = 0; + String count = null; + String maxCount = null; + while (true) + { + int pipeLoc = val.indexOf(Constants.PIPE, activeLoc); + if (pipeLoc == -1) + { + key = val; + val = null; + } + else + { + key = val.substring(activeLoc, pipeLoc); + val = val.substring(pipeLoc + 1); + } + if (key.startsWith("COUNT=")) + { + if (count != null) + { + Logging + .errorPrint("Cannot use COUNT more than once in CHOOSE: " + + value); + return false; + } + count = key.substring(6); + if (count == null) + { + Logging + .errorPrint("COUNT in CHOOSE must be a formula: " + + value); + return false; + } + } + else if (key.startsWith("NUMCHOICES=")) + { + if (maxCount != null) + { + Logging + .errorPrint("Cannot use NUMCHOICES more than once in CHOOSE: " + + value); + return false; + } + maxCount = key.substring(11); + if (maxCount == null || maxCount.length() == 0) + { + Logging + .errorPrint("NUMCHOICES in CHOOSE must be a formula: " + + value); + return false; + } + } + else + { + break; + } + } + boolean parse = ChooseLoader.parseToken(obj, key, val, anInt); + if (!parse) + { + parseOld(obj, value, anInt); + } return true; } return false; } + + private void parseOld(PObject obj, String value, int anInt) + { + //514 deprecation changes +// Logging.errorPrint("CHOOSE: syntax you are using is deprecated: " +// + value); +// Logging.errorPrint(" Please use CHOOSE:SUBKEY|choices"); +// Logging.errorPrint(" ... see the PCGen docs"); + obj.setChoiceString(value); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |