From: <th...@us...> - 2007-09-04 00:29:12
|
Revision: 3984 http://pcgen.svn.sourceforge.net/pcgen/?rev=3984&view=rev Author: thpr Date: 2007-09-03 17:29:11 -0700 (Mon, 03 Sep 2007) Log Message: ----------- CDOM: Change unencumberedmove to work without choking on real data. Modified Paths: -------------- branches/cdom/code/src/java/pcgen/cdom/enumeration/ObjectKey.java branches/cdom/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java branches/cdom/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java Removed Paths: ------------- branches/cdom/code/src/java/pcgen/cdom/enumeration/ArmorType.java branches/cdom/code/src/java/pcgen/cdom/enumeration/Load.java Deleted: branches/cdom/code/src/java/pcgen/cdom/enumeration/ArmorType.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/enumeration/ArmorType.java 2007-09-03 21:42:54 UTC (rev 3983) +++ branches/cdom/code/src/java/pcgen/cdom/enumeration/ArmorType.java 2007-09-04 00:29:11 UTC (rev 3984) @@ -1,110 +0,0 @@ -/* - * Copyright 2007 (C) Tom 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 - */ -package pcgen.cdom.enumeration; - -import java.util.Collection; - -import pcgen.base.enumeration.AbstractSequencedConstantFactory; -import pcgen.base.enumeration.SequencedType; -import pcgen.base.enumeration.TypeSafeConstant; - -public final class ArmorType implements SequencedType, TypeSafeConstant -{ - - /** - * The name of this Constant - */ - private final String fieldName; - - /* - * FIXME TODO Why is this sequenced - what is the gap #s on Armor Type? - * (akin to the load weights?) - */ - private final int sequence; - - private static int ordinalCount = 0; - - private final transient int ordinal; - - private ArmorType(String name, int i) - { - ordinal = ordinalCount++; - sequence = i; - fieldName = name; - } - - /** - * Converts this Constant to a String (returns the name of this Constant) - * - * @return The string representatin (name) of this Constant - */ - @Override - public String toString() - { - return fieldName; - } - - public int getOrdinal() - { - return ordinal; - } - - public int getSequence() - { - return sequence; - } - - public static void clearConstants() - { - FACTORY.clearConstants(); - } - - public static Collection<ArmorType> getAllConstants() - { - return FACTORY.getAllConstants(); - } - - public static ArmorType getConstant(String s, int i) - { - return FACTORY.constructConstant(s, i); - } - - public static ArmorType valueOf(String s) - { - return FACTORY.valueOf(s); - } - - private static final TypeFactory FACTORY = new TypeFactory(); - - public static class TypeFactory extends - AbstractSequencedConstantFactory<ArmorType> - { - - @Override - protected Class<ArmorType> getConstantClass() - { - return ArmorType.class; - } - - @Override - protected ArmorType getConstantInstance(String name, int i) - { - return new ArmorType(name, i); - } - } -} Deleted: branches/cdom/code/src/java/pcgen/cdom/enumeration/Load.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/enumeration/Load.java 2007-09-03 21:42:54 UTC (rev 3983) +++ branches/cdom/code/src/java/pcgen/cdom/enumeration/Load.java 2007-09-04 00:29:11 UTC (rev 3984) @@ -1,107 +0,0 @@ -/* - * Copyright 2007 (C) Tom 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 - */ -package pcgen.cdom.enumeration; - -import java.util.Collection; - -import pcgen.base.enumeration.AbstractSequencedConstantFactory; -import pcgen.base.enumeration.SequencedType; -import pcgen.base.enumeration.TypeSafeConstant; - -public final class Load implements SequencedType, TypeSafeConstant -{ - - /** - * The name of this Constant - */ - private final String fieldName; - - private final int sequence; - - private static int ordinalCount = 0; - - private final transient int ordinal; - - private Load(String name, int i) - { - ordinal = ordinalCount++; - sequence = i; - fieldName = name; - } - - /** - * Converts this Constant to a String (returns the name of this Constant) - * - * @return The string representatin (name) of this Constant - */ - @Override - public String toString() - { - return fieldName; - } - - public int getOrdinal() - { - return ordinal; - } - - public int getSequence() - { - return sequence; - } - - public static void clearConstants() - { - FACTORY.clearConstants(); - } - - public static Collection<Load> getAllConstants() - { - return FACTORY.getAllConstants(); - } - - public static void constructConstant(String string, int i) - { - FACTORY.constructConstant(string, i); - } - - public static Load valueOf(String s) - { - return FACTORY.valueOf(s); - } - - private static final TypeFactory FACTORY = new TypeFactory(); - - public static class TypeFactory extends - AbstractSequencedConstantFactory<Load> - { - - @Override - protected Class<Load> getConstantClass() - { - return Load.class; - } - - @Override - protected Load getConstantInstance(String name, int i) - { - return new Load(name, i); - } - - } -} Modified: branches/cdom/code/src/java/pcgen/cdom/enumeration/ObjectKey.java =================================================================== --- branches/cdom/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2007-09-03 21:42:54 UTC (rev 3983) +++ branches/cdom/code/src/java/pcgen/cdom/enumeration/ObjectKey.java 2007-09-04 00:29:11 UTC (rev 3984) @@ -49,6 +49,7 @@ import pcgen.core.SpellProhibitor; import pcgen.core.WeaponProf; import pcgen.util.enumeration.DefaultTriState; +import pcgen.util.enumeration.Load; import pcgen.util.enumeration.Visibility; /** @@ -81,7 +82,7 @@ public static final ObjectKey<Load> UNENCUMBERED_LOAD = new ObjectKey<Load>(); - public static final ObjectKey<ArmorType> UNENCUMBERED_ARMOR = new ObjectKey<ArmorType>(); + public static final ObjectKey<Load> UNENCUMBERED_ARMOR = new ObjectKey<Load>(); public static final ObjectKey<Boolean> SPELLBOOK = new ObjectKey<Boolean>(); Modified: branches/cdom/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java =================================================================== --- branches/cdom/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2007-09-03 21:42:54 UTC (rev 3983) +++ branches/cdom/code/src/java/plugin/lsttokens/UnencumberedmoveLst.java 2007-09-04 00:29:11 UTC (rev 3984) @@ -25,7 +25,6 @@ import java.util.StringTokenizer; import pcgen.cdom.base.CDOMObject; -import pcgen.cdom.enumeration.ArmorType; import pcgen.cdom.enumeration.ObjectKey; import pcgen.core.Constants; import pcgen.core.PObject; @@ -105,60 +104,117 @@ StringTokenizer tok = new StringTokenizer(value, Constants.PIPE); - boolean setLoad = false; - boolean setArmor = false; + boolean hasArmor = false; + boolean hasMove = false; + Load loadMove = Load.LIGHT; + Load loadArmor = Load.LIGHT; + while (tok.hasMoreTokens()) { - String tokString = tok.nextToken(); - try + String loadString = tok.nextToken(); + if (loadString.equalsIgnoreCase("MediumLoad")) { - pcgen.cdom.enumeration.Load load = - pcgen.cdom.enumeration.Load.valueOf(tokString); - if (setLoad) + if (!validateOnlyMove(hasMove)) { - Logging.errorPrint("Encountered Second Load value in " - + getTokenName() + " this is not valid."); return false; } - context.getObjectContext().put(obj, - ObjectKey.UNENCUMBERED_LOAD, load); - setLoad = true; + loadMove = Load.MEDIUM; + hasMove = true; } - catch (IllegalArgumentException e) + else if (loadString.equalsIgnoreCase("HeavyLoad")) { - // TODO FIXME This is an Armor Type... :/ - try + if (!validateOnlyMove(hasMove)) { - ArmorType at = ArmorType.valueOf(tokString); - if (setArmor) - { - Logging.errorPrint("Encountered Second Armor Type in " - + getTokenName() + " this is not valid."); - return false; - } - context.getObjectContext().put(obj, - ObjectKey.UNENCUMBERED_ARMOR, at); - setArmor = true; + return false; } - catch (IllegalArgumentException e2) + loadMove = Load.HEAVY; + hasMove = true; + } + else if (loadString.equalsIgnoreCase("Overload")) + { + if (!validateOnlyMove(hasMove)) { - Logging.errorPrint("Misunderstood text in " - + getTokenName() + ": " + tokString - + " is not a Load or ArmorType"); return false; } + loadMove = Load.OVERLOAD; + hasMove = true; } + else if (loadString.equalsIgnoreCase("MediumArmor")) + { + if (!validateOnlyArmor(hasArmor)) + { + return false; + } + loadArmor = Load.MEDIUM; + hasArmor = true; + } + else if (loadString.equalsIgnoreCase("HeavyArmor")) + { + if (!validateOnlyArmor(hasArmor)) + { + return false; + } + loadArmor = Load.OVERLOAD; + hasArmor = true; + } + else if (loadString.equalsIgnoreCase("LightLoad")) + { + if (!validateOnlyMove(hasMove)) + { + return false; + } + // do nothing, but accept values as valid + } + else if (loadString.equalsIgnoreCase("LightArmor")) + { + if (!validateOnlyMove(hasMove)) + { + return false; + } + // do nothing, but accept values as valid + } + else + { + ShowMessageDelegate.showMessageDialog("Invalid value of \"" + + loadString + "\" for UNENCUMBEREDMOVE in \"" + + obj.getDisplayName() + "\".", "PCGen", MessageType.ERROR); + return false; + } } + context.getObjectContext().put(obj, ObjectKey.UNENCUMBERED_LOAD, + loadMove); + context.getObjectContext().put(obj, ObjectKey.UNENCUMBERED_ARMOR, + loadArmor); return true; } + private boolean validateOnlyArmor(boolean hasArmor) + { + if (hasArmor) + { + Logging.errorPrint("Encountered Second Armor Load Type in " + + getTokenName() + " this is not valid."); + } + return !hasArmor; + } + + private boolean validateOnlyMove(boolean hasMove) + { + if (hasMove) + { + Logging.errorPrint("Encountered Second Move Load Type in " + + getTokenName() + " this is not valid."); + } + return !hasMove; + } + public String[] unparse(LoadContext context, CDOMObject obj) { - pcgen.cdom.enumeration.Load load = + Load load = context.getObjectContext().getObject(obj, ObjectKey.UNENCUMBERED_LOAD); - ArmorType at = + Load at = context.getObjectContext().getObject(obj, ObjectKey.UNENCUMBERED_ARMOR); if (load == null && at == null) @@ -166,17 +222,59 @@ return null; } StringBuilder sb = new StringBuilder(); + boolean needsLight = false; if (load != null) { - sb.append(load); + if (Load.OVERLOAD.equals(load)) + { + sb.append("Overload"); + } + else if (Load.HEAVY.equals(load)) + { + sb.append("HeavyLoad"); + } + else if (Load.MEDIUM.equals(load)) + { + sb.append("MediumLoad"); + } + else if (Load.LIGHT.equals(load)) + { + needsLight = true; + } + else + { + context.addWriteMessage(getTokenName() + + " encountered unknown Movement Load: " + load); + return null; + } } - if (at != null) + if (at == null || Load.LIGHT.equals(at)) { + if (needsLight) + { + sb.append("LightLoad"); + } + } + else + { if (sb.length() != 0) { sb.append(Constants.PIPE); } - sb.append(at); + if (Load.OVERLOAD.equals(at)) + { + sb.append("HeavyArmor"); + } + else if (Load.MEDIUM.equals(at)) + { + sb.append("MediumArmor"); + } + else + { + context.addWriteMessage(getTokenName() + + " encountered invalid Armor Load: " + load); + return null; + } } return new String[]{sb.toString()}; } Modified: branches/cdom/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java =================================================================== --- branches/cdom/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java 2007-09-03 21:42:54 UTC (rev 3983) +++ branches/cdom/code/src/utest/plugin/lsttokens/UnencumberedmoveLstTest.java 2007-09-04 00:29:11 UTC (rev 3984) @@ -17,13 +17,8 @@ */ package plugin.lsttokens; -import java.net.URISyntaxException; - -import org.junit.Before; import org.junit.Test; -import pcgen.cdom.enumeration.ArmorType; -import pcgen.cdom.enumeration.Load; import pcgen.core.PCTemplate; import pcgen.persistence.PersistenceLayerException; import pcgen.persistence.lst.GlobalLstToken; @@ -34,19 +29,6 @@ public class UnencumberedmoveLstTest extends AbstractGlobalTokenTestCase { - @Override - @Before - public void setUp() throws PersistenceLayerException, URISyntaxException - { - super.setUp(); - Load.constructConstant("LightLoad", 0); - Load.constructConstant("MediumLoad", 1); - Load.constructConstant("HeavyLoad", 2); - ArmorType.getConstant("LightArmor", 0); - ArmorType.getConstant("MediumArmor", 1); - ArmorType.getConstant("HeavyArmor", 2); - } - static GlobalLstToken token = new UnencumberedmoveLst(); static PCTemplateLoader loader = new PCTemplateLoader(); @@ -69,62 +51,67 @@ } @Test - public void testChooseInvalidInputPipeOnly() - throws PersistenceLayerException + public void testInvalidInputPipeOnly() throws PersistenceLayerException { assertFalse(parse("|")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputRandomString() - throws PersistenceLayerException + public void testInvalidInputRandomString() throws PersistenceLayerException { assertFalse(parse("String")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputEndPipe() - throws PersistenceLayerException + public void testInvalidInputEndPipe() throws PersistenceLayerException { assertFalse(parse("HeavyLoad|")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputStartPipe() - throws PersistenceLayerException + public void testInvalidInputStartPipe() throws PersistenceLayerException { assertFalse(parse("|HeavyLoad")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputDoublePipe() - throws PersistenceLayerException + public void testInvalidInputDoublePipe() throws PersistenceLayerException { assertFalse(parse("HeavyLoad||HeavyArmor")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputDoubleLoad() - throws PersistenceLayerException + public void testInvalidInputDoubleLoad() throws PersistenceLayerException { assertFalse(parse("HeavyLoad|MediumLoad")); assertNoSideEffects(); } @Test - public void testChooseInvalidInputDoubleArmor() - throws PersistenceLayerException + public void testInvalidInputDoubleArmor() throws PersistenceLayerException { assertFalse(parse("MediumArmor|HeavyArmor")); assertNoSideEffects(); } @Test + public void testValidInputDoubleArmor() throws PersistenceLayerException + { + assertTrue(parse("LightArmor")); + } + + @Test + public void testRoundRobinLightLoad() throws PersistenceLayerException + { + runRoundRobin("LightLoad"); + } + + @Test public void testRoundRobinArmor() throws PersistenceLayerException { runRoundRobin("HeavyArmor"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |